klydekushy commited on
Commit
84b142e
·
verified ·
1 Parent(s): d6225f1

Update src/DocumentGen/InvoiceRepayment.py

Browse files
Files changed (1) hide show
  1. src/DocumentGen/InvoiceRepayment.py +38 -36
src/DocumentGen/InvoiceRepayment.py CHANGED
@@ -13,41 +13,31 @@ def generer_recu(data):
13
 
14
  Args:
15
  data: dict contenant toutes les informations nécessaires
16
- {
17
- 'numero_recu': 'REC-2026-0001',
18
- 'trans_id': 'TRX-2026-0042',
19
- 'date_paiement': date(2026, 1, 15),
20
- 'client': {...},
21
- 'loan': {...},
22
- 'paiement': {...},
23
- 'moyen': 'Mobile Money (Wave)',
24
- 'reference': 'WAVE-TXN-123456'
25
- }
26
 
27
  Returns:
28
- BytesIO: Buffer contenant le PDF
29
  """
30
 
31
- try:
32
- # === AJOUT DE LOGS DE DEBUG ===
33
- print("=== DÉBUT GÉNÉRATION REÇU ===")
34
- print(f"Données reçues : {data.keys()}")
35
- print(f"Numéro reçu : {data.get('numero_recu')}")
36
- print(f"Transaction ID : {data.get('trans_id')}")
37
-
38
- # Vérification des données minimales
39
- if not data.get('numero_recu'):
40
- print("ERREUR : numero_recu manquant")
41
- return None
42
-
43
- if not data.get('client'):
44
- print("ERREUR : données client manquantes")
45
- return None
46
-
47
- if not data.get('paiement'):
48
- print("ERREUR : données paiement manquantes")
49
- return None
50
 
 
51
  try:
52
  # Création du buffer
53
  buffer = BytesIO()
@@ -115,8 +105,10 @@ def generer_recu(data):
115
  elements.append(Spacer(1, 0.3*cm))
116
 
117
  # Numéro de reçu et date
 
 
118
  header_data = [
119
- [f"N° {data['numero_recu']}", f"Date: {data['date_paiement'].strftime('%d/%m/%Y')}"]
120
  ]
121
  header_table = Table(header_data, colWidths=[8*cm, 8*cm])
122
  header_table.setStyle(TableStyle([
@@ -141,7 +133,7 @@ def generer_recu(data):
141
  client_data = [
142
  ['Nom Complet:', client.get('Nom_Complet', 'N/A')],
143
  ['N° Client:', client.get('ID_Client', 'N/A')],
144
- ['Téléphone:', client.get('Telephone', 'N/A')],
145
  ['Adresse:', client.get('Adresse', 'N/A')]
146
  ]
147
 
@@ -186,9 +178,17 @@ def generer_recu(data):
186
  elements.append(Paragraph("DÉTAILS DU PAIEMENT", subtitle_style))
187
 
188
  paiement = data['paiement']
 
 
 
 
 
 
 
 
189
  payment_data = [
190
- ['Échéance:', paiement.get('numero_echeance', 'N/A')],
191
- ['Date Échéance Prévue:', paiement.get('date_echeance_prevue', 'N/A').strftime('%d/%m/%Y') if hasattr(paiement.get('date_echeance_prevue', ''), 'strftime') else paiement.get('date_echeance_prevue', 'N/A')],
192
  ['Retard (jours):', str(paiement.get('jours_retard', 0))],
193
  ['Statut:', paiement.get('statut_paiement', 'N/A')]
194
  ]
@@ -230,7 +230,10 @@ def generer_recu(data):
230
  elements.append(Spacer(1, 0.3*cm))
231
 
232
  # === MONTANT TOTAL VERSÉ ===
233
- montant_verse = paiement.get('montant_verse', paiement.get('montant_principal', 0) + paiement.get('montant_interets', 0) + paiement.get('penalites_retard', 0))
 
 
 
234
 
235
  total_data = [
236
  ['MONTANT TOTAL VERSÉ', f"{montant_verse:,.0f} XOF"]
@@ -335,7 +338,6 @@ def generer_recu(data):
335
  # Retour du buffer
336
  buffer.seek(0)
337
  print("=== PDF GÉNÉRÉ AVEC SUCCÈS ===")
338
- buffer.seek(0)
339
  return buffer
340
 
341
  except Exception as e:
 
13
 
14
  Args:
15
  data: dict contenant toutes les informations nécessaires
 
 
 
 
 
 
 
 
 
 
16
 
17
  Returns:
18
+ BytesIO: Buffer contenant le PDF (ou None en cas d'erreur)
19
  """
20
 
21
+ # === 1. LOGS ET VALIDATION (Pas besoin de try ici) ===
22
+ print("=== DÉBUT GÉNÉRATION REÇU ===")
23
+ print(f"Données reçues : {data.keys()}")
24
+ print(f"Numéro reçu : {data.get('numero_recu')}")
25
+ print(f"Transaction ID : {data.get('trans_id')}")
26
+
27
+ # Vérification des données minimales
28
+ if not data.get('numero_recu'):
29
+ print("ERREUR : numero_recu manquant")
30
+ return None
31
+
32
+ if not data.get('client'):
33
+ print("ERREUR : données client manquantes")
34
+ return None
35
+
36
+ if not data.get('paiement'):
37
+ print("ERREUR : données paiement manquantes")
38
+ return None
 
39
 
40
+ # === 2. GÉNÉRATION PDF (Protégé par try/except) ===
41
  try:
42
  # Création du buffer
43
  buffer = BytesIO()
 
105
  elements.append(Spacer(1, 0.3*cm))
106
 
107
  # Numéro de reçu et date
108
+ date_str = data['date_paiement'].strftime('%d/%m/%Y') if hasattr(data['date_paiement'], 'strftime') else str(data['date_paiement'])
109
+
110
  header_data = [
111
+ [f"N° {data['numero_recu']}", f"Date: {date_str}"]
112
  ]
113
  header_table = Table(header_data, colWidths=[8*cm, 8*cm])
114
  header_table.setStyle(TableStyle([
 
133
  client_data = [
134
  ['Nom Complet:', client.get('Nom_Complet', 'N/A')],
135
  ['N° Client:', client.get('ID_Client', 'N/A')],
136
+ ['Téléphone:', str(client.get('Telephone', 'N/A'))],
137
  ['Adresse:', client.get('Adresse', 'N/A')]
138
  ]
139
 
 
178
  elements.append(Paragraph("DÉTAILS DU PAIEMENT", subtitle_style))
179
 
180
  paiement = data['paiement']
181
+
182
+ # Gestion sûre de la date d'échéance
183
+ date_echeance = paiement.get('date_echeance_prevue', 'N/A')
184
+ if hasattr(date_echeance, 'strftime'):
185
+ date_echeance_str = date_echeance.strftime('%d/%m/%Y')
186
+ else:
187
+ date_echeance_str = str(date_echeance)
188
+
189
  payment_data = [
190
+ ['Échéance:', str(paiement.get('numero_echeance', 'N/A'))],
191
+ ['Date Échéance Prévue:', date_echeance_str],
192
  ['Retard (jours):', str(paiement.get('jours_retard', 0))],
193
  ['Statut:', paiement.get('statut_paiement', 'N/A')]
194
  ]
 
230
  elements.append(Spacer(1, 0.3*cm))
231
 
232
  # === MONTANT TOTAL VERSÉ ===
233
+ montant_verse = paiement.get('montant_verse',
234
+ paiement.get('montant_principal', 0) +
235
+ paiement.get('montant_interets', 0) +
236
+ paiement.get('penalites_retard', 0))
237
 
238
  total_data = [
239
  ['MONTANT TOTAL VERSÉ', f"{montant_verse:,.0f} XOF"]
 
338
  # Retour du buffer
339
  buffer.seek(0)
340
  print("=== PDF GÉNÉRÉ AVEC SUCCÈS ===")
 
341
  return buffer
342
 
343
  except Exception as e: