]> git.parisson.com Git - teleforma.git/commitdiff
https://trackers.pilotsystems.net/probarreau/0266 https://trackers.pilotsystems.net...
authorYoan Le Clanche <yoan@ellington.pilotsystems.net>
Thu, 18 Jan 2018 10:49:57 +0000 (11:49 +0100)
committerYoan Le Clanche <yoan@ellington.pilotsystems.net>
Thu, 18 Jan 2018 10:49:57 +0000 (11:49 +0100)
teleforma/management/commands/teleforma-message-all-seminar-users.py
teleforma/urls.py
teleforma/views/pro.py

index e8deb4f9fddec13985d2097662758d98390f10cb..0662cc9054d7d1d0565bc227f29876960bbca5a9 100644 (file)
@@ -8,6 +8,8 @@ from django.template.defaultfilters import slugify
 from django.template.loader import render_to_string
 from django.core.mail import send_mail, mail_admins
 from django.utils import translation
+
+from teleforma.views.pro import get_seminar_delta
 from telemeta.models import *
 from telemeta.util.unaccent import unaccent
 from teleforma.models import *
@@ -47,9 +49,14 @@ class Command(BaseCommand):
                 for seminar in all_seminars:
                     if seminar.expiry_date:
                         delta = seminar.expiry_date - today
-                        if delta.days < days and delta.days > 0 and not seminar_validated(user, seminar):
+
+                        completed = seminar_validated(user, seminar)
+                        enough_time = get_seminar_delta(user, seminar)
+                        validated = completed and enough_time > 0
+                        if delta.days < days and delta.days > 0 and not validated:
                             seminars.append(seminar)
 
+
                 if seminars:
                     context['organization'] = seminars[0].course.department.name
                     context['gender'] = auditor.get_gender_display()
@@ -57,15 +64,15 @@ class Command(BaseCommand):
                     context['last_name'] = user.last_name
                     context['site'] = Site.objects.get_current()
                     context['seminars'] = seminars
-        
+
                     text = render_to_string(self.message_template, context)
                     subject = render_to_string(self.subject_template, context)
                     # subject = '%s : %s' % (seminar.title, subject)
-
                     mess = Message(sender=sender, recipient=user, subject=subject[:119], body=text)
+                    # mess = Message(sender=sender, recipient='yoanl@pilotsystems.net', subject=subject[:119], body=text)
                     mess.moderation_status = 'a'
                     mess.save()
-        
+
                     if not settings.DEBUG:
                         notify_user(mess, 'acceptance')
-                    
+                #
index cb065723d737c284620ce0c04b019b99737cd4aa..58e1444edda3fe205fa45ed631616b7c6a50aca8 100644 (file)
@@ -142,6 +142,9 @@ 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 81bcedce436822a1b71acdfd287c528afa9210d5..eed22d21b0209fa4c9fbb81a807af98151e0c8f7 100644 (file)
@@ -36,6 +36,8 @@
 from teleforma.views.core import *
 from teleforma.context_processors import *
 
+from telemeta.util.unicode import UnicodeWriter
+
 from django.utils.translation import ugettext_lazy as _
 from django.template import loader, Context, RequestContext
 from django.views.generic.base import TemplateResponseMixin
@@ -113,22 +115,53 @@ 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-%s"
-    response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
-
-    writer = csv.writer(response)
-    users = SeminarRevision.objects.values_list('user', flat=True).distinct()
-    revs = SeminarRevision.objects.all()
-    users = set(users)
-    users = list(users)
-    for user in users:
-        revisions = revs.filter(user__id=user)
-        l = []
-        for revision in revisions:
-            l.append("%s à %s" % (revision.date, revision.date_modified))
-        writer.writerow([user]+l)
+    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