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
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
class MassScoreForm(ScoreForm):
+
def __init__(self, *args, **kwargs):
super(MassScoreForm, self).__init__(*args, **kwargs)
self.table_errors = {}
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
@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):
});
function checkStudentDisplay(){
- if($('[name="course"]').val() && $('[name="session"]').val() && $('[name="type"]').val())
+ if($('[name="course"]').val() && $('[name="session"]').val())
$('#students').show();
else
$('#students').hide();
<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>
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
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']:
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):
});
})
}
- $('.tabs').tabs();
+ if($('.tabs').size())
+ $('.tabs').tabs();
});