Files

147 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
MOIS = services.MOIS_FR
def _entreprise(request):
"""Entreprise courante, restreinte à celles accessibles par l'utilisateur."""
accessibles = Entreprise.accessibles(request.user)
eid = request.GET.get("entreprise")
if eid:
return get_object_or_404(accessibles, pk=eid)
return accessibles.first()
def _annee(request):
return int(request.GET.get("annee", date.today().year))
def _base_ctx(request, entreprise, annee, vue):
return {
"entreprise": entreprise,
"entreprises": Entreprise.accessibles(request.user),
"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(request)
if entreprise is None:
return render(request, "compta/dashboard.html", {"entreprise": None})
annee = _annee(request)
ctx = services.synthese(entreprise, annee)
ctx.update(_base_ctx(request, entreprise, annee, "global"))
ctx.update({
"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)
@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(request, 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(request, 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(request, 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("")
return resp
@login_required
def export_ventes(request):
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"])
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(request)
annee = _annee(request)
s = services.synthese(entreprise, annee)
resp = _csv(f"tva_{annee}.csv")
w = csv.writer(resp, delimiter=";")
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
@login_required
def export_urssaf(request):
entreprise = _entreprise(request)
annee = _annee(request)
s = services.synthese(entreprise, annee)
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"])
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