5.9 KiB
5.9 KiB
🚀 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
- Redirecionamento por role: admin/gerente/operador →
-
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 Punditapp/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çoapp/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 helpersadmin?,gerente?, etc.app/policies/user_policy.rb— Admin vê tudo; gerente não vê outros adminsapp/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
# 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 |