Actualizar backend/services.py
This commit is contained in:
@@ -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)
|
||||
filas = resultado.get(tipo_lista, []) if isinstance(resultado, dict) else []
|
||||
filas = _aplicar_overrides_comisiones(filas)
|
||||
# Filtro por SEDE [14] y PROGRAMA (clasificado desde el nombre [16]),
|
||||
# mismas reglas que la tabla principal. Omite la fila TOTAL GENERAL.
|
||||
_sede = str(sede or "TODOS").upper()
|
||||
_prog = str(programa or "TODOS").upper()
|
||||
if _sede != "TODOS" or _prog != "TODOS":
|
||||
# Filtro por SEDE [14] y PROGRAMA (clasificado desde el nombre [16]).
|
||||
# Acepta varios valores separados por coma (multi). Vacío/TODOS = todo.
|
||||
_sede_set = {s.strip().upper() for s in str(sede or "TODOS").split(",") if s.strip()}
|
||||
_prog_set = {p.strip().upper() for p in str(programa or "TODOS").split(",") if p.strip()}
|
||||
_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 = []
|
||||
for f in filas:
|
||||
if str(f[0]).strip().upper() == "TOTAL GENERAL":
|
||||
continue # el TOTAL se recalcula en el frontend
|
||||
if len(f) < 15:
|
||||
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
|
||||
# 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]
|
||||
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
|
||||
out.append(f)
|
||||
filas = out
|
||||
@@ -302,18 +302,21 @@ def cobranza_detalle(grupo, ano, mes, sectorista, agrupacion="PROGRAMA", prog_fi
|
||||
dm = get_dm()
|
||||
logic = CobranzaLogic(dm)
|
||||
proc = logic.processor
|
||||
pf = str(prog_filtro).upper()
|
||||
sf = str(sede_filtro).upper()
|
||||
# Sede/Programa multi (coma). Vacío/TODOS = todos.
|
||||
_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
|
||||
# Mapa MATRICULA -> programa, para filtrar por tipo de programa y/o sede (REPLACE_META)
|
||||
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")
|
||||
mats_prog = set()
|
||||
for d in (crudos_pf or []):
|
||||
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_sede = sf in ("TODOS", "", "NONE") or str(proc.clasificar_sede_meta(prog)).upper() == sf
|
||||
ok_prog = _pf_all or str(proc.clasificar_filtro_programa(prog)).upper() in _pf_set
|
||||
ok_sede = _sf_all or str(proc.clasificar_sede_meta(prog)).upper() in _sf_set
|
||||
if ok_prog and ok_sede:
|
||||
mats_prog.add(str(d.get("MATRICULA", "")))
|
||||
if agrupacion == "ASESOR":
|
||||
|
||||
Reference in New Issue
Block a user