Notification de fin d'impression aux adhérent. (mail)

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.
This commit is contained in:
Gabriel Détraz 2014-10-09 21:47:51 +02:00 committed by Daniel STAN
parent 040efebc00
commit 69efee5ce2
6 changed files with 141 additions and 0 deletions

View file

@ -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)

View file

@ -0,0 +1 @@
Les câbleurs du Crans <cableurs@crans.org>

View file

@ -0,0 +1 @@
Notification de fin d'impression

View file

@ -0,0 +1 @@
{{To}}

View file

@ -0,0 +1 @@
{{ mailer }}

View file

@ -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