Files
Reem-Notas/app/controllers/admin/usuarios_controller.rb
victor 732c6daae8 Auditoria de bugs + suíte de testes RSpec
Correções:
- Erro de sintaxe em Admin::Usuarios#toggle_ativo (entidade: \'User\') que
  derrubava /admin/usuarios
- Migration fase2 readicionava coluna `ativo` sem guard (db:migrate do zero
  quebrava); db:seed colidia no índice único de email para motoristas
- Dashboard e HistoricoEstimado agora aplicam .da_conta_gade
- ConsolidacaoMotorista#recalcular_valor usa valor_aplicado (fonte única)
- Gate de finalização por motorista (antes soma agregada com >=) e validação
  de elegibilidade em classificar/classificar_em_massa
- Remove coluna órfã pin_acesso; registra autor do arquivamento
  (arquivado_por/arquivado_em + belongs_to :arquivador)
- Dashboard redireciona motorista; Date.parse tolerante
- Remove MotoristaController + view órfãos (não roteados e quebrados)

Testes: infra RSpec + factories + specs de models, policy e request.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 21:47:41 -03:00

85 lines
2.6 KiB
Ruby

# app/controllers/usuarios_controller.rb
class Admin::UsuariosController < ApplicationController
before_action :set_usuario, only: [:show, :edit, :update, :destroy, :toggle_ativo]
def index
authorize User
@usuarios = policy_scope(User).order(:nome).limit(200)
@roles = User.roles.keys
end
def show
authorize @usuario
end
def new
@usuario = User.new
authorize @usuario
end
def create
@usuario = User.new(usuario_params)
authorize @usuario
if @usuario.save
AuditoriaLog.registrar(user: current_user, acao: 'criar_usuario', entidade: 'User', dados_novos: { detalhes: "Criou usuário #{@usuario.email} (#{@usuario.role})" }, request: request)
redirect_to admin_usuarios_path, notice: 'Usuário criado com sucesso.'
else
render :new, status: :unprocessable_entity
end
end
def edit
authorize @usuario
end
def update
authorize @usuario
if @usuario.update(usuario_params_update)
AuditoriaLog.registrar(user: current_user, acao: 'editar_usuario', entidade: 'User', dados_novos: { detalhes: "Editou usuário #{@usuario.email}" }, request: request)
redirect_to admin_usuarios_path, notice: 'Usuário atualizado.'
else
render :edit, status: :unprocessable_entity
end
end
def destroy
authorize @usuario
if @usuario == current_user
redirect_to admin_usuarios_path, alert: 'Você não pode excluir sua própria conta.'
return
end
@usuario.destroy
AuditoriaLog.registrar(user: current_user, acao: 'excluir_usuario', entidade: 'User', dados_novos: { detalhes: "Excluiu usuário #{@usuario.email}" }, request: request)
redirect_to admin_usuarios_path, notice: 'Usuário removido.'
end
def toggle_ativo
authorize @usuario, :update?
@usuario.update!(ativo: !@usuario.ativo)
status = @usuario.ativo? ? 'ativado' : 'desativado'
AuditoriaLog.registrar(user: current_user, acao: "usuario_#{status}", entidade: 'User', dados_novos: { detalhes: "#{@usuario.email} foi #{status}" }, request: request)
redirect_to admin_usuarios_path, notice: "Usuário #{status} com sucesso."
end
private
def set_usuario
@usuario = User.find(params[:id])
end
def usuario_params
params.require(:user).permit(:nome, :email, :password, :password_confirmation,
:role, :pin_code, :ativo)
end
def usuario_params_update
permitted = [:nome, :email, :role, :pin_code, :ativo]
permitted += [:password, :password_confirmation] if params[:user][:password].present?
params.require(:user).permit(permitted)
end
end