Módulo: Calendário (Painel)

UI de agenda/calendário e CRUD de eventos: sistema/painel/paginas/calendario (assets + actions).

Este documento descreve o Módulo de Calendário do painel do BarberBot, baseado nos arquivos deste pacote. Ele entrega a UI do calendário (FullCalendar) e as rotinas de CRUD de eventos na pasta calendario/evento/.

📁 Estrutura do módulo (calendário)

├─ calendario/
│  ├─ css/
│  │  ├─ plugins/
│  │  │  ├─ dataTables/
│  │  │  │  └─ dataTables.bootstrap.css
│  │  │  ├─ morris/
│  │  │  │  └─ morris-0.4.3.min.css
│  │  │  ├─ social-buttons/
│  │  │  │  └─ social-buttons.css
│  │  │  └─ timeline/
│  │  │     └─ timeline.css
│  │  ├─ bootstrap.css
│  │  ├─ bootstrap.min.css
│  │  ├─ calendar.css
│  │  ├─ fullcalendar.css
│  │  ├─ fullcalendar.print.min.css
│  │  ├─ metisMenu.css
│  │  ├─ metisMenu.min.css
│  │  └─ sb-admin.css
│  ├─ evento/
│  │  ├─ action/
│  │  │  ├─ eventoAdd.php
│  │  │  ├─ eventoEdit.php
│  │  │  └─ eventoEditData.php
│  │  └─ modal/
│  │     ├─ modalAdd.php
│  │     └─ modalEdit.php
│  ├─ font-awesome/
│  │  ├─ css/
│  │  │  ├─ font-awesome.css
│  │  │  └─ font-awesome.min.css
│  │  ├─ fonts/
│  │  │  ├─ FontAwesome.otf
│  │  │  ├─ fontawesome-webfont.eot
│  │  │  ├─ fontawesome-webfont.svg
│  │  │  ├─ fontawesome-webfont.ttf
│  │  │  └─ fontawesome-webfont.woff
│  │  ├─ less/
│  │  └─ scss/
│  ├─ fonts/
│  ├─ js/
│  │  ├─ bootstrap.js
│  │  ├─ bootstrap.min.js
│  │  ├─ fullcalendar.min.js
│  │  ├─ jquery.js
│  │  └─ moment.min.js
│  ├─ locale/
│  │  ├─ pt-br.js
│  │  └─ ...
│  └─ calendario.php
└─ calendario.php
  • calendario.php: página do painel que monta a UI e inclui as dependências do calendário.
  • calendario/: bibliotecas (CSS/JS/locale) e o submódulo evento/ (modais + actions).

🔐 Sessão e controle de acesso

  • Este módulo usa a sessão $_SESSION['idUsuario'] como identificador do usuário logado.
  • Em calendario.php há verificação de flag/permite (ex.: variável $calendario) para mostrar/ocultar a página.
  • Recomendação: além do include de verificar.php, validar permissões por grupo/perfil em endpoints do tipo action/*.

🗄️ Tabelas envolvidas

  • agendamentos
  • clientes
  • convites
  • eventos
  • servicos
  • usuarios

Observação: a tabela eventos é o núcleo do calendário. As demais aparecem por integrações/joins (ex.: agendamentos/serviços/clientes).

📌 Detalhamento arquivo a arquivo (calendário)

Arquivos principais e endpoints do calendário.

Arquivo Responsabilidade Operações Tabelas (detecção automática) Parâmetros (GET/POST) Retorno
calendario.php Página principal do módulo (UI). Geralmente carrega JS e aponta para a subpasta do módulo. SELECT agendamentos HTML/String
calendario/calendario.php Consulta/visualização. SELECT clientes, servicos, usuarios HTML/String
calendario/evento/action/eventoAdd.php Rotina de atualização/cadastro. INSERT, SELECT convites, eventos convidado, cor, descricao, inicio, termino, titulo HTML/String
calendario/evento/action/eventoEdit.php Rotina de exclusão/limpeza. DELETE, UPDATE convites, eventos cor, delete, descricao, id_evento, inicio, termino, titulo HTML/String
calendario/evento/action/eventoEditData.php Rotina de atualização/cadastro. UPDATE eventos Event HTML/String
calendario/evento/modal/modalAdd.php Consulta/visualização. SELECT HTML/String
calendario/evento/modal/modalEdit.php Rotina de exclusão/limpeza. DELETE, SELECT HTML/String

⚙️ Fluxo (UI ↔ actions)

  1. O usuário abre calendario.php, que carrega os assets de calendario/css, calendario/js e calendario/locale.
  2. Os modais (Adicionar/Editar) são incluídos de calendario/evento/modal/.
  3. As ações de CRUD são executadas por scripts em calendario/evento/action/ (ex.: adicionar evento, editar, arrastar e soltar, remover).

Contratos recomendados

  • Padronizar retorno dos scripts de action/ (JSON com status e message) para reduzir acoplamento com JS.
  • Validar datas: início <= fim, timezone e formato (ISO) para evitar eventos “fantasmas” no calendário.

🛠️ Boas práticas específicas

  • Arraste/Drop: endpoints de atualização rápida devem validar propriedade do evento (tenant/empresa) e permissão do usuário.
  • Concorrência: se houver múltiplos usuários editando, considerar “versionamento” (campo updated_at) ou bloquear edição.
  • Performance: carregar eventos por faixa de data (start/end) ao invés de carregar tudo do mês/ano inteiro.