]> git.parisson.com Git - teleforma.git/commitdiff
add cummulative filters to user list views
authorGuillaume Pellerin <yomguy@parisson.com>
Wed, 10 Jul 2013 21:25:35 +0000 (23:25 +0200)
committerGuillaume Pellerin <yomguy@parisson.com>
Wed, 10 Jul 2013 21:25:35 +0000 (23:25 +0200)
teleforma/templates/telemeta/base.html
teleforma/templates/telemeta/users.html
teleforma/urls.py
teleforma/views/crfpa.py

index d1f597df41fdccabb7fde28f932ae2a7574ac430..e255cc2a20abc164f084b50836e5e41f54b79360 100644 (file)
@@ -108,7 +108,7 @@ alt="logo" />
  <li><a href="{% url postman_inbox %}" class="orange">{% trans "Messaging" %}{% if postman_unread_count %} ({{ postman_unread_count }}){% endif %}</a></li>
 
  {% if user.is_staff %}
-  <li><a href="{% url teleforma-users %}" class="yellow">{% trans "Users" %}</a></li>
+  <li><a href="{% url teleforma-users 0 0 0 %}" class="yellow">{% trans "Users" %}</a></li>
  {% else %}
   <li><a href="{% url teleforma-annals %}" class="yellow">{% trans "Annals" %}</a></li>
  {% endif %}
index aa3214782d3fee26901d539a56c4ba3b27af6c92..3409b83a974eac13b490b87234e75b91cb176dd2 100644 (file)
@@ -16,8 +16,8 @@
 <div style="background: white;">
 <ul>
 {% block trainings %}
-{% for training in trainings %}
-<li><a href="{% url teleforma-training-users training.id %}">{{ training.code|lower|capfirst }} - {{ training.period|lower|capfirst }}</a></li>
+{% for t in trainings %}
+<li><a href="{% url teleforma-users t.id iej.id course.id %}">{{ t.code|lower|capfirst }} - {{ t.period|lower|capfirst }}</a></li>
 {% endfor %}
 {% endblock trainings %}
 </ul>
@@ -29,8 +29,8 @@
 <div style="background: white;">
 <ul>
 {% block iej %}
-{% for iej in iejs %}
-<li><a href="{% url teleforma-iej-users iej.id %}">{{ iej.name|lower|capfirst }}</a></li>
+{% for i in iejs %}
+<li><a href="{% url teleforma-users training.id i.id course.id %}">{{ i.name|lower|capfirst }}</a></li>
 {% endfor %}
 {% endblock iej %}
 </ul>
@@ -42,8 +42,8 @@
 <div style="background: white;">
 <ul>
 {% block courses %}
-{% for course in courses %}
-<li><a href="{% url teleforma-course-users course.id %}">{{ course }}</a></li>
+{% for c in courses %}
+<li><a href="{% url teleforma-users training.id iej.id c.id %}">{{ c }}</a></li>
 {% endfor %}
 {% endblock courses %}
 </ul>
 
 {% if user.is_staff %}
 <div style="float:right;">
-<a href="{% if training %}{% url teleforma-training-users-export training.id %}{% elif iej %}{% url teleforma-iej-users-export iej.id %}{% elif course %}{% url teleforma-course-users-export course.id %}{% else %}{% url teleforma-users-xls-export %}{% endif %}" class="component_icon button icon_csv">XLS Export</a>
+<a href="{% url teleforma-users-export training.id iej.id course.id %}" class="component_icon button icon_csv">XLS Export</a>
 </div>
 {% endif %}
 
-<div class="course_title">{% trans "Users" %}{% if training %} - {{ training }}{% elif iej %} - {{ iej }}{% elif course %} - {{ course }}{% endif %}</div>
+<div class="course_title">{% trans "Users" %} ({{ users|length }}){% if training.id != 0 %} - {{ training }}{% endif %}{% if iej.id != 0 %} - {{ iej }}{% endif %}{% if course.id != 0 %} - {{ course }}{% endif %}</div>
 <br />
  {% if users %}
   {% include "telemeta/inc/user_list.html" %}
index 3141c84a3235066f3ebbdb1dd43c67fcc68e0ea7..8282db1e1bde792f66d121d706c2cb69b29551fd 100644 (file)
@@ -42,7 +42,6 @@ from telemeta.views import *
 from jsonrpc import jsonrpc_site
 
 htdocs_forma = os.path.dirname(__file__) + '/static/teleforma/'
-user_export = UsersXLSExport()
 profile_view = ProfileView()
 document = DocumentView()
 media = MediaView()
@@ -97,22 +96,16 @@ urlpatterns = patterns('',
     url(r'^messages/', include('postman.urls')),
 
     # Users
-    url(r'^users/all/$', UsersView.as_view(), name="teleforma-users"),
-    url(r'^users/(?P<username>[A-Za-z0-9._-]+)/profile/$', profile_view.profile_detail,
-                               name="teleforma-profile-detail"),
-    url(r'^users/(?P<id>.*)/login/$', UserLoginView.as_view(), name="teleforma-user-login"),
-    url(r'^users/all/export/$', user_export.all, name="teleforma-users-xls-export"),
+    url(r'^users/training/(?P<training_id>.*)/iej/(?P<iej_id>.*)/course/(?P<course_id>.*)/list/$',
+        UsersView.as_view(), name="teleforma-users"),
 
-    url(r'^users/by_training/(\w+)/$', UsersTrainingView.as_view(), name="teleforma-training-users"),
-    url(r'^users/by_training/(?P<id>.*)/export/$', user_export.by_training,
-        name="teleforma-training-users-export"),
+    url(r'^users/training/(?P<training_id>.*)/iej/(?P<iej_id>.*)/course/(?P<course_id>.*)/export/$',
+        UsersExportView.as_view(), name="teleforma-users-export"),
 
-    url(r'^users/by_iej/(\w+)/$', UsersIejView.as_view(), name="teleforma-iej-users"),
-    url(r'^users/by_iej/(?P<id>.*)/export/$', user_export.by_iej, name="teleforma-iej-users-export"),
+    url(r'^users/(?P<username>[A-Za-z0-9._-]+)/profile/$', profile_view.profile_detail,
+                               name="teleforma-profile-detail"),
 
-    url(r'^users/by_course/(\w+)/$', UsersCourseView.as_view(), name="teleforma-course-users"),
-    url(r'^users/by_course/(?P<id>.*)/export/$', user_export.by_course,
-        name="teleforma-course-users-export"),
+    url(r'^users/(?P<id>.*)/login/$', UserLoginView.as_view(), name="teleforma-user-login"),
 
     # JSON RPC
     url(r'json/$', jsonrpc_site.dispatch, name='jsonrpc_mountpoint'),
index 24fa57539aff4569603dcf9906f7ea545693b386..6de30c8e5f7e3f730f25525296f41119dd496dd2 100644 (file)
 from teleforma.views.core import *
 
 
+def get_course_code(obj):
+    if obj:
+        return unicode(obj.code)
+    else:
+        return ''
+
 def get_crfpa_courses(user, date_order=False, num_order=False, period=None):
     courses = []
 
@@ -105,16 +111,55 @@ class UsersView(ListView):
     model = User
     template_name='telemeta/users.html'
     context_object_name = 'users'
+    training = None
+    iej = None
+    course = None
     #paginate_by = 12
 
+
     def get_queryset(self):
-        return User.objects.all().select_related(depth=1).order_by('last_name')
+        self.users = User.objects.all().select_related(depth=1).order_by('last_name')
+
+        if self.kwargs['training_id'] != '0':
+            self.training = Training.objects.filter(id=self.kwargs['training_id'])
+            self.users = self.users.filter(student__trainings__in=self.training)
+            self.training = self.training[0]
+        else:
+            self.training = Training(id=0)
+
+        if self.kwargs['iej_id'] != '0':
+            self.iej = IEJ.objects.filter(id=self.kwargs['iej_id'])
+            self.users = self.users.filter(student__iej__in=self.iej)
+            self.iej = self.iej[0]
+        else:
+            self.iej = IEJ(id=0)
+
+        if self.kwargs['course_id'] != '0':
+            self.course = Course.objects.get(id=self.kwargs['course_id'])
+            u = []
+            for user in self.users:
+                user_courses = get_crfpa_courses(user)
+                for course in user_courses:
+                    if course['course'] == self.course:
+                        u.append(user)
+            self.users = u
+        else:
+            self.course = Course(id=0)
+
+        return self.users
 
     def get_context_data(self, **kwargs):
         context = super(UsersView, self).get_context_data(**kwargs)
+        users = self.object_list
+
+        context['training'] = self.training
+        context['iej'] = self.iej
+        context['course'] = self.course
+
         context['trainings'] = Training.objects.all()
         context['iejs'] = IEJ.objects.all()
         context['courses'] = Course.objects.all()
+
         paginator = NamePaginator(self.object_list, on="last_name", per_page=12)
         try:
             page = int(self.request.GET.get('page', '1'))
@@ -147,66 +192,7 @@ class UserLoginView(View):
         return super(UserLoginView, self).dispatch(*args, **kwargs)
 
 
-class UsersTrainingView(UsersView):
-
-    def get_queryset(self):
-        self.training = Training.objects.filter(id=self.args[0])
-        return User.objects.filter(student__trainings__in=self.training).order_by('last_name')
-
-    def get_context_data(self, **kwargs):
-        context = super(UsersTrainingView, self).get_context_data(**kwargs)
-        context['training'] = Training.objects.get(id=self.args[0])
-        return context
-
-    @method_decorator(login_required)
-    def dispatch(self, *args, **kwargs):
-        return super(UsersTrainingView, self).dispatch(*args, **kwargs)
-
-class UsersIejView(UsersView):
-
-    def get_queryset(self):
-        self.iej = IEJ.objects.filter(id=self.args[0])
-        return User.objects.filter(student__iej__in=self.iej).order_by('last_name')
-
-    def get_context_data(self, **kwargs):
-        context = super(UsersIejView, self).get_context_data(**kwargs)
-        context['iej'] = IEJ.objects.get(id=self.args[0])
-        return context
-
-    @method_decorator(login_required)
-    def dispatch(self, *args, **kwargs):
-        return super(UsersIejView, self).dispatch(*args, **kwargs)
-
-class UsersCourseView(UsersView):
-
-    def get_queryset(self):
-        #TODO: optimize
-        u = []
-        self.course = Course.objects.get(id=self.args[0])
-        users = User.objects.all()
-        for user in users:
-            user_courses = get_crfpa_courses(user)
-            for course in user_courses:
-                if course['course'] == self.course:
-                    u.append(user)
-        return u
-
-    def get_context_data(self, **kwargs):
-        context = super(UsersCourseView, self).get_context_data(**kwargs)
-        context['course'] = Course.objects.get(id=self.args[0])
-        return context
-
-    @method_decorator(login_required)
-    def dispatch(self, *args, **kwargs):
-        return super(UsersCourseView, self).dispatch(*args, **kwargs)
-
-def get_course_code(obj):
-    if obj:
-        return unicode(obj.code)
-    else:
-        return ''
-
-class UsersXLSExport(object):
+class UsersExportView(UsersView):
 
     first_row = 2
 
@@ -219,10 +205,15 @@ class UsersXLSExport(object):
             row.write(1, user.first_name)
             row.write(9, user.email)
             row.write(2, unicode(student.iej))
-            code = student.training.code
-            if student.platform_only:
-                code = 'I - ' + code
-            row.write(3, unicode(code))
+
+            codes = []
+            for training in student.trainings.all():
+                if student.platform_only:
+                    codes.append('I - ' + training.code)
+                else:
+                    codes.append(training.code)
+            row.write(3, unicode(' '.join(codes)))
+
             row.write(4, get_course_code(student.procedure))
             row.write(5, get_course_code(student.written_speciality))
             row.write(6, get_course_code(student.oral_speciality))
@@ -242,8 +233,9 @@ class UsersXLSExport(object):
             return counter
 
     @method_decorator(permission_required('is_staff'))
-    def export(self, request):
-        self.users = self.users.order_by('last_name')
+    def get(self, *args, **kwargs):
+        super(UsersExportView, self).get(*args, **kwargs)
+        self.users = self.users
         self.book = Workbook()
         self.sheet = self.book.add_sheet('Etudiants')
 
@@ -251,7 +243,7 @@ class UsersXLSExport(object):
         cols = [{'name':'NOM', 'width':5000},
                 {'name':'PRENOM', 'width':5000},
                 {'name':'IEJ', 'width':2500},
-                {'name':'FORMATION', 'width':6000},
+                {'name':'FORMATIONS', 'width':6000},
                 {'name':'PROC', 'width':2500},
                 {'name':'Ecrit Spe', 'width':3000},
                 {'name':'Oral Spe', 'width':3000},
@@ -278,29 +270,6 @@ class UsersXLSExport(object):
         self.book.save(response)
         return response
 
-    @method_decorator(permission_required('is_staff'))
-    def all(self, request):
-        self.users = User.objects.all()
-        return self.export(request)
-
-    @method_decorator(permission_required('is_staff'))
-    def by_training(self, request, id):
-        training = Training.objects.filter(id=id)
-        self.users = User.objects.filter(student__training__in=training)
-        return self.export(request)
-
-    @method_decorator(permission_required('is_staff'))
-    def by_iej(self, request, id):
-        iej = IEJ.objects.filter(id=id)
-        self.users = User.objects.filter(student__iej__in=iej)
-        return self.export(request)
-
-    @method_decorator(permission_required('is_staff'))
-    def by_course(self, request, id):
-        course = Course.objects.filter(id=id)
-        self.users = User.objects.filter(student__training__courses__in=course)
-        return self.export(request)
-
 
 class AnnalsView(ListView):