|
|
@@ -7,6 +7,8 @@ from django.http import HttpResponseRedirect
|
|
7
|
7
|
from django.core import serializers
|
|
8
|
8
|
from graphos.renderers import gchart
|
|
9
|
9
|
from graphos.sources.simple import SimpleDataSource
|
|
|
10
|
+from graphos.sources.model import ModelDataSource
|
|
|
11
|
+import random
|
|
10
|
12
|
|
|
11
|
13
|
class resetCounterForm(forms.ModelForm):
|
|
12
|
14
|
class Meta:
|
|
|
@@ -31,14 +33,14 @@ def home(request):
|
|
31
|
33
|
counter.lastReset = lastReset[0]
|
|
32
|
34
|
counter.lastReset.noSeum = False
|
|
33
|
35
|
counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
|
|
34
|
|
- lastResets.append([counter.trigramme,(counter.lastReset.delta.total_seconds())/(24*3600)])
|
|
|
36
|
+ lastResets.append([counter.trigramme,{'v' : (counter.lastReset.delta.total_seconds())/(24*3600), 'f' : str(round((counter.lastReset.delta.total_seconds())/(24*3600),1))} ])
|
|
35
|
37
|
if (counter.lastReset.delta.total_seconds())/(24*3600) > maxJSS:
|
|
36
|
38
|
maxJSS = (counter.lastReset.delta.total_seconds())/(24*3600)
|
|
37
|
39
|
counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
|
|
38
|
40
|
counter.isHidden = "hidden"
|
|
39
|
41
|
counters = sorted(counters,key=lambda t: -t.lastReset.delta)
|
|
40
|
42
|
#Generate graph
|
|
41
|
|
- lastResets.sort(key=lambda x: (x[1],x[0]))
|
|
|
43
|
+ lastResets.sort(key=lambda x: x[1]['v'])
|
|
42
|
44
|
lastResets.insert(0,['Trigramme','Jours sans seum'])
|
|
43
|
45
|
data = SimpleDataSource(lastResets)
|
|
44
|
46
|
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' }})
|
|
|
@@ -56,11 +58,14 @@ def resetCounter(request):
|
|
56
|
58
|
reset.timestamp = datetime.now()
|
|
57
|
59
|
reset.save()
|
|
58
|
60
|
# check whether it's valid
|
|
59
|
|
- return HttpResponseRedirect('/')
|
|
|
61
|
+ return HttpResponseRedirect('/'+data['redirect'][0])
|
|
60
|
62
|
|
|
61
|
63
|
def counter(request, id_counter):
|
|
|
64
|
+
|
|
62
|
65
|
counter = Counter.objects.get(pk=id_counter)
|
|
63
|
|
- lastReset = Reset.objects.filter(counter=counter).order_by('-timestamp')
|
|
|
66
|
+ resets = Reset.objects.filter(counter=counter)
|
|
|
67
|
+ lastReset = resets.order_by('-timestamp')
|
|
|
68
|
+ #Display
|
|
64
|
69
|
if (lastReset.count() == 0):
|
|
65
|
70
|
counter.lastReset = Reset()
|
|
66
|
71
|
counter.lastReset.delta = timezero
|
|
|
@@ -69,5 +74,23 @@ def counter(request, id_counter):
|
|
69
|
74
|
counter.lastReset = lastReset[0]
|
|
70
|
75
|
counter.lastReset.noSeum = False
|
|
71
|
76
|
counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
|
|
|
77
|
+ counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
|
|
|
78
|
+
|
|
|
79
|
+ ###Timeline graph
|
|
|
80
|
+ #Data pre-processing
|
|
|
81
|
+ for reset in resets:
|
|
|
82
|
+ reset.timestamp={'v' : reset.timestamp.timestamp(), 'f' : "Il y a "+format_timedelta(datetime.now()-reset.timestamp.replace(tzinfo=None),locale='fr',threshold=1) }
|
|
|
83
|
+ reset.Seum={'v' : 0, 'f' : reset.reason}
|
|
|
84
|
+ #Drawing the graph
|
|
|
85
|
+ data = ModelDataSource(resets,fields=['timestamp','Seum'])
|
|
|
86
|
+ chart = gchart.LineChart(data, options={
|
|
|
87
|
+ 'lineWidth' : 0,
|
|
|
88
|
+ 'pointSize' : 10,
|
|
|
89
|
+ 'title' : '',
|
|
|
90
|
+ 'vAxis' : { 'ticks' : []},
|
|
|
91
|
+ 'hAxis' : {'ticks' : [{'v' : datetime(2016,3,9,23,0,0,0).timestamp(), 'f' : 'ADD des X2013' }, { 'v' :datetime.now().timestamp(), 'f' : 'Présent'}]},
|
|
|
92
|
+ 'legend' : 'none',
|
|
|
93
|
+ 'height' : 90
|
|
|
94
|
+ })
|
|
72
|
95
|
|
|
73
|
|
- return render(request,'counterTemplate.html', { 'counter' : counter})
|
|
|
96
|
+ return render(request,'counterTemplate.html', { 'counter' : counter, 'chart' : chart})
|