[scodoc-devel] [SVN] Scolar : [1603] Envois de mails ou bulletins via adresse institutionnelle ou personnelle

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Sam 28 Jan 21:15:46 CET 2017


Une pièce jointe HTML a été nettoyée...
URL: https://listes.univ-paris13.fr/pipermail/scodoc-devel/attachments/20170128/1274cfb2/attachment.htm 
-------------- section suivante --------------
Modified: branches/ScoDoc7/ZNotes.py
===================================================================
--- branches/ScoDoc7/ZNotes.py	2017-01-28 17:51:06 UTC (rev 1602)
+++ branches/ScoDoc7/ZNotes.py	2017-01-28 20:15:46 UTC (rev 1603)
@@ -2225,8 +2225,11 @@
     security.declareProtected(ScoView, 'formsemestre_bulletins_mailetuds')
     def formsemestre_bulletins_mailetuds(self, formsemestre_id, REQUEST,
                                          version='long',
-                                         dialog_confirmed=False ):
+                                         dialog_confirmed=False,
+                                         prefer_mail_perso=0
+                                         ):
         "envoi a chaque etudiant (inscrit et ayant un mail) son bulletin"
+        prefer_mail_perso = int(prefer_mail_perso)
         sem = sco_formsemestre.get_formsemestre(self, formsemestre_id)
         nt = self._getNotesCache().get_NotesTable(self, formsemestre_id) #> get_etudids
         etudids = nt.get_etudids()
@@ -2239,14 +2242,15 @@
                 "<h2>Envoyer les %d bulletins par e-mail aux étudiants ?" % len(etudids),
                 dest_url="", REQUEST=REQUEST,
                 cancel_url="formsemestre_status?formsemestre_id=%s" % formsemestre_id,
-                parameters={'version':version, 'formsemestre_id' : formsemestre_id})
-                                      
+        parameters={'version':version, 'formsemestre_id' : formsemestre_id, 'prefer_mail_perso' : prefer_mail_perso})
+        
         # Make each bulletin
         nb_send = 0
         for etudid in etudids:
             h, i = sco_bulletins.do_formsemestre_bulletinetud(
                 self, formsemestre_id, etudid,
-                version=version, 
+                version=version,
+                prefer_mail_perso=prefer_mail_perso,
                 format = 'pdfmail', nohtml=True, REQUEST=REQUEST )
             if h:
                 nb_send += 1

Modified: branches/ScoDoc7/sco_bulletins.py
===================================================================
--- branches/ScoDoc7/sco_bulletins.py	2017-01-28 17:51:06 UTC (rev 1602)
+++ branches/ScoDoc7/sco_bulletins.py	2017-01-28 20:15:46 UTC (rev 1603)
@@ -554,6 +554,7 @@
         format='html', version='long',
         xml_with_decisions=False,
         force_publishing=False, # force publication meme si semestre non publie sur "portail"
+        prefer_mail_perso=False,
         REQUEST=None):
     "page bulletin de notes"
     try:
@@ -573,6 +574,7 @@
                                            format=format, version=version,
                                            xml_with_decisions=xml_with_decisions,
                                            force_publishing=force_publishing,
+                                           prefer_mail_perso=prefer_mail_perso,
                                            REQUEST=REQUEST)[0])
     
     if format == 'html' or format == 'pdfmail':
@@ -614,7 +616,8 @@
                                  REQUEST=None,
                                  nohtml=False,
                                  xml_with_decisions=False, # force decisions dans XML
-                                 force_publishing=False # force publication meme si semestre non publie sur "portail"
+                                 force_publishing=False, # force publication meme si semestre non publie sur "portail"
+                                 prefer_mail_perso=False # mails envoyes sur adresse perso si non vide
                                  ):
     """Génère le bulletin au format demandé.
     Retourne: (bul, filigranne)
@@ -665,7 +668,12 @@
         pdfdata, filename = sco_bulletins_generator.make_formsemestre_bulletinetud(
             context, I, version=version, format='pdf', REQUEST=REQUEST)
 
-        if not etud['email_default']:
+        if prefer_mail_perso:
+            recipient_addr = etud.get('emailperso', '') or etud.get('email', '')
+        else:
+            recipient_addr = etud['email_default']
+        
+        if not recipient_addr:
             if nohtml:
                 h = '' # permet de compter les non-envois
             else:
@@ -673,8 +681,8 @@
                      % etud['nomprenom']) + htm
             return h, I['filigranne']
         #
-        mail_bulletin(context, formsemestre_id, I, pdfdata, filename)
-        emaillink = '<a class="stdlink" href="mailto:%s">%s</a>'%(etud['email_default'], etud['email_default'])        
+        mail_bulletin(context, formsemestre_id, I, pdfdata, filename, recipient_addr)
+        emaillink = '<a class="stdlink" href="mailto:%s">%s</a>' % (recipient_addr, recipient_addr)        
         return ('<div class="head_message">Message mail envoyé à %s</div>'
                 % (emaillink)) + htm, I['filigranne']
     
@@ -682,7 +690,7 @@
         raise ValueError("do_formsemestre_bulletinetud: invalid format (%s)" % format)
 
 
-def mail_bulletin(context, formsemestre_id, I, pdfdata, filename):
+def mail_bulletin(context, formsemestre_id, I, pdfdata, filename, recipient_addr):
     """Send bulletin by email to etud
     If bul_mail_list_abs pref is true, put list of absences in mail body (text).
     """
@@ -703,7 +711,7 @@
     
     msg = MIMEMultipart()
     subj = Header( 'Relevé de notes de %s' % etud['nomprenom'],  SCO_ENCODING )
-    recipients = [ etud['email_default'] ] 
+    recipients = [ recipient_addr ] 
     msg['Subject'] = subj
     msg['From'] = context.get_preference('email_from_addr',formsemestre_id)
     msg['To'] = ' ,'.join(recipients)
@@ -774,10 +782,14 @@
         { 'title' : 'Version papier (pdf, format "%s")' % sco_bulletins_generator.bulletin_get_class_name_displayed(context, formsemestre_id),
           'url' : url + '?formsemestre_id=%s&amp;etudid=%s&amp;format=pdf&amp;version=%s' % (formsemestre_id,etudid,version),
           },
-        { 'title' : "Envoi par mail à l'étudiant",
+        { 'title' : "Envoi par mail à %s" % etud['email'],
           'url' : url + '?formsemestre_id=%s&amp;etudid=%s&amp;format=pdfmail&amp;version=%s' % (formsemestre_id,etudid,version),
-          'enabled' : etud['email_default'] and can_send_bulletin_by_mail(context, formsemestre_id, REQUEST) # possible slt si on a un mail...
+          'enabled' : etud['email'] and can_send_bulletin_by_mail(context, formsemestre_id, REQUEST) # possible slt si on a un mail...
           },
+        { 'title' : "Envoi par mail à %s (adr. personnelle)" % etud['emailperso'],
+          'url' : url + '?formsemestre_id=%s&amp;etudid=%s&amp;format=pdfmail&amp;version=%s&amp;prefer_mail_perso=1' % (formsemestre_id,etudid,version),
+          'enabled' : etud['emailperso'] and can_send_bulletin_by_mail(context, formsemestre_id, REQUEST) # possible slt si on a un mail...
+          },
         { 'title' : 'Version XML',
           'url' : url + '?formsemestre_id=%s&amp;etudid=%s&amp;format=xml&amp;version=%s' % (formsemestre_id,etudid,version),
           },
@@ -821,7 +833,7 @@
 
 
 def formsemestre_bulletins_choice(context, REQUEST, formsemestre_id, 
-                                  title='', explanation=''):
+                                  title='', explanation='', choose_mail=False):
     """Choix d'une version de bulletin
     """
     sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
@@ -829,13 +841,19 @@
          """
       <form name="f" method="GET" action="%s">
       <input type="hidden" name="formsemestre_id" value="%s"></input>
-      <select name="version" class="noprint">""" % (REQUEST.URL0,formsemestre_id),
-         ]
+      """ % (REQUEST.URL0,formsemestre_id),
+      ]
+    H.append( """<select name="version" class="noprint">""")        
     for (v,e) in ( ('short', 'Version courte'),
                    ('selectedevals', 'Version intermédiaire'),
                    ('long', 'Version complète')):
         H.append('<option value="%s">%s</option>' % (v, e))
-    H.append("""</select>&nbsp;&nbsp;<input type="submit" value="Générer"/></form><p class="help">""" + explanation + '</p>',)
+    
+    H.append("""</select>&nbsp;&nbsp;<input type="submit" value="Générer"/>""")
+    if choose_mail:
+        H.append( """<div><input type="checkbox" name="prefer_mail_perso" value="1">Utiliser si possible les adresses personnelles</div>""" )
+    
+    H.append( """<p class="help">""" + explanation + """</p>""" )
 
     return '\n'.join(H) + context.sco_footer(REQUEST)
 
@@ -850,11 +868,17 @@
         title='Choisir la version des bulletins à générer',
         explanation = expl_bull)
 
-def formsemestre_bulletins_mailetuds_choice(context, REQUEST, formsemestre_id, version=None, dialog_confirmed=False):
+def formsemestre_bulletins_mailetuds_choice(
+        context, REQUEST, formsemestre_id,
+        version=None,
+        dialog_confirmed=False,
+        prefer_mail_perso=0
+        ):
     """Choix version puis envois classeur bulletins pdf"""
     if version:
-        return context.formsemestre_bulletins_mailetuds(formsemestre_id, REQUEST, version=version, dialog_confirmed=dialog_confirmed)
+        return context.formsemestre_bulletins_mailetuds(formsemestre_id, REQUEST, version=version, dialog_confirmed=dialog_confirmed, prefer_mail_perso=prefer_mail_perso)
     return formsemestre_bulletins_choice(
         context, REQUEST, formsemestre_id, 
         title='Choisir la version des bulletins à envoyer par mail',
-        explanation = 'Chaque étudiant ayant une adresse mail connue de ScoDoc recevra une copie PDF de son bulletin de notes, dans la version choisie.</p><p>' + expl_bull)
+        explanation = 'Chaque étudiant ayant une adresse mail connue de ScoDoc recevra une copie PDF de son bulletin de notes, dans la version choisie.</p><p>' + expl_bull,
+        choose_mail=True)

Modified: branches/ScoDoc7/sco_groups_view.py
===================================================================
--- branches/ScoDoc7/sco_groups_view.py	2017-01-28 17:51:06 UTC (rev 1602)
+++ branches/ScoDoc7/sco_groups_view.py	2017-01-28 20:15:46 UTC (rev 1603)
@@ -450,8 +450,9 @@
                     preferences=context.get_preferences(groups_infos.formsemestre_id) )
     #
     if format == 'html':
-        amail=','.join([x['email_default'] for x in groups_infos.members if x['email_default'] ])
-
+        amail_inst =[x['email'] for x in groups_infos.members if x['email'] and x['etat'] != 'D']
+	amail_perso=[x['emailperso'] for x in groups_infos.members if x['emailperso'] and x['etat'] != 'D' ]
+	
         if len(groups_infos.members):
             if groups_infos.tous_les_etuds_du_sem:
                 htitle = 'Les %d étudiants inscrits' % len(groups_infos.members)
@@ -497,12 +498,21 @@
                 """ ])
         H.append('</h3></form>')
         if groups_infos.members:
-            H.extend([
-                tab.html(),
-                
-                '<ul><li><a class="stdlink" href="mailto:?bcc=%s">Envoyer un mail collectif au groupe de %s</a></li></ul>' 
-                % (amail, groups_infos.groups_titles)
-                ])
+		H.extend([
+			tab.html(),
+			'<ul>',
+			])
+		if amail_inst:
+			H.append(
+				'<li><a class="stdlink" href="mailto:?bcc=%s">Envoyer un mail collectif au groupe de %s (via %d adresses institutionnelles)</a></li>' 
+			% (','.join(amail_inst), groups_infos.groups_titles, len(amail_inst)) )
+		if amail_perso:
+			H.append(
+				'<li><a class="stdlink" href="mailto:?bcc=%s">Envoyer un mail collectif au groupe de %s (via %d adresses personnelles)</a></li>' 
+			% (','.join(amail_perso), groups_infos.groups_titles, len(amail_perso)) )
+		else:
+			H.append('<li><em>Adresses personnelles non renseignées</em></li>')
+		H.append('</ul>')
         
         return ''.join(H) + '</div>'
 


Plus d'informations sur la liste de diffusion scodoc-devel