diff --git a/app/routes.py b/app/routes.py index d9d851c..706bdce 100644 --- a/app/routes.py +++ b/app/routes.py @@ -513,6 +513,8 @@ def gestion_ordres(): "total_prix_net": 0.0, "total_eng_brut": 0.0, "total_eng_net": 0.0, + "plus_value": r["PlusValue"], + "date_plusvalue": r["date_plusvalue"], } groupes_dict[isin]["pieds"].append(pied_data) @@ -556,25 +558,36 @@ def gestion_ordres(): try: with db.engine.begin() as conn: for isin, groupe in groupes_dict.items(): - # Utilisation d'une tolérance de décimales (ex: 1e-9) pour éviter les erreurs d'arrondi flottant if abs(groupe["total_quantite"]) < 1e-9: ordre_id = groupe["id"] + total_eng_net = groupe["total_eng_net"] - # 1. Sauvegarde en base de données + # Recherche de la date la plus grande (récente) parmi toutes les lignes (pieds) de l'ordre + max_date = max((p["date_op"] for p in groupe["pieds"] if p["date_op"] is not None), default=None) + + # 1. Mise à jour de l'état des lignes dans la table ordre_pied conn.execute( text( - "UPDATE ordre_pied SET Etat = :nouvel_etat WHERE Id_entete =" - " :ordre_id" + "UPDATE ordre_pied SET Etat = :nouvel_etat WHERE Id_entete = :ordre_id" ), {"nouvel_etat": "soldé", "ordre_id": ordre_id}, ) - # 2. Mise à jour immédiate en mémoire pour l'affichage dans le template + # 2. Mise à jour de PlusValue et date_plusvalue dans la table ordre + conn.execute( + text( + "UPDATE ordre SET PlusValue = :plus_value, date_plusvalue = :date_pv WHERE ID = :ordre_id" + ), + {"plus_value": total_eng_net, "date_pv": max_date, "ordre_id": ordre_id}, + ) + + # 3. Mise à jour immédiate en mémoire pour l'affichage dans le template + groupe["plus_value"] = total_eng_net + groupe["date_plusvalue"] = max_date for pied in groupe["pieds"]: pied["etat"] = "soldé" except Exception as e: - # En cas d'erreur, SQLAlchemy gère le rollback automatique avec le bloc 'with connection.begin()' pass groupes_ordres = list(groupes_dict.values())