Spaces:
Running
Running
from streamlit_calendar import calendar | |
import streamlit as st | |
from datetime import datetime | |
from zoneinfo import ZoneInfo | |
from data.solicitar_data import (get_event) | |
import pandas as pd | |
import json | |
from pandasql import sqldf | |
from auth import (get_id_cliente_reciclador) | |
from base64 import urlsafe_b64decode | |
from config import CONFIG | |
st.set_page_config(page_title="Lista de recolecciones", page_icon="📆", layout="wide") | |
st.markdown("<style>#MainMenu {visibility: hidden;} footer {visibility: hidden;} /*header {visibility: hidden;}*/</style>", unsafe_allow_html=True) | |
query_params = st.experimental_get_query_params() | |
auth_token = urlsafe_b64decode(query_params.get("t", [""])[0]).decode("utf-8") | |
id_clientereciclador = None | |
if query_params.get("demo", [None])[0] == "true": | |
id_clientereciclador = 2 | |
else: | |
raw_token = query_params.get("t", [None])[0] | |
if raw_token is not None: | |
# Get user id from token | |
id_clientereciclador = get_id_cliente_reciclador(raw_token) | |
st.session_state["id_reciclador"] = id_clientereciclador | |
if id_clientereciclador is None: | |
st.write("🔒 Parece que no tienes permiso para ver esto.") | |
else: | |
st.title("Lista de Recolección 🚚 📆") | |
st.markdown('### <span style="color:#9656E2; text-align: center">© Blau tecnología para residuos | blaucorp.com </span>', unsafe_allow_html=True) | |
data = get_event(id_clientereciclador) | |
now = datetime.now(ZoneInfo('America/Mexico_City')) | |
#Preprocesamiento | |
rutas = data["ruta_chofer"].unique() | |
clientes = data["cliente"].unique() | |
sucursal = data["sucursal"].unique() | |
estatus = data["estatus"].unique() | |
col1, col2 = st.columns(2) | |
with col1: | |
ruta_filter = st.multiselect("Ruta - Chofer", options=rutas) | |
estatus_filter = st.multiselect("Estatus de servicio", options=estatus) | |
with col2: | |
clientes_filter = st.multiselect("Cliente", options=clientes) | |
sucursal_filter = st.multiselect("Sucursal", options=sucursal) | |
if len(ruta_filter) == 0: | |
ruta_tupla = tuple(rutas) | |
else: | |
ruta_tupla = tuple(ruta_filter) | |
if len(estatus_filter) == 0: | |
estatus_tupla = tuple(estatus) | |
else: | |
estatus_tupla = tuple(estatus_filter) | |
if len(sucursal_filter) == 0: | |
sucursal_tupla = tuple(sucursal) | |
else: | |
sucursal_tupla = tuple(sucursal_filter) | |
if len(clientes_filter) == 0: | |
clientes_tupla = tuple(clientes) | |
else: | |
clientes_tupla = tuple(clientes_filter) | |
format_tuple = lambda t : ", ".join([f"'{v}'" for v in t]) | |
q1 = f""" | |
select * | |
from data | |
where ruta_chofer in ({format_tuple(ruta_tupla)}) and cliente in ({format_tuple(clientes_tupla)}) and estatus in ({format_tuple(estatus_tupla)}) and sucursal in ({format_tuple(sucursal_tupla)}) | |
""" | |
data_filtered = sqldf(q1) | |
mode = st.selectbox( | |
"Modo de calendario:", | |
( | |
"Vista por dia y semana", | |
"Vista de lista", | |
"Vista Mensual", | |
) | |
) | |
st.markdown('Significado de colores: <span style="color:#2ECC71;"> Completado </span>, <span style="color:#F1C40F;"> Pendiente </span>, <span style="color:#E67E22;"> Servicio con incidencia</span>, <span style="color:#E74C3C;"> Servicio Cancelado </span>', | |
unsafe_allow_html=True | |
) | |
calendar_options = { | |
"editable": "false", | |
"locale": "es", | |
"firstDay": 1 | |
} | |
if mode == "Vista por dia y semana": | |
calendar_options = { | |
"editable": "false", | |
"headerToolbar": { | |
"left": "today prev,next", | |
"center": "title", | |
"right": "dayGridDay,dayGridWeek", | |
}, | |
"navLinks": "true", | |
"initialDate": str(now), | |
"initialView": "dayGridWeek", | |
"locale": "es", | |
"firstDay": 1 | |
} | |
elif mode == "Vista de lista": | |
calendar_options = { | |
"editable": "false", | |
"navLinks": "false", | |
"initialDate": str(now), | |
"initialView": "listDay", | |
"locale": "es", | |
"firstDay": 1 | |
} | |
elif mode == "Vista Mensual": | |
calendar_options = { | |
"editable": "false", | |
"navLinks": "true", | |
"initialView": "multiMonthYear", | |
"locale": "es", | |
"firstDay": 1 | |
} | |
data_json = json.loads(data_filtered.to_json(orient='records', date_format='iso')) | |
state = calendar( | |
events=st.session_state.get("events", data_json), | |
options=calendar_options, | |
key=mode | |
) | |
#Show the log of the click | |
#st.write(state) |