Spaces:
Running
Running
Update src/modules/loans_engine.py
Browse files- src/modules/loans_engine.py +69 -14
src/modules/loans_engine.py
CHANGED
|
@@ -696,7 +696,6 @@ def show_loans_engine(client, sheet_name):
|
|
| 696 |
|
| 697 |
# Calcul de l'ID sous forme PRT-2026-xxxx
|
| 698 |
current_year = datetime.now().year
|
| 699 |
-
# len(ws_prets.get_all_values()) compte les lignes existantes pour l'incrémentation
|
| 700 |
new_id = f"PRT-{current_year}-{len(ws_prets.get_all_values()):04d}"
|
| 701 |
|
| 702 |
# ORDRE STRICT DEMANDÉ POUR Prets_Master
|
|
@@ -715,7 +714,7 @@ def show_loans_engine(client, sheet_name):
|
|
| 715 |
nb_versements, # Nb_Versements
|
| 716 |
";".join([d.strftime("%d/%m/%Y") for d in dates_versements]) if dates_versements else "", # Dates_Versements
|
| 717 |
date_debut.strftime("%d/%m/%Y"), # Date_Deblocage
|
| 718 |
-
date_fin.strftime("%d/%m/%Y"),
|
| 719 |
moyen_transfert, # Moyen_Transfert
|
| 720 |
"ACTIF", # Statut
|
| 721 |
garant_id, # ID_Garant
|
|
@@ -723,10 +722,11 @@ def show_loans_engine(client, sheet_name):
|
|
| 723 |
]
|
| 724 |
ws_prets.append_row(row_data)
|
| 725 |
time.sleep(1)
|
| 726 |
-
|
| 727 |
-
|
| 728 |
-
|
| 729 |
-
|
|
|
|
| 730 |
"ID_Pret": new_id,
|
| 731 |
"Montant_Capital": montant,
|
| 732 |
"Montant_Total": montant_total,
|
|
@@ -734,19 +734,74 @@ def show_loans_engine(client, sheet_name):
|
|
| 734 |
"Duree_Semaines": duree_semaines,
|
| 735 |
"Motif": motif,
|
| 736 |
"Date_Deblocage": date_debut.strftime("%d/%m/%Y"),
|
| 737 |
-
"Date_Fin": date_fin.strftime("%d/%m/%Y")
|
| 738 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 739 |
|
| 740 |
# PDF 1 : CONTRAT
|
| 741 |
-
|
| 742 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 743 |
|
| 744 |
# PDF 2 : RECONNAISSANCE
|
| 745 |
-
|
| 746 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 747 |
|
| 748 |
# PDF 3 : CAUTION (SI GARANT)
|
| 749 |
-
|
| 750 |
-
|
| 751 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 752 |
st.markdown('</div>', unsafe_allow_html=True)
|
|
|
|
| 696 |
|
| 697 |
# Calcul de l'ID sous forme PRT-2026-xxxx
|
| 698 |
current_year = datetime.now().year
|
|
|
|
| 699 |
new_id = f"PRT-{current_year}-{len(ws_prets.get_all_values()):04d}"
|
| 700 |
|
| 701 |
# ORDRE STRICT DEMANDÉ POUR Prets_Master
|
|
|
|
| 714 |
nb_versements, # Nb_Versements
|
| 715 |
";".join([d.strftime("%d/%m/%Y") for d in dates_versements]) if dates_versements else "", # Dates_Versements
|
| 716 |
date_debut.strftime("%d/%m/%Y"), # Date_Deblocage
|
| 717 |
+
date_fin.strftime("%d/%m/%Y"), # Date_Fin (Maintenant garantie)
|
| 718 |
moyen_transfert, # Moyen_Transfert
|
| 719 |
"ACTIF", # Statut
|
| 720 |
garant_id, # ID_Garant
|
|
|
|
| 722 |
]
|
| 723 |
ws_prets.append_row(row_data)
|
| 724 |
time.sleep(1)
|
| 725 |
+
|
| 726 |
+
# ✅ SAUVEGARDE DANS SESSION STATE POUR PERSISTANCE
|
| 727 |
+
st.session_state.loan_validated = True
|
| 728 |
+
st.session_state.loan_id = new_id
|
| 729 |
+
st.session_state.loan_data = {
|
| 730 |
"ID_Pret": new_id,
|
| 731 |
"Montant_Capital": montant,
|
| 732 |
"Montant_Total": montant_total,
|
|
|
|
| 734 |
"Duree_Semaines": duree_semaines,
|
| 735 |
"Motif": motif,
|
| 736 |
"Date_Deblocage": date_debut.strftime("%d/%m/%Y"),
|
| 737 |
+
"Date_Fin": date_fin.strftime("%d/%m/%Y")
|
| 738 |
}
|
| 739 |
+
st.session_state.client_data = client_info.to_dict()
|
| 740 |
+
st.session_state.garant_data = selected_garant.to_dict() if selected_garant is not None else None
|
| 741 |
+
st.session_state.df_amort = df_amort.copy()
|
| 742 |
+
|
| 743 |
+
st.success(f" Le Prêt {new_id} enregistré avec succès !")
|
| 744 |
+
st.rerun() # Force le rechargement pour afficher les boutons
|
| 745 |
+
|
| 746 |
+
# ✅ AFFICHAGE BOUTONS EN DEHORS DU FORMULAIRE (persistants)
|
| 747 |
+
if st.session_state.get('loan_validated', False):
|
| 748 |
+
st.markdown("---")
|
| 749 |
+
st.markdown(f"### Documents du prêt **{st.session_state.loan_id}**")
|
| 750 |
+
|
| 751 |
+
# Génération des PDFs (une seule fois, conservés en mémoire)
|
| 752 |
+
loan_data = st.session_state.loan_data
|
| 753 |
+
client_data = st.session_state.client_data
|
| 754 |
+
garant_data = st.session_state.garant_data
|
| 755 |
+
df_amort_saved = st.session_state.df_amort
|
| 756 |
+
|
| 757 |
+
# Affichage des boutons en colonnes
|
| 758 |
+
col_pdf1, col_pdf2, col_pdf3, col_reset = st.columns(4)
|
| 759 |
|
| 760 |
# PDF 1 : CONTRAT
|
| 761 |
+
with col_pdf1:
|
| 762 |
+
pdf_contrat = generer_contrat_pret(loan_data, client_data, df_amort_saved)
|
| 763 |
+
st.download_button(
|
| 764 |
+
"Contrat de Prêt",
|
| 765 |
+
pdf_contrat,
|
| 766 |
+
f"Contrat_{st.session_state.loan_id}.pdf",
|
| 767 |
+
"application/pdf",
|
| 768 |
+
use_container_width=True
|
| 769 |
+
)
|
| 770 |
|
| 771 |
# PDF 2 : RECONNAISSANCE
|
| 772 |
+
with col_pdf2:
|
| 773 |
+
pdf_dette = generer_reconnaissance_dette(loan_data, client_data)
|
| 774 |
+
st.download_button(
|
| 775 |
+
"Reconnaissance de Dette",
|
| 776 |
+
pdf_dette,
|
| 777 |
+
f"Dette_{st.session_state.loan_id}.pdf",
|
| 778 |
+
"application/pdf",
|
| 779 |
+
use_container_width=True
|
| 780 |
+
)
|
| 781 |
|
| 782 |
# PDF 3 : CAUTION (SI GARANT)
|
| 783 |
+
with col_pdf3:
|
| 784 |
+
if garant_data is not None:
|
| 785 |
+
pdf_caution = generer_contrat_caution(loan_data, garant_data)
|
| 786 |
+
st.download_button(
|
| 787 |
+
"Contrat de Caution",
|
| 788 |
+
pdf_caution,
|
| 789 |
+
f"Caution_{st.session_state.loan_id}.pdf",
|
| 790 |
+
"application/pdf",
|
| 791 |
+
use_container_width=True
|
| 792 |
+
)
|
| 793 |
+
else:
|
| 794 |
+
st.info("Pas de garant")
|
| 795 |
+
|
| 796 |
+
# Bouton pour réinitialiser et créer un nouveau prêt
|
| 797 |
+
with col_reset:
|
| 798 |
+
if st.button("Nouveau Prêt", use_container_width=True, type="primary"):
|
| 799 |
+
# Nettoyage du session state
|
| 800 |
+
st.session_state.loan_validated = False
|
| 801 |
+
st.session_state.pop('loan_id', None)
|
| 802 |
+
st.session_state.pop('loan_data', None)
|
| 803 |
+
st.session_state.pop('client_data', None)
|
| 804 |
+
st.session_state.pop('garant_data', None)
|
| 805 |
+
st.session_state.pop('df_amort', None)
|
| 806 |
+
st.rerun()
|
| 807 |
st.markdown('</div>', unsafe_allow_html=True)
|