Files
amap/backend/src/contracts/generate_contract.py
Julien Aldon b662a6a1f0
Some checks failed
Deploy Amap / deploy (push) Failing after 15s
add base template for manual fill
2026-02-20 15:42:15 +01:00

85 lines
2.7 KiB
Python

import jinja2
import src.models as models
import html
from weasyprint import HTML
import io
import pathlib
def generate_html_contract(
contract: models.Contract,
cheques: list[dict],
occasionals: list[dict],
reccurents: list[dict],
recurrent_price: float | None = None,
total_price: float | None = None
):
template_dir = pathlib.Path("./src/contracts/templates").resolve()
template_loader = jinja2.FileSystemLoader(searchpath=template_dir)
template_env = jinja2.Environment(loader=template_loader, autoescape=jinja2.select_autoescape(["html", "xml"]))
template_file = "layout.html"
template = template_env.get_template(template_file)
output_text = template.render(
contract_name=contract.form.name,
contract_type=contract.form.productor.type,
contract_season=contract.form.season,
referer_name=contract.form.referer.name,
referer_email=contract.form.referer.email,
productor_name=contract.form.productor.name,
productor_address=contract.form.productor.address,
payment_methods_map={"cheque": "Ordre du chèque", "transfer": "virements"},
productor_payment_methods=contract.form.productor.payment_methods,
member_name=f'{html.escape(contract.firstname)} {html.escape(contract.lastname)}',
member_email=html.escape(contract.email),
member_phone=html.escape(contract.phone),
contract_start_date=contract.form.start,
contract_end_date=contract.form.end,
occasionals=occasionals,
recurrents=reccurents,
recurrent_price=recurrent_price,
total_price=total_price,
contract_payment_method={"cheque": "chèque", "transfer": "virements"}[contract.payment_method],
cheques=cheques
)
# options = {
# 'page-size': 'Letter',
# 'margin-top': '0.5in',
# 'margin-right': '0.5in',
# 'margin-bottom': '0.5in',
# 'margin-left': '0.5in',
# 'encoding': "UTF-8",
# 'print-media-type': True,
# "disable-javascript": True,
# "disable-external-links": True,
# 'enable-local-file-access': False,
# "disable-local-file-access": True,
# "no-images": True,
# }
return HTML(
string=output_text,
base_url=template_dir,
).write_pdf()
from odfdo import Document, Table, Row, Cell
def generate_recap(
contracts: list[models.Contract],
form: models.Form,
):
data = [
["nom", "email"],
]
doc = Document("spreadsheet")
sheet = Table(name="Recap")
sheet.set_values(data)
doc.body.append(sheet)
buffer = io.BytesIO()
doc.save(buffer)
return buffer.getvalue()