diff --git a/mondumas/models/devis.py b/mondumas/models/devis.py index 12a3bd1..ce8de54 100644 --- a/mondumas/models/devis.py +++ b/mondumas/models/devis.py @@ -226,12 +226,3 @@ def move_devis_ligne(request, nodossier, nolig, move): query = """UPDATE devis_lignes SET nolig = :nolig WHERE societe = :societe and no_id=:no_id and nolig = :max_no;""" execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'max_no': max_no}) -def get_societes(request, societe): - - if societe == '0': - query = "SELECT * FROM p_societe;" - results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() - else: - query = "SELECT * FROM p_societe WHERE societe = :societe;" - results = request.dbsession.execute(query, {'societe': societe}).first() - return results diff --git a/mondumas/models/parametres.py b/mondumas/models/parametres.py index 2a878db..6f30205 100644 --- a/mondumas/models/parametres.py +++ b/mondumas/models/parametres.py @@ -74,24 +74,6 @@ def get_rdf_causes_by_id(request, code): results = request.dbsession.execute(query, {'code': code}).first() return results -def get_emails_sent(request, societe, nolig): - d = datetime.now() - d = d - dateutil.relativedelta.relativedelta(months=1) - # début du mois M-3 - datedeb = d.strftime('%Y-%m-%d') - - if nolig == 0: - query = """SELECT CONCAT(l.societe,"-",l.no_id) as nodossier, l.datemaj, l.comment, l.nolig, l.usermaj, e.nomcli FROM dem_lig l - INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id - WHERE l.societe = :societe AND l.date >= :datedeb AND l.comment LIKE 'Envoi email -> %' ORDER BY l.datemaj LIMIT 250;""" - results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb}).fetchall() - else: - query = """SELECT * FROM dem_lig WHERE nolig=:nolig;""" - results = request.dbsession.execute(query, {'nolig': nolig}).first() - - return results - - def delete_rdf_cause(request, old_code): query = "DELETE FROM rdf_causes WHERE code = :old_code;" execute_query(request, query, {'old_code': old_code}) @@ -209,6 +191,3 @@ def delete_expert(request, code_cab, code_exp): query = "DELETE FROM p_experts WHERE code_cab = :code_cab AND code_exp = :code_exp;" execute_query(request, query, {'code_cab': code_cab, 'code_exp': code_exp}) -def update_rappels(request): - query = "CALL spUPD_RAPPELS();" - execute_query(request, query) diff --git a/mondumas/models/utils.py b/mondumas/models/utils.py new file mode 100644 index 0000000..17035ee --- /dev/null +++ b/mondumas/models/utils.py @@ -0,0 +1,71 @@ +# -*- coding: utf8 -*- +from sqlalchemy import text +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import ( + scoped_session, + sessionmaker, +) +from zope.sqlalchemy import ( + ZopeTransactionExtension, + mark_changed +) + +from datetime import * +import dateutil.relativedelta +import transaction + +def execute_query(request, query, params): + """Execute query and mark session as changed""" + request.dbsession.execute(query, params) + mark_changed(request.dbsession) + transaction.commit() + +def insert_log(request, proc, msg): + query = "INSERT t_log_nuit (proc,msg) VALUES (:proc,:msg);" + execute_query(request, query, {'proc': proc, 'msg' :msg}) + +def truncate_log(request): + query = "TRUNCATE t_log_nuit;" + execute_query(request, query, {}) + +def get_log(request): + # lire les rappels non envoyés + query = "SELECT * FROM t_log_nuit;" + results = request.dbsession.execute(query, {}).fetchall() + return results + +def get_email_rappels(request): + # lire les rappels non envoyés + query = """ 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;""" + results = request.dbsession.execute(query, {}).fetchall() + return results + + +def delete_rdv(request, nodossier, nolig): + societe = nodossier[0:2] + no_id = nodossier[3:] + + query = "DELETE FROM dem_lig where societe = '%s' and no_id=%s and nolig=%s;" % (societe, no_id, nolig) + execute_query(request, query, {}) + +def update_rappels(request): + query = "CALL spUPD_RAPPELS();" + execute_query(request, query, {}) + +def update_email_rappels(request, no_id): + query = "UPDATE email_rappels SET envoye_le = NOW() WHERE no_id = :no_id;" + execute_query(request, query, {'no_id': no_id}) + +def get_societes(request, societe): + + if societe == '0': + query = "SELECT * FROM p_societe;" + results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall() + else: + query = "SELECT * FROM p_societe WHERE societe = :societe;" + results = request.dbsession.execute(query, {'societe': societe}).first() + return results diff --git a/mondumas/routes.py b/mondumas/routes.py index 9d10340..5e7dad8 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -56,7 +56,6 @@ def includeme(config): config.add_route('connecter_a', '/connecter_a/{login}') config.add_route('dashboard', '/dashboard') config.add_route('emails_msg', '/emails_msg/{nolig}') - config.add_route('emails_sent', '/emails_sent') config.add_route('expert_edit', '/expert_edit/{code_cab}/{code_exp}') config.add_route('infrastructure', '/infrastructure') config.add_route('orphans_de', '/orphans_de/{societe}') diff --git a/mondumas/templates/default/home.pt b/mondumas/templates/default/home.pt index f4335c1..0c20943 100644 --- a/mondumas/templates/default/home.pt +++ b/mondumas/templates/default/home.pt @@ -44,11 +44,6 @@
| Date | -Dossier | -Client | -Objet | -No | -Par | -
|---|
Bonjour " & nv(rsRappel.Fields("c_qualite").Value) & " " & rsRappel.Fields("c_nom").Value & ",
" & _ - "L’entreprise " & rsRappel.Fields("nom_societe").Value & " vous rappelle votre prochain rendez-vous, pris d'un commun accord,
" & _ - "le " & date_heure & "
" & _
- rsRappel.Fields("c_adr").Value & "
" &
- IIf(rsRappel.Fields("c_adr2").Value.ToString.Length > 0, rsRappel.Fields("c_adr2").Value & "
", "") & _
- rsRappel.Fields("c_ville").Value & "
" & "
" & _ - "
En cas d'empêchement, veuillez nous contacter au " & rsRappel.Fields("tel").Value & "." & _ - "
Veuillez agréer nos sincères salutations.
" & _ - "L'entreprise " & rsRappel.Fields("nom_societe").Value & "
" + 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) - 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 = "=============================================
" + 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 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