migrer rappels de rdv vers gestion

This commit is contained in:
2021-01-24 16:10:29 +01:00
parent af2315bad2
commit 793a62cc2d
11 changed files with 181 additions and 252 deletions

View File

@@ -14,8 +14,6 @@ from pyramid.httpexceptions import (
HTTPNotFound,
HTTPForbidden,
)
from pyramid_mailer import get_mailer
from pyramid_mailer.message import Message, Attachment
from datetime import *
from sqlalchemy.exc import DBAPIError
from ..security import groupfinder
@@ -32,6 +30,8 @@ from ..models.dossier import (
get_clients_byName
)
from ..views.utils import *
def to_decimal(x):
import decimal
return decimal.Decimal(str(x))
@@ -100,14 +100,19 @@ def envoyer_mdp(request):
Le lien suivant vous dirigera vers une page où vous pourrez ré-initialiser votre mot de passe d'accès à « gestion.entreprise-dumas.com » :
%s
(Ce lien est valide pendant 168 heures.)
Cordialement,
gestion.entreprise-dumas.com
""" % (request.route_url('redefinir_mdp', lien=lien))
envoyerMail(request, member.email, "Demande de ré-initialisation du mot de passe", body)
# envoyer l'email
expediteur = request.registry.settings['mondumas.admin_email']
send_mail(request, expediteur, member.email, "Demande de ré-initialisation du mot de passe", body)
request.session.flash("Le lien permettant de redéfinir votre mot de passe vous a été envoyé à l'adresse : %s." % member.email, 'success')
return HTTPFound(location=request.route_url('affiche_message', login=login))
else:
@@ -237,26 +242,6 @@ def logout(request):
headers=headers)
def envoyerMail(request, destinataire, objet, corps):
body = """
%s
Cordialement,
gestion.entreprise-dumas.com
""" % (corps)
message = Message(subject="[Ent. Dumas] %s" % objet,
sender=request.registry.settings['mondumas.admin_email'],
body=body)
message.add_recipient(destinataire)
mailer = get_mailer(request)
mailer.send_immediately(message)
@view_config(route_name='affiche_message', renderer='../templates/default/affiche_message.pt')
def affiche_message(request):

View File

@@ -137,8 +137,6 @@ def devis_web(request):
return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodevis=nodevis, nolig='0'))
if 'form.generate' in request.params:
# lire la societe
soc = get_societes(request, societe)
options = {
'page-size': 'A4',

View File

@@ -105,8 +105,6 @@ def connecter_a(request):
else:
return HTTPFound(location="/")
@view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage')
def user_edit(request):
cd_uti = request.matchdict['cd_uti']
@@ -332,46 +330,6 @@ def rdf_cause_edit(request):
'cause': cause,
'message': message,
}
@view_config(route_name='emails_sent', renderer='../templates/parametres/emails_sent.pt', permission='view')
def emails_sent(request):
societes = ['PE','ME','PL','PO','CD']
societe = 'PE'
# prendre en compte les paramètres de saisie
if 'societe' in request.params:
societe = request.params["societe"]
# lire les messages envoyés
items = get_emails_sent(request, societe, 0)
# construire la liste
liste=[]
for item in items:
d = (item.datemaj.strftime('%d/%m/%Y - %H:%M'), item.nodossier, item.nomcli, item.comment, item.nolig, item.usermaj)
liste.append(d)
return {
'page_title': 'Liste des emails envoyés',
'dt_data': json.dumps(liste),
'societe': societe,
'societes': societes,
}
@view_config(route_name='emails_msg', renderer='../templates/parametres/emails_msg.pt', permission='view')
def emails_msg(request):
nolig = request.matchdict['nolig']
# lire le message
item = get_emails_sent(request, '', nolig)
if not item:
request.session.flash("Impossible de lire le message %s" % nolig, 'damger')
return HTTPFound(location=request.route_url('rdf_causes'))
return {
'page_title': item.COMMENT,
'item': item,
@view_config(route_name='text_list', renderer='../templates/parametres/text_list.pt', permission='manage')

View File

@@ -4,6 +4,14 @@ 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):
"""
@@ -11,100 +19,114 @@ def batch_nuit(request):
Par sécurité, ce view ne peut être appelé qu'avec un paramètre secret 'JonSn0w'
"""
# import pdb;pdb.set_trace()
# 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):
szSQL = "insert t_log_nuit (proc,msg) values ('RAPPELS','- Début ENVOI emails');"
ExecQuery(ctDSN_AEM, szSQL)
# log : Début ENVOI emails
insert_log(request, 'RAPPELS','- Début ENVOI emails')
szSQL = "SELECT r.*, e.c_qualite, e.c_nom, e.c_adr, e.c_adr2, e.c_ville, e.c_email, s.tel, s.nom as nom_societe FROM email_rappels r " & _
"INNER JOIN dem_devis e ON r.societe = e.societe AND r.nochantier = e.no_id " & _
"INNER JOIN p_societe s ON r.societe = s.societe " & _
"WHERE ISNULL(envoye_le) ORDER BY no_id;"
GetRecordset(ctDSN_AEM, szSQL, rsRappel)
# lire les rappels non encore envoyés
rappels = get_email_rappels(request)
Do While Not rsRappel.EOF
nbLus = 0
nbEmailVide = 0
nbEnvoyes = 0
for item in rappels:
nbLus += 1
If rsRappel.Fields("c_email").Value.ToString.Length = 0 Then
if len(item.c_email) == 0 :
nbEmailVide += 1
szSQL = "insert t_log_nuit (proc,msg) values ('RAPPELS', '--> email vide : " & rsRappel.Fields("societe").Value & "-" & nq(rsRappel.Fields("nochantier").Value) & _
" - " & rsRappel.Fields("c_qualite").Value & " " & nq(rsRappel.Fields("c_nom").Value) & "');"
ExecQuery(ctDSN_AEM, szSQL)
Else
' RDV ayant une heure
date_heure = Format(rsRappel.Fields("rdv_date").Value, "dd/MM/yyyy à HH:mm")
szBody = "<html><body><p>Bonjour " & nv(rsRappel.Fields("c_qualite").Value) & " " & rsRappel.Fields("c_nom").Value & ",</p>" & _
"<p>Lentreprise " & rsRappel.Fields("nom_societe").Value & " vous rappelle votre prochain rendez-vous, pris d'un commun accord,</p>" & _
"<p>le <b>" & date_heure & "</b><br />" & _
rsRappel.Fields("c_adr").Value & "<br />" &
IIf(rsRappel.Fields("c_adr2").Value.ToString.Length > 0, rsRappel.Fields("c_adr2").Value & "<br />", "") & _
rsRappel.Fields("c_ville").Value & "<br />" & "<p>" & _
"<p>En cas d'empêchement, veuillez nous contacter au <b>" & rsRappel.Fields("tel").Value & "</b>." & _
"<p>Veuillez agréer nos sincères salutations.</p>" & _
"<p>L'entreprise " & rsRappel.Fields("nom_societe").Value & "</p></body></html>"
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 = """
<html><body>
<p>Bonjour %s %s</p>
<p>Lentreprise %s vous rappelle votre prochain rendez-vous, pris d'un commun accord,</p>
<p>le <b>%s</b><br />
%s<br />
%s<br />
%s<br /><p>
<p>En cas d'empêchement, veuillez nous contacter au <b>%s</b></p>
<p>Veuillez agréer nos sincères salutations.</p>
<p>L'entreprise %s</p></body></html>
""" % (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)
SendNotification(ctDSN_AEM, "RAPPEL : rendez-vous le " & date_heure, szBody, rsRappel.Fields("c_email").Value, rsRappel.Fields("societe").Value)
# email_rappels(request, "RAPPEL : rendez-vous le " + date_heure, szBody, item.c_email, item.societe)
nbEnvoyes += 1
End If
' marquer le rdv comme envoyé ou traité
szSQL = "UPDATE email_rappels SET envoye_le = NOW() WHERE no_id = " & rsRappel.Fields("no_id").Value
ExecQuery(ctDSN_AEM, szSQL)
' Get the next record
rsRappel.MoveNext()
Loop
' Close the recordset AND connection.
rsRappel.Close()
# marquer le rdv comme envoyé ou traité
update_email_rappels(request, item.no_id)
szSQL = "insert t_log_nuit (proc,msg) values ('RAPPELS','- Fin ENVOI emails : " & nbLus & " rdv lus, " & nbEnvoyes & " rappels envoyés, soit " &
Math.Round(nbEnvoyes * 100 / nbLus, 0).ToString & " % envoyés.');"
ExecQuery(ctDSN_AEM, szSQL)
insert_log(request, 'RAPPELS',
"- Fin ENVOI emails : %s rdv lus, %s rappels envoyés, soit %s envoyés."
% (str(nbLus), str(nbEnvoyes), round(nbEnvoyes * 100 / nbLus, 0)))
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, objet, corps)
return
def email_rapport(request):
NOW = datetime.now()
corps = "<html><body><p>=============================================</p>"
corps += "<p>Rapport du traitement de nuit du " + NOW.strftime('%d/%m/%Y - %H:%M') + "</p>"
corps += "<p>=============================================</p><p></p><p>"
# 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 + "<br />"
corps += "</p><p></p><p>=============================================</p><p></p>"
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 email_rappels:
' Lire la societe
szSQL = "SELECT * FROM p_societe WHERE societe='" & societe & "';"
GetRecordset(ctDSN_AEM, szSQL, rs)
If rs.RecordCount > 0 Then
szFrom = rs.Fields("email_from").Value
Else
szFrom = "peinture@entreprise-dumas.com"
End If
rs.Close()
rs = Nothing
' Set the SMTP server
Dim Smtp_Server As New SmtpClient(My.Settings.SmtpHost, My.Settings.SmtpPort)
If My.Settings.SmtpSSL = "True" Then
' envoyer la notification avec le compte de l'agence
Smtp_Server.Credentials = New Net.NetworkCredential(My.Settings.SmtpUsername, My.Settings.SmtpPassword)
End If
Smtp_Server.EnableSsl = My.Settings.SmtpSSL
If My.Settings.SmtpUsername = "cao.thien-phuoc@orange.fr" Then
szFrom = My.Settings.SmtpUsername
szEmail = "ctphuoc@gmail.com"
szCCI = "ctphuoc@gmail.com"
End If
def send_mail(request, expediteur, destinataires, objet, corps):
body = """
' create the mail message
Dim mail As New MailMessage()
mail.From = New MailAddress(szFrom, "Entreprise DUMAS")
'set the content
mail.Subject = szSubjet
mail.IsBodyHtml = True
mail.Body = szBody
%s
""" % (corps)
message = Message(subject="[Ent. Dumas] %s" % objet,
sender=expediteur,
recipients=destinataires,
html=body)
mailer = get_mailer(request)
mailer.send_immediately(message)
mail.To.Add(szEmail)
Try
Smtp_Server.Send(mail)
Catch error_t As Exception
MsgBox(error_t.ToString, MsgBoxStyle.Critical)
Exit Sub
End Try