Без опису

views.py 3.2KB

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