planejamento / app.py
euteajudo
correção de português
ce85666
# FORMULARIO PARA COLETA DE DADOS DA PESQUISA DO SENTIMENTO DO USUÁRIO
import streamlit as st
import sys
import os
# Adiciona o diretório pai ao path para importar módulos
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# Importa as funções do banco de dados
from db.db_resp_usuario import salvar_resposta
st.title("Formulário de Pesquisa de Satisfação - Serviço de Limpeza")
# Inicializa o estado da sessão
if 'show_success' not in st.session_state:
st.session_state.show_success = False
if 'last_submission' not in st.session_state:
st.session_state.last_submission = None
# Inicializa os valores dos campos do formulário
if 'setor_value' not in st.session_state:
st.session_state.setor_value = None
if 'material_limpeza_value' not in st.session_state:
st.session_state.material_limpeza_value = None
if 'material_value' not in st.session_state:
st.session_state.material_value = None
if 'qualidade_value' not in st.session_state:
st.session_state.qualidade_value = None
if 'mensagem_value' not in st.session_state:
st.session_state.mensagem_value = ""
# Mostra mensagem de sucesso apenas uma vez após o envio
if st.session_state.show_success and st.session_state.last_submission:
st.success(f"✅ Pesquisa enviada com sucesso! Obrigado pela sua participação.")
st.info(f"📊 Dados registrados: {st.session_state.last_submission}")
# Limpa a flag para não mostrar novamente na próxima interação
st.session_state.show_success = False
with st.form(key="sentiment_form"):
setor = st.selectbox(
"Setor",
index=None if st.session_state.setor_value is None else ["Contratos", "Contabilidade", "TI"].index(st.session_state.setor_value),
options=["Contratos", "Contabilidade", "TI"],
key="setor_select"
)
material_de_limpeza = st.radio(
"Esta faltando algum material de limpeza?",
index=None if st.session_state.material_limpeza_value is None else ["Sim", "Não"].index(st.session_state.material_limpeza_value),
options=["Sim", "Não"],
key="material_limpeza_radio"
)
material = st.radio(
"Qual material está faltando?",
options=["Sabonete", "Papel higiênico", "Papel toalha"],
index=None if st.session_state.material_value is None else ["Sabonete", "Papel higiênico", "Papel toalha"].index(st.session_state.material_value),
key="material_radio"
)
qualidade_do_servico = st.radio(
"Qual a qualidade do serviço de limpeza?",
index=None if st.session_state.qualidade_value is None else ["Muito Bom", "Bom", "Regular", "Ruim"].index(st.session_state.qualidade_value),
options=["Muito Bom", "Bom", "Regular", "Ruim"],
key="qualidade_radio"
)
mensagem = st.text_area(
"Deixe sua opinião",
value=st.session_state.mensagem_value,
key="mensagem_textarea"
)
enviar = st.form_submit_button("Enviar")
# Processamento do formulário
if enviar:
# Validação dos campos obrigatórios
if not setor:
st.error("❌ Por favor, selecione um setor.")
elif not material_de_limpeza:
st.error("❌ Por favor, responda se está faltando material de limpeza.")
elif not qualidade_do_servico:
st.error("❌ Por favor, avalie a qualidade do serviço.")
else:
try:
# Salva a resposta no banco de dados
sucesso = salvar_resposta(
setor=setor,
material_faltando=material_de_limpeza,
qual_material=material if material_de_limpeza == "Sim" else None,
qualidade_servico=qualidade_do_servico,
mensagem=mensagem if mensagem else None
)
if sucesso:
# Atualiza o estado da sessão
st.session_state.show_success = True
st.session_state.last_submission = f"{setor} - {qualidade_do_servico}"
# LIMPA OS CAMPOS DO FORMULÁRIO
st.session_state.setor_value = None
st.session_state.material_limpeza_value = None
st.session_state.material_value = None
st.session_state.qualidade_value = None
st.session_state.mensagem_value = ""
# Recarrega a página para mostrar a mensagem de sucesso e campos limpos
st.rerun()
else:
st.error("❌ Erro ao enviar a pesquisa. Tente novamente.")
except Exception as e:
st.error(f"❌ Erro ao conectar com o banco de dados: {str(e)}")
st.error("🔧 Verifique se o banco PostgreSQL está rodando e acessível.")