# -*- coding: utf8 -*- from pyramid.response import Response from pyramid.view import ( view_config, ) from pyramid_mailer import get_mailer from pyramid_mailer.message import Message, Attachment from time import sleep from datetime import * from ..models.utils import * @view_config(route_name='batch_nuit') def batch_nuit(request): """ Traitement est lancé chaque nuit, sur le serveur du site web, par un cron job : - Execute cron job as : root - Command : wget http://localhost:9180/batch_nuit/JonSn0w - When to execute : 02:00 each day Par sécurité, ce view ne peut être appelé qu'avec un paramètre secret 'JonSn0w' """ # contrôle : paramètre correct ? non, terminer par = request.matchdict['param'] if par != 'JonSn0w': return Response('Erreur : paramètre incorrect') # ----- effacer le log truncate_log(request) # ----- PURGE des dosiers obsolètes # todo # ----- RAPPELS DES RENDEZ-VOUS update_rappels(request) # attendre 5 secondes sleep(5) # ----- envoyer les rappels notifier_rappels(request) # ----- ENVOI RAPPORTS di traitement email_rapport(request) return Response('Batch nuit terminé OK') def notifier_rappels(request): # log : Début ENVOI emails insert_log(request, 'RAPPELS','- Début ENVOI emails') # lire les rappels non encore envoyés rappels = get_email_rappels(request) nbLus = 0 nbEmailVide = 0 nbEnvoyes = 0 for item in rappels: nbLus += 1 if len(item.c_email) == 0 : nbEmailVide += 1 insert_log(request, 'RAPPELS', '--> email vide : %s-%s - %s %s' % (item.societe, item.nochantier, item.c_qualite, item.c_nom)) else: # RDV ayant une heure date_heure = item.rdv_date.strftime('%d/%m/%Y - %H:%M') szBody = """
Bonjour %s %s,
L’entreprise %s vous rappelle votre prochain rendez-vous, pris d'un commun accord
le %s
%s
%s
%s
En cas d'empêchement, veuillez nous contacter au %s
Veuillez agréer nos sincères salutations.
L'entreprise %s
""" % (item.c_qualite, item.c_nom, item.nom_societe, date_heure, item.c_adr, item.c_adr2, item.c_ville, item.tel, item.nom_societe) email_rappels(request, "RAPPEL : rendez-vous le " + date_heure, szBody, [item.c_email,], item.societe) nbEnvoyes += 1 # attendre 6 secondes, envoi de 10 emails par minute sleep(6) # marquer le rdv comme envoyé ou traité update_email_rappels(request, item.no_id) if nbLus > 0: pc = str(round(nbEnvoyes * 100 / nbLus, 0)) + ' %' else: pc = '0 %' insert_log(request, 'RAPPELS', "- Fin ENVOI emails : %s rdv lus, %s rappels envoyés, soit %s envoyés." % (str(nbLus), str(nbEnvoyes), pc)) return def email_rappels(request, objet, corps, destinataire, societe): # lire la societe soc = get_societes(request, societe) if soc: expediteur = soc.email_from else: expediteur = "peinture@entreprise-dumas.com" send_mail(request, expediteur, destinataire, "[Ent. Dumas] " + objet, corps) return def email_rapport(request): NOW = datetime.now() corps = "=============================================
" corps += "Rapport du traitement de nuit du " + NOW.strftime('%d/%m/%Y - %H:%M') + "
" corps += "=============================================
"
# Lire le fichier log
items = get_log(request)
for item in items:
corps += " - " + item.date.strftime('%d/%m/%Y - %H:%M') + " - " + item.proc + " : " + item.msg + "
"
corps += "
=============================================
" expediteur = request.registry.settings['mondumas.admin_email'] destinataire = ["phuoc@caotek.fr","peinture@entreprise-dumas.com"] send_mail(request, expediteur, destinataire, "[DEV_NUIT] Rapport des traitements de nuit", corps) return def send_mail(request, expediteur, destinataires, objet, corps): body = """ %s """ % (corps) message = Message(subject=objet, sender=expediteur, recipients=destinataires, html=body) mailer = get_mailer(request) # import pdb;pdb.set_trace() try: mailer.send_immediately(message) except Exception as e: # Just print(e) is cleaner and more likely what you want, # but if you insist on printing message specifically whenever possible... if hasattr(e, 'message'): msg = e.message else: msg = e # logguer l'erreur insert_log(request, 'RAPPELS', "- MAILER ERROR : %s TO %s - %s" % (expediteur, destinataires, msg))