user.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. class User < ActiveRecord::Base
  2. # Include default devise modules. Others available are:
  3. # :confirmable, :lockable, :timeoutable and :omniauthable
  4. devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
  5. devise :session_limitable # other devise options
  6. before_update :warehouse_or_pointsale
  7. #-- Associations
  8. belongs_to :pointsale
  9. belongs_to :warehouse
  10. has_many :pre_sales
  11. has_many :product_wastes
  12. has_many :pre_purchases
  13. has_many :open_cash_registers
  14. has_many :credit_payments
  15. has_many :cash_outs
  16. has_many :special_prices
  17. has_many :transfers
  18. has_many :commissions
  19. has_many :products_returns
  20. enum status: [:erased, :active, :inactive]
  21. ##--- Llevar registro de Actividad del usuario
  22. audited
  23. ##--- Validaciones previas de guardar
  24. attr_accessor :skip_validations_from_pointsale
  25. attr_accessor :skip_validations_when_edit
  26. validates_presence_of :userid, message: "Debe especificar el nombre de usuario, es con el que el usuario iniciará sesión."
  27. 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
  28. validates :password_confirmation, presence: { message: "Debe confirmar la contraseña nueva" }, unless: :skip_validations_when_edit
  29. # validates_presence_of :pointsale_id, message: "Debe seleccionar el punto de venta al que pertenecera el usuario.", on: [:create, :update], unless: :skip_validations_from_pointsale
  30. validates_presence_of :usertype, message: "Debe seleccionar el tipo de usuario, con este se determinará los permisos que tendrá dentro del sistema.", on: [:create, :update], unless: :skip_validations_from_pointsale
  31. validates :pointsale_id, presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." }, if: proc { |c| c.warehouse_id.blank? && c.usertype != 'A' }, on: [:create, :update], unless: :skip_validations_from_pointsale
  32. validates :warehouse_id, presence: { message: "Debe seleccionar un almacén o un punto de venta al que pertenecerá el usuario." }, if: proc { |c| c.pointsale_id.blank? && c.usertype != 'A' }, on: [:create, :update], unless: :skip_validations_from_pointsale
  33. validates :userid, uniqueness: { message: "El usuario ya fue utilizado, favor de especificar otro." }
  34. scope :vigentes, -> { where.not(status: 0).order(userid: :asc) }
  35. def full_name
  36. "#{first_name} #{last_name}"
  37. end
  38. def get_open_cash_register
  39. open_cash_registers.where(status: 0).last
  40. end
  41. def warehouse_or_pointsale
  42. if !pointsale_id.blank?
  43. self.warehouse_id = nil
  44. elsif !warehouse_id.blank?
  45. self.pointsale_id = nil
  46. end
  47. end
  48. def active_for_authentication?
  49. super && active?
  50. end
  51. def inactive_message
  52. "Usuario desactivado, contacte al administrador para activar su cuenta"
  53. end
  54. end