| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- from django.shortcuts import render
- from counter.models import Counter,Reset
- from babel.dates import format_timedelta, format_datetime
- 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
- from django.utils import timezone
- 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)
- #Column graph
- lastResets.sort(key=lambda x: x[1]['v'])
- lastResets.insert(0,['Trigramme','Jours sans seum'])
- col_data = SimpleDataSource(lastResets)
- col_chart = gchart.ColumnChart(col_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' }})
- ###Timeline graph
- #Data pre-processing
- resets = Reset.objects.filter(timestamp__gte=timezone.now() - timedelta(days=1))
- 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.counter.trigramme+" : "+reset.reason}
- #Drawing the graph
- line_data = ModelDataSource(resets,fields=['timestamp','Seum'])
- line_chart = gchart.LineChart(line_data, options={
- 'lineWidth' : 0,
- 'pointSize' : 10,
- 'title' : '',
- 'vAxis' : { 'ticks' : []},
- 'hAxis' : {'ticks' : [{'v' : (datetime.now() - timedelta(days=1)).timestamp(), 'f' : 'Il y a 24 h' }, { 'v' :datetime.now().timestamp(), 'f' : 'Présent'}]},
- 'legend' : 'none',
- 'height' : 90
- })
- return render(request,'homeTemplate.html', {'counters' : counters, 'col_chart' : col_chart, 'line_chart' : line_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).order_by('-timestamp')
- timezero = timedelta(0)
- #Display
- if (resets.count() == 0):
- counter.lastReset = Reset()
- counter.lastReset.delta = timezero
- counter.lastReset.noSeum = True
- else:
- counter.lastReset = resets[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)
- for reset in resets:
- reset.date = format_datetime(reset.timestamp,locale='fr',format="EEEE dd MMMM Y 'à' HH:mm:ss").capitalize()
- ###Timeline graph
- #Data pre-processing
- resets_graph=resets
- for reset in resets_graph:
- 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, 'resets' : resets })
|