Aucune description

views.py 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. from django.shortcuts import render
  2. from counter.models import Counter,Reset
  3. from babel.dates import format_timedelta, format_datetime
  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. from graphos.sources.model import ModelDataSource
  11. import random
  12. from django.utils import timezone
  13. class resetCounterForm(forms.ModelForm):
  14. class Meta:
  15. model = Reset
  16. fields = ['reason','counter']
  17. # Create your views here.
  18. def home(request):
  19. #Display counters
  20. counters = Counter.objects.all()
  21. lastResets = []
  22. #Calculates infos for each counter
  23. maxJSS = 0
  24. timezero = timedelta(0)
  25. for counter in counters:
  26. lastReset = Reset.objects.filter(counter=counter).order_by('-timestamp')
  27. if (lastReset.count() == 0):
  28. counter.lastReset = Reset()
  29. counter.lastReset.delta = timezero
  30. counter.lastReset.noSeum = True
  31. else:
  32. counter.lastReset = lastReset[0]
  33. counter.lastReset.noSeum = False
  34. counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
  35. lastResets.append([counter.trigramme,{'v' : (counter.lastReset.delta.total_seconds())/(24*3600), 'f' : str(round((counter.lastReset.delta.total_seconds())/(24*3600),1))} ])
  36. if (counter.lastReset.delta.total_seconds())/(24*3600) > maxJSS:
  37. maxJSS = (counter.lastReset.delta.total_seconds())/(24*3600)
  38. counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
  39. counter.isHidden = "hidden"
  40. counters = sorted(counters,key=lambda t: -t.lastReset.delta)
  41. #Column graph
  42. lastResets.sort(key=lambda x: x[1]['v'])
  43. lastResets.insert(0,['Trigramme','Jours sans seum'])
  44. col_data = SimpleDataSource(lastResets)
  45. 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' }})
  46. ###Timeline graph
  47. #Data pre-processing
  48. resets = Reset.objects.filter(timestamp__gte=timezone.now() - timedelta(days=1))
  49. for reset in resets:
  50. reset.timestamp={'v' : reset.timestamp.timestamp(), 'f' : "Il y a "+format_timedelta(datetime.now()-reset.timestamp.replace(tzinfo=None),locale='fr',threshold=1) }
  51. reset.Seum={'v' : 0, 'f' : reset.counter.trigramme+" : "+reset.reason}
  52. #Drawing the graph
  53. line_data = ModelDataSource(resets,fields=['timestamp','Seum'])
  54. line_chart = gchart.LineChart(line_data, options={
  55. 'lineWidth' : 0,
  56. 'pointSize' : 10,
  57. 'title' : '',
  58. 'vAxis' : { 'ticks' : []},
  59. 'hAxis' : {'ticks' : [{'v' : (datetime.now() - timedelta(days=1)).timestamp(), 'f' : 'Il y a 24 h' }, { 'v' :datetime.now().timestamp(), 'f' : 'Présent'}]},
  60. 'legend' : 'none',
  61. 'height' : 90
  62. })
  63. return render(request,'homeTemplate.html', {'counters' : counters, 'col_chart' : col_chart, 'line_chart' : line_chart})
  64. def resetCounter(request):
  65. #Update Form counter
  66. if (request.method == 'POST'):
  67. # create a form instance and populate it with data from the request:
  68. data = dict(request.POST)
  69. counter = Counter.objects.get(pk=int(data['counter'][0]))
  70. reset = Reset()
  71. reset.counter = counter
  72. reset.reason = data['reason'][0]
  73. reset.timestamp = datetime.now()
  74. reset.save()
  75. # check whether it's valid
  76. return HttpResponseRedirect(data['redirect'][0])
  77. def counter(request, id_counter):
  78. counter = Counter.objects.get(pk=id_counter)
  79. resets = Reset.objects.filter(counter=counter).order_by('-timestamp')
  80. timezero = timedelta(0)
  81. #Display
  82. if (resets.count() == 0):
  83. counter.lastReset = Reset()
  84. counter.lastReset.delta = timezero
  85. counter.lastReset.noSeum = True
  86. else:
  87. counter.lastReset = resets[0]
  88. counter.lastReset.noSeum = False
  89. counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
  90. counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
  91. for reset in resets:
  92. reset.date = format_datetime(reset.timestamp,locale='fr',format="EEEE dd MMMM Y 'à' HH:mm:ss").capitalize()
  93. ###Timeline graph
  94. #Data pre-processing
  95. resets_graph=resets
  96. for reset in resets_graph:
  97. reset.timestamp={'v' : reset.timestamp.timestamp(), 'f' : "Il y a "+format_timedelta(datetime.now()-reset.timestamp.replace(tzinfo=None),locale='fr',threshold=1) }
  98. reset.Seum={'v' : 0, 'f' : reset.reason}
  99. #Drawing the graph
  100. data = ModelDataSource(resets,fields=['timestamp','Seum'])
  101. chart = gchart.LineChart(data, options={
  102. 'lineWidth' : 0,
  103. 'pointSize' : 10,
  104. 'title' : '',
  105. 'vAxis' : { 'ticks' : []},
  106. 'hAxis' : {'ticks' : [{'v' : datetime(2016,3,9,23,0,0,0).timestamp(), 'f' : 'ADD des X2013' }, { 'v' :datetime.now().timestamp(), 'f' : 'Présent'}]},
  107. 'legend' : 'none',
  108. 'height' : 90
  109. })
  110. return render(request,'counterTemplate.html', { 'counter' : counter, 'chart' : chart, 'resets' : resets })