Taux TVA auto + seed enrichi + import photo collee
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
"""
|
||||
Charge les données de RÉFÉRENCE (barèmes + catégories) puis un jeu de
|
||||
données d'EXEMPLE (entreprise, clients, factures, dépenses).
|
||||
Pour la prod, préférez `seed_reference` (référence seule, sans démo).
|
||||
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
|
||||
"""
|
||||
@@ -11,14 +11,14 @@ from datetime import date
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from compta.models import (
|
||||
Entreprise, Client, Facture, LigneFacture, Depense, Activite,
|
||||
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."
|
||||
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)
|
||||
@@ -26,16 +26,14 @@ class Command(BaseCommand):
|
||||
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"))
|
||||
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))
|
||||
c, _ = Client.objects.get_or_create(entreprise=ent, nom=nom, defaults=dict(email=mail))
|
||||
clients[nom] = c
|
||||
|
||||
V, S = Activite.VENTE, Activite.SERVICE_BIC
|
||||
@@ -55,32 +53,44 @@ class Command(BaseCommand):
|
||||
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))
|
||||
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"))
|
||||
LigneFacture.objects.create(facture=f, designation=des, quantite=Decimal(qte),
|
||||
prix_unitaire_ht=Decimal(pu), taux_tva=Decimal("20"))
|
||||
f.recompute_totaux()
|
||||
|
||||
Depense.objects.get_or_create(
|
||||
entreprise=ent, libelle="Bobines PLA/PETG", date=date(2026, 1, 15),
|
||||
defaults=dict(categorie=cat["Matière première"], activite=Activite.VENTE,
|
||||
montant_ttc=Decimal("96.00"), montant_tva=Decimal("16.00")))
|
||||
Depense.objects.get_or_create(
|
||||
entreprise=ent, libelle="Abonnement outils", date=date(2026, 2, 10),
|
||||
defaults=dict(categorie=cat["Abonnement logiciel"],
|
||||
activite=Activite.SERVICE_BIC,
|
||||
montant_ttc=Decimal("34.80"), montant_tva=Decimal("5.80")))
|
||||
Depense.objects.get_or_create(
|
||||
entreprise=ent, libelle="Imprimante 3D (DE)", date=date(2026, 2, 20),
|
||||
defaults=dict(categorie=cat["Matériel et outillage"], activite=Activite.VENTE,
|
||||
regime_tva=RegimeTva.INTRACOM, taux_tva=Decimal("20"),
|
||||
montant_ttc=Decimal("500.00"), montant_tva=Decimal("0")))
|
||||
Depense.objects.get_or_create(
|
||||
entreprise=ent, libelle="URSSAF DE LORRAINE", date=date(2026, 3, 3),
|
||||
defaults=dict(categorie=cat["Cotisation sociale Urssaf"],
|
||||
montant_ttc=Decimal("73.00"), montant_tva=Decimal("0")))
|
||||
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)))
|
||||
|
||||
self.stdout.write(self.style.SUCCESS("Données d'exemple chargées."))
|
||||
# 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)."))
|
||||
|
||||
Reference in New Issue
Block a user