From 49de5aa0e9527adb4511b8259a4d153e672e7f9d Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Sun, 14 Mar 2021 14:41:25 +0100 Subject: [PATCH] tuning purge mensuelle --- mondumas/models/utils.py | 41 +++++++++++++++------------ mondumas/views/utils.py | 60 +++++++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 41 deletions(-) diff --git a/mondumas/models/utils.py b/mondumas/models/utils.py index d581449..75e2bbc 100644 --- a/mondumas/models/utils.py +++ b/mondumas/models/utils.py @@ -132,35 +132,35 @@ def get_chantiers_dates(request, societe, nochantier): date_facture = None return date_contact, date_rdv, date_devis, date_facture -def purge_annuelle(request): +def purge_mensuelle(request, until_date): - # ----- Purger les DEVIS dont la facture est réglée de plus 10 ans + # ----- Purger les DEVIS dont la facture est réglée antérieure à until_date 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, {}) + WHERE facture.date < :until_date AND ABS(facture.totalttc - facture.mtregl) < 1;""" + execute_query(request, query, {'until_date': until_date}) - # ----- 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 FACTURES réglées antérieure à until_date + query = """DELETE FROM facture WHERE facture.date < :until_date AND ABS(facture.totalttc - facture.mtregl) < 1;""" + execute_query(request, query, {'until_date': until_date}) - # ----- 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, {}) + # ----- Purger les DEVIS n'ayant pas de facture antérieure à until_date + query = """DELETE FROM devis WHERE devis.date < :until_date AND nofact=0;""" + execute_query(request, query, {'until_date': until_date}) # -- 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, {}) + query = "UPDATE dem_devis SET nodevis = 0, nofact = 0, datemaj=datemaj WHERE dem_devis.date < :until_date;" + execute_query(request, query, {'until_date': until_date}) # -- 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, {}) + SET dem_devis.nofact = facture.no_id, dem_devis.datemaj=dem_devis.datemaj WHERE dem_devis.date < :until_date;""" + execute_query(request, query, {'until_date': until_date}) # -- 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, {}) + SET dem_devis.nodevis = devis.no_id, dem_devis.datemaj=dem_devis.datemaj WHERE dem_devis.date < :until_date""" + execute_query(request, query, {'until_date': until_date}) # ---- 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, {}) + query = "DELETE FROM dem_devis WHERE date < :until_date AND nodevis = 0 AND nofact = 0;" + execute_query(request, query, {'until_date': until_date}) def get_all_clients(request): @@ -173,6 +173,11 @@ def get_last_facture_client(request, societe, cd_cli): results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first() return results +def get_last_payment_client(request, societe, cd_cli): + query = "SELECT * FROM liv_bnq 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() diff --git a/mondumas/views/utils.py b/mondumas/views/utils.py index c998cbc..c214136 100644 --- a/mondumas/views/utils.py +++ b/mondumas/views/utils.py @@ -32,14 +32,28 @@ def batch_nuit(request): # ----- effacer le log truncate_log(request) - # ----- PURGE des données obsolètes LE SAMEDI + # ----- PURGE des données obsolètes insert_log(request, 'PURGE','- Début PURGE DES DONNEES OBSOLETES') TODAY = date.today() - if TODAY.weekday() == 5 : - # purge_annuelle(request) - # purge_clients(request) + # purger tous les 1er du mois + if TODAY.day() == 1 : + until_date = date(TODAY.year, TODAY.month, 1).strftime('%Y-%m-%d') + purge_mensuelle(request, until_date) + purge_clients(request) delete_orphan_attached_files(request) + # ----- MAJ STATS DELAIS de traitements des dossiers sur 1 an + insert_log(request, 'STATS', '- Début MAJ STATS DES PERFORMANCES') + societes = ['PL', 'ME', 'PE'] + datejour = TODAY + groupes = ['MAIF', 'AXA', 'X'] + for i in range(12): + for societe in societes: + for groupe in groupes: + update_stats_delais(request, societe, datejour.strftime('%Y-%m-%d'), groupe) + # recule d'un mois + datejour = datejour + relativedelta(months=-1) + # ----- RAPPELS DES RENDEZ-VOUS update_rappels(request) # attendre 5 secondes @@ -177,17 +191,12 @@ def batch_test(request): # à revoir # update_chantiers_status(request) - # update_chantiers_delais(request, '2020/12/01') - # calculer les délais de traitements des dossiers sur 1 an - societes = ['PL', 'ME', 'PE'] - datejour = date.today() - groupes = ['MAIF', 'AXA', 'X'] - for i in range(12): - for societe in societes: - for groupe in groupes: - update_stats_delais(request, societe, datejour.strftime('%Y%m%d'), groupe) - # recule d'un mois - datejour = datejour + relativedelta(months=-1) + + TODAY = date.today() + until_date = date(TODAY.year - 10, TODAY.month, 1) + purge_mensuelle(request, until_date) + purge_clients(request) + delete_orphan_attached_files(request) return Response('Batch nuit terminé OK') @@ -330,15 +339,20 @@ def purge_clients(request): 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 + # lire le réglemnet le + récent + payment = get_last_payment_client(request, client.societe, client.CD_CLI) + if payment: + dern_operation = payment.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 + # 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)