diff --git a/app/models/transaction.rb b/app/models/transaction.rb index 1e48af6..6dd1bbb 100644 --- a/app/models/transaction.rb +++ b/app/models/transaction.rb @@ -16,7 +16,16 @@ class Transaction < ActiveRecord::Base belongs_to :debtor, class_name: 'User' belongs_to :creditor, class_name: 'User' + after_save :recalculate_balances + after_destroy :recalculate_balances + def client Client.find_by name: origin end + + private + def recalculate_balances + creditor.calculate_balance! + debtor.calculate_balance! + end end diff --git a/app/models/user.rb b/app/models/user.rb index 85881b5..18f7582 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -21,6 +21,12 @@ class User < ActiveRecord::Base Transaction.where("creditor_id = ? OR debtor_id = ?", id, id) end + def calculate_balance! + balance = incoming_transactions.sum(:amount) - + outgoing_transactions.sum(:amount) + self.update_attribute :balance, balance + end + def self.from_omniauth(auth) where(name: auth.uid).first_or_create do |user| user.name = auth.uid