""" Référence (barèmes + catégories + groupe) PUIS un jeu de données d'exemple couvrant tous les modèles : entreprise, clients, factures + lignes, dépenses, et opérations bancaires (débit éclaté, crédit neutre). Usage : python manage.py seed_demo """ from decimal import Decimal from datetime import date from django.core.management.base import BaseCommand from compta.models import ( Entreprise, Client, Facture, LigneFacture, Depense, Paiement, Activite, StatutFacture, RegimeTva, ) from compta.management.commands.seed_reference import charger_reference class Command(BaseCommand): help = "Charge la référence + des données d'exemple (tous les modèles)." def handle(self, *args, **options): cat = charger_reference(self.stdout, self.style) ent, _ = Entreprise.objects.get_or_create( nom="JB Conseil", defaults=dict(activite=Activite.SERVICE_BIC, franchise_tva=False, taux_tva_defaut=Decimal("20.00"), versement_liberatoire=True, email="jb@example.fr", num_tva_intracom="FR00123456789")) clients = {} for nom, mail in [("Acme SARL", "contact@acme.fr"), ("Studio Lumiere", "hello@studiolumiere.fr"), ("Mairie de Ville", "compta@ville.fr")]: c, _ = Client.objects.get_or_create(entreprise=ent, nom=nom, defaults=dict(email=mail)) clients[nom] = c V, S = Activite.VENTE, Activite.SERVICE_BIC factures = [ ("2026-001", "Acme SARL", S, date(2026, 1, 10), date(2026, 1, 25), StatutFacture.ENCAISSEE, [("Dépannage informatique", 2, 600)]), ("2026-002", "Studio Lumiere", V, date(2026, 1, 18), date(2026, 2, 5), StatutFacture.ENCAISSEE, [("Impression 3D - lot pièces", 1, 800)]), ("2026-003", "Mairie de Ville", S, date(2026, 2, 2), date(2026, 2, 20), StatutFacture.ENCAISSEE, [("Maintenance parc", 1, 2500)]), ("2026-004", "Acme SARL", V, date(2026, 3, 1), date(2026, 3, 15), StatutFacture.ENCAISSEE, [("Impression 3D - prototype", 1, 1500)]), ("2026-005", "Studio Lumiere", S, date(2026, 3, 20), None, StatutFacture.ENVOYEE, [("Audit poste de travail", 1, 950)]), ] for numero, client_nom, activite, emis, enc, statut, lignes in factures: f, created = Facture.objects.get_or_create( entreprise=ent, numero=numero, defaults=dict(client=clients[client_nom], activite=activite, date_emission=emis, date_encaissement=enc, statut=statut)) if created: for des, qte, pu in lignes: LigneFacture.objects.create(facture=f, designation=des, quantite=Decimal(qte), prix_unitaire_ht=Decimal(pu), taux_tva=Decimal("20")) f.recompute_totaux() def depense(libelle, jour, montant_ttc, cat_nom, taux="20", regime=RegimeTva.NATIONALE, activite="", paiement=None): # montant_tva est calculé automatiquement dans Depense.save(). Depense.objects.get_or_create( entreprise=ent, libelle=libelle, date=date(2026, *jour), defaults=dict(categorie=cat[cat_nom], activite=activite, paiement=paiement, regime_tva=regime, taux_tva=Decimal(taux), montant_ttc=Decimal(montant_ttc))) # Opération bancaire DÉBIT éclatée : un paiement Amazon = 2 dépenses amazon, _ = Paiement.objects.get_or_create( entreprise=ent, libelle="AMAZON PAYMENTS", date=date(2026, 6, 22), defaults=dict(montant_total=Decimal("24.52"), sens="debit")) depense("Amazon - visserie", (6, 22), "15.82", "Matériel et outillage", activite=Activite.VENTE, paiement=amazon) depense("Amazon - filament", (6, 18), "8.70", "Matériel et outillage", activite=Activite.VENTE, paiement=amazon) # Dépenses variées (taux 20 / 10 / intracom / neutre) depense("Bobines PLA/PETG", (1, 15), "96.00", "Matière première", activite=Activite.VENTE) depense("Burger King", (6, 11), "16.15", "Frais de repas hors domicile", taux="10") depense("Abonnement outils", (2, 10), "34.80", "Abonnement logiciel", activite=Activite.SERVICE_BIC) depense("Imprimante 3D (DE)", (2, 20), "500.00", "Matériel et outillage", regime=RegimeTva.INTRACOM, activite=Activite.VENTE) depense("URSSAF DE LORRAINE", (6, 3), "73.00", "Cotisation sociale Urssaf", taux="0") # Opération bancaire CRÉDIT neutre : remboursement de TVA Paiement.objects.get_or_create( entreprise=ent, libelle="SIE EPINAL", date=date(2026, 6, 15), defaults=dict(montant_total=Decimal("103.00"), sens="credit", categorie=cat["Remboursement de TVA"])) self.stdout.write(self.style.SUCCESS("Données d'exemple chargées (tous les modèles)."))