ComptaInde/billing/views.py

139 lines
4.6 KiB
Python

from django.shortcuts import render, get_object_or_404
from django.template import RequestContext
from django.http import HttpResponse
from django.template.loader import render_to_string
from weasyprint import HTML, CSS
# from weasyprint.fonts import FontConfiguration
# from PIL import Image
import os
import pendulum
from django.conf import settings
from datetime import date
from comptabilite.facture_config import loadFactureConfig
from .models import (
Client,
Contract,
Prestation,
)
def contract_listing(request, client_id=None):
"""
Renvoie la liste de tous les contrats.
"""
if client_id:
client = get_object_or_404(Client, pk=client_id)
contract_list = client.contracts.all()
else:
client = None
contract_list = Contract.objects.all()
context = {"contract_list": contract_list, "client": client}
return render(request, "contract/listing.html", context)
def contract_detail(request, contract_id):
"""
Renvoie toutes les informations relatives à un contrat, en ce y compris les prestations
relatives à celui-ci.
"""
contract = Contract.objects.get(pk=contract_id)
total_without_discount_htva = contract.get_contract_sum("total_amount_htva")
total_without_discount_tvac = contract.get_contract_sum("total_amount_tvac")
total_with_discount_htva = total_without_discount_htva
total_with_discount_tvac = total_without_discount_tvac
for discount in contract.discounts.all():
total_with_discount_htva -= discount.amount_htva()
total_with_discount_tvac -= discount.amount_tvac()
context = {
"contract": contract,
"prestations_list": contract.get_prestation.all(),
"total_without_discount_htva": total_without_discount_htva,
"total_without_discount_tvac": total_without_discount_tvac,
"total_with_discount_htva": total_with_discount_htva,
"total_with_discount_tvac": total_with_discount_tvac,
}
return render(request, "contract/detail.html", context)
def client_listing(request):
"""
Renvoie la liste de tous les clients.
"""
client_list = Client.objects.all()
context = {"client_list": client_list}
return render(request, "client/listing.html", context)
def prestation_listing(request):
"""
Renvoie la liste de toutes les prestations.
"""
prestation_list = Prestation.objects.all()
context = {"prestation_list": prestation_list}
return render(request, "prestation/listing.html", context)
def contract_export(request, contract_id):
"""Génere un fichier PDF à fournir au client."""
contract = get_object_or_404(Contract, pk=contract_id)
if not contract.invoiced_date:
today = pendulum.now().date()
contract.invoiced_date = today
contract.save()
contract = Contract.objects.get(pk=contract_id)
total_without_discount_htva = contract.get_contract_sum("total_amount_htva")
total_without_discount_tvac = contract.get_contract_sum("total_amount_tvac")
total_with_discount_htva = total_without_discount_htva
total_with_discount_tvac = total_without_discount_tvac
for discount in contract.discounts.all():
total_with_discount_htva -= discount.amount_htva()
total_with_discount_tvac -= discount.amount_tvac()
context = {
"contract": contract,
"client": contract.client,
"date": contract.invoiced_date,
"prestations_list": contract.get_prestation.all(),
# "discounts_list": discounts_list,
# "discount_result": discount_result,
# "prestations_count": prestations_count,
"total_without_discount_htva": total_without_discount_htva,
"total_without_discount_tvac": total_without_discount_tvac,
"total_with_discount_htva": total_with_discount_htva,
"total_with_discount_tvac": total_with_discount_tvac,
}
# return render(request, "to_pdf/facture.html", context)
html = render_to_string("to_pdf/facture.html", context)
response = HttpResponse(content_type="application/pdf")
response[
"Content-Disposition"
] = f"attachment; filename=facture.pdf" # pylint: disable=line-too-long
# font_config = FontConfiguration()
HTML(string=html, base_url=request.build_absolute_uri()).write_pdf(
response,
stylesheets=[
CSS(settings.STATICFILES_DIRS[0] + "/css/a4_paper.css"),
CSS(settings.STATICFILES_DIRS[0] + "/css/black-dashboard_report.css"),
CSS(settings.STATICFILES_DIRS[0] + "/css/to_pdf.css"),
],
) # , font_config=font_config)
return response