import streamlit as st import pandas as pd import sqlite3 import os from PIL import Image import base64 st.set_page_config(layout="wide") ARQUIVO_ORIGEM = r"C:\Users\joao.herculano\GRUPO GINSENG\Assistência Suprimentos - 2025\SUPRIMENTOS\BD_LANÇAMENTOS\BOT\BOT - C16\Lançamento BOTI C202516.xlsx" TABELA_SQLITE = "dados_promocao" BANCO = r"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\CODIGOS\\Planilha online devolução comercial\\dados.db" BG_PATH = r"C:\\Users\\joao.herculano\\GRUPO GINSENG\\Assistência Suprimentos - 2025\\SUPRIMENTOS\\ANALISE_ESTOQUE\\PACOTE DE COMUNICAÇÃO - GINSENG 2025\\POWER POINT\\BACKGROUNDS\\bg.branco001.jpg" @st.cache_data(show_spinner=False) def carregar_dados_excel(): return pd.read_excel(ARQUIVO_ORIGEM) def set_background(jpg_file): with open(jpg_file, "rb") as f: base64_img = base64.b64encode(f.read()).decode() css = f""" """ st.markdown(css, unsafe_allow_html=True) set_background(BG_PATH) if "autenticado" not in st.session_state: st.session_state.autenticado = False if "pagina_liberada" not in st.session_state: st.session_state.pagina_liberada = False conn = sqlite3.connect(BANCO, check_same_thread=False) cursor = conn.cursor() # LOGIN via tabela de usuários no banco if not st.session_state.autenticado: st.header("Bem-vindo!") st.subheader("A plataforma GINSENG de pedidos.") with st.form(key="login_form"): email = st.text_input("Digite seu email:", type="default") senha = st.text_input("Digite sua senha:", type="password") submit = st.form_submit_button("Entrar") if submit: cursor.execute("SELECT supervisor FROM usuarios WHERE email = ? AND senha = ?", (email, senha)) resultados = cursor.fetchall() if resultados: supervisores = [r[0] for r in resultados] st.session_state.autenticado = True st.session_state.email = email st.session_state.supervisores = supervisores st.rerun() else: st.error("Email ou senha inválidos.") st.stop() else: st.stop() banco_existe = os.path.exists(BANCO) if not banco_existe: df_excel = carregar_dados_excel() df_excel.to_sql(TABELA_SQLITE, conn, if_exists="replace", index=False) # Criação de tabela apenas se não existir cursor.execute(f""" CREATE TABLE IF NOT EXISTS {TABELA_SQLITE} AS SELECT * FROM carregar_dados_excel() LIMIT 0 """) # Lê do banco df = pd.read_sql(f"SELECT * FROM {TABELA_SQLITE}", conn) if st.session_state.autenticado and not st.session_state.pagina_liberada: st.title("Resumo") if "SUGESTÃO COMERCIAL" in df.columns: df_supervisor = df[df["SUPERVISOR"].isin(st.session_state.supervisores)] ufs = sorted(df_supervisor["UF"].dropna().unique()) filtro_uf = st.multiselect("Filtrar por UF", ufs, default=ufs) df_filtro = df_supervisor[df_supervisor["UF"].isin(filtro_uf)] resumo = df_filtro.groupby("DESCRIÇÃO PDV", as_index=False)["SUGESTÃO COMERCIAL"].sum() resumo = resumo.sort_values("SUGESTÃO COMERCIAL", ascending=False) total = df_filtro["SUGESTÃO COMERCIAL"].sum() st.subheader("Resumo por PDV") st.dataframe(resumo, use_container_width=True) st.markdown(f"**Total sugerido:** {total:,.2f}") if st.button("Continuar para planilha de edição"): st.session_state.pagina_liberada = True st.rerun() else: st.stop() if "edicoes" not in st.session_state: st.session_state.edicoes = {} if st.session_state.pagina_liberada: if st.button("Voltar para resumo"): st.session_state.pagina_liberada = False st.rerun() supervisores_usuario = st.session_state.supervisores coluna_editavel = "SUGESTÃO COMERCIAL" colunas_usadas = ['SUPERVISOR', 'UF', 'DESCRIÇÃO PDV','DESCRIÇÃO DO LANÇAMENTO', 'IAF','% CONSUMIDOR', '% REVENDEDOR','PV GINSENG', 'SUGESTÃO ABASTECIMENTO', coluna_editavel] df = df[colunas_usadas] df_usuario = df[df["SUPERVISOR"].isin(supervisores_usuario)].copy() pdvs = df_usuario["DESCRIÇÃO PDV"].unique() pdv_filtrado = st.multiselect("Filtrar por PDV (opcional)", sorted(pdvs), default=pdvs) df_filtrado = df_usuario[df_usuario["DESCRIÇÃO PDV"].isin(pdv_filtrado)].copy() df_filtrado["__idx"] = df_filtrado.index for idx in df_filtrado.index: if idx in st.session_state.edicoes: for col, val in st.session_state.edicoes[idx].items(): df_filtrado.at[idx, col] = val st.write("Aqui estão seus dados filtrados:") colunas_desabilitadas = [col for col in df_filtrado.columns if col != coluna_editavel] editado = st.data_editor( df_filtrado, disabled=colunas_desabilitadas, num_rows="fixed", use_container_width=True, height=800, hide_index=True, key="editor" ) if st.button("Salvar alterações"): atualizacoes = 0 for i, row in editado.iterrows(): original_idx = row["__idx"] novo_val = row[coluna_editavel] if pd.isna(novo_val) or str(novo_val).strip() == "": continue linha_ref = df_filtrado.loc[original_idx] cursor.execute(f""" UPDATE {TABELA_SQLITE} SET "{coluna_editavel}" = ? WHERE SUPERVISOR = ? AND "DESCRIÇÃO PDV" = ? AND "DESCRIÇÃO DO LANÇAMENTO" = ? """, ( novo_val, linha_ref["SUPERVISOR"], linha_ref["DESCRIÇÃO PDV"], linha_ref["DESCRIÇÃO DO LANÇAMENTO"] )) atualizacoes += 1 if original_idx not in st.session_state.edicoes: st.session_state.edicoes[original_idx] = {} st.session_state.edicoes[original_idx][coluna_editavel] = novo_val conn.commit() if atualizacoes: st.success(f"{atualizacoes} alterações salvas com sucesso!") st.session_state.edicoes.clear() st.rerun() else: st.info("Nenhuma alteração válida para salvar.") conn.close()