Files
Reem-Notas/README_FASE2_3.md

164 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 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 |