From: Gael Le Mignot Date: Wed, 12 Dec 2018 13:58:46 +0000 (+0100) Subject: Made file mandatory, added error messages on forms, minor fixes X-Git-Tag: 1.4.0~18^2 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=93744ad6b69015ab0965dc78ec1f85b422b7f60f;p=teleforma.git Made file mandatory, added error messages on forms, minor fixes --- diff --git a/teleforma/exam/forms.py b/teleforma/exam/forms.py index 736970ed..b7c81834 100644 --- a/teleforma/exam/forms.py +++ b/teleforma/exam/forms.py @@ -18,6 +18,7 @@ class ScriptForm(ModelForm): nb = period.nb_script or settings.TELEFORMA_EXAM_MAX_SESSIONS self.fields['session'] = forms.ChoiceField(choices = get_n_choices(nb + 1), validators = [ validate_session(nb) ]) + self.fields['file'].required = True class Meta: model = Script @@ -28,4 +29,7 @@ class ScriptForm(ModelForm): class ScoreForm(ScriptForm): - pass + def __init__(self, *args, **kwargs): + super(ScoreForm, self).__init__(*args, **kwargs) + self.fields['file'].required = False + self.fields['score'].required = True diff --git a/teleforma/exam/templates/exam/score_form.html b/teleforma/exam/templates/exam/score_form.html index b6bd3c03..c420b9f1 100644 --- a/teleforma/exam/templates/exam/score_form.html +++ b/teleforma/exam/templates/exam/score_form.html @@ -48,7 +48,19 @@ {% if not field.html_name in create_fields %} {{ field.label_tag.as_hidden }}{{ field.as_hidden }} {% else %} - {{ field.label_tag }}: {{ field }} + + {{ field.label_tag }}: + + + {{ field }} + + + {% for error in field.errors %} +
+ {{ error|escape }} +
+ {% endfor %} + {% endif %} {% endfor %} diff --git a/teleforma/exam/templates/exam/script_form.html b/teleforma/exam/templates/exam/script_form.html index d9fc1096..e038a701 100644 --- a/teleforma/exam/templates/exam/script_form.html +++ b/teleforma/exam/templates/exam/script_form.html @@ -66,7 +66,19 @@ {% if not field.html_name in create_fields %} {{ field.label_tag.as_hidden }}{{ field.as_hidden }} {% else %} - {{ field.label_tag }}: {{ field }} + + {{ field.label_tag }}: + + + {{ field }} + + + {% for error in field.errors %} +
+ {{ error|escape }} +
+ {% endfor %} + {% endif %} {% endfor %} diff --git a/teleforma/exam/views.py b/teleforma/exam/views.py index 5d8304cb..6215a072 100755 --- a/teleforma/exam/views.py +++ b/teleforma/exam/views.py @@ -19,6 +19,12 @@ PROFESSOR = 2 class ScriptMixinView(View): + def get_course_pk_list(self): + """ + Get the list of pk of courses current user is allowed to access + """ + return [c['course'].id for c in get_courses(self.request.user) if c['course'].has_exam_scripts] + def get_context_data(self, **kwargs): context = super(ScriptMixinView, self).get_context_data(**kwargs) self.period = Period.objects.get(id=self.kwargs['period_id']) @@ -27,8 +33,10 @@ class ScriptMixinView(View): self.nb_script = self.period.nb_script or settings.TELEFORMA_EXAM_MAX_SESSIONS if getattr(settings, 'TELEFORMA_EXAM_SCRIPT_UPLOAD', True) and self.period.date_exam_end: upload = datetime.datetime.now() <= self.period.date_exam_end - if Script.objects.filter(period = self.period, - author = self.request.user).count() >= self.nb_script: + cur_scripts = Script.objects.filter(period = self.period, + author = self.request.user).count() + allowed_scripts = self.nb_script * len(self.get_course_pk_list()) + if cur_scripts >= allowed_scripts: upload = False context['upload'] = upload else: @@ -238,7 +246,7 @@ class ScriptCreateView(ScriptMixinView, CreateView): def get_context_data(self, **kwargs): context = super(ScriptCreateView, self).get_context_data(**kwargs) context['create_fields'] = ['course', 'session', 'type', 'file' ] - course_pk_list = [c['course'].id for c in get_courses(self.request.user) if c['course'].has_exam_scripts] + course_pk_list = self.get_course_pk_list() context['form'].fields['course'].queryset = Course.objects.filter(pk__in=course_pk_list) return context @@ -367,7 +375,7 @@ class ScriptsScoreCourseView(ScriptsScoreAllView): class ScoreCreateView(ScriptCreateView): template_name='exam/score_form.html' - form_class = ScriptForm + form_class = ScoreForm def get_success_url(self): period = Period.objects.get(id=self.kwargs['period_id'])