Aplicação Streamlit que permite alternar entre diferentes secções/agrupamentos (ex.: Lobitos, Exploradores) mantendo uma interface comum.
Cada secção tem de definir um bloco [airtable_<agrupamento>_<secao>] com as chaves abaixo:
[airtable_521_lobitos]
AIRTABLE_TOKEN = "..."
AIRTABLE_BASE_ID = "..."
AGRUPAMENTO_LABEL = "Agrupamento 521"
SECAO_LABEL = "Lobitos"
DEFAULT_LANCHE_FORM_URL = "https://airtable.com/embed/..."
DEFAULT_VOLUNT_FORM_URL = "https://airtable.com/embed/..."
CANCEL_LANCHE_FORM_URL = "https://airtable.com/embed/..."
RECEBIMENTO_FORM_URL = "https://airtable.com/embed/..."
ESTORNO_FORM_URL = "https://airtable.com/embed/..."
FORCED_CANCEL_FORM_URL = "https://airtable.com/embed/..."
FORCED_ORDER_FORM_URL = "https://airtable.com/embed/..."
MANAGE_ESCUTEIROS_FORM_URL = "https://airtable.com/embed/..."Se algum campo estiver em falta para a secção selecionada, a aplicação informa o utilizador e não mostra o formulário correspondente.
A função context_extra("NOME", fallback) devolve qualquer URL configurado (ou o fallback indicado).
A página Guarda Material - Tômbola usa uma base Airtable própria e exige, em cada bloco da secção, as chaves:
TOMBOLA_AIRTABLE_TOKEN = "..."
TOMBOLA_AIRTABLE_BASE_ID = "..."Nota: atualmente o
TOMBOLA_AIRTABLE_TOKENnão é opcional no código.
O código da Tômbola assume as seguintes tabelas e campos na base Airtable:
InventarioNomeItem,QuantidadeAtual,Estado,Ativo- opcionais usados em fluxos:
Categoria,CaixaAtual(link paraCaixas)
MovimentosTipo(Entrada,Saída,Ajuste,Transferência),Item,Quantidade,ExecutadoPor- opcionais:
CaixaOrigem,CaixaDestino,Evento,OrigemEntrada,Patrocinador,Notas
CaixasCodigoCaixa,Descricao,Local,Estado
EventosNomeEvento,Tipo,Data,Local,Estado
RegistoPatrociniosDescricaoItem,Quantidade,Processado- opcionais usados no processamento:
CaixaSugerida,Categoria,PatrocinadorNome,Evento,Observacoes,Estado
PatrocinadoresNome
Regras funcionais importantes implementadas no código:
- Stock real vive em
Inventario;Movimentosé trilho de auditoria. - Em
Saída,AjusteeTransferência,Notassão obrigatórias. - Operações que deixem stock negativo são bloqueadas.
- Ao entrar, o utilizador escolhe a secção; a escolha fica em
st.session_state. - O login valida o utilizador na base Airtable dessa secção.
- Cada página mostra o rótulo
Agrupamento · Secçãoe usa os formulários configurados. - “Trocar secção” limpa a sessão completa e regressa ao seletor inicial.
- “Terminar sessão” mantém a secção mas limpa credenciais e cache.
update_header.py: utilitário para actualizar cabeçalhos das páginas (usa ficheiros empages/).