diff --git a/gestion/mail/mail_impression_ok.py b/gestion/mail/mail_impression_ok.py index a1c34885..628dcb1c 100755 --- a/gestion/mail/mail_impression_ok.py +++ b/gestion/mail/mail_impression_ok.py @@ -1,5 +1,11 @@ #!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- +"""Envoi de mail automatique pour signaler la fin d'impression à un +adhérent. Le script se connecte à l'interface d'impression pour récupérer +la liste des dernières tâches imprimées. +Ce script est lancé par un cron toutes les dix minutes sur zamok. Pour éviter +de notifier plusieurs fois de la même fin d'impression, on ne balaie dans +la liste que le dernier intervalle (bornes entières) de dix minutes""" import BeautifulSoup import sys @@ -7,7 +13,6 @@ import requests import re import datetime import time - import smtplib from gestion.affich_tools import cprint @@ -28,42 +33,47 @@ doc = BeautifulSoup.BeautifulSoup(req.text) con = shortcuts.lc_ldap_readonly() jobs = doc.findAll(attrs={'class': 'PrintJobTicket'}) + +# Dernier intervalle de dix minutes, en bornes entières, qui vient de se +# terminer 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) + +success=dict() +clubs=dict() for job in jobs: + # Fin de parsing 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 + + # Hors intervalle: on drope + if date < debut or date >= fin: + continue + if status != "Success": + # TODO prévenir les imprimeurs si une impression a échoué + continue + split = uid.split(u':') + if len(split) < 3: + continue + # 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 name: + #Seuls les clubs ont un @ dans leur alias, donc boucle + # dédiée au clubs + [name, club] = name.split(u'@', 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) #Section consacrée à l'envoi : partie 1 pour les adh, partie 2 pour les clubs #To = 'detraz@crans.org' diff --git a/gestion/mail/template/mail_impression_ok/From/fr b/gestion/mail/template/mail_impression_ok/From/fr index d881fd7f..e7ffb439 100644 --- a/gestion/mail/template/mail_impression_ok/From/fr +++ b/gestion/mail/template/mail_impression_ok/From/fr @@ -1 +1 @@ -Les câbleurs du Crans +Les membres actifs du Crans diff --git a/gestion/mail/template/mail_impression_ok/Subject/fr b/gestion/mail/template/mail_impression_ok/Subject/fr index a7b8f25e..ecd57c84 100644 --- a/gestion/mail/template/mail_impression_ok/Subject/fr +++ b/gestion/mail/template/mail_impression_ok/Subject/fr @@ -1 +1 @@ -Notification de fin d'impression +Crans: Notification de fin d'impression diff --git a/gestion/mail/template/mail_impression_ok/body/fr b/gestion/mail/template/mail_impression_ok/body/fr index cb6d5094..cde5d1d3 100644 --- a/gestion/mail/template/mail_impression_ok/body/fr +++ b/gestion/mail/template/mail_impression_ok/body/fr @@ -1,12 +1,14 @@ 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}} +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, +À bientôt ! -- -Les câbleurs +Les membres actifs de l'association