ajout stats sur les délais de traitements dossier
This commit is contained in:
@@ -13,6 +13,7 @@ from pyramid.httpexceptions import (
|
||||
|
||||
from pyramid_mailer.message import Message, Attachment
|
||||
from datetime import *
|
||||
from dateutil.relativedelta import *
|
||||
from docutils.core import publish_parts
|
||||
import hashlib
|
||||
|
||||
@@ -645,3 +646,42 @@ def expert_edit(request):
|
||||
'code_exp': code_exp,
|
||||
'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)
|
||||
|
||||
# ----- 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
|
||||
Reference in New Issue
Block a user