]> git.parisson.com Git - teleforma.git/commitdiff
https://trackers.pilotsystems.net/prebarreau/0252 : revive mass notes form
authorYoan Le Clanche <yoanl@pilotsystems.net>
Mon, 13 Sep 2021 15:20:41 +0000 (17:20 +0200)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Mon, 13 Sep 2021 15:20:41 +0000 (17:20 +0200)
teleforma/decorators.py
teleforma/exam/forms.py
teleforma/exam/models.py
teleforma/exam/templates/exam/mass_score_form.html
teleforma/exam/templates/exam/scores.html
teleforma/exam/views.py
teleforma/static/teleforma/js/application.js

index 4f1120a5f1da0818c51ec73e300fe9d9fb2a9feb..b2acc550f436c80bd95fdd521282e20212e65ee0 100644 (file)
@@ -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
index a6ea843631a2256fcb5fdf78196a5937ec230de8..7d80f6444d2fac76b5ea34db7b4d4d38fed705ab 100644 (file)
@@ -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
index 24ad71b2babbd96b4e9ce0d8e4543d28682fc4aa..d8abfba68dc3345b9652ec8fd4f9f7830cbb5cea 100755 (executable)
@@ -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):
index 4b5aeda1174232f23b9babe2dfc00ec6babcad17..bc40998edbdbd4f0e28133c6b3c3644412c47679 100644 (file)
@@ -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();
index 27ad9bc396b7a01083060fb9a67a2b9f7d8aabbf..c13d23ae7f88d15beca21603062792d91c0d46af 100644 (file)
@@ -32,7 +32,7 @@
 <a href="{% url 'teleforma-exam-scores-create' period.id %}" class="component_icon button" id="action_green">{% trans "New score" %}</a>
 </div>
 {% endif %}
-{% if admin %}
+{% if user.quotas.all or user.professor.all or admin %}
 <div class="module_action">
 <a href="{% url 'teleforma-exam-scores-mass-create' period.id %}" class="component_icon button" id="action_green">Saisie en masse de notes</a>
 </div>
index 7a87281d196936987ba082c794015300515e81bb..309927c550c8cd6689de74041ba7c0f309d0a302 100755 (executable)
@@ -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):
index 4ff122fcd35371c48fde2265ea5dd68a808474b9..c2afda0154b620bb829f02575896e5601ddf83ec 100644 (file)
@@ -39,7 +39,8 @@ $(document).ready(function(){
              });
          })
      }
-     $('.tabs').tabs();
+     if($('.tabs').size())
+        $('.tabs').tabs();
 });