diff --git a/index.py b/index.py index c86ca6b..ca0645e 100755 --- a/index.py +++ b/index.py @@ -502,6 +502,29 @@ def format_trigger_time(raw_time_str): return f" @ {raw_time_str}" +def get_account_badge_style(label): + """Devuelve un estilo distintivo para el badge de cada cuenta (solo el cuadrito).""" + clean = str(label).strip().lower() + + # Paleta específica para cuentas conocidas + if "2020" in clean: + # Azul Real / Índigo Elegante + return 'style="background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe;"' + elif "2019" in clean: + # Morado / Violeta Elegante + return 'style="background: #faf5ff; color: #7e22ce; border: 1px solid #e9d5ff;"' + else: + # Paleta dinámica para cualquier otra cuenta (hash de color) + PALETTES = [ + 'style="background: #f0fdf4; color: #15803d; border: 1px solid #bbf7d0;"', # Verde + 'style="background: #fff7ed; color: #c2410c; border: 1px solid #fed7aa;"', # Naranja + 'style="background: #ecfeff; color: #0e7490; border: 1px solid #a5f3fc;"', # Cían + 'style="background: #fdf2f8; color: #be185d; border: 1px solid #fbcfe8;"', # Rosa + ] + idx = sum(ord(c) for c in clean) % len(PALETTES) + return PALETTES[idx] + + def _get_location_sort_priority(loc_item): """Calcula la prioridad de ordenamiento de una sucursal según su estado de armado.""" state = loc_item['status'] @@ -2380,8 +2403,11 @@ def run_update(accounts=None, exclude=None, full_refresh=False): soap_success = True - except ConnectionResetError: - log_msg(f" ⚠️ Sesión SOAP expirada al consultar '{loc_name_str}'. Se reintentará en la siguiente vuelta.") + except (ConnectionResetError, OSError): + # El GUID de sesión SOAP caducó o fue rechazado por Honeywell. + # Se limpia del caché para que en el siguiente ciclo se obtenga uno nuevo. + soap_session_ids.pop(acc['username'], None) + log_msg(f" ⚠️ Sesión SOAP expirada al consultar '{loc_name_str}'. GUID limpiado — se renovará en el siguiente ciclo.") except Exception as soap_err: log_msg(f" ⚠️ Error de SOAP en '{loc_name_str}': {soap_err}")