From: Guillaume Pellerin Date: Fri, 22 Jan 2016 13:08:58 +0000 (+0100) Subject: add quiz validation workflow X-Git-Tag: 2.8.1-pro~248 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=e1c05415ba8d9e17a5a394ea4dbbacba95610ba9;p=teleforma.git add quiz validation workflow --- diff --git a/teleforma/forms.py b/teleforma/forms.py index a5380d7a..5333366a 100644 --- a/teleforma/forms.py +++ b/teleforma/forms.py @@ -16,6 +16,7 @@ class QuestionForm(ModelForm): model = Question # exclude = ['user', 'question', 'status', 'validated', 'date_submitted'] + class AnswerForm(ModelForm): def __init__(self, *args, **kwargs): @@ -29,6 +30,3 @@ class AnswerForm(ModelForm): model = Answer exclude = ['user', 'question', 'validated', 'date_submitted', 'date_validated'] hidden_fields = ['status'] - - - diff --git a/teleforma/models/pro.py b/teleforma/models/pro.py index c5b5557c..dd70707d 100755 --- a/teleforma/models/pro.py +++ b/teleforma/models/pro.py @@ -12,7 +12,7 @@ # "http://www.cecill.info". # As a counterpart to the access to the source code and rights to copy, -# modify and redistribute granted by the license, users are provided only +# modify and redistribute granted by th e license, users are provided only # with a limited warranty and the software's author, the holder of the # economic rights, and the successive licensors have only limited # liability. @@ -331,3 +331,28 @@ class SeminarRevision(models.Model): return self.date_modified - self.date else: return None + + +class QuizValidation(models.Model): + + user = models.ForeignKey(User, related_name="quiz_validation", verbose_name=_('user')) + quiz = models.ForeignKey(Quiz, related_name="quiz_validation", verbose_name=_('quiz'), + blank=True, null=True, on_delete=models.SET_NULL) + validated = models.BooleanField(_('validated')) + date_validated = models.DateTimeField(_('date validated'), auto_now_add=True, null=True) + + def __unicode__(self): + return ' - '.join([unicode(self.quiz), self.user.username, unicode(self.date_submitted)]) + + def validate(self): + self.validated = True + self.save() + + def reject(self): + self.validated = False + self.save() + + class Meta(MetaCore): + db_table = app_label + '_' + 'quiz_validation' + verbose_name = _('Quiz validation') + ordering = ['-date_validated'] diff --git a/teleforma/templates/teleforma/inc/quiz_list.html b/teleforma/templates/teleforma/inc/quiz_list.html index 5511c86a..144fff79 100644 --- a/teleforma/templates/teleforma/inc/quiz_list.html +++ b/teleforma/templates/teleforma/inc/quiz_list.html @@ -4,11 +4,16 @@ - +
+ {% if seminar.quiz %} {{ seminar.quiz.title }} {% endif %} + {% if quiz|quiz_validated:user %} + + {% endif %} +
diff --git a/teleforma/templatetags/teleforma_tags.py b/teleforma/templatetags/teleforma_tags.py index fca28a2f..60a9bb55 100644 --- a/teleforma/templatetags/teleforma_tags.py +++ b/teleforma/templatetags/teleforma_tags.py @@ -241,6 +241,14 @@ def validated(question, user): else: return '' +@register.filter +def quiz_validated(quiz, user): + validations = QuizValidation.objects.filter(quiz=quiz, user=user, validated=True) + if validations: + return validations[0].date_validated + else: + return '' + @register.filter def summary(text, N): t = text[:N] @@ -328,5 +336,3 @@ def quiz_progress(progress): return int(progress[0]*100.0/progress[1]) else: return 100 - - diff --git a/teleforma/views/pro.py b/teleforma/views/pro.py index 75b3cffb..2d63412c 100644 --- a/teleforma/views/pro.py +++ b/teleforma/views/pro.py @@ -788,7 +788,10 @@ class QuizQuestionView(SeminarAccessMixin, SeminarRevisionMixin, QuizTake): return context def final_result_user(self): + user = self.get_user() self.seminar = self.quiz.seminar.all()[0] + validation_form = QuizValidationForm(user=user, seminar=self.seminar) + results = { 'quiz': self.quiz, 'score': self.sitting.get_current_score, @@ -797,6 +800,7 @@ class QuizQuestionView(SeminarAccessMixin, SeminarRevisionMixin, QuizTake): 'sitting': self.sitting, 'previous': self.previous, 'seminar': self.seminar, + 'form': validation_form, } self.sitting.mark_quiz_complete() @@ -810,5 +814,8 @@ class QuizQuestionView(SeminarAccessMixin, SeminarRevisionMixin, QuizTake): if self.quiz.exam_paper is False: self.sitting.delete() - return render(self.request, 'quiz/result.html', results) + if self.sitting.get_percent_correct >= self.quiz.pass_mark: + validation = QuizValidation(user=user, quiz=self.seminar.quiz, validated=True) + validation.save() + return render(self.request, 'quiz/result.html', results)