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,
|
COALESCE(NULLIF(TRIM(ex.NUM_ISS), ''), TRIM(rel.COD_EXAMEN)) AS CUPS,
|
||||||
rel.PRECIO, COALESCE(t.VALOR, rel.PRECIO) AS PRECIO_TARIFA,
|
rel.PRECIO, COALESCE(t.VALOR, rel.PRECIO) AS PRECIO_TARIFA,
|
||||||
TRIM(e.CODCONTRATO) AS CODCONTRATO,
|
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
|
FROM RECEPCION r
|
||||||
JOIN FACTURA_DIAN fd ON fd.PREFIJO = r.PREFIJO AND fd.NUM_FACTURA = r.NUM_FACTURA
|
JOIN FACTURA_DIAN fd ON fd.PREFIJO = r.PREFIJO AND fd.NUM_FACTURA = r.NUM_FACTURA
|
||||||
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
|
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,
|
COALESCE(NULLIF(TRIM(ex.NUM_ISS), ''), TRIM(rel.COD_EXAMEN)) AS CUPS,
|
||||||
rel.PRECIO, COALESCE(t.VALOR, rel.PRECIO) AS PRECIO_TARIFA,
|
rel.PRECIO, COALESCE(t.VALOR, rel.PRECIO) AS PRECIO_TARIFA,
|
||||||
TRIM(e.CODCONTRATO) AS CODCONTRATO,
|
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
|
FROM RECEPCION r
|
||||||
JOIN FACTURA_DIAN fd ON fd.PREFIJO = r.PREFIJO AND fd.NUM_FACTURA = r.NUM_FACTURA
|
JOIN FACTURA_DIAN fd ON fd.PREFIJO = r.PREFIJO AND fd.NUM_FACTURA = r.NUM_FACTURA
|
||||||
JOIN RELACION rel ON rel.IDRECEPCION = r.IDRECEPCION
|
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 ─────────────────────────────────────────────────────────────
|
# ── 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",
|
def generar_factura_venta(rows: list, default_vendedor: str = "00",
|
||||||
default_prefijo: str = "00", numero_override: str = "") -> dict:
|
default_prefijo: str = "00", numero_override: str = "") -> dict:
|
||||||
if not rows:
|
if not rows:
|
||||||
@@ -265,11 +277,14 @@ def generar_factura_venta(rows: list, default_vendedor: str = "00",
|
|||||||
h = rows[0]
|
h = rows[0]
|
||||||
|
|
||||||
num_fac = (numero_override if numero_override else str(h.get("NUM_FACTURA") or "")).zfill(5)
|
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 = []
|
detalle_pedido = []
|
||||||
|
total = 0.0
|
||||||
for row in rows:
|
for row in rows:
|
||||||
precio = float(row.get("PRECIO_TARIFA") or row.get("PRECIO") or 0)
|
precio = float(row.get("PRECIO_TARIFA") or row.get("PRECIO") or 0)
|
||||||
|
total += precio
|
||||||
detalle_pedido.append({
|
detalle_pedido.append({
|
||||||
"codMat": str(row.get("CUPS") or row.get("COD_EXAMEN") or "").strip(),
|
"codMat": str(row.get("CUPS") or row.get("COD_EXAMEN") or "").strip(),
|
||||||
"codBodega": "00",
|
"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"
|
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({
|
return _clean_times({
|
||||||
"codigoPrefijo": prefijo_real,
|
"codigoPrefijo": prefijo_real,
|
||||||
"numero": num_fac,
|
"numero": num_fac,
|
||||||
@@ -308,11 +333,11 @@ def generar_factura_venta(rows: list, default_vendedor: str = "00",
|
|||||||
"codTercero": cod_tercero,
|
"codTercero": cod_tercero,
|
||||||
"codVendedor": default_vendedor or "00",
|
"codVendedor": default_vendedor or "00",
|
||||||
"codDespachar": "00",
|
"codDespachar": "00",
|
||||||
"codFormaPago": "MU",
|
"codFormaPago": cod_forma_pago,
|
||||||
"codBanco": "",
|
"codBanco": "",
|
||||||
"fechaVence": fecha,
|
"fechaVence": fecha_vence,
|
||||||
"fechaEntrega": fecha,
|
"fechaEntrega": fecha,
|
||||||
"plazoDias": 30,
|
"plazoDias": plazo_dias,
|
||||||
"observacion": "",
|
"observacion": "",
|
||||||
"latitud": "",
|
"latitud": "",
|
||||||
"longitud": "",
|
"longitud": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user