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)
|
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":
|
||||||
|
|||||||
Reference in New Issue
Block a user