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:
parent
040efebc00
commit
69efee5ce2
6 changed files with 141 additions and 0 deletions
125
gestion/mail/mail_impression_ok.py
Executable file
125
gestion/mail/mail_impression_ok.py
Executable 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)
|
1
gestion/mail/template/mail_impression_ok/From/fr
Normal file
1
gestion/mail/template/mail_impression_ok/From/fr
Normal file
|
@ -0,0 +1 @@
|
|||
Les câbleurs du Crans <cableurs@crans.org>
|
1
gestion/mail/template/mail_impression_ok/Subject/fr
Normal file
1
gestion/mail/template/mail_impression_ok/Subject/fr
Normal file
|
@ -0,0 +1 @@
|
|||
Notification de fin d'impression
|
1
gestion/mail/template/mail_impression_ok/To/fr
Normal file
1
gestion/mail/template/mail_impression_ok/To/fr
Normal file
|
@ -0,0 +1 @@
|
|||
{{To}}
|
1
gestion/mail/template/mail_impression_ok/X-Mailer/fr
Normal file
1
gestion/mail/template/mail_impression_ok/X-Mailer/fr
Normal file
|
@ -0,0 +1 @@
|
|||
{{ mailer }}
|
12
gestion/mail/template/mail_impression_ok/body/fr
Normal file
12
gestion/mail/template/mail_impression_ok/body/fr
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue