]> git.parisson.com Git - teleforma.git/commitdiff
Allow to filter revisions by date, change completion rules calculation, fix displayed...
authorYoan Le Clanche <yoanl@pilotsystems.net>
Fri, 4 Jan 2019 14:21:27 +0000 (15:21 +0100)
committerYoan Le Clanche <yoanl@pilotsystems.net>
Fri, 4 Jan 2019 14:21:27 +0000 (15:21 +0100)
teleforma/admin.py
teleforma/context_processors.py
teleforma/templates/admin/teleforma/seminarrevision/change_list.html
teleforma/templates/teleforma/seminar_testimonial_payback.html
teleforma/urls.py
teleforma/views/pro.py

index afcc79e11a1d54b9883c6ebac2343aa4b03d1b91..57c0b23a3509734a85a3a2adbeafc05efd7ef2fd 100644 (file)
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
+from telemeta.util.unicode import UnicodeWriter
 from teleforma.models import *
 from django.contrib import admin
 from django.contrib.auth.models import User
 from django.contrib.auth.admin import UserAdmin
 from longerusername.forms import UserCreationForm, UserChangeForm
 from django.contrib.contenttypes.generic import GenericInlineModelAdmin
+from django.http import HttpResponse
 
 class ProfileInline(admin.StackedInline):
     model = Profile
@@ -104,6 +106,59 @@ class AnswerAdmin(admin.ModelAdmin):
 
 class SeminarRevisionAdmin(admin.ModelAdmin):
     search_fields = ['user__username', 'seminar__title']
+    date_hierarchy = 'date_modified'
+
+    actions = ['export_seminar_revisions']
+
+    def export_seminar_revisions(self, request, queryset):
+
+        def pretty_duration(delta):
+            seconds = delta.total_seconds()
+            hours = seconds // 3600
+            minutes = (seconds % 3600) // 60
+            seconds = seconds % 60
+            duration = "%d heures %d minutes %d secondes" % (hours, minutes, seconds)
+            return duration
+
+        response = HttpResponse(content_type='text/csv')
+        filename = "releve-revision"
+        response['Content-Disposition'] = 'attachment; filename="%s.csv"' % filename
+
+        data = {}
+        for rev in queryset.order_by('-date'):
+            seminar_id = rev.seminar.id
+            if seminar_id not in data:
+                data[seminar_id] = {'title': rev.seminar.pretty_title.encode('utf-8'), 'users': {}}
+
+            user = rev.user.email
+            if user not in data[seminar_id]['users']:
+                data[seminar_id]['users'][user] = []
+
+            if rev.date_modified:
+                data[seminar_id]['users'][user].append({'start': rev.date, 'end': rev.date_modified})
+
+        writer = UnicodeWriter(response, delimiter=";")
+        writer.writerow(["seminaire", "email", "duree total", "date debut", "date fin", "duree"])
+        for seminar in data.keys():
+            title = data[seminar]['title']
+            users = data[seminar]['users']
+            for user in users.keys():
+                l = [title, user]
+                revs = users[user]
+                duration = datetime.timedelta()
+                for rev in revs:
+                    diff = rev['end'] - rev['start'] if rev['end'] else datetime.timedelta()
+                    if diff.total_seconds() < 0:
+                        continue
+                    l.append(str(rev['start']))
+                    l.append(str(rev['end']))
+                    l.append(pretty_duration(rev['end'] - rev['start']) if rev['end'] else 0)
+                    duration += rev['end'] - rev['start'] if rev['end'] else datetime.timedelta()
+                l.insert(2, pretty_duration(duration))
+                writer.writerow(l)
+        return response
+
+    export_seminar_revisions.short_description = "Exporter le relevĂ© des temps de connexion"
 
 
 admin.site.unregister(User)
index 9d89bdbf44fe7fade3080848ae68a582eba62168..32383816d812ee3c0660c9f5e53946507f2356c0 100644 (file)
@@ -81,10 +81,9 @@ def seminar_progress(user, seminar, more=False):
             answer = Answer.objects.filter(question=question, status=3, user=user)
             if answer:
                 answer = answer[0]
-            if answer and answer.validated and answer.treated:
+            if answer:
                 progress += question.weight
             else:
-                # import pdb;pdb.set_trace()
                 if answer and not answer.treated and not missing_step4 == '4':
                     missing_step4 = '4.5'
                 else:
index f09bbbe466ac19ea3a6d90c3ee052bdefceb1f60..338a81ad33548cf5ec5037b1f8a50b58ba239aab 100644 (file)
             {% if has_add_permission %}
               <div class="object-tools">
                 {% block object-tools-items %}
-                <a href="{% url 'export-seminar-revisions' %}" class="btn">
-                    <i class="icon-circle-arrow-down icon-black"></i>&nbsp;
-                    Exporter le relevĂ© des temps de connexion
-                  </a>
                   <a href="{% url cl.opts|admin_urlname:'add' %}{% if is_popup %}?_popup=1{% endif %}" class="btn btn-success">
                     <i class="icon-plus-sign icon-white"></i>&nbsp;
                     {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
index e81782bda948ac7ff7223afbfe2bbfe6034985d2..0b33110110a15b53ce8c9853fc28177a80d650ed 100644 (file)
 
 
 <div id="user-hours">
-  {{ user_timer|hours }}
+  {{ seminar.duration|hours }}
 </div>
 
 <div id="seminar-hours">
index 58e1444edda3fe205fa45ed631616b7c6a50aca8..cb065723d737c284620ce0c04b019b99737cd4aa 100644 (file)
@@ -142,9 +142,6 @@ urlpatterns = patterns('',
     url(r'^users/by_course/(?P<id>.*)/export/$', user_export.by_course,
         name="teleforma-course-users-export"),
 
-    # Seminar Revisions
-    url(r'^export_seminar_revisions/$', export_seminar_revisions, name="export-seminar-revisions"),
-
 
 # CSS+Images (FIXME: for developement only)
     url(r'^teleforma/css/(?P<path>.*)$', 'django.views.static.serve',
index 12e0cd4da0f21e3cd45cee84acab5689831b87e5..a9c373787c3f8a3aa84e34fbbb2aaa182eeb0fa4 100644 (file)
@@ -115,55 +115,6 @@ def get_seminar_delta(user, seminar):
     delta = timer - datetime.timedelta(seconds=seminar.duration.as_seconds())
     return delta.total_seconds()
 
-def pretty_duration(delta):
-    seconds = delta.total_seconds()
-    hours = seconds // 3600
-    minutes = (seconds % 3600) // 60
-    seconds = seconds % 60
-    duration = "%d heures %d minutes %d secondes" % (hours, minutes, seconds)
-    return duration
-
-
-def export_seminar_revisions(request):
-    response = HttpResponse(content_type='text/csv')
-    filename = "releve-revision"
-    response['Content-Disposition'] = 'attachment; filename="%s.csv"' % filename
-
-    revs = SeminarRevision.objects.all().order_by('-date')
-    data = {}
-    for rev in revs:
-        seminar_id = rev.seminar.id
-        if seminar_id not in data:
-            data[seminar_id] = {'title':rev.seminar.pretty_title.encode('utf-8'), 'users':{}}
-
-        user = rev.user.email
-        if user not in data[seminar_id]['users']:
-            data[seminar_id]['users'][user] = []
-
-        if rev.date_modified:
-            data[seminar_id]['users'][user].append({'start':rev.date, 'end':rev.date_modified})
-
-    writer = UnicodeWriter(response, delimiter=";")
-    writer.writerow(["seminaire", "email", "duree total", "date debut", "date fin", "duree"])
-    for seminar in data.keys():
-        title = data[seminar]['title']
-        users = data[seminar]['users']
-        for user in users.keys():
-            l = [title, user]
-            revs = users[user]
-            duration = datetime.timedelta()
-            for rev in revs:
-                diff = rev['end'] - rev['start'] if rev['end'] else datetime.timedelta()
-                if diff.total_seconds() < 0:
-                    continue
-                l.append(str(rev['start']))
-                l.append(str(rev['end']))
-                l.append(pretty_duration(rev['end'] - rev['start']) if rev['end'] else 0)
-                duration += rev['end'] - rev['start'] if rev['end'] else datetime.timedelta()
-            l.insert(2, pretty_duration(duration))
-            writer.writerow(l)
-
-    return response
 
 
 class SeminarAccessMixin(object):
@@ -874,6 +825,7 @@ class TestimonialKnowledgeView(TestimonialView):
         return super(TestimonialKnowledgeView, self).dispatch(*args, **kwargs)
 
 
+# FIFPL
 class TestimonialPaybackView(TestimonialView):
 
     template_name = 'teleforma/seminar_testimonial_payback.html'
@@ -885,8 +837,8 @@ class TestimonialPaybackView(TestimonialView):
         context['answers'] = Answer.objects.filter(question__in=seminar.question.all(),
                                                    user=self.request.user,
                                                    validated=True).order_by('question__rank')
-        user_timer = get_seminar_timer(self.request.user, seminar)
-        context['user_timer'] = user_timer.days * 24 + user_timer.seconds / 3600
+        user_timer = get_seminar_timer(self.request.user, seminar)
+        context['user_timer'] = user_timer.days * 24 + user_timer.seconds / 3600
         return context
 
     @method_decorator(login_required)