expense.rb 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. class Expense < ActiveRecord::Base
  2. belongs_to :expensesconcept
  3. belongs_to :open_cash_register
  4. has_many :cash_registers_moves
  5. ##--- Llevar registro de Actividad del usuario
  6. audited
  7. enum status: [:canceled, :active, :registered]
  8. attr_accessor :skip_open_cash_validation
  9. attr_accessor :skip_open_cash_has_money
  10. validates_presence_of :quantity, message: "Se debe indicar la cantidad."
  11. validates_numericality_of :quantity, greater_than: 0.00, message: "La cantidad debe ser mayor a $0"
  12. validates_presence_of :open_cash_register_id, message: "Se debe elegir caja registradora.", unless: :skip_open_cash_validation
  13. validates_presence_of :expensesconcept_id, message: "Se debe elegir concepto de egreso."
  14. validate :open_cash_has_money?, unless: :skip_open_cash_has_money, on: :create
  15. scope :activos, -> { where(status: 2).order("created_at") }
  16. def open_cash_has_money?
  17. money_in_cash = 0
  18. money_in_cash += open_cash_register.initial_cash
  19. CashRegistersMove.where(open_cash_register_id: open_cash_register.id, move_type: '0').each do |move|
  20. money_in_cash -= move.quantity
  21. end
  22. CashRegistersMove.where(open_cash_register_id: open_cash_register.id, move_type: '1').each do |move|
  23. money_in_cash += move.quantity
  24. end
  25. if money_in_cash >= quantity
  26. return true
  27. else
  28. errors.add :quantity, "La cantidad es superior al efectivo disponible en caja."
  29. end
  30. end
  31. end