WIP contract recap

This commit is contained in:
2026-02-19 16:19:40 +01:00
parent acbaadff67
commit 8c6b25ded8

View File

@@ -60,19 +60,57 @@ def generate_html_contract(
base_url=template_dir base_url=template_dir
).write_pdf() ).write_pdf()
from odfdo import Document, Table, Row, Cell def flatten(xss):
return [x for xs in xss for x in xs]
from odfdo import Document, Table, Row, Cell
from odfdo.element import Element
def generate_recap( def generate_recap(
contracts: list[models.Contract], contracts: list[models.Contract],
form: models.Form, form: models.Form,
): ):
print(form.productor.products)
recurrents = [pr.name for pr in form.productor.products if pr.type == models.ProductType.RECCURENT]
recurrents.sort()
occasionnals = [pr.name for pr in form.productor.products if pr.type == models.ProductType.OCCASIONAL]
occasionnals.sort()
shipments = form.shipments
occasionnals_header = [occ for shipment in shipments for occ in occasionnals]
shipment_header = flatten([[shipment.name] + ["" * len(occasionnals)] for shipment in shipments])
product_unit_map = {
"1": "g",
"2": "kg",
"3": "p"
}
data = [ data = [
["nom", "email"], ["", ""] + ["" * len(recurrents)] + shipment_header,
["nom", "email"] + recurrents + occasionnals_header + ["remarques", "name"],
*[
[
f'{contract.firstname} {contract.lastname}',
f'{contract.email}',
*[f'{pr.quantity} {product_unit_map[pr.product.unit]}' for pr in sorted(contract.products, key=lambda x: x.product.name) if pr.product.type == models.ProductType.RECCURENT],
*[f'{pr.quantity} {product_unit_map[pr.product.unit]}' for pr in sorted(contract.products, key=lambda x: x.product.name) if pr.product.type == models.ProductType.OCCASIONAL],
"",
f'{contract.firstname} {contract.lastname}',
] for contract in contracts
]
] ]
doc = Document("spreadsheet") doc = Document("spreadsheet")
sheet = Table(name="Recap") sheet = Table(name="Recap")
sheet.set_values(data) sheet.set_values(data)
offset = 0
index = 2 + len(recurrents)
for i in range(len(shipments)):
index = index + offset
print(index, index+len(occasionnals) - 1)
sheet.set_span((index, 0, index+len(occasionnals) - 1, 0), merge=True)
offset += len(occasionnals)
doc.body.append(sheet) doc.body.append(sheet)
buffer = io.BytesIO() buffer = io.BytesIO()