Module: Plutus::AmountsExtension

Defined in:
app/models/plutus/amounts_extension.rb

Overview

Association extension for has_many :amounts relations. Internal.

Instance Method Summary collapse

Instance Method Details

#balance(hash = {}) ⇒ BigDecimal

Returns a sum of the referenced Amount objects.

Takes a hash specifying :from_date and :to_date for calculating balances during periods. :from_date and :to_date may be strings of the form “yyyy-mm-dd” or Ruby Date objects

This runs the summation in the database, so it only works on persisted records.

Examples:

credit_amounts.balance({:from_date => "2000-01-01", :to_date => Date.today})
=> #<BigDecimal:103259bb8,'0.2E4',4(12)>

Returns:

  • (BigDecimal)

    The decimal value balance


16
17
18
19
20
21
22
23
24
# File 'app/models/plutus/amounts_extension.rb', line 16

def balance(hash={})
  if hash[:from_date] && hash[:to_date]
    from_date = hash[:from_date].kind_of?(Date) ? hash[:from_date] : Date.parse(hash[:from_date])
    to_date = hash[:to_date].kind_of?(Date) ? hash[:to_date] : Date.parse(hash[:to_date])
    includes(:entry).where('plutus_entries.date' => from_date..to_date).sum(:amount)
  else
    sum(:amount)
  end
end

#balance_for_new_recordObject

Returns a sum of the referenced Amount objects.

This is used primarly in the validation step in Plutus::Entry in order to ensure that the debit and credits are canceling out.

Since this does not use the database for sumation, it may be used on non-persisted records.


32
33
34
35
36
37
38
39
40
# File 'app/models/plutus/amounts_extension.rb', line 32

def balance_for_new_record
  balance = BigDecimal.new('0')
  each do |amount_record|
    if amount_record.amount && !amount_record.marked_for_destruction?
      balance += amount_record.amount # unless amount_record.marked_for_destruction?
    end
  end
  return balance
end