From 69efee5ce23c4e35cae01b409caaf17b4ba2ae9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20D=C3=A9traz?= Date: Thu, 9 Oct 2014 21:47:51 +0200 Subject: [PATCH] =?UTF-8?q?Notification=20de=20fin=20d'impression=20aux=20?= =?UTF-8?q?adh=C3=A9rent.=20(mail)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le script donne (par mail) les taches imprimées avec succès par l'adhérent (ou club) . Il donne aussi la liste des digicodes disponibles de l'adhérent et lui en génère un nouveau au besoin. --- gestion/mail/mail_impression_ok.py | 125 ++++++++++++++++++ .../mail/template/mail_impression_ok/From/fr | 1 + .../template/mail_impression_ok/Subject/fr | 1 + .../mail/template/mail_impression_ok/To/fr | 1 + .../template/mail_impression_ok/X-Mailer/fr | 1 + .../mail/template/mail_impression_ok/body/fr | 12 ++ 6 files changed, 141 insertions(+) create mode 100755 gestion/mail/mail_impression_ok.py create mode 100644 gestion/mail/template/mail_impression_ok/From/fr create mode 100644 gestion/mail/template/mail_impression_ok/Subject/fr create mode 100644 gestion/mail/template/mail_impression_ok/To/fr create mode 100644 gestion/mail/template/mail_impression_ok/X-Mailer/fr create mode 100644 gestion/mail/template/mail_impression_ok/body/fr diff --git a/gestion/mail/mail_impression_ok.py b/gestion/mail/mail_impression_ok.py new file mode 100755 index 00000000..5ec55c25 --- /dev/null +++ b/gestion/mail/mail_impression_ok.py @@ -0,0 +1,125 @@ +#!/bin/bash /usr/scripts/python.sh +# -*- coding: utf-8 -*- + +import BeautifulSoup +import requests +import re +import datetime +import time +import impression.digicode as digicode +from lc_ldap import shortcuts +import lc_ldap.crans_utils as crans_utils +import gestion.config as config +import gestion.affichage as affichage + +import sys +import smtplib +from gestion import config +from gestion.affich_tools import cprint +from gestion import mail +import lc_ldap.shortcuts +from utils.sendmail import actually_sendmail + +URL_JOBLIST = 'https://imprimante.adm.crans.org/hp/device/JobLogReport/Index' +CA = '/etc/ssl/certs/cacert.org.pem' + +RE_JOB_NAME = re.compile('JobLogName_') +RE_JOB_STATUS = re.compile('JobLogStatus_') +RE_JOB_DATE = re.compile('JobLogDate_') + +req = requests.get(URL_JOBLIST, verify=CA) +doc = BeautifulSoup.BeautifulSoup(req.text) +con = shortcuts.lc_ldap_readonly() + +jobs = doc.findAll(attrs={'class': 'PrintJobTicket'}) +now = datetime.datetime.now() +#print now +success=dict() +clubs=dict() +fin = now.replace(second=0, minute=(now.minute/10)*10, microsecond=0) +debut = fin - datetime.timedelta(minutes=10) +for job in jobs: + uid = job.find(attrs={'id': RE_JOB_NAME}).text + status = job.find(attrs={'id': RE_JOB_STATUS}).text + date = job.find(attrs={'id': RE_JOB_DATE}).text + date = datetime.datetime.strptime(date, '%Y/%m/%d %H:%M:%S') + if date > debut and date <= fin: + if status == "Success": + split = uid.split(u':') + if len(split) >= 3: + #print repr((uid, status, date)) + # Boucle qui s'exécute normalement si la typographie dans + # les logs d'impression est repectée (:) (sinon c'est un + # impression manuel donc drop) + nb = split[0] + name = split[1] + task = u':'.join(split[2:]) + if u'@' in split[1]: + #Seuls les clubs ont un @ dans leur alias, donc boucle + # dédiée au clubs + split2 = name.split(u'@', 1) + name = split2[0] + club = split2[1] + if club not in clubs: + clubs[club] = {'task': []} + clubs[club]['task'].append(task) + if name not in success: + success[name] = {'task': []} + success[name]['task'].append(task) + #print repr((name, task)) + #print name + +#Section consacrée à l'envoi : partie 1 pour les adh, partie 2 pour les clubs +#To = 'detraz@crans.org' +From = 'impression@crans.org' +e = 0 +a = 0 + +for name in success: + ad = con.search(u'(uid=%s)' % name) + if ad <> []: + a = a + 1 + adh = ad[0] + To = name + u'@crans.org' + tname = unicode(adh['prenom'][0]) + " " + unicode(adh['nom'][0]) + codes = [x[0] + u'#' for x in digicode.list_code(name)] + if not codes: + codes = [digicode.gen_code(name) + u'#'] + #cprint(u"Envoi du mail à %s" % To) + mailtxt=mail.generate('mail_impression_ok', { + 'To': To, + 'From': From, + 'tname': tname, + 'taches': u', '.join(success[name]['task']), + 'codes': u', '.join(codes) + }) + #print mailtxt.as_string() + actually_sendmail(From, (To,), mailtxt) + else: + e = e+1 + +for club in clubs: + a = a + 1 + tname = club + To = club + u'@crans.org' + codes = [x[0] + u'#' for x in digicode.list_code(club)] + if not codes: + codes = [digicode.gen_code(club) + u'#'] + #cprint(u"Envoi du mail à %s" % To) + mailtxt=mail.generate('mail_impression_ok', { + 'To': To, + 'From': From, + 'tname': tname, + 'taches': u', '.join(clubs[club]['task']), + 'codes': u', '.join(codes), + }) + #print mailtxt.as_string() + actually_sendmail(From, (To,), mailtxt) + +if e>0: + print "Des problèmes sont survenus entre %s et %s" % (debut, fin) + print "Nombre total de mails envoyés :" + print a + print "Nombre de mails non envoyés faute de résultats LDAP :" + print e +#print len(success) diff --git a/gestion/mail/template/mail_impression_ok/From/fr b/gestion/mail/template/mail_impression_ok/From/fr new file mode 100644 index 00000000..d881fd7f --- /dev/null +++ b/gestion/mail/template/mail_impression_ok/From/fr @@ -0,0 +1 @@ +Les câbleurs du Crans diff --git a/gestion/mail/template/mail_impression_ok/Subject/fr b/gestion/mail/template/mail_impression_ok/Subject/fr new file mode 100644 index 00000000..a7b8f25e --- /dev/null +++ b/gestion/mail/template/mail_impression_ok/Subject/fr @@ -0,0 +1 @@ +Notification de fin d'impression diff --git a/gestion/mail/template/mail_impression_ok/To/fr b/gestion/mail/template/mail_impression_ok/To/fr new file mode 100644 index 00000000..38476730 --- /dev/null +++ b/gestion/mail/template/mail_impression_ok/To/fr @@ -0,0 +1 @@ +{{To}} diff --git a/gestion/mail/template/mail_impression_ok/X-Mailer/fr b/gestion/mail/template/mail_impression_ok/X-Mailer/fr new file mode 100644 index 00000000..f5d9c869 --- /dev/null +++ b/gestion/mail/template/mail_impression_ok/X-Mailer/fr @@ -0,0 +1 @@ +{{ mailer }} diff --git a/gestion/mail/template/mail_impression_ok/body/fr b/gestion/mail/template/mail_impression_ok/body/fr new file mode 100644 index 00000000..cb6d5094 --- /dev/null +++ b/gestion/mail/template/mail_impression_ok/body/fr @@ -0,0 +1,12 @@ +Bonjour {{tname}}, + +La ou les impressions que tu avais lancées sous le nom de {{taches}} se sont bien déroulées. +Tu peux te rendre au 4J afin de récupérer tes documents. Le code nécessaire pour rentrer dans le batiment J est : B7806 . +Voici le ou les codes pour entrer dans le local dont tu disposes actuellement : {{codes}} + +Tu peux nous contacter via impression@lists.crans.org. + +Cordialement, + +-- +Les câbleurs