2025-10-24 15:54:54 -03:00

190 lines
6.5 KiB
Python

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"""
<style>
.stApp {{
background-image: url("data:image/jpg;base64,{base64_img}");
background-size: cover;
}}
header {{ display: none !important; }}
#MainMenu {{ visibility: hidden; }}
footer {{ visibility: hidden; }}
</style>
"""
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()