Aucune description

views.py 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from django.shortcuts import render
  2. from counter.models import Counter,Reset
  3. from babel.dates import format_timedelta
  4. from datetime import datetime,timedelta
  5. from django import forms
  6. from django.http import HttpResponseRedirect
  7. from django.core import serializers
  8. from graphos.renderers import gchart
  9. from graphos.sources.simple import SimpleDataSource
  10. class resetCounterForm(forms.ModelForm):
  11. class Meta:
  12. model = Reset
  13. fields = ['reason','counter']
  14. # Create your views here.
  15. def home(request):
  16. #Display counters
  17. counters = Counter.objects.all()
  18. lastResets = []
  19. #Calculates infos for each counter
  20. maxJSS = 0
  21. timezero = timedelta(0)
  22. for counter in counters:
  23. lastReset = Reset.objects.filter(counter=counter).order_by('-timestamp')
  24. if (lastReset.count() == 0):
  25. counter.lastReset = Reset()
  26. counter.lastReset.delta = timezero
  27. counter.lastReset.noSeum = True
  28. else:
  29. counter.lastReset = lastReset[0]
  30. counter.lastReset.noSeum = False
  31. counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
  32. lastResets.append([counter.trigramme,(counter.lastReset.delta.total_seconds())/(24*3600)])
  33. if (counter.lastReset.delta.total_seconds())/(24*3600) > maxJSS:
  34. maxJSS = (counter.lastReset.delta.total_seconds())/(24*3600)
  35. counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
  36. counter.isHidden = "hidden"
  37. counters = sorted(counters,key=lambda t: -t.lastReset.delta)
  38. #Generate graph
  39. lastResets.sort(key=lambda x: (x[1],x[0]))
  40. lastResets.insert(0,['Trigramme','Jours sans seum'])
  41. data = SimpleDataSource(lastResets)
  42. 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' }})
  43. return render(request,'homeTemplate.html', {'counters' : counters, 'chart' : chart})
  44. def resetCounter(request):
  45. #Update Form counter
  46. if (request.method == 'POST'):
  47. # create a form instance and populate it with data from the request:
  48. data = dict(request.POST)
  49. counter = Counter.objects.get(pk=int(data['counter'][0]))
  50. reset = Reset()
  51. reset.counter = counter
  52. reset.reason = data['reason'][0]
  53. reset.timestamp = datetime.now()
  54. reset.save()
  55. # check whether it's valid
  56. return HttpResponseRedirect('/')
  57. def counter(request, id_counter):
  58. counter = Counter.objects.get(pk=id_counter)
  59. lastReset = Reset.objects.filter(counter=counter).order_by('-timestamp')
  60. if (lastReset.count() == 0):
  61. counter.lastReset = Reset()
  62. counter.lastReset.delta = timezero
  63. counter.lastReset.noSeum = True
  64. else:
  65. counter.lastReset = lastReset[0]
  66. counter.lastReset.noSeum = False
  67. counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
  68. return render(request,'counterTemplate.html', { 'counter' : counter})