JB Compta v1.1 - multi-activité
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
import csv
|
||||
from datetime import date
|
||||
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
|
||||
from .models import Entreprise
|
||||
from . import services
|
||||
|
||||
|
||||
def _entreprise_courante(request):
|
||||
eid = request.GET.get("entreprise")
|
||||
qs = Entreprise.objects.all()
|
||||
if eid:
|
||||
return get_object_or_404(Entreprise, pk=eid)
|
||||
return qs.first()
|
||||
|
||||
|
||||
@login_required
|
||||
def dashboard(request):
|
||||
entreprise = _entreprise_courante(request)
|
||||
if entreprise is None:
|
||||
return render(request, "compta/dashboard.html", {"entreprise": None})
|
||||
|
||||
annee = int(request.GET.get("annee", date.today().year))
|
||||
ctx = services.synthese(entreprise, annee)
|
||||
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"]],
|
||||
})
|
||||
return render(request, "compta/dashboard.html", ctx)
|
||||
|
||||
|
||||
def _csv_response(filename):
|
||||
resp = HttpResponse(content_type="text/csv; charset=utf-8")
|
||||
resp["Content-Disposition"] = f'attachment; filename="{filename}"'
|
||||
resp.write("") # BOM pour Excel
|
||||
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")
|
||||
w = csv.writer(resp, delimiter=";")
|
||||
w.writerow(["Numero", "Client", "Activite", "Date emission",
|
||||
"Date encaissement", "Statut", "HT", "TVA", "TTC"])
|
||||
for f in services.factures_encaissees(entreprise, annee).select_related("client"):
|
||||
w.writerow([f.numero, f.client.nom, f.get_activite_display(),
|
||||
f.date_emission, f.date_encaissement, f.get_statut_display(),
|
||||
f.montant_ht, f.montant_tva, f.montant_ttc])
|
||||
return resp
|
||||
|
||||
|
||||
@login_required
|
||||
def export_tva(request):
|
||||
entreprise = _entreprise_courante(request)
|
||||
annee = int(request.GET.get("annee", date.today().year))
|
||||
s = services.synthese(entreprise, annee)
|
||||
resp = _csv_response(f"tva_{annee}.csv")
|
||||
w = csv.writer(resp, delimiter=";")
|
||||
w.writerow(["Annee", "TVA collectee", "TVA deductible", "TVA a reverser"])
|
||||
w.writerow([annee, s["tva_collectee"], s["tva_deductible"],
|
||||
s["tva_a_reverser"]])
|
||||
return resp
|
||||
|
||||
|
||||
@login_required
|
||||
def export_urssaf(request):
|
||||
entreprise = _entreprise_courante(request)
|
||||
annee = int(request.GET.get("annee", date.today().year))
|
||||
s = services.synthese(entreprise, annee)
|
||||
resp = _csv_response(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"])
|
||||
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"]])
|
||||
return resp
|
||||
Reference in New Issue
Block a user