Sha256: 9c3b151d8cf1507100811eeaae4189dc25ab3e218f96459f31b7edc8de15a7d2

Contents?: true

Size: 1.89 KB

Versions: 16

Compression:

Stored size: 1.89 KB

Contents

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

      has_many :bookings, :as => :reference, :dependent => :destroy do
        # TODO: duplicated in Booking (without parameter)
        def direct_balance(value_date = nil, direct_account = nil)
          return BigDecimal.new('0') unless proxy_owner.direct_account
          
          direct_account ||= proxy_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

    module ClassMethods
    end
    
    module InstanceMethods
      # 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
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
has_accounts-0.15.1 lib/has_accounts/model.rb
has_accounts-0.15.0 lib/has_accounts/model.rb
has_accounts-0.14.0 lib/has_accounts/model.rb
has_accounts-0.13.0 lib/has_accounts/model.rb
has_accounts-0.12.0 lib/has_accounts/model.rb
has_accounts-0.11.0 lib/has_accounts/model.rb
has_accounts-0.10.1 lib/has_accounts/model.rb
has_accounts-0.10.0 lib/has_accounts/model.rb
has_accounts-0.9.2 lib/has_accounts/model.rb
has_accounts-0.9.1 lib/has_accounts/model.rb
has_accounts-0.9.0 lib/has_accounts/model.rb
has_accounts-0.8.3 lib/has_accounts/model.rb
has_accounts-0.8.2 lib/has_accounts/model.rb
has_accounts-0.8.1 lib/has_accounts/model.rb
has_accounts-0.8.0 lib/has_accounts/model.rb
has_accounts-0.7.1 lib/has_accounts/model.rb