Actualizar backend/services.py

This commit is contained in:
2026-09-23 10:37:20 -05:00
parent 22c419ad01
commit 7f624a6428

View File

@@ -152,23 +152,23 @@ def ventas_detalle(vendedor, ano, mes, tipo_lista, sede="TODOS", programa="TODOS
resultado = logic.obtener_detalle_vendedor(vendedor, str(ano), str(mes), excluir_ret) resultado = logic.obtener_detalle_vendedor(vendedor, str(ano), str(mes), excluir_ret)
filas = resultado.get(tipo_lista, []) if isinstance(resultado, dict) else [] filas = resultado.get(tipo_lista, []) if isinstance(resultado, dict) else []
filas = _aplicar_overrides_comisiones(filas) filas = _aplicar_overrides_comisiones(filas)
# Filtro por SEDE [14] y PROGRAMA (clasificado desde el nombre [16]), # Filtro por SEDE [14] y PROGRAMA (clasificado desde el nombre [16]).
# mismas reglas que la tabla principal. Omite la fila TOTAL GENERAL. # Acepta varios valores separados por coma (multi). Vacío/TODOS = todo.
_sede = str(sede or "TODOS").upper() _sede_set = {s.strip().upper() for s in str(sede or "TODOS").split(",") if s.strip()}
_prog = str(programa or "TODOS").upper() _prog_set = {p.strip().upper() for p in str(programa or "TODOS").split(",") if p.strip()}
if _sede != "TODOS" or _prog != "TODOS": _sede_all = (not _sede_set) or ("TODOS" in _sede_set)
_prog_all = (not _prog_set) or ("TODOS" in _prog_set)
if not _sede_all or not _prog_all:
out = [] out = []
for f in filas: for f in filas:
if str(f[0]).strip().upper() == "TOTAL GENERAL": if str(f[0]).strip().upper() == "TOTAL GENERAL":
continue # el TOTAL se recalcula en el frontend continue # el TOTAL se recalcula en el frontend
if len(f) < 15: if len(f) < 15:
out.append(f); continue out.append(f); continue
if _sede != "TODOS" and str(f[14]).strip().upper() != _sede: if not _sede_all and str(f[14]).strip().upper() not in _sede_set:
continue continue
# Clasificar programa por el nombre de CLASIFICACIÓN [16] (prioriza dsc_programa);
# si no existe, usar el mostrado [8].
_prog_nombre = f[16] if len(f) > 16 else f[8] _prog_nombre = f[16] if len(f) > 16 else f[8]
if _prog != "TODOS" and _clasif_filtro_programa(dm, _prog_nombre) != _prog: if not _prog_all and _clasif_filtro_programa(dm, _prog_nombre) not in _prog_set:
continue continue
out.append(f) out.append(f)
filas = out filas = out
@@ -302,18 +302,21 @@ def cobranza_detalle(grupo, ano, mes, sectorista, agrupacion="PROGRAMA", prog_fi
dm = get_dm() dm = get_dm()
logic = CobranzaLogic(dm) logic = CobranzaLogic(dm)
proc = logic.processor proc = logic.processor
pf = str(prog_filtro).upper() # Sede/Programa multi (coma). Vacío/TODOS = todos.
sf = str(sede_filtro).upper() _pf_set = {p.strip().upper() for p in str(prog_filtro or "TODOS").split(",") if p.strip()}
_pf_all = (not _pf_set) or ("TODOS" in _pf_set)
_sf_set = {s.strip().upper() for s in str(sede_filtro or "TODOS").split(",") if s.strip()}
_sf_all = (not _sf_set) or ("TODOS" in _sf_set)
vh = venc_hasta vh = venc_hasta
# Mapa MATRICULA -> programa, para filtrar por tipo de programa y/o sede (REPLACE_META) # Mapa MATRICULA -> programa, para filtrar por tipo de programa y/o sede (REPLACE_META)
mats_prog = None mats_prog = None
if pf not in ("TODOS", "", "NONE") or sf not in ("TODOS", "", "NONE"): if not _pf_all or not _sf_all:
crudos_pf = proc.obtener_detalle_programa(str(ano), str(mes), sectorista, "TODOS") crudos_pf = proc.obtener_detalle_programa(str(ano), str(mes), sectorista, "TODOS")
mats_prog = set() mats_prog = set()
for d in (crudos_pf or []): for d in (crudos_pf or []):
prog = d.get("PROGRAMA", "") or d.get("dsc_programa", "") prog = d.get("PROGRAMA", "") or d.get("dsc_programa", "")
ok_prog = pf in ("TODOS", "", "NONE") or str(proc.clasificar_filtro_programa(prog)).upper() == pf ok_prog = _pf_all or str(proc.clasificar_filtro_programa(prog)).upper() in _pf_set
ok_sede = sf in ("TODOS", "", "NONE") or str(proc.clasificar_sede_meta(prog)).upper() == sf ok_sede = _sf_all or str(proc.clasificar_sede_meta(prog)).upper() in _sf_set
if ok_prog and ok_sede: if ok_prog and ok_sede:
mats_prog.add(str(d.get("MATRICULA", ""))) mats_prog.add(str(d.get("MATRICULA", "")))
if agrupacion == "ASESOR": if agrupacion == "ASESOR":