90 lines
4.2 KiB
Python
Executable File
90 lines
4.2 KiB
Python
Executable File
|
|
# ============================================================================
|
|
def generate_email_html(
|
|
data: dict,
|
|
cardcode: str,
|
|
cardname: str | None,
|
|
item_catalog: dict[str, str],
|
|
prices: dict[str, float],
|
|
) -> str:
|
|
cab = data.get("cabecera", {})
|
|
det = data.get("detalle", [])
|
|
|
|
num_oc = cab.get("numero_oc", "") or ""
|
|
fecha_entrega = (cab.get("fecha_embarque") or cab.get("fecha_generacion") or "")[:10]
|
|
cliente = f"{cardcode} — {cardname or ''}"
|
|
|
|
rows_html = ""
|
|
for d in det:
|
|
upc = d.get("cod_upc", "") or ""
|
|
desc = d.get("descripcion", "") or ""
|
|
empaques = d.get("empaques", 0) or 0
|
|
color_talla = d.get("color_talla_um", "") or ""
|
|
unid_emp = d.get("unid_empaque", 0) or 0
|
|
cantidad_unid = d.get("cantidad_unid", 0) or 0
|
|
importe = d.get("importe", 0) or 0
|
|
precio_unidad = round(importe / cantidad_unid) if cantidad_unid > 0 else 0
|
|
|
|
sap_item = item_catalog.get(upc, "")
|
|
sap_price = prices.get(sap_item) if sap_item else None
|
|
|
|
if not sap_item:
|
|
texto = "Sin catálogo"
|
|
elif sap_price is None:
|
|
texto = "Sin precio SAP"
|
|
elif sap_price != precio_unidad:
|
|
texto = f"Precio difiere: ${precio_unidad:,} vs ${sap_price:,.0f}"
|
|
else:
|
|
texto = "OK"
|
|
|
|
rows_html += (
|
|
"<tr>"
|
|
f"<td style='border:1px solid #ccc;padding:6px'>{upc}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px;text-align:right'>{empaques:,}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px'>{color_talla}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px;text-align:right'>{unid_emp:,}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px;text-align:right'>{cantidad_unid:,}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px;text-align:right'>{importe:,}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px;text-align:right'>{precio_unidad:,}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px'>{sap_item or '—'}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px;text-align:right'>{f'${sap_price:,.0f}' if sap_price is not None else '—'}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px'>{texto}</td>"
|
|
f"<td style='border:1px solid #ccc;padding:6px'>{desc}</td>"
|
|
"</tr>\n"
|
|
)
|
|
|
|
html = f"""<!DOCTYPE html>
|
|
<html>
|
|
<head><meta charset="utf-8"></head>
|
|
<body style="font-family:sans-serif;font-size:13px">
|
|
<h2>Orden de Compra — {num_oc}</h2>
|
|
<table style="border-collapse:collapse;margin-bottom:16px">
|
|
<tr><td style='border:1px solid #ccc;padding:6px'><strong>N° OC:</strong></td><td style='border:1px solid #ccc;padding:6px'>{num_oc}</td></tr>
|
|
<tr><td style='border:1px solid #ccc;padding:6px'><strong>Fecha Entrega:</strong></td><td style='border:1px solid #ccc;padding:6px'>{fecha_entrega}</td></tr>
|
|
<tr><td style='border:1px solid #ccc;padding:6px'><strong>Cliente:</strong></td><td style='border:1px solid #ccc;padding:6px'>{cliente}</td></tr>
|
|
</table>
|
|
<table style="border-collapse:collapse;width:100%">
|
|
<thead>
|
|
<tr style="background:#eee">
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:left">cod_upc</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:right">empaques</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:left">color_talla_um</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:right">unid_empaque</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:right">cantidad_unid</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:right">Importe</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:right">precio_unidad</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:left">ItemCode</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:right">Precio SAP</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:left">Texto</th>
|
|
<th style="border:1px solid #ccc;padding:6px;text-align:left">descripción</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{rows_html}
|
|
</tbody>
|
|
</table>
|
|
</body>
|
|
</html>"""
|
|
|
|
return html
|
|
# ============================================================================ |