Sha256: 67ed1cb44427e2d59c480bfe0ec5149aa8d35687fceb72870b9dbc6d90e6d5f9

Contents?: true

Size: 1.8 KB

Versions: 15

Compression:

Stored size: 1.8 KB

Contents

module HasAccounts
  module Model
    extend ActiveSupport::Concern
    
    included do
      class_attribute :direct_account

      has_many :bookings, :as => :reference, :dependent => :nullify, :inverse_of => :reference do
        # TODO: duplicated in Booking (without parameter)
        def direct_balance(value_date = nil, direct_account = nil)
          return BigDecimal.new('0') unless proxy_association.owner.direct_account
          
          direct_account ||= proxy_association.owner.direct_account
          balance = BigDecimal.new('0')

          # Scope by value_date
          if value_date.is_a? Range or value_date.is_a? Array
            direct_bookings = where("date(value_date) BETWEEN :from AND :to", :from => value_date.first, :to => value_date.last)
          elsif value_date
            direct_bookings = where("date(value_date) <= ?", value_date) if value_date
          else
            direct_bookings = scoped
          end

          # Accumulate
          for booking in direct_bookings.all
            balance += booking.accounted_amount(direct_account)
          end

          balance
        end
      end
    end

    # Delegate to class
    def direct_account
      self.class.direct_account
    end

    # Build booking
    def build_booking(params = {}, template_code = nil)
      template_code ||= self.class.to_s.underscore + ':invoice'
      booking_template = BookingTemplate.find_by_code(template_code)

      # Prepare booking parameters
      booking_params = {:reference => self}
      booking_params.merge!(params)

      # Build and assign booking
      booking = booking_template.build_booking(booking_params)
      bookings << booking

      booking
    end

    def balance(value_date = nil, direct_account = nil)
      bookings.direct_balance(value_date, direct_account)
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
has_accounts-2.0.3 lib/has_accounts/model.rb
has_accounts-2.0.2 lib/has_accounts/model.rb
has_accounts-2.0.1 lib/has_accounts/model.rb
has_accounts-2.0.0 lib/has_accounts/model.rb
has_accounts-1.1.3 lib/has_accounts/model.rb
has_accounts-1.1.2 lib/has_accounts/model.rb
has_accounts-1.1.1 lib/has_accounts/model.rb
has_accounts-1.0.2 lib/has_accounts/model.rb
has_accounts-1.0.1 lib/has_accounts/model.rb
has_accounts-1.0.0 lib/has_accounts/model.rb
has_accounts-0.20.1 lib/has_accounts/model.rb
has_accounts-0.20.0 lib/has_accounts/model.rb
has_accounts-0.19.1 lib/has_accounts/model.rb
has_accounts-0.19.0 lib/has_accounts/model.rb
has_accounts-0.18.4 lib/has_accounts/model.rb