Files
comercio-net/template.html
T

144 lines
7.7 KiB
HTML
Executable File

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OC {{ data.cabecera.numero_oc }}</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; font-size: 13px; color: #222; background: #f5f5f5; padding: 20px; }
.container { max-width: 100%; margin: 0 auto; background: #fff; border-radius: 6px; box-shadow: 0 1px 4px rgba(0,0,0,.1); padding: 24px; }
h1 { font-size: 18px; color: #1a1a2e; margin-bottom: 20px; border-bottom: 2px solid #e0e0e0; padding-bottom: 10px; }
h2 { font-size: 14px; color: #1a1a2e; margin: 20px 0 10px; }
table { width: 100%; border-collapse: collapse; margin-bottom: 16px; font-size: 12px; }
th, td { padding: 6px 8px; text-align: left; border: 1px solid #ddd; }
th { background: #f0f0f0; font-weight: 600; white-space: nowrap; }
tr:nth-child(even) td { background: #fafafa; }
.badge { display: inline-block; padding: 1px 6px; border-radius: 3px; font-size: 11px; }
.badge-green { background: #e6f7e6; color: #1a7a1a; }
.badge-red { background: #fde8e8; color: #b91c1c; }
.badge-gray { background: #f0f0f0; color: #555; }
.totals-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; margin: 16px 0; }
.total-card { background: #f9f9f9; border: 1px solid #e0e0e0; border-radius: 4px; padding: 10px; }
.total-card .label { font-size: 11px; color: #666; }
.total-card .value { font-size: 16px; font-weight: 700; color: #1a1a2e; margin-top: 2px; }
.allowance-row { font-size: 11px; color: #555; }
.cabecera-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 6px 20px; margin: 12px 0; }
.cabecera-item { display: flex; border-bottom: 1px solid #eee; padding: 4px 0; }
.cabecera-item .label { font-weight: 600; min-width: 130px; color: #555; }
.cabecera-item .value { color: #222; }
.footer { margin-top: 20px; padding-top: 12px; border-top: 1px solid #e0e0e0; font-size: 11px; color: #888; text-align: center; }
@media print { body { background: #fff; padding: 0; } .container { box-shadow: none; } }
</style>
</head>
<body>
<div class="container">
<h1>Orden de Compra — {{ data.cabecera.numero_oc }}</h1>
<h2>Cabecera</h2>
<div class="cabecera-grid">
<div class="cabecera-item"><span class="label">Emisor</span><span class="value">{{ data.cabecera.emisor or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Receptor</span><span class="value">{{ data.cabecera.receptor or "—" }}</span></div>
<div class="cabecera-item"><span class="label">N° OC</span><span class="value">{{ data.cabecera.numero_oc or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Fecha generación</span><span class="value">{{ data.cabecera.fecha_generacion_format or data.cabecera.fecha_generacion or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Fecha embarque</span><span class="value">{{ data.cabecera.fecha_embarque_format or data.cabecera.fecha_embarque or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Fecha cancelación</span><span class="value">{{ data.cabecera.fecha_cancelacion_format or data.cabecera.fecha_cancelacion or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Condiciones de pago</span><span class="value">{{ data.cabecera.condiciones_pago_texto or data.cabecera.condiciones_pago or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Lugar de entrega</span><span class="value">{{ data.cabecera.lugar_entrega or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Dpto. ventas</span><span class="value">{{ data.cabecera.dpto_ventas or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Tipo OC</span><span class="value">{{ data.cabecera.tipo_oc or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Promoción</span><span class="value">{{ data.cabecera.promocion or "—" }}</span></div>
<div class="cabecera-item"><span class="label">N° Proveedor</span><span class="value">{{ data.cabecera.numero_proveedor or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Observaciones</span><span class="value">{{ data.cabecera.observaciones or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Transporte</span><span class="value">{{ data.cabecera.etapa_transporte or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Transportista</span><span class="value">{{ data.cabecera.transportista or "—" }}</span></div>
<div class="cabecera-item"><span class="label">Divisa</span><span class="value">{{ data.cabecera.divisa or "—" }}</span></div>
</div>
<h2>Detalle</h2>
<table>
<thead>
<tr>
<th>#</th>
<th>Cód. UPC</th>
<th>Item</th>
<th>Cód. Prov.</th>
<th>Color/Talla/UM</th>
<th>Descripción</th>
<th>Precio Orig.</th>
<th>Dto.</th>
<th>Precio Efec.</th>
<th>Emp.</th>
<th>U/E</th>
<th>Cant. (unid)</th>
<th>Importe</th>
</tr>
</thead>
<tbody>
{% for d in data.detalle %}
<tr>
<td>{{ d.linea }}</td>
<td>{{ d.cod_upc or "—" }}</td>
<td>{{ d.item or "—" }}</td>
<td>{{ d.cod_prov or "—" }}</td>
<td>{{ d.color_talla_um or "—" }}</td>
<td>{{ d.descripcion or "—" }}</td>
<td style="text-align:right">{{ "{:,.0f}".format(d.precio_original) }}</td>
<td>
{% if d.allowances %}
{% for alw in d.allowances %}
{% if alw.percentage > 0 %}
<span class="badge badge-red">{{ alw.percentage }}%</span>
{% endif %}
{% endfor %}
{% else %}
<span class="badge badge-gray">—</span>
{% endif %}
</td>
<td style="text-align:right">{{ "{:,.0f}".format(d.precio_efectivo) }}</td>
<td style="text-align:right">{{ d.empaques }}</td>
<td style="text-align:right">{{ d.unid_empaque }}</td>
<td style="text-align:right">{{ "{:,.0f}".format(d.cantidad_unid) }}</td>
<td style="text-align:right">{{ "{:,.0f}".format(d.importe) }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h2>Totales Finales</h2>
<div class="totals-grid">
<div class="total-card">
<div class="label">Importe total</div>
<div class="value">{{ "{:,.0f}".format(data.totales.importe_total) }} {{ data.totales.moneda }}</div>
</div>
{% if data.cabecera.etapa_transporte %}
<div class="total-card">
<div class="label">Etapa de transporte</div>
<div class="value" style="font-size:13px">{{ data.cabecera.etapa_transporte }}</div>
</div>
{% endif %}
{% if data.cabecera.transportista %}
<div class="total-card">
<div class="label">Quien transporta</div>
<div class="value" style="font-size:13px">{{ data.cabecera.transportista }}</div>
</div>
{% endif %}
{% if data.cabecera.divisa %}
<div class="total-card">
<div class="label">Divisa de referencia</div>
<div class="value" style="font-size:13px">{{ data.cabecera.divisa }}</div>
</div>
{% endif %}
<div class="total-card">
<div class="label">Condiciones de entrega</div>
<div class="value" style="font-size:13px">—</div>
</div>
</div>
<div class="footer">
Archivo: {{ data.metadata.archivo }} — Procesado: {{ data.metadata.procesado }}
</div>
</div>
</body>
</html>