diff --git a/app/routes/ventas.py b/app/routes/ventas.py index 47ebf01..b35da76 100644 --- a/app/routes/ventas.py +++ b/app/routes/ventas.py @@ -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 diff --git a/app/services/json_generator.py b/app/services/json_generator.py index 345ab3a..3f5993b 100644 --- a/app/services/json_generator.py +++ b/app/services/json_generator.py @@ -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": "",