Class: Loan

Inherits:
Ekylibre::Record::Base show all
Includes:
Attachable, Customizable
Defined in:
app/models/loan.rb

Overview

Informations

License

Ekylibre - Simple agricultural ERP Copyright (C) 2008-2009 Brice Texier, Thibaud Merigon Copyright (C) 2010-2012 Brice Texier Copyright (C) 2012-2016 Brice Texier, David Joulin

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see www.gnu.org/licenses.

Table: loans

accounted_at         :datetime
amount               :decimal(19, 4)   not null
cash_id              :integer          not null
created_at           :datetime         not null
creator_id           :integer
currency             :string           not null
custom_fields        :jsonb
id                   :integer          not null, primary key
insurance_percentage :decimal(19, 4)   not null
interest_percentage  :decimal(19, 4)   not null
journal_entry_id     :integer
lender_id            :integer          not null
lock_version         :integer          default(0), not null
name                 :string           not null
repayment_duration   :integer          not null
repayment_method     :string           not null
repayment_period     :string           not null
shift_duration       :integer          default(0), not null
shift_method         :string
started_on           :date             not null
updated_at           :datetime         not null
updater_id           :integer

Instance Method Summary collapse

Methods included from Customizable

#custom_value, #set_custom_value, #validate_custom_fields

Methods inherited from Ekylibre::Record::Base

#already_updated?, attr_readonly_with_conditions, #check_if_destroyable?, #check_if_updateable?, columns_definition, complex_scopes, customizable?, #customizable?, #customized?, #destroyable?, #editable?, has_picture, #human_attribute_name, human_attribute_name_with_id, nomenclature_reflections, #old_record, #others, refers_to, scope_with_registration, simple_scopes, #updateable?

Instance Method Details

#generate_repaymentsObject


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'app/models/loan.rb', line 91

def generate_repayments
  period = repayment_period_month? ? 12 : 1
  length = repayment_period_month? ? :month : :year
  ids = []
  Calculus::Loan.new(amount, repayment_duration, interests: { interest_amount: interest_percentage / 100.0 }, insurances: { insurance_amount: insurance_percentage / 100.0 }, period: period, length: length, shift: self.shift_duration, shift_method: shift_method.to_sym, started_on: started_on).compute_repayments(repayment_method).each do |repayment|
    if r = repayments.find_by(position: repayment[:position])
      r.update_attributes!(repayment)
    else
      r = repayments.create!(repayment)
    end
    ids << r.id
  end
  repayments.destroy(repayments.where.not(id: ids))
  reload
end