85 lines
2.7 KiB
Python
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()
|
|
|