model = Discount
extra = 1
-class CRFPAStudentProfileInline(admin.StackedInline):
- model = Student
- exclude = ['options']
- filter_horizontal = ['trainings']
-
-class AEStudentProfileInline(admin.StackedInline):
- model = AEStudent
- filter_horizontal = ['courses']
- extra = 1
-
class StudentAdmin(admin.ModelAdmin):
model = Student
exclude = ['options']
+ filter_horizontal = ['trainings']
inlines = [PaymentInline, OptionalFeeInline, DiscountInline]
search_fields = ['user__first_name', 'user__last_name', 'user__username']
- list_filter = ['user__is_active']
+ list_filter = ['user__is_active', 'is_subscribed']
list_display = ['student_name', 'total_payments', 'total_fees', 'balance']
def student_name(self, instance):
model = Profile
class UserProfileAdmin(UserAdmin):
- inlines = [ProfileInline, CRFPAStudentProfileInline]
+ inlines = [ProfileInline]
class TrainingAdmin(admin.ModelAdmin):
model = Training
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-02-17 22:29+0100\n"
+"POT-Creation-Date: 2015-02-17 23:30+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Guillaume Pellerin <yomguy@parisson.com>\n"
"Language-Team: LANGUAGE <lists@parisson.com>\n"
msgstr "date d'ajout"
#: exam/models.py:179 models/core.py:160 models/core.py:463
-#: models/crfpa.py:203 models/pro.py:68
+#: models/crfpa.py:204 models/pro.py:68
msgid "date modified"
msgstr "date de modification"
"NB: Ce message est émis par un automate. Ne faites pas de réponse, elle ne "
"serait pas prise en compte."
-#: models/ae.py:46 models/core.py:206 models/crfpa.py:109 models/crfpa.py:173
+#: models/ae.py:46 models/core.py:206 models/crfpa.py:109 models/crfpa.py:174
#: models/pro.py:101 models/pro.py:140
msgid "user"
msgstr "utilisateur"
#: models/core.py:94 models/core.py:107 models/core.py:129 models/core.py:142
#: models/core.py:157 models/core.py:239 models/core.py:394 models/core.py:460
-#: models/core.py:480 models/crfpa.py:48 models/crfpa.py:217
-#: models/crfpa.py:230 models/pro.py:124
+#: models/core.py:480 models/crfpa.py:48 models/crfpa.py:218
+#: models/crfpa.py:231 models/pro.py:124
msgid "description"
msgstr "description"
msgstr "frais d'inscription"
#: models/crfpa.py:135
-msgid "subscripted"
+msgid "subscribed"
msgstr "inscrit"
-#: models/crfpa.py:165
+#: models/crfpa.py:136
+msgid "confirmation sent"
+msgstr "confirmation envoyée"
+
+#: models/crfpa.py:166
msgid "Student"
msgstr "Etudiant"
-#: models/crfpa.py:166
+#: models/crfpa.py:167
msgid "Students"
msgstr "Etudiants"
-#: models/crfpa.py:174 templates/telemeta/profile_detail.html:77
+#: models/crfpa.py:175 templates/telemeta/profile_detail.html:77
msgid "Address"
msgstr "Adresse"
-#: models/crfpa.py:175
+#: models/crfpa.py:176
msgid "Postal code"
msgstr "Code postal"
-#: models/crfpa.py:176
+#: models/crfpa.py:177
msgid "City"
msgstr "Ville"
-#: models/crfpa.py:177
+#: models/crfpa.py:178
msgid "Country"
msgstr "Pays"
-#: models/crfpa.py:178 templates/telemeta/profile_detail.html:88
+#: models/crfpa.py:179 templates/telemeta/profile_detail.html:88
msgid "Language"
msgstr "Langue"
-#: models/crfpa.py:179 templates/telemeta/profile_detail.html:78
+#: models/crfpa.py:180 templates/telemeta/profile_detail.html:78
msgid "Telephone"
msgstr "Téléphone"
-#: models/crfpa.py:180
+#: models/crfpa.py:181
msgid "Expiration_date"
msgstr "Date d'expiration"
-#: models/crfpa.py:181
+#: models/crfpa.py:182
msgid "Password initialized"
msgstr "Mot de passe initialisé"
-#: models/crfpa.py:182 templates/telemeta/profile_detail.html:79
+#: models/crfpa.py:183 templates/telemeta/profile_detail.html:79
msgid "WiFi login"
msgstr ""
-#: models/crfpa.py:183
+#: models/crfpa.py:184
msgid "WiFi pass"
msgstr ""
-#: models/crfpa.py:187
+#: models/crfpa.py:188
msgid "profile"
msgstr "profil"
-#: models/crfpa.py:198 models/crfpa.py:215 models/crfpa.py:228
+#: models/crfpa.py:199 models/crfpa.py:216 models/crfpa.py:229
msgid "student"
msgstr "étudiant"
-#: models/crfpa.py:199 models/crfpa.py:216 models/crfpa.py:229
+#: models/crfpa.py:200 models/crfpa.py:217 models/crfpa.py:230
msgid "amount"
msgstr "montant"
-#: models/crfpa.py:200
+#: models/crfpa.py:201
msgid "month"
msgstr "mois"
-#: models/crfpa.py:201
+#: models/crfpa.py:202
msgid "collected"
msgstr "encaissé"
-#: models/crfpa.py:202
+#: models/crfpa.py:203
msgid "date created"
msgstr "date de création"
-#: models/crfpa.py:207
+#: models/crfpa.py:208
msgid "Payment"
msgstr "Paiement"
-#: models/crfpa.py:208
+#: models/crfpa.py:209
msgid "Payments"
msgstr "Paiements"
-#: models/crfpa.py:221
+#: models/crfpa.py:222
msgid "Discount"
msgstr "Réduction"
-#: models/crfpa.py:222
+#: models/crfpa.py:223
msgid "Discounts"
msgstr "Réductions"
-#: models/crfpa.py:234 models/crfpa.py:235
+#: models/crfpa.py:235 models/crfpa.py:236
msgid "Optional fees"
msgstr "Frais optionnels"
#: templates/registration/password_reset_confirm.html:3
msgid "Confirm password reset"
-msgstr "Conformation de la réinitialisation du mot de passe"
+msgstr "Confirmation de la réinitialisation du mot de passe"
#: templates/registration/password_reset_confirm.html:5
msgid "Enter your new password below to reset your password:"
--- /dev/null
+from optparse import make_option
+from django.conf import settings
+from django.core.management.base import BaseCommand, CommandError
+from django.contrib.auth.models import User
+from django.contrib.auth.forms import PasswordResetForm
+from django.contrib.auth.tokens import default_token_generator
+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 telemeta.models import *
+from telemeta.util.unaccent import unaccent
+from teleforma.models import *
+import logging
+from postman import *
+
+
+class Logger:
+ """A logging object"""
+
+ def __init__(self, file):
+ self.logger = logging.getLogger('teleforma')
+ self.hdlr = logging.FileHandler(file)
+ self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
+ self.hdlr.setFormatter(self.formatter)
+ self.logger.addHandler(self.hdlr)
+ self.logger.setLevel(logging.INFO)
+
+
+class Command(BaseCommand):
+ help = "Send an email to new subscribed student"
+ language_code = 'fr_FR'
+
+ def email(self, student):
+ site = Site.objects.get_current()
+ ctx_dict = {'site': site, 'organization': settings.TELEMETA_ORGANIZATION, 'usr': user}
+ subject_template = 'teleforma/messages/email_inscr_sujet.txt'
+ if student.platform_only:
+ message_template = 'teleforma/messages/email_inscr_internautes.txt'
+ else:
+ message_template = 'teleforma/messages/email_inscr_presentiels.txt'
+ subject = render_to_string(self.subject_template, ctx_dict)
+ subject = ''.join(subject.splitlines())
+ message = render_to_string(self.message_template, ctx_dict)
+ send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [student.user.email], fail_silently=False)
+
+ def handle(self, *args, **options):
+ log_file = args[-1]
+ logger = Logger(log_file)
+ logger.logger.info('########### Processing #############')
+
+ students = Student.objects.all()
+ translation.activate(self.language_code)
+
+ for student in students:
+ if student.is_subscribed and not student.confirmation_sent and not student.user.is_active and student.user.email:
+ self.email(student)
+ student.confirmation_sent = True
+ student.save()
+ logger.logger.info('email send : ' + student.user.username)
+
+ logger.logger.info('############## Done #################')
\ No newline at end of file
self.gf('telemeta.models.core.FloatField')(default=0, blank=True),
keep_default=False)
- # Adding field 'Student.subscribed'
- db.add_column('teleforma_student', 'subscribed',
+ # Adding field 'Student.is_subscribed'
+ db.add_column('teleforma_student', 'is_subscribed',
+ self.gf('telemeta.models.core.BooleanField')(default=False),
+ keep_default=False)
+
+ # Adding field 'Student.confirmation_sent'
+ db.add_column('teleforma_student', 'confirmation_sent',
self.gf('telemeta.models.core.BooleanField')(default=False),
keep_default=False)
# Deleting field 'Student.subscription_fees'
db.delete_column('teleforma_student', 'subscription_fees')
- # Deleting field 'Student.subscribed'
- db.delete_column('teleforma_student', 'subscribed')
+ # Deleting field 'Student.is_subscribed'
+ db.delete_column('teleforma_student', 'is_subscribed')
+
+ # Deleting field 'Student.confirmation_sent'
+ db.delete_column('teleforma_student', 'confirmation_sent')
models = {
'teleforma.student': {
'Meta': {'ordering': "['user__last_name']", 'object_name': 'Student'},
'application_fees': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
+ 'confirmation_sent': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'iej': ('telemeta.models.core.ForeignKey', [], {'related_name': "'student'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['teleforma.IEJ']", 'blank': 'True', 'null': 'True'}),
+ 'is_subscribed': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
'options': ('telemeta.models.core.ForeignKey', [], {'default': 'None', 'related_name': "'options'", 'null': 'True', 'blank': 'True', 'to': "orm['teleforma.Course']"}),
'oral_1': ('telemeta.models.core.ForeignKey', [], {'default': 'None', 'related_name': "'oral_1'", 'null': 'True', 'blank': 'True', 'to': "orm['teleforma.Course']"}),
'oral_2': ('telemeta.models.core.ForeignKey', [], {'default': 'None', 'related_name': "'oral_2'", 'null': 'True', 'blank': 'True', 'to': "orm['teleforma.Course']"}),
'period': ('telemeta.models.core.ForeignKey', [], {'related_name': "'student'", 'on_delete': 'models.SET_NULL', 'default': 'None', 'to': "orm['teleforma.Period']", 'blank': 'True', 'null': 'True'}),
'platform_only': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
'procedure': ('telemeta.models.core.ForeignKey', [], {'default': 'None', 'related_name': "'procedure'", 'null': 'True', 'blank': 'True', 'to': "orm['teleforma.Course']"}),
- 'subscribed': ('telemeta.models.core.BooleanField', [], {'default': 'False'}),
'subscription_fees': ('telemeta.models.core.FloatField', [], {'default': '0', 'blank': 'True'}),
'trainings': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'student_trainings'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['teleforma.Training']"}),
'user': ('telemeta.models.core.ForeignKey', [], {'related_name': "'student'", 'unique': 'True', 'to': "orm['auth.User']"}),
application_fees = BooleanField(_('application fees'))
default_application_fees = 40
subscription_fees = FloatField(_('subscription fees'))
- subscribed = BooleanField(_('subscribed'))
+ is_subscribed = BooleanField(_('subscribed'))
+ confirmation_sent = BooleanField(_('confirmation sent'))
def __unicode__(self):
try:
+++ /dev/null
-Bonjour,
-
-Nous avons le plaisir de vous confirmer votre inscription à la formation Estivale e-learning du Pré-Barreau qui se déroulera du 17 juillet au 4 septembre 2015.
-
-Votre emploi du temps ainsi vos identifiants de connexion à la plateforme e-learning vous seront communiqués vers le 15 juillet 2015.
-
-Le vendredi 17 juillet sera consacré à une séance de méthodologie à l’épreuve juridique (2h) et à la note de synthèse (2h) et dès le samedi 18 juillet, vous composerez sur votre première note de synthèse.
-
-Toute votre formation se déroulera via notre plateforme http://e-learning.crfpa.pre-barreau.com/
-
-Nous vous rappelons que vous avez la possibilité de vous rétracter, par lettre recommandée adressée au responsable administratif, dans les 10 jours suivants votre inscription. Passé ce délai, aucune annulation et aucun remboursement ne seront, en revanche, possibles, sauf cas de force majeure dûment justifié.
-Toute participation à un enseignement non retenu par l’étudiant lors de son inscription ouvrira droit pour le Pré-Barreau de lui réclamer le règlement de l’intégralité du prix de la matière considérée, et ce quel que soit le nombre d’heures suivies.
-
-Vous souhaitant bonne réception de ce message, veuillez croire, en nos salutations distinguées.
-
-L’équipe du Pré-Barreau
-Tel : 01 56 81 00 22
-Fax : 01 72 34 92 58
-pre-barreau@pre-barreau.com
-
-Ce message contient des informations confidentielles protégées par le secret professionnel. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir nous en aviser immédiatement et de le supprimer.
-This e-mail may contain information that is privileged or confidential. If you are not the intended recipient, please delete the e-mail and any attachments and notify us immediately.
+++ /dev/null
-Bonjour,
-
-Nous avons le plaisir de vous confirmer votre inscription à la formation Estivale du Pré-Barreau qui se déroulera du 17 juillet au 4 septembre 2015.
-
-Votre emploi du temps personnalisé et vos identifiants de connexion à la plateforme e-learning vous seront communiqués vers le 15 juillet 2015.
-
-Le vendredi 17 juillet sera consacré à une séance de méthodologie à l’épreuve juridique (2h) et à la note de synthèse (2h) et dès le samedi 18 juillet, vous composerez sur votre première note de synthèse.
-
-Vous recevrez mi-juin une convocation vous invitant à venir récupérer vos fascicules dans nos locaux.
-
-Toute votre formation se déroulera dans les locaux de l’ICP – 21 rue d’Assas – 75006 Paris (métro Saint- Sulpice).
-
-Nous vous rappelons que vous avez la possibilité de vous rétracter, par lettre recommandée adressée au responsable administratif, dans les 10 jours suivants votre inscription. Passé ce délai, aucune annulation et aucun remboursement ne seront, en revanche, possibles, sauf cas de force majeure dûment justifié.
-Toute participation à un enseignement non retenu par l’étudiant lors de son inscription ouvrira droit pour le Pré-Barreau de lui réclamer le règlement de l’intégralité du prix de la matière considérée, et ce quel que soit le nombre d’heures suivies.
-
-Vous souhaitant bonne réception de ce message, veuillez croire, en nos salutations distinguées.
-
-L’équipe du Pré-Barreau
-Tel : 01 56 81 00 22
-Fax : 01 72 34 92 58
-pre-barreau@pre-barreau.com
-
-Ce message contient des informations confidentielles protégées par le secret professionnel. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir nous en aviser immédiatement et de le supprimer.
-This e-mail may contain information that is privileged or confidential. If you are not the intended recipient, please delete the e-mail and any attachments and notify us immediately.
--- /dev/null
+Bonjour,
+
+Nous avons le plaisir de vous confirmer votre inscription à la formation Estivale e-learning du Pré-Barreau qui se déroulera du 17 juillet au 4 septembre 2015.
+
+Votre emploi du temps ainsi vos identifiants de connexion à la plateforme e-learning vous seront communiqués vers le 15 juillet 2015.
+
+Le vendredi 17 juillet sera consacré à une séance de méthodologie à l’épreuve juridique (2h) et à la note de synthèse (2h) et dès le samedi 18 juillet, vous composerez sur votre première note de synthèse.
+
+Toute votre formation se déroulera via notre plateforme http://e-learning.crfpa.pre-barreau.com/
+
+Nous vous rappelons que vous avez la possibilité de vous rétracter, par lettre recommandée adressée au responsable administratif, dans les 10 jours suivants votre inscription. Passé ce délai, aucune annulation et aucun remboursement ne seront, en revanche, possibles, sauf cas de force majeure dûment justifié.
+Toute participation à un enseignement non retenu par l’étudiant lors de son inscription ouvrira droit pour le Pré-Barreau de lui réclamer le règlement de l’intégralité du prix de la matière considérée, et ce quel que soit le nombre d’heures suivies.
+
+Vous souhaitant bonne réception de ce message, veuillez croire, en nos salutations distinguées.
+
+L’équipe du Pré-Barreau
+Tel : 01 56 81 00 22
+Fax : 01 72 34 92 58
+pre-barreau@pre-barreau.com
+
+Ce message contient des informations confidentielles protégées par le secret professionnel. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir nous en aviser immédiatement et de le supprimer.
+This e-mail may contain information that is privileged or confidential. If you are not the intended recipient, please delete the e-mail and any attachments and notify us immediately.
--- /dev/null
+Bonjour,
+
+Nous avons le plaisir de vous confirmer votre inscription à la formation Estivale du Pré-Barreau qui se déroulera du 17 juillet au 4 septembre 2015.
+
+Votre emploi du temps personnalisé et vos identifiants de connexion à la plateforme e-learning vous seront communiqués vers le 15 juillet 2015.
+
+Le vendredi 17 juillet sera consacré à une séance de méthodologie à l’épreuve juridique (2h) et à la note de synthèse (2h) et dès le samedi 18 juillet, vous composerez sur votre première note de synthèse.
+
+Vous recevrez mi-juin une convocation vous invitant à venir récupérer vos fascicules dans nos locaux.
+
+Toute votre formation se déroulera dans les locaux de l’ICP – 21 rue d’Assas – 75006 Paris (métro Saint- Sulpice).
+
+Nous vous rappelons que vous avez la possibilité de vous rétracter, par lettre recommandée adressée au responsable administratif, dans les 10 jours suivants votre inscription. Passé ce délai, aucune annulation et aucun remboursement ne seront, en revanche, possibles, sauf cas de force majeure dûment justifié.
+Toute participation à un enseignement non retenu par l’étudiant lors de son inscription ouvrira droit pour le Pré-Barreau de lui réclamer le règlement de l’intégralité du prix de la matière considérée, et ce quel que soit le nombre d’heures suivies.
+
+Vous souhaitant bonne réception de ce message, veuillez croire, en nos salutations distinguées.
+
+L’équipe du Pré-Barreau
+Tel : 01 56 81 00 22
+Fax : 01 72 34 92 58
+pre-barreau@pre-barreau.com
+
+Ce message contient des informations confidentielles protégées par le secret professionnel. Au cas où il ne vous serait pas destiné, nous vous remercions de bien vouloir nous en aviser immédiatement et de le supprimer.
+This e-mail may contain information that is privileged or confidential. If you are not the intended recipient, please delete the e-mail and any attachments and notify us immediately.
--- /dev/null
+Validation de votre inscription au CRFPA du Pré-Barreau