暂无描述

views.py 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. #Display
  81. if (resets.count() == 0):
  82. counter.lastReset = Reset()
  83. counter.lastReset.delta = timezero
  84. counter.lastReset.noSeum = True
  85. else:
  86. counter.lastReset = resets[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. for reset in resets:
  91. reset.date = format_datetime(reset.timestamp,locale='fr',format="EEEE dd MMMM Y 'à' HH:mm:ss").capitalize()
  92. ###Timeline graph
  93. #Data pre-processing
  94. resets_graph=resets
  95. for reset in resets_graph:
  96. reset.timestamp={'v' : reset.timestamp.timestamp(), 'f' : "Il y a "+format_timedelta(datetime.now()-reset.timestamp.replace(tzinfo=None),locale='fr',threshold=1) }
  97. reset.Seum={'v' : 0, 'f' : reset.reason}
  98. #Drawing the graph
  99. data = ModelDataSource(resets,fields=['timestamp','Seum'])
  100. chart = gchart.LineChart(data, options={
  101. 'lineWidth' : 0,
  102. 'pointSize' : 10,
  103. 'title' : '',
  104. 'vAxis' : { 'ticks' : []},
  105. 'hAxis' : {'ticks' : [{'v' : datetime(2016,3,9,23,0,0,0).timestamp(), 'f' : 'ADD des X2013' }, { 'v' :datetime.now().timestamp(), 'f' : 'Présent'}]},
  106. 'legend' : 'none',
  107. 'height' : 90
  108. })
  109. return render(request,'counterTemplate.html', { 'counter' : counter, 'chart' : chart, 'resets' : resets })