Hi everyone.
I have a problem that I can’t identify, I can’t keep the session state and it ends up being lost when applying the submit. I appreciate any idea or help.
# Conectar con DuckDB en memoria fuera del formulario
con = duckdb.connect(database=':memory:', read_only=False)
if result_df_filtrado['Familia'].isin(['ET', 'ED', 'EG']).any():
df_recuentos_selected = milimetros(result_df_filtrado)
df_recuentos_selected = df_recuentos_selected[['Componente', 'Descripcion', 'Familia', 'Grupo', 'Formato', 'CoefAS', 'Unidad_Trabajo', 'Unidades', 'Ubicacion', 'Stock', 'Stock_m2', 'Stock_milimetros']]
else:
df_recuentos_selected = result_df_filtrado[['Componente', 'Descripcion', 'Familia', 'Grupo', 'Formato', 'Unidad_Trabajo', 'Unidades', 'Ubicacion', 'Stock']]
# Agregar columnas adicionales
df_recuentos_selected['Recuento'] = 0
df_recuentos_selected['Recuento_Picos'] = 0
df_recuentos_selected['Difference'] = 0
if 'df_recuentos_selected' not in st.session_state:
st.session_state.df_recuentos_selected = df_recuentos_selected.copy()
# Registrar DataFrame en DuckDB
con.register('df_recuentos_selected', df_recuentos_selected)
# Crear el formulario
with st.form("my_form"):
# Obtener el DataFrame del estado de sesión
df_recuentos_selected = con.execute("SELECT * FROM df_recuentos_selected").fetchdf()
# Editar el DataFrame
selection = st.data_editor(dataframe_with_selections(df_recuentos_selected), hide_index=True, key='0')
# Si se envía el formulario, aplicar cambios
if st.form_submit_button("Submit"):
# Aplicar cambios según la condición
if selection['Familia'].isin(['ET', 'ED', 'EG']).any():
selection = apply_changes(selection)
else:
selection = apply_changes_2(selection)
# Actualizar DataFrame en sesión
st.session_state.df_recuentos_selected = selection.copy()
# Filtrar el DataFrame para mostrar solo las filas seleccionadas
selection_filtered = selection[selection['Select']]
# Mostrar el DataFrame filtrado
st.write("Su selección con prueba de significación basada en medio Formato:", key="filtered_selection")
st.write(selection_filtered, key="filtered_selection")
if selection['Familia'].isin(['ET', 'ED', 'EG']).any():
# Aplicar la función para evaluar la diferencia y actualizar la columna "Corregir_Stock"
selection['Corregir_Stock'] = selection.apply(lambda row: es_significativo(row['Stock_milimetros'], row['Recuento']), axis=1)
grouped_df = selection.groupby(['Componente', 'Descripcion', 'Familia', 'Grupo']).agg({
'Stock': 'sum',
'Stock_m2': 'sum',
'Stock_milimetros': 'sum',
'Difference': 'sum',
'Ajuste_SGANL': 'sum'
})
else:
selection['Corregir_Stock'] = selection.apply(lambda row: es_significativo(row['Stock'], row['Recuento']), axis=1)
grouped_df = selection.groupby(['Componente', 'Descripcion', 'Familia', 'Grupo']).agg({
'Stock': 'sum',
'Recuento': 'sum',
'Difference': 'sum'
})
# Cerrar la conexión con DuckDB
con.close()