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