class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable devise :session_limitable # other devise options before_update :warehouse_or_pointsale #-- Associations belongs_to :pointsale belongs_to :warehouse has_many :pre_sales has_many :product_wastes has_many :pre_purchases has_many :open_cash_registers has_many :credit_payments has_many :cash_outs has_many :special_prices has_many :transfers has_many :commissions has_many :products_returns enum status: [ :erased, :active, :inactive ] ##--- Llevar registro de Actividad del usuario audited ##--- Validaciones previas de guardar attr_accessor :skip_validations_from_pointsale attr_accessor :skip_validations_when_edit validates_presence_of :userid, message: "Debe especificar el nombre de usuario, es con el que el usuario iniciará sesión." validates :password, :presence => { :message => "Debe especificar la contraseña nueva"}, length: { :within => Devise.password_length, too_short: "La contraseña no puede ser menor a %{count}." }, unless: :skip_validations_when_edit validates :password_confirmation, :presence => { :message => "Debe confirmar la contraseña nueva"}, unless: :skip_validations_when_edit # validates_presence_of :pointsale_id, message: "Debe seleccionar el punto de venta al que pertenecerá el usuario.", :on => [:create, :update], unless: :skip_validations_from_pointsale validates_presence_of :usertype, message: "Debe seleccionar el tipo de usuario, con este se determinara los permisos que tendrá dentro del sistema.", :on => [:create, :update], unless: :skip_validations_from_pointsale validates :pointsale_id , presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." }, :if => Proc.new {|c| c.warehouse_id.blank?}, :on => [:create, :update], unless: :skip_validations_from_pointsale validates :warehouse_id , presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." }, :if => Proc.new {|c| c.pointsale_id.blank?}, :on => [:create, :update], unless: :skip_validations_from_pointsale validates :userid, uniqueness: { message: "El usuario ya fue utilizado, favor de especificar otro." } def full_name "#{first_name} #{last_name}" end def get_open_cash_register self.open_cash_registers.where(:status => 0).last end def warehouse_or_pointsale if pointsale_id.present? self.warehouse_id = nil elsif warehouse_id.present? self.pointsale_id = nil end end end