From 8aed3ddd77e18349e044fbd8a817478cccf76009 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Mon, 16 Dec 2013 14:55:31 +0100 Subject: [PATCH 1/1] Sending results to students and teachers --- wtem/management/commands/wtem_send_results.py | 93 +++++++++++++++++++ .../templates/wtem/results_student_failed.txt | 13 +++ .../templates/wtem/results_student_passed.txt | 14 +++ wtem/templates/wtem/results_teacher.txt | 16 ++++ 4 files changed, 136 insertions(+) create mode 100644 wtem/management/commands/wtem_send_results.py create mode 100644 wtem/templates/wtem/results_student_failed.txt create mode 100644 wtem/templates/wtem/results_student_passed.txt create mode 100644 wtem/templates/wtem/results_teacher.txt diff --git a/wtem/management/commands/wtem_send_results.py b/wtem/management/commands/wtem_send_results.py new file mode 100644 index 0000000..94c2653 --- /dev/null +++ b/wtem/management/commands/wtem_send_results.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- + +from optparse import make_option + +from django.core.management.base import BaseCommand +from django.conf import settings +from wtem.management.commands import send_mail +from django.utils import translation +from django.template.loader import render_to_string + +from contact.models import Contact +from wtem.models import Submission + + +def get_submissions(): + return Submission.objects.exclude(answers = None).all() + +minimum = 47.5 + +class Command(BaseCommand): + + option_list = BaseCommand.option_list + ( + make_option('--to-teachers', + action='store_true', + dest='to_teachers', + default=False, + help='Send emails to teachers'), + make_option('--to-students', + action='store_true', + dest='to_students', + default=False, + help='Send emails to students'), + ) + + def handle(self, *args, **options): + translation.activate('pl') + for target in ['to_teachers', 'to_students']: + if options[target]: + self.sent = 0 + self.failed = 0 + getattr(self, 'handle_' + target)(*args, **options) + + def handle_to_students(self, *args, **options): + self.stdout.write('>>> Sending results to students') + subject = 'Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej' + + for submission in get_submissions(): + final_result = submission.final_result + if final_result < minimum: + template = 'results_student_failed.txt' + else: + template = 'results_student_passed.txt' + message = render_to_string('wtem/' + template, dict(final_result = submission.final_result)) + self.send_message(message, subject, submission.email) + + self.sum_up() + + def handle_to_teachers(self, *args, **kwargs): + self.stdout.write('>>> Sending results to teachers') + subject = 'Wyniki Twoich uczniów w I etapie Wielkiego Turnieju Edukacji Medialnej' + failed = sent = 0 + + submissions_by_contact = dict() + + for submission in get_submissions(): + submissions_by_contact.setdefault(submission.contact.id, []).append(submission) + + for contact_id, submissions in submissions_by_contact.items(): + contact = Contact.objects.get(id=contact_id) + message = render_to_string('wtem/results_teacher.txt', dict(submissions = submissions)) + self.send_message(message, subject, contact.contact) + + self.sum_up() + + def sum_up(self): + self.stdout.write('sent: %s, failed: %s' % (self.sent, self.failed)) + + def send_message(self, message, subject, email): + self.stdout.write('>>> sending results to %s' % email) + try: + send_mail( + subject = subject, + body = message, + to = [email] + ) + except: + self.failed += 1 + self.stdout.write('failed sending to: ' + email + ': ' + str(e)) + else: + self.sent += 1 + self.stdout.write('message sent to: ' + email) + + diff --git a/wtem/templates/wtem/results_student_failed.txt b/wtem/templates/wtem/results_student_failed.txt new file mode 100644 index 0000000..591948d --- /dev/null +++ b/wtem/templates/wtem/results_student_failed.txt @@ -0,0 +1,13 @@ +{% load l10n %}Droga Uczestniczko, +Drogi Uczestniku, + +Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej to {% localize on %}{{final_result|floatformat}}{% endlocalize %} pkt. + +Do zakwalifikowania się do II etapu konieczne było uzyskanie min. 47,5 pkt. + +Dziękujemy za udział w zawodach! + +Z pozdrowieniami, + +Zespół Edukacji Medialnej +Fundacja Nowoczesna Polska \ No newline at end of file diff --git a/wtem/templates/wtem/results_student_passed.txt b/wtem/templates/wtem/results_student_passed.txt new file mode 100644 index 0000000..4ed6904 --- /dev/null +++ b/wtem/templates/wtem/results_student_passed.txt @@ -0,0 +1,14 @@ +{% load l10n %}Droga Uczestniczko, +Drogi Uczestniku, + +Twój wynik w I etapie Wielkiego Turnieju Edukacji Medialnej to {% localize on %}{{final_result|floatformat}}{% endlocalize %} pkt. + +Gratulujemy! Zakwalifikowałeś/aś się do II etapu. +Kolejnym zadaniem, które Cię czeka jest realizacja projektu. Więcej szczegółów opublikujemy na stronie http://edukacjamedialna.edu.pl/wtem 13 stycznia 2014 r. + +Dziękujemy za udział w zawodach! + +Z pozdrowieniami, + +Zespół Edukacji Medialnej +Fundacja Nowoczesna Polska \ No newline at end of file diff --git a/wtem/templates/wtem/results_teacher.txt b/wtem/templates/wtem/results_teacher.txt new file mode 100644 index 0000000..a2ff4c5 --- /dev/null +++ b/wtem/templates/wtem/results_teacher.txt @@ -0,0 +1,16 @@ +Szanowna Pani, +Szanowny Panie, + +Wyniki uzyskane przez zgłoszonych przez Panią/Pana uczestników Turnieju to: + +{% for submission in submissions %}{{submission.first_name.strip}}, {{submission.last_name.strip}}: {{submission.final_result|floatformat}} +{% endfor %} + +Pozostali uczestnicy i uczestniczki zgłoszeni przez Panią/Pana nie przystąpili do rozwiązania testu. Do zakwalifikowania się do II etapu konieczne było uzyskanie min. 47,5 pkt. Pełna lista uczestników II etapu dostępna jest na stronie http://edukacjamedialna.edu.pl/wtem. + +Dziękujemy za udział w zawodach! + +Z pozdrowieniami, + +Zespół Edukacji Medialnej +Fundacja Nowoczesna Polska \ No newline at end of file -- 2.20.1