Files
Reem-Notas/app/models/user.rb
2026-06-10 20:12:20 -03:00

60 lines
1.4 KiB
Ruby

# 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