migrer rappels de rdv vers gestion
This commit is contained in:
@@ -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;"""
|
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})
|
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
|
|
||||||
|
|||||||
@@ -74,24 +74,6 @@ def get_rdf_causes_by_id(request, code):
|
|||||||
results = request.dbsession.execute(query, {'code': code}).first()
|
results = request.dbsession.execute(query, {'code': code}).first()
|
||||||
return results
|
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):
|
def delete_rdf_cause(request, old_code):
|
||||||
query = "DELETE FROM rdf_causes WHERE code = :old_code;"
|
query = "DELETE FROM rdf_causes WHERE code = :old_code;"
|
||||||
execute_query(request, query, {'old_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;"
|
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})
|
execute_query(request, query, {'code_cab': code_cab, 'code_exp': code_exp})
|
||||||
|
|
||||||
def update_rappels(request):
|
|
||||||
query = "CALL spUPD_RAPPELS();"
|
|
||||||
execute_query(request, query)
|
|
||||||
|
|||||||
71
mondumas/models/utils.py
Normal file
71
mondumas/models/utils.py
Normal file
@@ -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
|
||||||
@@ -56,7 +56,6 @@ def includeme(config):
|
|||||||
config.add_route('connecter_a', '/connecter_a/{login}')
|
config.add_route('connecter_a', '/connecter_a/{login}')
|
||||||
config.add_route('dashboard', '/dashboard')
|
config.add_route('dashboard', '/dashboard')
|
||||||
config.add_route('emails_msg', '/emails_msg/{nolig}')
|
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('expert_edit', '/expert_edit/{code_cab}/{code_exp}')
|
||||||
config.add_route('infrastructure', '/infrastructure')
|
config.add_route('infrastructure', '/infrastructure')
|
||||||
config.add_route('orphans_de', '/orphans_de/{societe}')
|
config.add_route('orphans_de', '/orphans_de/{societe}')
|
||||||
|
|||||||
@@ -44,11 +44,6 @@
|
|||||||
<span class="glyphicon glyphicon-download-alt logo-warning"></span>
|
<span class="glyphicon glyphicon-download-alt logo-warning"></span>
|
||||||
<h4>PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</h4></a>
|
<h4>PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</h4></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
|
||||||
<a href="${request.application_url}/emails_sent" tal:condition="access >= 8">
|
|
||||||
<span class="glyphicon glyphicon-send logo-small"></span>
|
|
||||||
<h4>EMAILS ENVOYES</h4></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
<metal:block use-macro="main_template">
|
|
||||||
<div metal:fill-slot="content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<form id="emails_sent_form" class="form-horizontal" method="post"
|
|
||||||
data-fv-framework="bootstrap"
|
|
||||||
data-fv-icon-valid="glyphicon glyphicon-ok"
|
|
||||||
data-fv-icon-invalid="glyphicon glyphicon-remove"
|
|
||||||
data-fv-icon-validating="glyphicon glyphicon-refresh">
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-xs-4" for="societe">Société</label>
|
|
||||||
<div class="col-xs-8">
|
|
||||||
<select class="form-control" id="societe" name="societe" onChange="$('#emails_sent_form').submit()" >
|
|
||||||
<div tal:repeat="item societes">
|
|
||||||
<option value="${item}" tal:attributes="selected societe==item and 'selected' or None">${item}</option>
|
|
||||||
</div>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<a href="${request.application_url}/" class="btn btn-default" role="button">
|
|
||||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<table id="emails_sent" class="table table-striped table-bordered">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Date</th>
|
|
||||||
<th>Dossier</th>
|
|
||||||
<th>Client</th>
|
|
||||||
<th>Objet</th>
|
|
||||||
<th>No</th>
|
|
||||||
<th>Par</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
var dataSet = ${dt_data};
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
$.fn.dataTable.moment('DD/MM/YYYY - HH:mm');
|
|
||||||
$('#emails_sent').DataTable({
|
|
||||||
data: dataSet,
|
|
||||||
pageLength: 50,
|
|
||||||
bLengthChange: false,
|
|
||||||
language: {
|
|
||||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
|
||||||
},
|
|
||||||
columnDefs: [
|
|
||||||
{ "targets": 3,
|
|
||||||
"render": function (data, type, row, meta) {
|
|
||||||
// ajouter un link vers le login
|
|
||||||
return '<a href="/emails_msg/' + row[4] + '">' + data + '</a>';
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
order: [[0, 'desc']],
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</div><!-- content -->
|
|
||||||
</metal:block>
|
|
||||||
|
|
||||||
|
|
||||||
@@ -33,6 +33,10 @@
|
|||||||
<a href="${request.application_url}/dashboard"><span class="glyphicon glyphicon-dashboard logo-primary"></span></a>
|
<a href="${request.application_url}/dashboard"><span class="glyphicon glyphicon-dashboard logo-primary"></span></a>
|
||||||
<h4>TABLEAU de BORD</h4>
|
<h4>TABLEAU de BORD</h4>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<a href="${request.application_url}/rappels_rdv"><span class="glyphicon glyphicon-envelope logo-primary"></span></a>
|
||||||
|
<h4>RAPPELS RDV</h4>
|
||||||
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<a href="${request.application_url}/users_ua"><span class="glyphicon glyphicon-log-in logo-primary"></span></a>
|
<a href="${request.application_url}/users_ua"><span class="glyphicon glyphicon-log-in logo-primary"></span></a>
|
||||||
<h4>CONNEXIONS</h4>
|
<h4>CONNEXIONS</h4>
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ from pyramid.httpexceptions import (
|
|||||||
HTTPNotFound,
|
HTTPNotFound,
|
||||||
HTTPForbidden,
|
HTTPForbidden,
|
||||||
)
|
)
|
||||||
from pyramid_mailer import get_mailer
|
|
||||||
from pyramid_mailer.message import Message, Attachment
|
|
||||||
from datetime import *
|
from datetime import *
|
||||||
from sqlalchemy.exc import DBAPIError
|
from sqlalchemy.exc import DBAPIError
|
||||||
from ..security import groupfinder
|
from ..security import groupfinder
|
||||||
@@ -32,6 +30,8 @@ from ..models.dossier import (
|
|||||||
get_clients_byName
|
get_clients_byName
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from ..views.utils import *
|
||||||
|
|
||||||
def to_decimal(x):
|
def to_decimal(x):
|
||||||
import decimal
|
import decimal
|
||||||
return decimal.Decimal(str(x))
|
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 » :
|
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
|
%s
|
||||||
|
|
||||||
(Ce lien est valide pendant 168 heures.)
|
(Ce lien est valide pendant 168 heures.)
|
||||||
|
|
||||||
|
|
||||||
|
Cordialement,
|
||||||
|
gestion.entreprise-dumas.com
|
||||||
|
|
||||||
""" % (request.route_url('redefinir_mdp', lien=lien))
|
""" % (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')
|
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))
|
return HTTPFound(location=request.route_url('affiche_message', login=login))
|
||||||
else:
|
else:
|
||||||
@@ -237,26 +242,6 @@ def logout(request):
|
|||||||
headers=headers)
|
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')
|
@view_config(route_name='affiche_message', renderer='../templates/default/affiche_message.pt')
|
||||||
def affiche_message(request):
|
def affiche_message(request):
|
||||||
|
|
||||||
|
|||||||
@@ -137,8 +137,6 @@ def devis_web(request):
|
|||||||
return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodevis=nodevis, nolig='0'))
|
return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodevis=nodevis, nolig='0'))
|
||||||
|
|
||||||
if 'form.generate' in request.params:
|
if 'form.generate' in request.params:
|
||||||
# lire la societe
|
|
||||||
soc = get_societes(request, societe)
|
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
'page-size': 'A4',
|
'page-size': 'A4',
|
||||||
|
|||||||
@@ -105,8 +105,6 @@ def connecter_a(request):
|
|||||||
else:
|
else:
|
||||||
return HTTPFound(location="/")
|
return HTTPFound(location="/")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage')
|
@view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage')
|
||||||
def user_edit(request):
|
def user_edit(request):
|
||||||
cd_uti = request.matchdict['cd_uti']
|
cd_uti = request.matchdict['cd_uti']
|
||||||
@@ -332,46 +330,6 @@ def rdf_cause_edit(request):
|
|||||||
'cause': cause,
|
'cause': cause,
|
||||||
'message': message,
|
'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_config(route_name='text_list', renderer='../templates/parametres/text_list.pt', permission='manage')
|
||||||
|
|||||||
@@ -4,6 +4,14 @@ from pyramid.view import (
|
|||||||
view_config,
|
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')
|
@view_config(route_name='batch_nuit')
|
||||||
def batch_nuit(request):
|
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'
|
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
|
# contrôle : paramètre correct ? non, terminer
|
||||||
par = request.matchdict['param']
|
par = request.matchdict['param']
|
||||||
if par != 'JonSn0w':
|
if par != 'JonSn0w':
|
||||||
return Response('Erreur : paramètre incorrect')
|
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')
|
return Response('Batch nuit terminé OK')
|
||||||
|
|
||||||
def notifier_rappels(request):
|
def notifier_rappels(request):
|
||||||
|
|
||||||
szSQL = "insert t_log_nuit (proc,msg) values ('RAPPELS','- Début ENVOI emails');"
|
# log : Début ENVOI emails
|
||||||
ExecQuery(ctDSN_AEM, szSQL)
|
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 " & _
|
# lire les rappels non encore envoyés
|
||||||
"INNER JOIN dem_devis e ON r.societe = e.societe AND r.nochantier = e.no_id " & _
|
rappels = get_email_rappels(request)
|
||||||
"INNER JOIN p_societe s ON r.societe = s.societe " & _
|
|
||||||
"WHERE ISNULL(envoye_le) ORDER BY no_id;"
|
|
||||||
GetRecordset(ctDSN_AEM, szSQL, rsRappel)
|
|
||||||
|
|
||||||
Do While Not rsRappel.EOF
|
nbLus = 0
|
||||||
|
nbEmailVide = 0
|
||||||
|
nbEnvoyes = 0
|
||||||
|
|
||||||
|
for item in rappels:
|
||||||
nbLus += 1
|
nbLus += 1
|
||||||
If rsRappel.Fields("c_email").Value.ToString.Length = 0 Then
|
if len(item.c_email) == 0 :
|
||||||
nbEmailVide += 1
|
nbEmailVide += 1
|
||||||
szSQL = "insert t_log_nuit (proc,msg) values ('RAPPELS', '--> email vide : " & rsRappel.Fields("societe").Value & "-" & nq(rsRappel.Fields("nochantier").Value) & _
|
insert_log(request, 'RAPPELS', '--> email vide : %s-%s - %s %s' % (item.societe, item.nochantier, item.c_qualite, item.c_nom))
|
||||||
" - " & rsRappel.Fields("c_qualite").Value & " " & nq(rsRappel.Fields("c_nom").Value) & "');"
|
else:
|
||||||
ExecQuery(ctDSN_AEM, szSQL)
|
# RDV ayant une heure
|
||||||
Else
|
date_heure = item.rdv_date.strftime('%d/%m/%Y - %H:%M')
|
||||||
' RDV ayant une heure
|
szBody = """
|
||||||
date_heure = Format(rsRappel.Fields("rdv_date").Value, "dd/MM/yyyy à HH:mm")
|
<html><body>
|
||||||
szBody = "<html><body><p>Bonjour " & nv(rsRappel.Fields("c_qualite").Value) & " " & rsRappel.Fields("c_nom").Value & ",</p>" & _
|
<p>Bonjour %s %s</p>
|
||||||
"<p>L’entreprise " & rsRappel.Fields("nom_societe").Value & " vous rappelle votre prochain rendez-vous, pris d'un commun accord,</p>" & _
|
<p>L’entreprise %s vous rappelle votre prochain rendez-vous, pris d'un commun accord,</p>
|
||||||
"<p>le <b>" & date_heure & "</b><br />" & _
|
<p>le <b>%s</b><br />
|
||||||
rsRappel.Fields("c_adr").Value & "<br />" &
|
%s<br />
|
||||||
IIf(rsRappel.Fields("c_adr2").Value.ToString.Length > 0, rsRappel.Fields("c_adr2").Value & "<br />", "") & _
|
%s<br />
|
||||||
rsRappel.Fields("c_ville").Value & "<br />" & "<p>" & _
|
%s<br /><p>
|
||||||
"<p>En cas d'empêchement, veuillez nous contacter au <b>" & rsRappel.Fields("tel").Value & "</b>." & _
|
<p>En cas d'empêchement, veuillez nous contacter au <b>%s</b></p>
|
||||||
"<p>Veuillez agréer nos sincères salutations.</p>" & _
|
<p>Veuillez agréer nos sincères salutations.</p>
|
||||||
"<p>L'entreprise " & rsRappel.Fields("nom_societe").Value & "</p></body></html>"
|
<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
|
nbEnvoyes += 1
|
||||||
End If
|
|
||||||
' marquer le rdv comme envoyé ou traité
|
# marquer le rdv comme envoyé ou traité
|
||||||
szSQL = "UPDATE email_rappels SET envoye_le = NOW() WHERE no_id = " & rsRappel.Fields("no_id").Value
|
update_email_rappels(request, item.no_id)
|
||||||
ExecQuery(ctDSN_AEM, szSQL)
|
|
||||||
' Get the next record
|
|
||||||
rsRappel.MoveNext()
|
|
||||||
Loop
|
|
||||||
' Close the recordset AND connection.
|
|
||||||
rsRappel.Close()
|
|
||||||
|
|
||||||
szSQL = "insert t_log_nuit (proc,msg) values ('RAPPELS','- Fin ENVOI emails : " & nbLus & " rdv lus, " & nbEnvoyes & " rappels envoyés, soit " &
|
insert_log(request, 'RAPPELS',
|
||||||
Math.Round(nbEnvoyes * 100 / nbLus, 0).ToString & " % envoyés.');"
|
"- Fin ENVOI emails : %s rdv lus, %s rappels envoyés, soit %s envoyés."
|
||||||
ExecQuery(ctDSN_AEM, szSQL)
|
% (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
|
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
|
def send_mail(request, expediteur, destinataires, objet, corps):
|
||||||
Dim Smtp_Server As New SmtpClient(My.Settings.SmtpHost, My.Settings.SmtpPort)
|
body = """
|
||||||
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
|
|
||||||
|
|
||||||
' create the mail message
|
%s
|
||||||
Dim mail As New MailMessage()
|
""" % (corps)
|
||||||
mail.From = New MailAddress(szFrom, "Entreprise DUMAS")
|
|
||||||
'set the content
|
message = Message(subject="[Ent. Dumas] %s" % objet,
|
||||||
mail.Subject = szSubjet
|
sender=expediteur,
|
||||||
mail.IsBodyHtml = True
|
recipients=destinataires,
|
||||||
mail.Body = szBody
|
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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user