Files
Reem-Notas/README_FASE2_3.md
2026-06-10 20:12:20 -03:00

5.9 KiB
Raw Blame History

🚀 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

# 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 + holerite com QR code
8 Notificações WhatsApp/email + responsividade final