From: Yoan Le Clanche Date: Thu, 18 Jan 2018 10:49:57 +0000 (+0100) Subject: https://trackers.pilotsystems.net/probarreau/0266 https://trackers.pilotsystems.net... X-Git-Tag: 2.8.1-pro~208 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=1b125cd8013e1578b0782535f96f6647d0581e1c;p=teleforma.git https://trackers.pilotsystems.net/probarreau/0266 https://trackers.pilotsystems.net/probarreau/0247 --- diff --git a/teleforma/management/commands/teleforma-message-all-seminar-users.py b/teleforma/management/commands/teleforma-message-all-seminar-users.py index e8deb4f9..0662cc90 100644 --- a/teleforma/management/commands/teleforma-message-all-seminar-users.py +++ b/teleforma/management/commands/teleforma-message-all-seminar-users.py @@ -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') - + # diff --git a/teleforma/urls.py b/teleforma/urls.py index cb065723..58e1444e 100644 --- a/teleforma/urls.py +++ b/teleforma/urls.py @@ -142,6 +142,9 @@ urlpatterns = patterns('', url(r'^users/by_course/(?P.*)/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.*)$', 'django.views.static.serve', diff --git a/teleforma/views/pro.py b/teleforma/views/pro.py index 81bcedce..eed22d21 100644 --- a/teleforma/views/pro.py +++ b/teleforma/views/pro.py @@ -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