Aller au contenu principal

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_transactions créée avec tous les champs nécessaires
  • ✅ Champ acompte_montant ajouté à la table commandes
  • ✅ 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 :

  1. Historique de paiement : Affiche automatiquement tous les paiements
  2. Barre de progression : Montre visuellement le pourcentage payé
  3. 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

  1. Ouvrez une commande
  2. Cliquez sur "Ajouter un paiement"
  3. Choisissez le type :
    • 💰 Acompte : Paiement partiel initial
    • 💵 Solde : Paiement final
    • 📝 Partiel : Paiement intermédiaire
    • Total : Paiement complet
  4. Le montant est pré-rempli intelligemment :
    • Acompte → Montant d'acompte défini ou 30% du total
    • Solde → Montant restant à payer
    • Total → Prix total
  5. Sélectionnez la méthode : Espèces, Carte, Virement, Autre
  6. Ajoutez des notes si nécessaire
  7. 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

  1. Demander l'acompte lors de la création

    "Souhaitez-vous demander un acompte ? (Oui/Non)"
    "Quel montant ? (suggéré: 30% = 45€)"
  2. 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]"
  3. Confirmer le paiement via webhook

    // Quand Stripe confirme
    await _transactionRepository.markTransactionAsPaid(
    transactionId: transaction.id,
    stripePaymentIntentId: paymentIntentId,
    );

Pour améliorer l'UX

  1. Notifications : Envoyer une notif quand un paiement est reçu
  2. Édition : Permettre de modifier/annuler une transaction en attente
  3. Export : Générer un reçu PDF de l'historique des paiements
  4. Statistiques : Afficher le total des paiements reçus par mois

🎯 Avantages de cette implémentation

  1. Flexible : N'importe quel nombre de paiements partiels
  2. Traçable : Historique complet avec dates et méthodes
  3. Automatique : Calculs de montants restants en temps réel
  4. Compatible : Fonctionne avec les commandes existantes
  5. É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ète
  • supabase/migrations/ : Migrations SQL
  • lib/features/calendar/domain/entities/ : Entités
  • lib/features/calendar/data/repositories/ : Repositories

Développé avec ❤️ pour Kazalendar