Guide de Démarrage Rapide - Gestion des Acomptes
✅ Implémentation terminée !
La fonctionnalité de gestion des acomptes et d'historique de paiement est maintenant intégrée dans l'application.
🚀 Ce qui a été fait
1. Base de données
- ✅ Table
payment_transactionscréée avec tous les champs nécessaires - ✅ Champ
acompte_montantajouté à la tablecommandes - ✅ Migrations SQL prêtes à être appliquées
2. Code Dart
- ✅ Entités complètes (PaymentTransaction, statuts, types)
- ✅ Repository fonctionnel avec toutes les méthodes CRUD
- ✅ Entité Commande enrichie avec propriétés calculées
- ✅ Widget d'historique de paiement intégré
- ✅ Dialog d'ajout de paiement manuel
- ✅ Intégration dans la page de détails de commande
3. Build
- ✅ Aucune erreur de compilation
- ✅ Application buildée avec succès
📋 Utilisation
1. Dans l'interface
Lorsque vous ouvrez une commande avec un prix :
- Historique de paiement : Affiche automatiquement tous les paiements
- Barre de progression : Montre visuellement le pourcentage payé
- Bouton "Ajouter un paiement" : Permet d'enregistrer un paiement manuel
2. Ajouter un paiement manuel
Cas d'usage : Le client a payé en espèces ou par virement
- Ouvrez une commande
- Cliquez sur "Ajouter un paiement"
- Choisissez le type :
- 💰 Acompte : Paiement partiel initial
- 💵 Solde : Paiement final
- 📝 Partiel : Paiement intermédiaire
- ✅ Total : Paiement complet
- Le montant est pré-rempli intelligemment :
- Acompte → Montant d'acompte défini ou 30% du total
- Solde → Montant restant à payer
- Total → Prix total
- Sélectionnez la méthode : Espèces, Carte, Virement, Autre
- Ajoutez des notes si nécessaire
- Confirmez
Le paiement apparaît instantanément dans l'historique ✅
3. Exemple de flux complet
Commande : Gâteau mariage - 150€
Étape 1 : Création de la commande
Prix : 150€
Acompte requis : 50€ (optionnel)
Étape 2 : Client paie l'acompte
➕ Ajouter un paiement
Type : Acompte
Label : "Acompte"
Montant : 50€
Méthode : Virement
Résultat :
✅ Acompte payé
📊 Progression : 50€ / 150€ (33%)
💰 Restant : 100€
Étape 3 : Livraison - Client paie le solde
➕ Ajouter un paiement
Type : Solde
Label : "Livraison"
Montant : 100€
Méthode : Espèces
Résultat :
✅ Payé
📊 Progression : 150€ / 150€ (100%)
💰 Restant : 0€
🔮 Prochaines étapes
Pour intégrer avec le chat IA
-
Demander l'acompte lors de la création
"Souhaitez-vous demander un acompte ? (Oui/Non)"
"Quel montant ? (suggéré: 30% = 45€)" -
Envoyer le lien de paiement
// Créer une transaction pour l'acompte
final transaction = await _transactionRepository.createTransaction(
commandeId: commande.id,
montant: 45.0,
label: 'Acompte',
type: PaymentTransactionType.acompte,
);
// Créer le lien Stripe
final paymentLink = await _paymentRepository.createPaymentLink(...);
// Lier la transaction au payment_link
await _transactionRepository.updateTransaction(
transaction.copyWith(paymentLinkId: paymentLink.id),
);
// Envoyer via WhatsApp
"Voici le lien pour payer l'acompte de 45€ : [lien]" -
Confirmer le paiement via webhook
// Quand Stripe confirme
await _transactionRepository.markTransactionAsPaid(
transactionId: transaction.id,
stripePaymentIntentId: paymentIntentId,
);
Pour améliorer l'UX
- Notifications : Envoyer une notif quand un paiement est reçu
- Édition : Permettre de modifier/annuler une transaction en attente
- Export : Générer un reçu PDF de l'historique des paiements
- Statistiques : Afficher le total des paiements reçus par mois
🎯 Avantages de cette implémentation
- ✅ Flexible : N'importe quel nombre de paiements partiels
- ✅ Traçable : Historique complet avec dates et méthodes
- ✅ Automatique : Calculs de montants restants en temps réel
- ✅ Compatible : Fonctionne avec les commandes existantes
- ✅ Évolutif : Facile d'ajouter des fonctionnalités (remboursements, etc.)
📊 Structure des données
PaymentTransaction
{
id: "uuid",
commandeId: "uuid",
montant: 50.0,
devise: "EUR",
type: "acompte",
label: "Acompte",
paymentMethod: "card",
status: "completed",
paidAt: "2025-01-10T14:30:00Z",
notes: "Paiement reçu par virement"
}
Commande (enrichie)
{
id: "uuid",
titre: "Gâteau mariage",
prix: 150.0,
acompteMontant: 50.0, // Nouveau
transactions: [...] // Nouveau
// Propriétés calculées :
montantPaye: 50.0,
montantRestant: 100.0,
acomptePaye: true,
totalementPaye: false,
pourcentagePaye: 33.33
}
🐛 Dépannage
Les transactions ne s'affichent pas
- Vérifiez que les migrations SQL sont appliquées
- Vérifiez que la commande a un prix défini (> 0)
Erreur lors de l'ajout de paiement
- Vérifiez que le montant ne dépasse pas le restant à payer
- Vérifiez la connexion à Supabase
Le widget ne s'affiche pas
- Vérifiez que
commande.prix != null && commande.prix! > 0 - Vérifiez les imports dans
commande_details_page.dart
📚 Documentation complète
Pour plus de détails, consultez :
PAYMENT_HISTORY_README.md: Documentation complètesupabase/migrations/: Migrations SQLlib/features/calendar/domain/entities/: Entitéslib/features/calendar/data/repositories/: Repositories
Développé avec ❤️ pour Kazalendar