Sen descrición

views.py 4.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. #Generate graph
  41. lastResets.sort(key=lambda x: x[1]['v'])
  42. lastResets.insert(0,['Trigramme','Jours sans seum'])
  43. data = SimpleDataSource(lastResets)
  44. 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' }})
  45. return render(request,'homeTemplate.html', {'counters' : counters, 'chart' : chart})
  46. def resetCounter(request):
  47. #Update Form counter
  48. if (request.method == 'POST'):
  49. # create a form instance and populate it with data from the request:
  50. data = dict(request.POST)
  51. counter = Counter.objects.get(pk=int(data['counter'][0]))
  52. reset = Reset()
  53. reset.counter = counter
  54. reset.reason = data['reason'][0]
  55. reset.timestamp = datetime.now()
  56. reset.save()
  57. # check whether it's valid
  58. return HttpResponseRedirect('/'+data['redirect'][0])
  59. def counter(request, id_counter):
  60. counter = Counter.objects.get(pk=id_counter)
  61. resets = Reset.objects.filter(counter=counter)
  62. lastReset = resets.order_by('-timestamp')
  63. #Display
  64. if (lastReset.count() == 0):
  65. counter.lastReset = Reset()
  66. counter.lastReset.delta = timezero
  67. counter.lastReset.noSeum = True
  68. else:
  69. counter.lastReset = lastReset[0]
  70. counter.lastReset.noSeum = False
  71. counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
  72. counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr',threshold=1)
  73. ###Timeline graph
  74. #Data pre-processing
  75. for reset in resets:
  76. reset.timestamp={'v' : reset.timestamp.timestamp(), 'f' : "Il y a "+format_timedelta(datetime.now()-reset.timestamp.replace(tzinfo=None),locale='fr',threshold=1) }
  77. reset.Seum={'v' : 0, 'f' : reset.reason}
  78. #Drawing the graph
  79. data = ModelDataSource(resets,fields=['timestamp','Seum'])
  80. chart = gchart.LineChart(data, options={
  81. 'lineWidth' : 0,
  82. 'pointSize' : 10,
  83. 'title' : '',
  84. 'vAxis' : { 'ticks' : []},
  85. 'hAxis' : {'ticks' : [{'v' : datetime(2016,3,9,23,0,0,0).timestamp(), 'f' : 'ADD des X2013' }, { 'v' :datetime.now().timestamp(), 'f' : 'Présent'}]},
  86. 'legend' : 'none',
  87. 'height' : 90
  88. })
  89. return render(request,'counterTemplate.html', { 'counter' : counter, 'chart' : chart})