| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- from django.shortcuts import render
- from counter.models import Counter,Reset
- from babel.dates import format_timedelta
- from datetime import datetime,timedelta
- from django import forms
- from django.http import HttpResponseRedirect
- from django.core import serializers
- from graphos.renderers import gchart
- from graphos.sources.simple import SimpleDataSource
- from graphos.sources.model import ModelDataSource
- import random
- class resetCounterForm(forms.ModelForm):
- class Meta:
- model = Reset
- fields = ['reason','counter']
- # Create your views here.
- def home(request):
- #Display counters
- counters = Counter.objects.all()
- lastResets = []
- #Calculates infos for each counter
- maxJSS = 0
- timezero = timedelta(0)
- for counter in counters:
- lastReset = Reset.objects.filter(counter=counter).order_by('-timestamp')
- if (lastReset.count() == 0):
- counter.lastReset = Reset()
- counter.lastReset.delta = timezero
- counter.lastReset.noSeum = True
- else:
- counter.lastReset = lastReset[0]
- counter.lastReset.noSeum = False
- counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
- lastResets.append([counter.trigramme,{'v' : (counter.lastReset.delta.total_seconds())/(24*3600), 'f' : str(round((counter.lastReset.delta.total_seconds())/(24*3600),1))} ])
- if (counter.lastReset.delta.total_seconds())/(24*3600) > maxJSS:
- maxJSS = (counter.lastReset.delta.total_seconds())/(24*3600)
- counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
- counter.isHidden = "hidden"
- counters = sorted(counters,key=lambda t: -t.lastReset.delta)
- #Generate graph
- lastResets.sort(key=lambda x: x[1]['v'])
- lastResets.insert(0,['Trigramme','Jours sans seum'])
- data = SimpleDataSource(lastResets)
- chart = gchart.ColumnChart(data,options={'title' : '', 'legend' : 'none','vAxis' : { 'viewWindow' : { 'max' : max(maxJSS,1) , 'min' : 0} , 'ticks' : [1,2,3,4,5,6,7,8,9,10,11,12,13,14],'title' : 'Jours sans seum' }, 'hAxis' : {'title' : 'Trigramme' }})
- return render(request,'homeTemplate.html', {'counters' : counters, 'chart' : chart})
- def resetCounter(request):
- #Update Form counter
- if (request.method == 'POST'):
- # create a form instance and populate it with data from the request:
- data = dict(request.POST)
- counter = Counter.objects.get(pk=int(data['counter'][0]))
- reset = Reset()
- reset.counter = counter
- reset.reason = data['reason'][0]
- reset.timestamp = datetime.now()
- reset.save()
- # check whether it's valid
- return HttpResponseRedirect('/'+data['redirect'][0])
- def counter(request, id_counter):
- counter = Counter.objects.get(pk=id_counter)
- resets = Reset.objects.filter(counter=counter)
- lastReset = resets.order_by('-timestamp')
- #Display
- if (lastReset.count() == 0):
- counter.lastReset = Reset()
- counter.lastReset.delta = timezero
- counter.lastReset.noSeum = True
- else:
- counter.lastReset = lastReset[0]
- counter.lastReset.noSeum = False
- counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
- counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
- ###Timeline graph
- #Data pre-processing
- for reset in resets:
- reset.timestamp={'v' : reset.timestamp.timestamp(), 'f' : "Il y a "+format_timedelta(datetime.now()-reset.timestamp.replace(tzinfo=None),locale='fr',threshold=1) }
- reset.Seum={'v' : 0, 'f' : reset.reason}
- #Drawing the graph
- data = ModelDataSource(resets,fields=['timestamp','Seum'])
- chart = gchart.LineChart(data, options={
- 'lineWidth' : 0,
- 'pointSize' : 10,
- 'title' : '',
- 'vAxis' : { 'ticks' : []},
- 'hAxis' : {'ticks' : [{'v' : datetime(2016,3,9,23,0,0,0).timestamp(), 'f' : 'ADD des X2013' }, { 'v' :datetime.now().timestamp(), 'f' : 'Présent'}]},
- 'legend' : 'none',
- 'height' : 90
- })
- return render(request,'counterTemplate.html', { 'counter' : counter, 'chart' : chart})
|