import re from dataclasses import dataclass from datetime import datetime from decimal import ROUND_HALF_UP, Decimal from typing import Optional _PLACEHOLDER_RE = re.compile(r"\{\{\s*(\w+)\s*\}\}") def render_template(text: str, variables: dict[str, str]) -> str: return _PLACEHOLDER_RE.sub(lambda m: str(variables.get(m.group(1), m.group(0))), text) def format_datetime_da(dt: datetime) -> str: return dt.strftime("%d-%m-%Y kl. %H:%M") @dataclass class CatalogRow: category_name: str wine_name: str unit_price_eur: Decimal ordered_quantity: Optional[int] # None = ikke bestilt, vises tomt def render_order_receipt_html(rows: list[CatalogRow]) -> str: """rows skal være for-sorteret efter (kategori.sort_order, vin-id) — denne funktion grupperer blot konsekutive ens kategorinavne under én overskrift, ligesom den gamle Kvitering-mail.""" html_parts = ['
| {row.category_name} | ||
|---|---|---|
| {qty_display} | ' f'{row.wine_name} | ' f'{row.unit_price_eur:.2f} |