Saisie unifiée + 4 vues dashboard (mensuel, déclarations URSSAF/TVA)

This commit is contained in:
2026-06-30 08:21:14 +02:00
parent 54f9fc56f4
commit 80042faf0f
29 changed files with 808 additions and 437 deletions
+82 -28
View File
@@ -8,26 +8,40 @@ from django.shortcuts import render, get_object_or_404
from .models import Entreprise
from . import services
MOIS = services.MOIS_FR
def _entreprise_courante(request):
def _entreprise(request):
eid = request.GET.get("entreprise")
qs = Entreprise.objects.all()
if eid:
return get_object_or_404(Entreprise, pk=eid)
return qs.first()
return Entreprise.objects.first()
def _annee(request):
return int(request.GET.get("annee", date.today().year))
def _base_ctx(entreprise, annee, vue):
return {
"entreprise": entreprise,
"entreprises": Entreprise.objects.all(),
"annee": annee,
"annees": services.annees_disponibles(entreprise) or [annee],
"vue": vue,
"mois_liste": list(enumerate(MOIS, start=1)),
}
@login_required
def dashboard(request):
entreprise = _entreprise_courante(request)
entreprise = _entreprise(request)
if entreprise is None:
return render(request, "compta/dashboard.html", {"entreprise": None})
annee = int(request.GET.get("annee", date.today().year))
annee = _annee(request)
ctx = services.synthese(entreprise, annee)
ctx.update(_base_ctx(entreprise, annee, "global"))
ctx.update({
"entreprises": Entreprise.objects.all(),
"annees": services.annees_disponibles(entreprise) or [annee],
"mois_labels": ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin",
"Juil", "Août", "Sep", "Oct", "Nov", "Déc"],
"ca_mensuel_json": [float(v) for v in ctx["ca_mensuel"]],
@@ -35,18 +49,59 @@ def dashboard(request):
return render(request, "compta/dashboard.html", ctx)
def _csv_response(filename):
@login_required
def vue_mensuelle(request):
entreprise = _entreprise(request)
if entreprise is None:
return render(request, "compta/mensuel.html", {"entreprise": None})
annee = _annee(request)
ctx = _base_ctx(entreprise, annee, "mensuel")
ctx["rows"] = services.tableau_mensuel(entreprise, annee)
return render(request, "compta/mensuel.html", ctx)
@login_required
def declaration_urssaf(request):
entreprise = _entreprise(request)
if entreprise is None:
return render(request, "compta/decl_urssaf.html", {"entreprise": None})
annee = _annee(request)
mois = int(request.GET.get("mois", date.today().month))
ctx = _base_ctx(entreprise, annee, "urssaf")
ctx["mois_sel"] = mois
ctx["decl"] = services.declaration_urssaf(entreprise, annee, mois)
return render(request, "compta/decl_urssaf.html", ctx)
@login_required
def declaration_tva(request):
entreprise = _entreprise(request)
if entreprise is None:
return render(request, "compta/decl_tva.html", {"entreprise": None})
annee = _annee(request)
mois = int(request.GET.get("mois", date.today().month))
mode = request.GET.get("mode") or entreprise.vue_tva
ctx = _base_ctx(entreprise, annee, "tva")
ctx["mois_sel"] = mois
ctx["mode"] = mode
ctx["decl"] = services.declaration_tva(entreprise, annee, mois)
return render(request, "compta/decl_tva.html", ctx)
# ---- Exports CSV --------------------------------------------------------
def _csv(filename):
resp = HttpResponse(content_type="text/csv; charset=utf-8")
resp["Content-Disposition"] = f'attachment; filename="{filename}"'
resp.write("") # BOM pour Excel
resp.write("")
return resp
@login_required
def export_ventes(request):
entreprise = _entreprise_courante(request)
annee = int(request.GET.get("annee", date.today().year))
resp = _csv_response(f"ventes_{annee}.csv")
entreprise = _entreprise(request)
annee = _annee(request)
resp = _csv(f"ventes_{annee}.csv")
w = csv.writer(resp, delimiter=";")
w.writerow(["Numero", "Client", "Activite", "Date emission",
"Date encaissement", "Statut", "HT", "TVA", "TTC"])
@@ -59,13 +114,13 @@ def export_ventes(request):
@login_required
def export_tva(request):
entreprise = _entreprise_courante(request)
annee = int(request.GET.get("annee", date.today().year))
entreprise = _entreprise(request)
annee = _annee(request)
s = services.synthese(entreprise, annee)
resp = _csv_response(f"tva_{annee}.csv")
resp = _csv(f"tva_{annee}.csv")
w = csv.writer(resp, delimiter=";")
w.writerow(["Annee", "TVA sur ventes", "TVA autoliquidee (UE/import)",
"TVA collectee totale", "TVA deductible", "TVA a reverser"])
w.writerow(["Annee", "TVA sur ventes", "TVA autoliquidee", "TVA collectee",
"TVA deductible", "TVA a reverser"])
w.writerow([annee, s["tva_sur_ventes"], s["tva_autoliquidee"],
s["tva_collectee"], s["tva_deductible"], s["tva_a_reverser"]])
return resp
@@ -73,18 +128,17 @@ def export_tva(request):
@login_required
def export_urssaf(request):
entreprise = _entreprise_courante(request)
annee = int(request.GET.get("annee", date.today().year))
entreprise = _entreprise(request)
annee = _annee(request)
s = services.synthese(entreprise, annee)
resp = _csv_response(f"urssaf_{annee}.csv")
resp = _csv(f"urssaf_{annee}.csv")
w = csv.writer(resp, delimiter=";")
w.writerow(["Annee", "Activite", "CA HT", "Taux URSSAF", "Cotisations",
"Taux VL", "Versement liberatoire", "Abattement",
"Revenu imposable"])
"Taux VL", "Versement liberatoire", "Abattement", "Revenu imposable"])
for l in s["lignes_activite"]:
w.writerow([annee, l["label"], l["ca_ht"], l["taux_urssaf"],
l["cotisations"], l["taux_vl"], l["versement_liberatoire"],
l["abattement_fiscal"], l["revenu_imposable"]])
w.writerow([annee, "TOTAL", s["ca_ht"], "", s["cotisations_urssaf"],
"", s["versement_liberatoire"], "", s["revenu_imposable"]])
w.writerow([annee, l["label"], l["ca_ht"], l["taux_urssaf"], l["cotisations"],
l["taux_vl"], l["versement_liberatoire"], l["abattement_fiscal"],
l["revenu_imposable"]])
w.writerow([annee, "TOTAL", s["ca_ht"], "", s["cotisations_urssaf"], "",
s["versement_liberatoire"], "", s["revenu_imposable"]])
return resp