portal_publico/docs/calendario-individual/CHANGELOG.md

4.9 KiB

Changelog — Calendário Individual e Widgets

Histórico específico desta aplicação, extraído de plano.md. Rodadas que mudaram mais de uma aplicação ao mesmo tempo (modelo de permissões, CSS transversal) continuam em plano.md.

Formato: uma entrada por rodada, ### Rodada N — Título; quando a rodada não tem número registrado, ### Título só. A numeração de rodada não é global — cada aplicação conta as próprias, e o mesmo número designa trabalhos diferentes em arquivos diferentes. Ao citar uma rodada, sempre nomear o arquivo. Ver o topo de plano.md.

"O Calendário De Paula deve ser um redirecionador" para https://depaula-tvcorporativa.lovable.app/calendario (abre em nova aba). O calendário interno mockado (calendario.html + calendar.js, com eventos fixos por setor) foi removido a pedido do usuário depois da troca — não recriar sem confirmar.

Rodada 10 — Calendário Individual + Widgets

Pedido novo, em duas partes:

  • Calendário Individual (calendario-individual.html): agenda pessoal de cada colaborador (seção base, disponível a todo perfil). Cada um cria compromissos e pode marcá-los como visíveis para todos que compartilham pelo menos um perfil de acesso em comum (sharedWithProfile + pidEventsVisibleTo em events.js) — colegas só visualizam, não editam nem excluem compromisso alheio.
  • Widgets na tela Principal: área "Widgets" com botão "Adicionar Widget" (seletor, no estilo Asana) — pensada para crescer além de um único tipo. Hoje só existe o widget de Calendário Individual (próximos 5 compromissos), mas o registro PID_WIDGET_TYPES já está estruturado para novos tipos sem refazer a área de adicionar/remover.

Rodada 11 — Horário e edição no Calendário Individual

Compromissos ganharam campo de horário (ordenados por horário dentro do dia) e passaram a ser editáveis depois de criados — clicar num compromisso próprio abre o mesmo modal preenchido, com um botão "Excluir" adicional, em vez de excluir direto ao clicar.

Rodada 35 — Eventos Corporativos no Calendário Individual

Pedido: distinguir compromissos pessoais/departamentais de eventos corporativos formais (reuniões, treinamentos) — com categoria, local, modalidade (presencial/remoto/híbrido) e descrição — e restringir quem pode criar compromissos visíveis para o departamento ou para todos, que até então qualquer usuário podia fazer livremente.

O que foi construído: CategoriaEvento (nome único + cor hex, cadastro editável direto no modal de criar/editar compromisso, botão "+" ao lado do <select> de categoria); CompromissoAgenda ganhou categoria (FK), eh_evento (booleano — força visibilidade="todos" na validação), local, modalidade e descricao. Nova permissão calendario-individual-criar-evento (catalogo.py, único tool dentro de um subgrupo — não um par visualizar/editar, já que o módulo em si é liberado a todo perfil) passou a ser exigida por CompromissoAgendaSerializer.validate() para qualquer compromisso com visibilidade em departamento/todos — liberada só pra "Integração e Inovação" no seed_portal.py por ora, mesmo cuidado de sempre (calendario-individual está em BASE_KEYS). No calendário, eventos ganharam uma 5ª categoria de filtro/cor ("evento", token --coral), distinta das 4 já existentes (somente_eu/departamento/todos/equipe). Migrações 0018_remove_compromissoagenda_compartilhado_com_perfil_and_more, 0019_categoriaevento_compromissoagenda_descricao_and_more e 0020_compromissoagenda_eh_evento. Detalhe técnico completo em docs/calendario-individual/calendario-individual.md, seção "Eventos Corporativos".

Rodada 36 — Revisão de interface de 30/09/2026: Calendário Individual

Correções vindas da revisão de interface de 30/09/2026 (ver plano.md), só no frontend:

  • Feriados: se /api/feriados/ falhar, carregarFeriados() devolve um Map vazio (sem guardar a falha em cache) e a grade sai sem feriados, em vez de o calendário inteiro sumir.
  • Falha de carga: categorias que não carregam deixam o select com "Nenhuma (categorias indisponíveis, recarregue a página)"; compromissos que não carregam mostram pidAlert e mantêm a grade.
  • Envio duplo: salvar compromisso e categoria ficam travados ("Salvando…") até a resposta; excluir trava o próprio botão.
  • Sair sem salvar: Cancelar e clique fora dos modais de compromisso e de categoria comparam com o retrato da abertura e pedem confirmação quando houve alteração.
  • Título do mês com só a primeira letra maiúscula no JS ("Setembro de 2026"), sem text-transform: capitalize; descrição do popup de detalhes com white-space: pre-wrap e overflow-wrap: anywhere (.ic-view-descricao); o "+" de novo compromisso fica sempre visível em @media (hover: none); autocomplete="off" em título, local e nome da categoria.