Geen omschrijving

views.py 3.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from django.shortcuts import render
  2. from census.models import Course,Count,Lesson
  3. from django import forms
  4. from django.db.models.aggregates import Max
  5. from datetime import *
  6. from django.http import HttpResponseRedirect
  7. #Auxiliariy functions
  8. def getProgressBarClass(ratio):
  9. if (ratio > 75):
  10. return "success"
  11. elif (ratio > 50):
  12. return "info"
  13. elif (ratio > 25):
  14. return "warning"
  15. else:
  16. return "danger"
  17. def getCourseStatistics(course):
  18. course.lessons = Lesson.objects.filter(course=course).order_by('number')
  19. course.totalsum = 0
  20. course.nonnulllessonscount = 0
  21. for lesson in course.lessons:
  22. lesson.counts = Count.objects.filter(lesson=lesson)
  23. if (lesson.counts.count() != 0):
  24. lesson.totalsum = 0
  25. for count in lesson.counts:
  26. count.ratio = round(count.census/lesson.course.enrolled*100)
  27. lesson.totalsum += count.census
  28. lesson.totalratio = round(lesson.totalsum/(lesson.counts.count()*course.enrolled)*100)
  29. lesson.progressbarclass = getProgressBarClass(lesson.totalratio)
  30. course.totalsum += lesson.totalratio
  31. course.nonnulllessonscount += 1
  32. else:
  33. lesson.counts = None
  34. if (course.nonnulllessonscount != 0):
  35. course.totalratio = round(course.totalsum / course.nonnulllessonscount)
  36. course.progressbarclass = getProgressBarClass(course.totalratio)
  37. else:
  38. course.totalratio = 0
  39. course.lessonscount= course.lessons.count()
  40. return course
  41. class addCountForm(forms.ModelForm):
  42. class Meta:
  43. model = Count
  44. def clean_census(self):
  45. census = self.cleaned_data['census']
  46. enrolled = self.cleaned_data['lesson'].course.enrolled
  47. if (census>enrolled):
  48. raise forms.ValidationError("Tu as compté plus de gens qu'il n'y a de personnes inscrites dans ce cours !")
  49. return census # Ne pas oublier de renvoyer le contenu du champ traité
  50. #Views
  51. def home(request):
  52. #Retrieving the course list and the statistics
  53. courses = Course.objects.all().annotate(latest_lesson_date=Max('lesson__date')).order_by('-latest_lesson_date')
  54. #courses = Course.objects.all().order_by('-promotion')
  55. for course in courses:
  56. course = getCourseStatistics(course)
  57. #Retrieving last count
  58. if (Count.objects.all().count() != 0):
  59. lastcount = Count.objects.latest('date')
  60. lastcount.ratio = round(lastcount.census/lastcount.lesson.course.enrolled*100)
  61. lastcount.progressbarclass= getProgressBarClass(lastcount.ratio)
  62. else:
  63. lastcount = None
  64. return render(request,'homeTemplate.html', {'courses' : courses, 'lastcount' : lastcount,})
  65. def comptage(request):
  66. return render(request,'comptageTemplate.html')
  67. def cours(request, id_cours):
  68. course = Course.objects.get(id=id_cours)
  69. course = getCourseStatistics(course)
  70. return render(request, 'coursTemplate.html', {'course' : course,})
  71. def addcount(request):
  72. # if this is a POST request we need to process the form data
  73. if request.method == 'POST':
  74. # create a form instance and populate it with data from the request:
  75. form = addCountForm(request.POST)
  76. form.fields["lesson"].queryset = Lesson.objects.filter(date__lt=datetime.now()+timedelta(7)).order_by('-date')
  77. # check whether it's valid:
  78. if form.is_valid():
  79. count = form.save()
  80. return HttpResponseRedirect('/cours/'+ str(count.lesson.course.id))
  81. # if a GET (or any other method) we'll create a blank form
  82. else:
  83. form = addCountForm()
  84. form.fields["lesson"].queryset = Lesson.objects.all().order_by('-date')
  85. return render(request, 'addcountTemplate.html', {'form': form})