ajout stats sur les délais de traitements dossier
This commit is contained in:
@@ -198,3 +198,17 @@ 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 get_stats_delai_groupe(request, societe, datedeb, datefin):
|
||||||
|
query = """SELECT group2, group2_lib FROM stats_delais
|
||||||
|
WHERE societe=:societe AND id='delai_contact' AND group1 >= :datedeb AND group1 < :datefin GROUP BY group2 ORDER BY group2_lib;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y%m"), 'datefin': datefin.strftime("%Y%m")})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_stats_delais(request, societe, datedeb, datefin, groupe):
|
||||||
|
# lire les examens sur 12 mois glissants par moniteur
|
||||||
|
query = """SELECT * FROM stats_delais
|
||||||
|
WHERE societe=:societe AND id='delai_contact' AND group1 >= :datedeb AND group1 < :datefin AND group2=:groupe order by group1;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y%m"),
|
||||||
|
'datefin': datefin.strftime("%Y%m"), 'groupe': groupe})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,14 @@ def get_all_chantiers(request,societe):
|
|||||||
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def get_chantiers_month(request, societe, date_sel):
|
||||||
|
# provisoire : toute l'année -> AND MONTH(date)=MONTH(:date_sel)
|
||||||
|
query = """SELECT * FROM dem_devis WHERE societe = :societe AND YEAR(date)=YEAR(:date_sel)
|
||||||
|
AND delai_facture = 0 AND nomcli NOT IN ('DUMAS JEAN MICHEL','DUMAS MENUISERIE','DUMAS PEINTURE');
|
||||||
|
"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'date_sel': date_sel}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
def get_last_facture(request, societe, nochantier):
|
def get_last_facture(request, societe, nochantier):
|
||||||
query = "SELECT * FROM facture WHERE societe = :societe AND nochantier = :nochantier order by date DESC LIMIT 1;"
|
query = "SELECT * FROM facture WHERE societe = :societe AND nochantier = :nochantier order by date DESC LIMIT 1;"
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
@@ -89,3 +97,102 @@ def update_chantier_status(request, societe, no_id, status):
|
|||||||
query = "UPDATE dem_devis SET status = :status, DATEMAJ = DATEMAJ WHERE societe = :societe AND no_id = :no_id AND status <> :status;"
|
query = "UPDATE dem_devis SET status = :status, DATEMAJ = DATEMAJ WHERE societe = :societe AND no_id = :no_id AND status <> :status;"
|
||||||
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'status': status})
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'status': status})
|
||||||
|
|
||||||
|
def update_chantier_delais(request, societe, no_id, delai_contact, delai_rdv, delai_devis, delai_facture):
|
||||||
|
query = """UPDATE dem_devis SET delai_contact = :delai_contact, delai_rdv = :delai_rdv, delai_devis = :delai_devis,
|
||||||
|
delai_facture = :delai_facture, DATEMAJ = DATEMAJ
|
||||||
|
WHERE societe = :societe AND no_id = :no_id;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'delai_contact': delai_contact, 'delai_rdv': delai_rdv,
|
||||||
|
'delai_devis': delai_devis, 'delai_facture': delai_facture})
|
||||||
|
|
||||||
|
def get_chantiers_dates(request, societe, nochantier):
|
||||||
|
# lire 1er contact du chantier
|
||||||
|
query = "SELECT date, datevi FROM dem_lig WHERE societe = :societe AND no_id = :nochantier AND datevi IS NOT NULL;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
if results:
|
||||||
|
date_contact = results.date
|
||||||
|
date_rdv = results.datevi
|
||||||
|
else:
|
||||||
|
date_contact = None
|
||||||
|
date_rdv = None
|
||||||
|
|
||||||
|
# lire 1er devis du chantier
|
||||||
|
query = "SELECT date FROM devis WHERE societe = :societe AND nochantier = :nochantier order by date LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
if results:
|
||||||
|
date_devis = results.date
|
||||||
|
else:
|
||||||
|
date_devis = None
|
||||||
|
|
||||||
|
# lire 1ere facture du chantier
|
||||||
|
query = "SELECT date FROM facture WHERE societe = :societe AND nochantier = :nochantier order by date LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
if results:
|
||||||
|
date_facture = results.date
|
||||||
|
else:
|
||||||
|
date_facture = None
|
||||||
|
return date_contact, date_rdv, date_devis, date_facture
|
||||||
|
|
||||||
|
def purge_annuelle(request):
|
||||||
|
|
||||||
|
# ----- Purger les DEVIS dont la facture est réglée de plus 10 ans
|
||||||
|
query = """DELETE devis.* FROM devis INNER JOIN facture ON devis.societe = facture.societe and devis.no_id = facture.nodevis
|
||||||
|
WHERE YEAR(facture.date) < YEAR(CURRENT_DATE()) - 10 AND ABS(facture.totalttc - facture.mtregl) < 1;"""
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
# ----- Purger les FACTURES réglées de plus 10 ans
|
||||||
|
query = """DELETE FROM facture WHERE YEAR(facture.date) < YEAR(CURRENT_DATE()) - 10 AND ABS(facture.totalttc - facture.mtregl) < 1;"""
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
# ----- Purger les DEVIS de + de 10 ans n'ayant pas de facture
|
||||||
|
query = """DELETE FROM devis WHERE YEAR(date) < YEAR(CURRENT_DATE()) - 10 AND nofact=0;"""
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
# -- RAZ les liens FACTURE et DEVIS
|
||||||
|
query = "UPDATE dem_devis SET nodevis = 0, nofact = 0, datemaj=datemaj WHERE YEAR(date) < YEAR(CURRENT_DATE()) - 10;"
|
||||||
|
execute_query(request, query, {})
|
||||||
|
# -- recreer les lien DEVIS
|
||||||
|
query = """UPDATE dem_devis INNER JOIN facture ON dem_devis.societe = facture.societe and dem_devis.no_id = facture.nochantier
|
||||||
|
SET dem_devis.nofact = facture.no_id, datemaj=datemaj WHERE YEAR(dem_devis.date) < YEAR(CURRENT_DATE()) - 10;"""
|
||||||
|
execute_query(request, query, {})
|
||||||
|
# -- recreer les lien factures
|
||||||
|
query = """UPDATE dem_devis INNER JOIN devis ON dem_devis.societe = devis.societe and dem_devis.no_id = devis.nochantier
|
||||||
|
SET dem_devis.nodevis = devis.no_id, datemaj=datemaj WHERE YEAR(dem_devis.date) < YEAR(CURRENT_DATE()) - 10;"""
|
||||||
|
execute_query(request, query, {})
|
||||||
|
# ---- Purger les DEM_DEVIS n'ayant aucun DEVIS ni FACTURE
|
||||||
|
query = "DELETE FROM dem_devis WHERE YEAR(dem_devis.date) < YEAR(CURRENT_DATE()) - 10 AND nodevis = 0 AND nofact = 0;"
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_clients(request):
|
||||||
|
query = "SELECT * FROM clients;"
|
||||||
|
results = request.dbsession.execute(query, {}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_facture_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM facture WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_devis_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM devis WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_chantier_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM dem_devis WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def update_client_dern_operation(request, societe, cd_cli, dern_operation):
|
||||||
|
if dern_operation != None:
|
||||||
|
d_operation = dern_operation.strftime('%Y/%m/%d')
|
||||||
|
query = "UPDATE clients SET dern_operation = :dern_operation, modif_le = modif_le WHERE societe=:societe AND cd_cli=:cd_cli;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'cd_cli': cd_cli, 'dern_operation': d_operation})
|
||||||
|
else:
|
||||||
|
query = "UPDATE clients SET dern_operation = NULL, modif_le = modif_le WHERE societe=:societe AND cd_cli=:cd_cli;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'cd_cli': cd_cli})
|
||||||
|
|
||||||
|
def delete_client_unused(request):
|
||||||
|
query = "DELETE FROM clients WHERE cd_cli <> 1 AND dern_operation IS NULL AND YEAR(cree_le) < YEAR(CURRENT_DATE()) - 2;"
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ def includeme(config):
|
|||||||
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('stats_dd', '/stats_dd/{societe}')
|
config.add_route('stats_dd', '/stats_dd/{societe}')
|
||||||
|
config.add_route('stats_delais', '/stats_delais/{societe}')
|
||||||
config.add_route('rappels_rdv', '/rappels_rdv')
|
config.add_route('rappels_rdv', '/rappels_rdv')
|
||||||
config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}')
|
config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}')
|
||||||
config.add_route('rdf_causes', '/rdf_causes')
|
config.add_route('rdf_causes', '/rdf_causes')
|
||||||
|
|||||||
@@ -44,6 +44,11 @@
|
|||||||
<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}/stats_delais/PE" tal:condition="access > 0">
|
||||||
|
<span class="glyphicon glyphicon-stats logo-warning"></span>
|
||||||
|
<h4>PERFORMANCES</h4></a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
53
mondumas/templates/parametres/stats_delais.pt
Normal file
53
mondumas/templates/parametres/stats_delais.pt
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<form method="POST" id="frm" class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-md-2">Groupe</label>
|
||||||
|
<div class="col-md-10">
|
||||||
|
<select class="form-control" id="groupe" name="groupe" onChange="$('#frm').submit()">
|
||||||
|
<tal:block tal:repeat="item groupes">
|
||||||
|
<option value="${item.group2}" tal:attributes="selected groupe==item.group2 and 'selected' or None"> ${item.group2}</option>
|
||||||
|
</tal:block>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<!-- graphique colonne année N -->
|
||||||
|
<div id="barChart_annee" style="width: 100%; height: 500px;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
google.charts.load("current", {packages:["corechart", 'bar']});
|
||||||
|
google.charts.setOnLoadCallback(drawChart);
|
||||||
|
var dataSet_annee = ${barChart_annee};
|
||||||
|
|
||||||
|
function drawChart() {
|
||||||
|
var data_annee = google.visualization.arrayToDataTable(dataSet_annee);
|
||||||
|
|
||||||
|
var options_annee = {
|
||||||
|
title: '${title}',
|
||||||
|
seriesType: 'bars',
|
||||||
|
series: {1: {type: 'line'}},
|
||||||
|
vAxis: {
|
||||||
|
viewWindow: {
|
||||||
|
min:0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var chart_annee = new google.visualization.ComboChart(document.getElementById('barChart_annee'));
|
||||||
|
chart_annee.draw(data_annee, options_annee);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div><!-- content -->
|
||||||
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
@@ -13,6 +13,7 @@ from pyramid.httpexceptions import (
|
|||||||
|
|
||||||
from pyramid_mailer.message import Message, Attachment
|
from pyramid_mailer.message import Message, Attachment
|
||||||
from datetime import *
|
from datetime import *
|
||||||
|
from dateutil.relativedelta import *
|
||||||
from docutils.core import publish_parts
|
from docutils.core import publish_parts
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
@@ -645,3 +646,42 @@ def expert_edit(request):
|
|||||||
'code_exp': code_exp,
|
'code_exp': code_exp,
|
||||||
'message': message,
|
'message': message,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='stats_delais', renderer='../templates/parametres/stats_delais.pt', permission='view')
|
||||||
|
def stats_delais(request):
|
||||||
|
|
||||||
|
societe = request.matchdict['societe']
|
||||||
|
url = request.route_url('stats_delais', societe = societe)
|
||||||
|
|
||||||
|
datefin = date.today()
|
||||||
|
# debut = aujourd'hui - 12 mois
|
||||||
|
datedeb = datefin + relativedelta(months=-12)
|
||||||
|
|
||||||
|
# lire les groupes
|
||||||
|
groupes = get_stats_delai_groupe(request, societe, datedeb, datefin)
|
||||||
|
# mémoriser le 1er de la liste
|
||||||
|
groupe = groupes[0].group2
|
||||||
|
|
||||||
|
# si groupe a été changé par le user
|
||||||
|
if 'groupe' in request.params:
|
||||||
|
groupe = request.params["groupe"]
|
||||||
|
|
||||||
|
# lire les délais CONTACT du groupe
|
||||||
|
items = get_stats_delais(request, societe, datedeb, datefin, groupe)
|
||||||
|
barChart_annee=[]
|
||||||
|
barChart_annee.append(('Mois', groupe, {'role': 'annotation'}, 'Moyenne'))
|
||||||
|
title = ''
|
||||||
|
for item in items:
|
||||||
|
# construire la liste pour donut cible
|
||||||
|
title = '%s - %s' % (item.group2_lib, item.group2)
|
||||||
|
d = (item.group1_lib[:4], round(item.moyenne), str(item.moyenne)+'j ('+str(item.population)+')', round(item.moy_ref))
|
||||||
|
barChart_annee.append(d)
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': "Délais par groupe",
|
||||||
|
'url': url,
|
||||||
|
'barChart_annee': json.dumps(barChart_annee),
|
||||||
|
'title': title,
|
||||||
|
'groupes': groupes,
|
||||||
|
'groupe': groupe,
|
||||||
|
|||||||
@@ -32,10 +32,13 @@ def batch_nuit(request):
|
|||||||
truncate_log(request)
|
truncate_log(request)
|
||||||
|
|
||||||
# ----- PURGE des données obsolètes LE SAMEDI
|
# ----- PURGE des données obsolètes LE SAMEDI
|
||||||
|
insert_log(request, 'PURGE','- Début PURGE DES DONNEES OBSOLETES')
|
||||||
TODAY = date.today()
|
TODAY = date.today()
|
||||||
if TODAY.weekday == 5 :
|
if TODAY.weekday() == 5 :
|
||||||
|
# purge_annuelle(request)
|
||||||
|
# purge_clients(request)
|
||||||
delete_orphan_attached_files(request)
|
delete_orphan_attached_files(request)
|
||||||
|
|
||||||
# ----- RAPPELS DES RENDEZ-VOUS
|
# ----- RAPPELS DES RENDEZ-VOUS
|
||||||
update_rappels(request)
|
update_rappels(request)
|
||||||
# attendre 5 secondes
|
# attendre 5 secondes
|
||||||
@@ -171,8 +174,10 @@ def batch_test(request):
|
|||||||
if par != 'Sansa5tark':
|
if par != 'Sansa5tark':
|
||||||
return Response('Erreur : paramètre incorrect')
|
return Response('Erreur : paramètre incorrect')
|
||||||
|
|
||||||
update_chantiers_status(request)
|
# à revoir
|
||||||
|
# update_chantiers_status(request)
|
||||||
|
update_chantiers_delais(request, '2020/12/01')
|
||||||
|
|
||||||
return Response('Batch nuit terminé OK')
|
return Response('Batch nuit terminé OK')
|
||||||
|
|
||||||
def delete_orphan_attached_files(request):
|
def delete_orphan_attached_files(request):
|
||||||
@@ -216,33 +221,117 @@ def update_chantiers_status(request):
|
|||||||
societes = ['PE','ME','PL','PO','CD']
|
societes = ['PE','ME','PL','PO','CD']
|
||||||
|
|
||||||
for ste in societes:
|
for ste in societes:
|
||||||
# lire tous les chantiers
|
# lire tous les chantiers
|
||||||
chantiers = get_all_chantiers(request, ste)
|
chantiers = get_all_chantiers(request, ste)
|
||||||
for item in chantiers:
|
for item in chantiers:
|
||||||
# si le chantier est annulé, ne rien faire
|
# si le chantier est annulé, ne rien faire
|
||||||
if item.STATUS != 'Annulé':
|
if item.STATUS != 'Annulé':
|
||||||
status = ''
|
status = ''
|
||||||
# lire la dernière facture du chantier
|
# lire la dernière facture du chantier
|
||||||
facture = get_last_facture(request, ste, item.NO_ID)
|
facture = get_last_facture(request, ste, item.NO_ID)
|
||||||
if facture :
|
if facture :
|
||||||
# remonte le status de la facture ('','Régl part.', 'Réglée')
|
# remonte le status de la facture ('','Régl part.', 'Réglée')
|
||||||
status = facture.STATUS
|
status = facture.STATUS
|
||||||
if status == '':
|
if status == '':
|
||||||
status = 'Facturé'
|
status = 'Facturé'
|
||||||
|
else:
|
||||||
|
# lire le dernier devis du chantier ('','Commandé, 'Facturé')
|
||||||
|
devis = get_last_devis(request, ste, item.NO_ID)
|
||||||
|
if devis:
|
||||||
|
# remonte le status de la facture
|
||||||
|
status = devis.STATUS
|
||||||
|
if status == '' or status == '0':
|
||||||
|
status = 'Devis'
|
||||||
else:
|
else:
|
||||||
# lire le dernier devis du chantier ('','Commandé, 'Facturé')
|
if item.HUMIDITE != 0:
|
||||||
devis = get_last_devis(request, ste, item.NO_ID)
|
status = 'Humidité'
|
||||||
if devis:
|
|
||||||
# remonte le status de la facture
|
# maj le status du chantier
|
||||||
status = devis.STATUS
|
update_chantier_status(request, ste, item.NO_ID, status)
|
||||||
if status == '' or status == '0':
|
|
||||||
status = 'Devis'
|
|
||||||
else:
|
|
||||||
if item.HUMIDITE != 0:
|
|
||||||
status = 'Humidité'
|
|
||||||
|
|
||||||
# maj le status du chantier
|
|
||||||
update_chantier_status(request, ste, item.NO_ID, status)
|
|
||||||
|
|
||||||
|
def update_chantiers_delais(request, date):
|
||||||
|
"""
|
||||||
|
Ce traitement calcul les delais :
|
||||||
|
- delai_contact : le nombre de jours entre la réception de la DD et la création d'un 1er RDV
|
||||||
|
- delai_rdv : le nombre de jours entre la réception de la DD et la date d'un 1er RDV
|
||||||
|
- delai_devis : le nombre de jours entre la réception de la DD et la date d'un 1er devis
|
||||||
|
- delai_facture : le nombre de jours entre la réception de la DD et la date d'une 1ere facture
|
||||||
|
|
||||||
|
"""
|
||||||
|
societes = ['PE','ME','PL','PO','CD']
|
||||||
|
|
||||||
|
for societe in societes:
|
||||||
|
# lire tous les chantiers
|
||||||
|
chantiers = get_chantiers_month(request, societe, date)
|
||||||
|
for item in chantiers:
|
||||||
|
dt_dossier = datetime.combine(item.DATE, datetime.min.time())
|
||||||
|
|
||||||
|
# lire les dates 1er contact, 1er rdv, 1er devis, 1er facture du chantiers
|
||||||
|
date_contact, date_rdv, date_devis, date_facture = get_chantiers_dates(request, societe, item.NO_ID)
|
||||||
|
|
||||||
|
# calculer le delai contact en jours
|
||||||
|
if date_contact == None:
|
||||||
|
delai_contact = 0
|
||||||
|
else:
|
||||||
|
dt = datetime.combine(date_contact, datetime.min.time())
|
||||||
|
delai_contact = (dt - dt_dossier).days + 1
|
||||||
|
# delai négatif, ignorer
|
||||||
|
if delai_contact < 0:
|
||||||
|
delai_contact = 0
|
||||||
|
# calculer le delai rdv en jours
|
||||||
|
if date_rdv == None:
|
||||||
|
delai_rdv = 0
|
||||||
|
else:
|
||||||
|
dt = datetime.combine(date_rdv, datetime.min.time())
|
||||||
|
delai_rdv = (dt - dt_dossier).days + 1
|
||||||
|
# delai négatif, ignorer
|
||||||
|
if delai_rdv < 0:
|
||||||
|
delai_rdv = 0
|
||||||
|
# calculer le delai contact en jours
|
||||||
|
if date_devis == None:
|
||||||
|
delai_devis = 0
|
||||||
|
else:
|
||||||
|
dt = datetime.combine(date_devis, datetime.min.time())
|
||||||
|
delai_devis = (dt - dt_dossier).days + 1
|
||||||
|
# delai négatif, ignorer
|
||||||
|
if delai_devis < 0:
|
||||||
|
delai_devis = 0
|
||||||
|
# calculer le delai facture en jours
|
||||||
|
if date_facture == None:
|
||||||
|
delai_facture = 0
|
||||||
|
else:
|
||||||
|
dt = datetime.combine(date_facture, datetime.min.time())
|
||||||
|
delai_facture = (dt - dt_dossier).days + 1
|
||||||
|
# delai négatif, ignorer
|
||||||
|
if delai_facture < 0:
|
||||||
|
delai_facture = 0
|
||||||
|
|
||||||
|
update_chantier_delais(request, societe, item.NO_ID, delai_contact, delai_rdv, delai_devis, delai_facture)
|
||||||
|
|
||||||
|
def purge_clients(request):
|
||||||
|
# lire tous les clients
|
||||||
|
clients = get_all_clients(request)
|
||||||
|
for client in clients:
|
||||||
|
dern_operation = None
|
||||||
|
# lire la facture la + récente
|
||||||
|
facture = get_last_facture_client(request, client.societe, client.CD_CLI)
|
||||||
|
if facture:
|
||||||
|
dern_operation = facture.DATE
|
||||||
|
else:
|
||||||
|
# lire le devis le + récent
|
||||||
|
devis = get_last_devis_client(request, client.societe, client.CD_CLI)
|
||||||
|
if devis:
|
||||||
|
dern_operation = devis.DATE
|
||||||
|
else:
|
||||||
|
# lire le chantier le + récent
|
||||||
|
chantier = get_last_chantier_client(request, client.societe, client.CD_CLI)
|
||||||
|
if chantier:
|
||||||
|
dern_operation = chantier.DATE
|
||||||
|
|
||||||
|
# mémoriser dernière opération
|
||||||
|
update_client_dern_operation(request, client.societe, client.CD_CLI, dern_operation)
|
||||||
|
|
||||||
|
# supprimer clients ayant aucun dossier
|
||||||
|
delete_client_unused(request)
|
||||||
|
|
||||||
|
return
|
||||||
Reference in New Issue
Block a user