# 🚀 Fase 2 e 3 — Gade Logística ## O que foi implementado --- ### ✅ FASE 2 — Login, Usuários e Configurações #### Autenticação e Login - **`app/controllers/users/sessions_controller.rb`** — Devise customizado: - Redirecionamento por role: admin/gerente/operador → `/dashboard`, motorista → `/motorista` - Login por PIN de 4 dígitos para motoristas (sem precisar de e-mail) - Auditoria de login no banco - **`app/views/devise/sessions/new.html.erb`** — Tela de login com: - Duas abas: E-mail e PIN Motorista - Teclado numérico visual (touchscreen-friendly) para PIN - Auto-submit ao digitar o 4º dígito - Suporte a teclado físico no campo PIN #### CRUD de Usuários - **`app/controllers/usuarios_controller.rb`** — CRUD completo com Pundit - **`app/views/usuarios/`** — Lista com hover actions + formulário dinâmico - Formulário adapta campos conforme o role (e-mail/senha para staff, PIN para motorista) - Toggle ativo/inativo sem excluir o usuário #### Configurações e Preços - **`app/controllers/configuracoes_controller.rb`** — CRUD de pilares de preço - **`app/views/configuracoes/`** — Cards com edição inline e informações do banco externo - **Toggle de tema claro/escuro** via `POST /configuracoes/toggle_tema` (salvo na sessão) #### Pundit (Permissões) - **`app/policies/application_policy.rb`** — Base com helpers `admin?`, `gerente?`, etc. - **`app/policies/user_policy.rb`** — Admin vê tudo; gerente não vê outros admins - **`app/policies/configuracao_policy.rb`** — Apenas admin edita preços --- ### ✅ FASE 3 — Dashboard com Chart.js - **`app/controllers/dashboard_controller.rb`** — Cálculos ao vivo: - Total de entregas, pagas, pendentes (da tabela read-only) - Valor estimado (entregas pagas × preço da Configuracao) - Top 10 motoristas por valor - Distribuição por local (contact_name) - Evolução diária para o gráfico (labels + valores + qtds) - **`app/views/dashboard/index.html.erb`** — Layout visual: - **Card laranja grande** com valor estimado total - **3 cards menores** (entregas, consolidações, motoristas) - **Gráfico de linha** com Chart.js 4.4 (CDN) — evolução diária do mês - **Ranking de motoristas** com barras de progresso - **Grid de locais** com percentuais - Navegação por mês (← →) - **`app/views/motorista/index.html.erb`** — Painel simplificado do motorista: - Cards com suas métricas pessoais - Lista das últimas entregas pagas - Fechamentos/consolidações aprovadas --- ## Arquivos gerados ``` app/ ├── controllers/ │ ├── application_controller.rb ← Pundit + tema │ ├── users/sessions_controller.rb ← PIN login + redirect por role │ ├── usuarios_controller.rb ← CRUD usuários │ ├── configuracoes_controller.rb ← Preços + toggle tema │ ├── dashboard_controller.rb ← Cálculos Fase 3 │ └── motorista_controller.rb ← Painel motorista ├── models/ │ ├── user.rb ← PIN, roles, validações │ ├── configuracao.rb ← mapa_de_precos, labels, ícones │ ├── entrega.rb ← READ-ONLY, scopes atualizado │ ├── consolidacao.rb ← status enum, do_mes scope │ └── auditoria_log.rb ← método .registrar() ├── policies/ │ ├── application_policy.rb │ ├── user_policy.rb │ └── configuracao_policy.rb ├── helpers/ │ └── application_helper.rb ← moeda(), badge_status(), badge_role(), nav_link_to() └── views/ ├── devise/sessions/new.html.erb ← Login com PIN keypad ├── usuarios/ │ ├── index.html.erb │ ├── new.html.erb │ ├── edit.html.erb │ └── _form.html.erb ├── configuracoes/ │ ├── index.html.erb │ └── edit.html.erb ├── dashboard/ │ └── index.html.erb ← Chart.js + cards grandes ├── motorista/ │ └── index.html.erb ├── layouts/ │ ├── application.html.erb ← Tema toggle + sidebar responsiva │ └── _sidebar.html.erb ← Navegação por role └── shared/ └── _flash.html.erb config/ └── routes.rb ← Rotas completas Fases 1-8 db/ ├── migrate/20260610_add_fase2_fields_to_users.rb ← PIN + ativo + trackable + lockable └── seeds.rb ← Admin + Gerente + Operador + 3 motoristas com PIN ``` --- ## Como aplicar ```bash # 1. Copiar os arquivos para o projeto cp -r fase2_3/* . # 2. Renomear a migration com timestamp real TIMESTAMP=$(date +%Y%m%d%H%M%S) mv db/migrate/20260610_add_fase2_fields_to_users.rb \ "db/migrate/${TIMESTAMP}_add_fase2_fields_to_users.rb" # 3. Rodar migrations docker-compose exec app bundle exec rails db:migrate # 4. Rodar seeds docker-compose exec app bundle exec rails db:seed # 5. Verificar rotas docker-compose exec app bundle exec rails routes | grep -E 'usuario|config|dashboard|motor' # 6. Subir docker-compose up -d ``` --- ## Credenciais de teste | Usuário | Login | Senha/PIN | Vai para | |---------|-------|-----------|----------| | Admin | admin@gade.com | Gade@2026! | /dashboard | | Gerente | gerente@gade.com | Gade@2026! | /dashboard | | Operador | operador@gade.com | Gade@2026! | /dashboard | | Motorista João | PIN | 1234 | /motorista | | Motorista Maria | PIN | 5678 | /motorista | | Motorista Carlos | PIN | 9012 | /motorista | --- ## Próximas fases | Fase | O que implementar | |------|-------------------| | **4** | Job Whenever (1h) + HistoricoEstimado + AuditoriaLog UI | | **5** | Nova Consolidação + Wizard Passo 1 (selecionar motorista) | | **6** | Toggle switches + ações em massa + barra progresso (Stimulus) | | **7** | PDFs com Prawn: relatório individual + extrato com QR code | | **8** | Notificações WhatsApp/email + responsividade final |