ajout stats sur les délais de traitements dossier

This commit is contained in:
2021-03-09 14:26:40 +01:00
parent e8782369b1
commit 47f03f78df
7 changed files with 340 additions and 31 deletions

View File

@@ -32,10 +32,13 @@ def batch_nuit(request):
truncate_log(request)
# ----- PURGE des données obsolètes LE SAMEDI
insert_log(request, 'PURGE','- Début PURGE DES DONNEES OBSOLETES')
TODAY = date.today()
if TODAY.weekday == 5 :
if TODAY.weekday() == 5 :
# purge_annuelle(request)
# purge_clients(request)
delete_orphan_attached_files(request)
# ----- RAPPELS DES RENDEZ-VOUS
update_rappels(request)
# attendre 5 secondes
@@ -171,8 +174,10 @@ def batch_test(request):
if par != 'Sansa5tark':
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')
def delete_orphan_attached_files(request):
@@ -216,33 +221,117 @@ def update_chantiers_status(request):
societes = ['PE','ME','PL','PO','CD']
for ste in societes:
# lire tous les chantiers
chantiers = get_all_chantiers(request, ste)
for item in chantiers:
# si le chantier est annulé, ne rien faire
if item.STATUS != 'Annulé':
status = ''
# lire la dernière facture du chantier
facture = get_last_facture(request, ste, item.NO_ID)
if facture :
# remonte le status de la facture ('','Régl part.', 'Réglée')
status = facture.STATUS
if status == '':
status = 'Facturé'
# lire tous les chantiers
chantiers = get_all_chantiers(request, ste)
for item in chantiers:
# si le chantier est annulé, ne rien faire
if item.STATUS != 'Annulé':
status = ''
# lire la dernière facture du chantier
facture = get_last_facture(request, ste, item.NO_ID)
if facture :
# remonte le status de la facture ('','Régl part.', 'Réglée')
status = facture.STATUS
if status == '':
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:
# 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:
if item.HUMIDITE != 0:
status = 'Humidité'
# maj le status du chantier
update_chantier_status(request, ste, item.NO_ID, status)
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