説明なし

views.py 5.1KB

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