# app/models/user.rb class User < ApplicationRecord # Devise modules devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :trackable, :lockable # Roles enum role: { admin: 0, gerente: 1, operador: 2, motorista: 3 } # Validações validates :name, presence: true validates :role, presence: true validates :pin_acesso, uniqueness: { allow_blank: true }, length: { is: 4, allow_blank: true }, format: { with: /\A\d{4}\z/, allow_blank: true, message: 'deve ter exatamente 4 dígitos numéricos' } validate :pin_obrigatorio_para_motorista # Callbacks before_validation :normalizar_pin # Associações has_many :auditoria_logs, foreign_key: :user_id, dependent: :nullify has_many :consolidacao_motoristas, foreign_key: :user_id, dependent: :restrict_with_error # Scopes scope :ativos, -> { where(ativo: true) } scope :motoristas, -> { where(role: :motorista) } def nome_display name.split.first.capitalize end def active? ativo? end def pode_acessar_admin? admin? || gerente? end def pode_criar_consolidacao? admin? || gerente? || operador? end private def normalizar_pin self.pin_acesso = pin_acesso.to_s.strip.presence end def pin_obrigatorio_para_motorista if motorista? && pin_acesso.blank? errors.add(:pin_acesso, 'é obrigatório para motoristas') end end end