60 lines
1.4 KiB
Ruby
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
|