feat(ventas): codFormaPago dinámico CIAC/CR según total + fechaVence por DIASVENC

- SQL trae fd.DIASVENC en ambas queries de ventas
- total==0 → codFormaPago=CIAC, plazoDias=0, fechaVence=fechaFactura
- total>0  → codFormaPago=CR,   plazoDias=DIASVENC, fechaVence=FECHAFACT+DIASVENC días

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-07-30 16:10:33 -05:00
co-authored by Claude Sonnet 4.6
parent 6a54b61a2e
commit 551dec9c11
2 changed files with 33 additions and 6 deletions
+4 -2
View File
@@ -21,7 +21,8 @@ SELECT
COALESCE(NULLIF(TRIM(ex.NUM_ISS), ''), TRIM(rel.COD_EXAMEN)) AS CUPS,
rel.PRECIO, COALESCE(t.VALOR, rel.PRECIO) AS PRECIO_TARIFA,
TRIM(e.CODCONTRATO) AS CODCONTRATO,
CAST(fd.FECHAFACT AS VARCHAR(30)) AS FECHAFACT
CAST(fd.FECHAFACT AS VARCHAR(30)) AS FECHAFACT,
fd.DIASVENC
FROM RECEPCION r
JOIN FACTURA_DIAN fd ON fd.PREFIJO = r.PREFIJO AND fd.NUM_FACTURA = r.NUM_FACTURA
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
@@ -42,7 +43,8 @@ SELECT
COALESCE(NULLIF(TRIM(ex.NUM_ISS), ''), TRIM(rel.COD_EXAMEN)) AS CUPS,
rel.PRECIO, COALESCE(t.VALOR, rel.PRECIO) AS PRECIO_TARIFA,
TRIM(e.CODCONTRATO) AS CODCONTRATO,
CAST(fd.FECHAFACT AS VARCHAR(30)) AS FECHAFACT
CAST(fd.FECHAFACT AS VARCHAR(30)) AS FECHAFACT,
fd.DIASVENC
FROM RECEPCION r
JOIN FACTURA_DIAN fd ON fd.PREFIJO = r.PREFIJO AND fd.NUM_FACTURA = r.NUM_FACTURA
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
+29 -4
View File
@@ -258,6 +258,18 @@ def generar_rda_paciente(rows: list, default_profesional: str = "", default_espe
# ── Ventas/Crear ─────────────────────────────────────────────────────────────
def _fecha_add_dias(fecha_val, dias: int) -> str:
"""Suma `dias` a una fecha ISO (YYYY-MM-DD...) o date y retorna dd/mm/YYYY."""
try:
if hasattr(fecha_val, "strftime"):
d = fecha_val if isinstance(fecha_val, date) else fecha_val.date()
else:
d = datetime.strptime(str(fecha_val)[:10], "%Y-%m-%d").date()
return (d + timedelta(days=dias)).strftime("%d/%m/%Y")
except Exception:
return _fmt_fecha(fecha_val)
def generar_factura_venta(rows: list, default_vendedor: str = "00",
default_prefijo: str = "00", numero_override: str = "") -> dict:
if not rows:
@@ -265,11 +277,14 @@ def generar_factura_venta(rows: list, default_vendedor: str = "00",
h = rows[0]
num_fac = (numero_override if numero_override else str(h.get("NUM_FACTURA") or "")).zfill(5)
fecha = _fmt_fecha(h.get("FECHAFACT") or h.get("FECHA_RECEPCION"))
fecha_raw = h.get("FECHAFACT") or h.get("FECHA_RECEPCION")
fecha = _fmt_fecha(fecha_raw)
detalle_pedido = []
total = 0.0
for row in rows:
precio = float(row.get("PRECIO_TARIFA") or row.get("PRECIO") or 0)
total += precio
detalle_pedido.append({
"codMat": str(row.get("CUPS") or row.get("COD_EXAMEN") or "").strip(),
"codBodega": "00",
@@ -296,6 +311,16 @@ def generar_factura_venta(rows: list, default_vendedor: str = "00",
prefijo_real = str(h.get("PREFIJO") or "").strip() or default_prefijo or "00"
diasvenc = int(h.get("DIASVENC") or 30)
if total == 0:
cod_forma_pago = "CIAC"
plazo_dias = 0
fecha_vence = fecha
else:
cod_forma_pago = "CR"
plazo_dias = diasvenc
fecha_vence = _fecha_add_dias(fecha_raw, diasvenc)
return _clean_times({
"codigoPrefijo": prefijo_real,
"numero": num_fac,
@@ -308,11 +333,11 @@ def generar_factura_venta(rows: list, default_vendedor: str = "00",
"codTercero": cod_tercero,
"codVendedor": default_vendedor or "00",
"codDespachar": "00",
"codFormaPago": "MU",
"codFormaPago": cod_forma_pago,
"codBanco": "",
"fechaVence": fecha,
"fechaVence": fecha_vence,
"fechaEntrega": fecha,
"plazoDias": 30,
"plazoDias": plazo_dias,
"observacion": "",
"latitud": "",
"longitud": "",