cash_registers_move.rb 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. class CashRegistersMove < ActiveRecord::Base
  2. belongs_to :open_cash_register
  3. belongs_to :payment_method
  4. belongs_to :expense
  5. belongs_to :sale
  6. belongs_to :purchase
  7. belongs_to :credit_payment
  8. belongs_to :products_return
  9. ##--- Llevar registro de Actividad del usuario
  10. audited
  11. enum move_type: [ :egreso, :ingreso ]
  12. enum status: [ :inactive, :active ]
  13. enum concept: [:sale, :purchase, :expense, :credit_payment, :reserved_payment, :products_return]
  14. attr_accessor :skip_received_validation
  15. validates_presence_of :quantity, message: "Debe indicar cantidad."
  16. validates_presence_of :payment_method_id, message: "Debe seleccionar metodo de pago."
  17. validates_presence_of :received, message: "Debe seleccionar monto recibido.", if: :is_in_cash?, unless: :skip_received_validation
  18. scope :activos, -> { where( "cash_registers_moves.status = 1") }
  19. def is_in_cash?
  20. cash_payment_id = PaymentMethod.find_by(:isCash => 1).id
  21. if self.payment_method_id == cash_payment_id
  22. return true
  23. else
  24. return false
  25. end
  26. end
  27. def calculate_quantities
  28. cash_payment_method_id = PaymentMethod.find_by(:isCash => 1).id
  29. # ventas
  30. if self.sale.present?
  31. if self.sale.cash?
  32. if self.payment_method_id == cash_payment_method_id
  33. sale_total = self.sale.total
  34. already_paid = CashRegistersMove.where(:sale_id => self.sale_id,
  35. :open_cash_register_id => self.open_cash_register_id).sum(:quantity)
  36. rest = sale_total - already_paid
  37. if self.received.present?
  38. self.change = self.received - (sale_total - already_paid)
  39. self.quantity = self.received > rest ? rest : self.received
  40. end
  41. else
  42. self.quantity = self.received
  43. self.change = 0
  44. end
  45. elsif self.sale.reserved? || self.sale.credit?
  46. if self.received.present?
  47. self.change = self.received - self.quantity
  48. else
  49. self.change = 0
  50. end
  51. end
  52. # devoluciones
  53. elsif self.products_return.present?
  54. if self.payment_method_id == cash_payment_method_id
  55. total = self.products_return.difference_amount
  56. already_paid = CashRegistersMove.where(:products_return_id => self.products_return_id,
  57. :open_cash_register_id => self.open_cash_register_id).sum(:quantity)
  58. rest = total - already_paid
  59. if self.received.present?
  60. self.change = self.received - (total - already_paid)
  61. self.quantity = self.received > rest ? rest : self.received
  62. end
  63. else
  64. self.quantity = self.received
  65. self.change = 0
  66. end
  67. end
  68. end
  69. def self.incomings_per_period(period)
  70. all_incomings = Array.new
  71. case period
  72. when 'day'
  73. beg_period = Date.current.beginning_of_day
  74. end_period = Date.current.end_of_day
  75. when 'week'
  76. beg_period = Date.current.beginning_of_week
  77. end_period = Date.current.end_of_week
  78. when 'month'
  79. beg_period = Date.current.beginning_of_month
  80. end_period = Date.current.end_of_month
  81. end
  82. Pointsale.activos.each do |pointsale|
  83. obj = {}
  84. obj[:pointsale] = pointsale.name.gsub(" ", "\n")
  85. obj[:total] = pointsale.open_cash_registers.where(:created_at => beg_period..end_period).joins(:cash_registers_moves).where("cash_registers_moves.move_type = '1' and cash_registers_moves.status = '1'").sum(:quantity)
  86. all_incomings << obj
  87. end
  88. all_incomings = all_incomings.to_json
  89. return all_incomings
  90. end
  91. end