Spaces:
Sleeping
Sleeping
| # 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.") | |