fix(wave-mock): appeler mock-complete backend pour créditer réellement les comptes

Le mock simulait seulement l'UI mais n'appelait pas le backend pour
confirmer le paiement → le solde restait à 0 après dépôt simulé.

Fix : en mode mock, après la simulation UI, appeler
GET /api/wave-redirect/mock-complete?ref={id} qui :
- Marque l'intention de paiement comme complétée
- Crédite le compte épargne (pour les dépôts)
- Enregistre le paiement de cotisation (pour les cotisations)

Changements :
- depot_epargne_dialog : appelle confirmerMockPaiement(versementId)
- payment_dialog : appelle confirmerMockPaiement(clientReference)
- transaction_epargne_repository : nouvelle méthode confirmerMockPaiement()
  + versementId ajouté à DepotWaveResult
- contribution_repository : nouvelle méthode confirmerMockPaiement()
  + intentionPaiementId ajouté à WavePaiementInitResult
This commit is contained in:
dahoud
2026-04-16 19:39:27 +00:00
parent 1d20687a43
commit 22fec56fcf
4 changed files with 39 additions and 7 deletions

View File

@@ -161,11 +161,14 @@ class _DepotEpargneDialogState extends State<DepotEpargneDialog> {
final url = result.waveLaunchUrl.isNotEmpty ? result.waveLaunchUrl : result.redirectUrl;
if (url.isEmpty) throw Exception('URL Wave non reçue');
// Mode dev/mock : simuler le paiement au lieu d'ouvrir le navigateur
// Mode dev/mock : simuler le paiement ET confirmer côté backend
final isMock = url.contains('mock') || url.contains('localhost') || !AppConfig.isProd;
if (isMock) {
// Simulation : attendre 1s puis confirmer le succès
await Future.delayed(const Duration(milliseconds: 800));
// 1. Appeler le mock-complete backend pour réellement créditer le compte
try {
await _repository.confirmerMockPaiement(result.versementId);
} catch (_) {}
await Future.delayed(const Duration(milliseconds: 400));
if (!mounted) return;
Navigator.of(context).pop(true);
widget.onSuccess?.call();
@@ -174,7 +177,7 @@ class _DepotEpargneDialogState extends State<DepotEpargneDialog> {
content: const Row(children: [
Icon(Icons.science_rounded, color: Colors.white, size: 16),
SizedBox(width: 8),
Expanded(child: Text('Dépôt simulé avec succès (mode dev)')),
Expanded(child: Text('Dépôt simulé et crédité (mode dev)')),
]),
backgroundColor: AppColors.success,
),