From f6916538c276b0f9cabfc2ec941ec3ba598ff482 Mon Sep 17 00:00:00 2001 From: Administrator Date: Wed, 23 Sep 2026 10:31:08 -0500 Subject: [PATCH] Actualizar backend/core/data_manager.py --- backend/core/data_manager.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/backend/core/data_manager.py b/backend/core/data_manager.py index 86055d3..4c1039f 100644 --- a/backend/core/data_manager.py +++ b/backend/core/data_manager.py @@ -468,9 +468,12 @@ class DataManager: conn = self.get_connection() cursor = conn.cursor() - # Clasificadores para filtros (mismos que Cobranza/Ocupabilidad) - _sede_sel = str(sede or "TODOS").upper() - _prog_sel = str(programa or "TODOS").upper() + # Clasificadores para filtros (mismos que Cobranza/Ocupabilidad). + # Acepta varios valores separados por coma (multi-selección). 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) def _clasif_sede(dscp): if not dscp: return "LIMA" up = str(dscp).upper() @@ -513,11 +516,12 @@ class DataManager: vendedor = row[0] if row[0] else "SIN VENDEDOR" if vendedor in vendedores_excluidos: continue - # Filtro SEDE/PROGRAMA (mismas reglas que Ocupabilidad/Cobranza) + # Filtro SEDE/PROGRAMA (mismas reglas que Ocupabilidad/Cobranza). + # Multi-selección: pasa si su sede/programa está en el set marcado. _dscp = row[10] if (len(row) > 10 and row[10]) else (row[12] if len(row) > 12 else "") - if _sede_sel != "TODOS" and _clasif_sede(_dscp) != _sede_sel: + if not _sede_all and _clasif_sede(_dscp) not in _sede_set: continue - if _prog_sel != "TODOS" and _clasif_prog(_dscp) != _prog_sel: + if not _prog_all and _clasif_prog(_dscp) not in _prog_set: continue inv_neta_raw = float(row[1]) if row[1] else 0.0