Class: Keepr::Account
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Keepr::Account
- Defined in:
- lib/keepr/account.rb
Class Method Summary collapse
Instance Method Summary collapse
- #balance(date = nil) ⇒ Object
- #keepr_postings ⇒ Object
- #number_as_string ⇒ Object
- #profit_and_loss? ⇒ Boolean
- #to_s ⇒ Object
Class Method Details
.merged_with_sums(options = {}) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/keepr/account.rb', line 50 def self.merged_with_sums(={}) accounts = with_sums().to_a # Sum up child accounts to parent position = 0 while account = accounts[position] do if account.parent_id && account.sum_amount if parent_account = accounts.find { |a| a.id == account.parent_id } parent_account.sum_amount ||= 0 parent_account.sum_amount += account.sum_amount accounts.delete_at(position) else raise RuntimeError end else position += 1 end end accounts end |
.with_sums(options = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/keepr/account.rb', line 22 def self.with_sums(={}) raise ArgumentError unless .is_a?(Hash) subquery = Keepr::Posting. select('SUM(keepr_postings.amount)'). joins(:keepr_journal). where('keepr_postings.keepr_account_id = keepr_accounts.id') date = [:date] permanent_only = [:permanent_only] if date if date.is_a?(Date) subquery = subquery.where "keepr_journals.date <= '#{date.to_s(:db)}'" elsif date.is_a?(Range) subquery = subquery.where "keepr_journals.date BETWEEN '#{date.first.to_s(:db)}' AND '#{date.last.to_s(:db)}'" else raise ArgumentError end end if permanent_only subquery = subquery.where "keepr_journals.permanent = #{connection.quoted_true}" end select "keepr_accounts.*, (#{subquery.to_sql}) AS sum_amount" end |
Instance Method Details
#balance(date = nil) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/keepr/account.rb', line 82 def balance(date=nil) if date if date.is_a?(Date) keepr_postings.joins(:keepr_journal).where("keepr_journals.date <= '#{date.to_s(:db)}'").sum(:amount) elsif date.is_a?(Range) keepr_postings.joins(:keepr_journal).where("keepr_journals.date BETWEEN '#{date.first.to_s(:db)}' AND '#{date.last.to_s(:db)}'").sum(:amount) else raise ArgumentError end else keepr_postings.sum(:amount) end end |
#keepr_postings ⇒ Object
76 77 78 79 80 |
# File 'lib/keepr/account.rb', line 76 def keepr_postings Keepr::Posting. joins(:keepr_account). where(subtree_conditions) end |
#number_as_string ⇒ Object
96 97 98 99 100 101 102 |
# File 'lib/keepr/account.rb', line 96 def number_as_string if number < 1000 "%04d" % number else number.to_s end end |
#profit_and_loss? ⇒ Boolean
72 73 74 |
# File 'lib/keepr/account.rb', line 72 def profit_and_loss? revenue? || expense? end |
#to_s ⇒ Object
104 105 106 |
# File 'lib/keepr/account.rb', line 104 def to_s "#{number_as_string} (#{name})" end |