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:
co-authored by
Claude Sonnet 4.6
parent
6a54b61a2e
commit
551dec9c11
@@ -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
|
||||
|
||||
@@ -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": "",
|
||||
|
||||
Reference in New Issue
Block a user