class ActsAsAccount::Journal

Public Class Methods

clear_current() click to toggle source
# File lib/acts_as_account/journal.rb, line 17
def clear_current
  Thread.current[:acts_as_account_current] = nil
end
current() click to toggle source
# File lib/acts_as_account/journal.rb, line 13
def current
  Thread.current[:acts_as_account_current] ||= create!
end

Public Instance Methods

transfer(amount, from_account, to_account, reference = nil, valuta = Time.now) click to toggle source
# File lib/acts_as_account/journal.rb, line 28
def transfer(amount, from_account, to_account, reference = nil, valuta = Time.now)
  transaction do
    if (amount < 0)
      # change order if amount is negative
      amount, from_account, to_account = -amount, to_account, from_account
    end

    logger.debug { "ActsAsAccount::Journal.transfer amount: #{amount} from:#{from_account.id} to:#{to_account.id} reference:#{reference.class.name}(#{reference.id}) valuta:#{valuta}" } if logger

    # to avoid possible deadlocks we need to ensure that the locking order is always
    # the same therfore the sort by id.
    [from_account, to_account].sort_by(&:id).map(&:lock!)

    add_posting(-amount,  from_account,   to_account, reference, valuta)
    add_posting( amount,    to_account, from_account, reference, valuta)
  end
end
transfers() click to toggle source
# File lib/acts_as_account/journal.rb, line 22
def transfers
  [].tap do |transfers|
    postings.each_slice(2) { |postings| transfers << Transfer.new(*postings) }
  end
end

Private Instance Methods

add_posting(amount, account, other_account, reference, valuta) click to toggle source
# File lib/acts_as_account/journal.rb, line 48
def add_posting(amount, account, other_account, reference, valuta)
  posting = postings.build(
    :amount => amount,
    :account => account,
    :other_account => other_account,
    :reference => reference,
    :valuta => valuta)

  account.class.update_counters account.id, :postings_count => 1, :balance => posting.amount

  posting.save(:validate => false)
  account.save(:validate => false)
end