Actualizar backend/services.py
This commit is contained in:
@@ -226,6 +226,19 @@ def facturacion(ano="TODOS", mes="TODOS", cuota="TODOS"):
|
||||
try: return float(v) if v is not None else 0.0
|
||||
except Exception: return 0.0
|
||||
|
||||
def _fstr(fch):
|
||||
"""Fecha a 'dd/mm/yyyy'."""
|
||||
if fch is None: return ""
|
||||
try: return fch.strftime("%d/%m/%Y")
|
||||
except Exception:
|
||||
s = str(fch)
|
||||
return f"{s[8:10]}/{s[5:7]}/{s[0:4]}" if len(s) >= 10 else s
|
||||
|
||||
def _etiq_comp(comp, fch, deudor):
|
||||
"""Etiqueta del comprobante: '12/08/2026 - B00100... - JUAN CARLOS'."""
|
||||
partes = [p for p in (_fstr(fch), str(comp or "").strip(), str(deudor or "").strip()) if p]
|
||||
return " - ".join(partes) or "(SIN COMPROBANTE)"
|
||||
|
||||
# ── Índice de facturas por num_comprobante: programa, matrícula, min cuota ──
|
||||
# (para enlazar NC -> factura). Guardamos el primer programa/matrícula visto
|
||||
# y el MIN(num_cuota) del comprobante (num_cuota_NC del Power BI).
|
||||
@@ -239,6 +252,8 @@ def facturacion(ano="TODOS", mes="TODOS", cuota="TODOS"):
|
||||
comp_rep[nc] = comp_rep.get(nc, 0) + 1
|
||||
g = fact_idx.setdefault(nc, {"prog": f.get("dsc_det_programa") or "",
|
||||
"glosa": f.get("dsc_glosa") or "",
|
||||
"deudor": f.get("dsc_deudor") or "",
|
||||
"fch": f.get("fch_emision"),
|
||||
"matricula": str(f.get("num_matricula") or "").strip(),
|
||||
"min_cuota": None})
|
||||
cu = f.get("num_cuota")
|
||||
@@ -291,7 +306,8 @@ def facturacion(ano="TODOS", mes="TODOS", cuota="TODOS"):
|
||||
base = _num(f.get("imp_subtotal"))
|
||||
if str(f.get("cod_moneda") or "").upper() != "SOL":
|
||||
base *= _num(f.get("imp_tc"))
|
||||
acc[(sede, tipo, pnom, comp or "(SIN COMPROBANTE)")]["ing"] += base
|
||||
etiq = _etiq_comp(comp, f.get("fch_emision"), f.get("dsc_deudor"))
|
||||
acc[(sede, tipo, pnom, etiq)]["ing"] += base
|
||||
|
||||
# ── NOTAS DE CRÉDITO ──
|
||||
for n in notas:
|
||||
@@ -318,7 +334,9 @@ def facturacion(ano="TODOS", mes="TODOS", cuota="TODOS"):
|
||||
base = _num(n.get("imp_subtotal"))
|
||||
if str(n.get("cod_moneda") or "").upper() != "SOL":
|
||||
base *= _num(n.get("imp_tc"))
|
||||
acc[(sede, tipo, pnom, comp_bf or "(SIN COMPROBANTE)")]["nc"] += base
|
||||
# Etiqueta con fecha/deudor de la factura enlazada (misma línea que el ingreso)
|
||||
etiq = _etiq_comp(comp_bf, fi.get("fch"), fi.get("deudor"))
|
||||
acc[(sede, tipo, pnom, etiq)]["nc"] += base
|
||||
|
||||
# ── armar jerarquía Sede -> Tipo -> Programa -> Comprobante ──
|
||||
def _n0(): return {"ing": 0.0, "nc": 0.0}
|
||||
|
||||
Reference in New Issue
Block a user