From: Yoan Le Clanche Date: Mon, 13 Sep 2021 15:20:41 +0000 (+0200) Subject: https://trackers.pilotsystems.net/prebarreau/0252 : revive mass notes form X-Git-Tag: 2.5.0~61 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=7cbb0e0039723c547027d6d8b9cc366966679ed1;p=teleforma.git https://trackers.pilotsystems.net/prebarreau/0252 : revive mass notes form --- diff --git a/teleforma/decorators.py b/teleforma/decorators.py index 4f1120a5..b2acc550 100644 --- a/teleforma/decorators.py +++ b/teleforma/decorators.py @@ -2,6 +2,7 @@ import urllib.parse as urlparse from functools import wraps from django.conf import settings +from django.core.exceptions import PermissionDenied from django.contrib.auth import REDIRECT_FIELD_NAME from django.shortcuts import redirect @@ -62,6 +63,19 @@ def access_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, logi return actual_decorator +def staff_required(view): + """ + Allow only correctors, professor or admins + """ + @wraps(view) + def _view(self, request, *args, **kwargs): + user = request.user + if not user.quotas.all() and not user.professor.all() and not user.is_superuser: + raise PermissionDenied + return view(self, request, *args, **kwargs) + return _view + + # def access_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None): # """ # Decorator for views that checks that the user is logged in, redirecting diff --git a/teleforma/exam/forms.py b/teleforma/exam/forms.py index a6ea8436..7d80f644 100644 --- a/teleforma/exam/forms.py +++ b/teleforma/exam/forms.py @@ -41,6 +41,7 @@ class ScoreForm(ScriptForm): class MassScoreForm(ScoreForm): + def __init__(self, *args, **kwargs): super(MassScoreForm, self).__init__(*args, **kwargs) self.table_errors = {} @@ -58,7 +59,7 @@ class MassScoreForm(ScoreForm): if student: score = self.data[key.replace('student', 'score')] try: - score = int(score) + score = float(score.replace(',', '.')) except ValueError: errors[key] = u"Note invalide" continue diff --git a/teleforma/exam/models.py b/teleforma/exam/models.py index 24ad71b2..d8abfba6 100755 --- a/teleforma/exam/models.py +++ b/teleforma/exam/models.py @@ -289,15 +289,17 @@ class Script(BaseResource): @property def title(self): - if self.type: + if self.type and self.course: title = [self.course.title, self.type.name, _( "Session") + ' ' + self.session, str(self.date_added)] - else: + elif self.course: title = [self.course.title, _( "Session") + ' ' + self.session, str(self.date_added)] + else: + title = [self.session, str(self.date_added)] if self.author: title.append(str(self.author.first_name) + - ' ' + str(self.author.last_name)) + ' ' + str(self.author.last_name)) return ' - '.join(title) def __str__(self): diff --git a/teleforma/exam/templates/exam/mass_score_form.html b/teleforma/exam/templates/exam/mass_score_form.html index 4b5aeda1..bc40998e 100644 --- a/teleforma/exam/templates/exam/mass_score_form.html +++ b/teleforma/exam/templates/exam/mass_score_form.html @@ -37,7 +37,7 @@ }); function checkStudentDisplay(){ - if($('[name="course"]').val() && $('[name="session"]').val() && $('[name="type"]').val()) + if($('[name="course"]').val() && $('[name="session"]').val()) $('#students').show(); else $('#students').hide(); diff --git a/teleforma/exam/templates/exam/scores.html b/teleforma/exam/templates/exam/scores.html index 27ad9bc3..c13d23ae 100644 --- a/teleforma/exam/templates/exam/scores.html +++ b/teleforma/exam/templates/exam/scores.html @@ -32,7 +32,7 @@ {% trans "New score" %} {% endif %} -{% if admin %} +{% if user.quotas.all or user.professor.all or admin %}
Saisie en masse de notes
diff --git a/teleforma/exam/views.py b/teleforma/exam/views.py index 7a87281d..309927c5 100755 --- a/teleforma/exam/views.py +++ b/teleforma/exam/views.py @@ -20,7 +20,7 @@ from django.utils.translation import ugettext_lazy as _ from django.views.generic.base import View from django.views.generic.edit import CreateView, UpdateView from django.views.generic.list import ListView -from teleforma.decorators import access_required +from teleforma.decorators import access_required, staff_required from teleforma.models.crfpa import Student from teleforma.views.core import CourseAccessMixin, get_courses @@ -526,7 +526,7 @@ class MassScoreCreateView(ScoreCreateView): def get_context_data(self, **kwargs): context = super(MassScoreCreateView, self).get_context_data(**kwargs) - context['create_fields'] = ['course', 'session', 'type'] + context['create_fields'] = ['course', 'session'] context['rows'] = [{'student_name': 'student%d' % i, 'score_name': 'score%d' % i} for i in range(20)] for row in context['rows']: @@ -544,9 +544,9 @@ class MassScoreCreateView(ScoreCreateView): row['student_name'], None) return context - @method_decorator(permission_required('is_superuser')) - def dispatch(self, *args, **kwargs): - return super(ScoreCreateView, self).dispatch(*args, **kwargs) + @staff_required + def dispatch(self, request, *args, **kwargs): + return super(ScoreCreateView, self).dispatch(request, *args, **kwargs) def get_mass_students(request): diff --git a/teleforma/static/teleforma/js/application.js b/teleforma/static/teleforma/js/application.js index 4ff122fc..c2afda01 100644 --- a/teleforma/static/teleforma/js/application.js +++ b/teleforma/static/teleforma/js/application.js @@ -39,7 +39,8 @@ $(document).ready(function(){ }); }) } - $('.tabs').tabs(); + if($('.tabs').size()) + $('.tabs').tabs(); });