Sha256: c65d23ad6bfcf20c304572d6d64808230522878da772468f0ff150a371568408

Contents?: true

Size: 1.6 KB

Versions: 5

Compression:

Stored size: 1.6 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')

          direct_bookings = scoped
          direct_bookings = direct_bookings.where("date(value_date) <= ?", value_date) if value_date

          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

5 entries across 5 versions & 1 rubygems

Version Path
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~
has_accounts-0.7.0 lib/has_accounts/model.rb