app/models/payment_application.rb in erp_invoicing-3.0.2 vs app/models/payment_application.rb in erp_invoicing-3.0.3

- old
+ new

@@ -1,11 +1,51 @@ class PaymentApplication < ActiveRecord::Base - - belongs_to :financial_txn, :dependent => :destroy - belongs_to :payment_applied_to, :polymorphic => true - belongs_to :money, :foreign_key => 'applied_money_amount_id', :dependent => :destroy + belongs_to :financial_txn, :dependent => :destroy + belongs_to :payment_applied_to, :polymorphic => true + belongs_to :money, :foreign_key => 'applied_money_amount_id', :dependent => :destroy + + before_destroy :unapply_payment + def is_pending? (self.financial_txn.is_scheduled? or self.financial_txn.is_pending?) unless self.financial_txn.nil? end - + + def apply_payment + #check the calculate balance strategy, if it includes payments then do nothing + #if it doesn't include payments then update the balance on the model + unless self.payment_applied_to.calculate_balance_strategy_type.nil? + unless self.payment_applied_to.calculate_balance_strategy_type.iid =~ /payment/ + update_applied_to_balance(:debit) + end + else + update_applied_to_balance(:debit) + end + end + + def unapply_payment + #check the calculate balance strategy, if it includes payments then do nothing + #if it doesn't include payments then update the balance on the model + unless self.payment_applied_to.calculate_balance_strategy_type.nil? + unless self.payment_applied_to.calculate_balance_strategy_type.iid =~ /payment/ + update_applied_to_balance(:credit) + end + else + update_applied_to_balance(:credit) + end + end + + private + + def update_applied_to_balance(type) + #check if payment_applied_to model has a balance= method + if self.payment_applied_to.respond_to?(:balance=) + if type == :debit + self.payment_applied_to.balance = self.payment_applied_to.balance - self.money.amount + else + self.payment_applied_to.balance = self.payment_applied_to.balance + self.money.amount + end + self.payment_applied_to.save + end + end + end