Class: SpreadsheetLoanGenerator::Formula
- Inherits:
-
Object
- Object
- SpreadsheetLoanGenerator::Formula
- Includes:
- SpreadsheetConcern
- Defined in:
- lib/spreadsheet_loan_generator/formula.rb
Instance Attribute Summary collapse
-
#loan ⇒ Object
Returns the value of attribute loan.
Instance Method Summary collapse
- #accrued_delta_formula(line:) ⇒ Object
- #amount_to_add_formula(line:) ⇒ Object
- #capitalized_interests_end_formula(line:) ⇒ Object
- #capitalized_interests_start_formula(line:) ⇒ Object
- #delta_formula(line:) ⇒ Object
- #due_on_formula(line:) ⇒ Object
- #index_formula(line:) ⇒ Object
-
#initialize(loan:) ⇒ Formula
constructor
A new instance of Formula.
- #period_calculated_capital_formula(line:) ⇒ Object
- #period_calculated_interests_formula(line:) ⇒ Object
- #period_capital_formula(line:) ⇒ Object
- #period_interests_formula(line:) ⇒ Object
- #period_leap_days_formula(line:) ⇒ Object
- #period_non_leap_days_formula(line:) ⇒ Object
- #period_rate_formula(line:) ⇒ Object
- #period_reimbursed_capitalized_interests_formula(line:) ⇒ Object
- #period_theoric_interests_formula(line:) ⇒ Object
- #period_total_formula(line:) ⇒ Object
- #remaining_capital_end_formula(line:) ⇒ Object
- #remaining_capital_start_formula(line:) ⇒ Object
- #total_paid_capital_end_of_period_formula(line:) ⇒ Object
- #total_paid_interests_end_of_period_formula(line:) ⇒ Object
Constructor Details
#initialize(loan:) ⇒ Formula
Returns a new instance of Formula.
7 8 9 10 11 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 7 def initialize(loan:) @loan = loan @interests_formula = loan.interests_formula @loan_type_formula = loan.loan_type_formula end |
Instance Attribute Details
#loan ⇒ Object
Returns the value of attribute loan.
5 6 7 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 5 def loan @loan end |
Instance Method Details
#accrued_delta_formula(line:) ⇒ Object
139 140 141 142 143 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 139 def accrued_delta_formula(line:) return excel_float(0.0) if line == 2 "=#{accrued_delta(line - 1)} + #{delta(line)} - #{amount_to_add(line - 1)}" end |
#amount_to_add_formula(line:) ⇒ Object
145 146 147 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 145 def amount_to_add_formula(line:) "=TRONQUE(#{accrued_delta(line)}; 2)" end |
#capitalized_interests_end_formula(line:) ⇒ Object
113 114 115 116 117 118 119 120 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 113 def capitalized_interests_end_formula(line:) term = line - 1 if term <= loan.deferred_and_capitalized "=ARRONDI(#{capitalized_interests_start(line)} + #{period_calculated_interests(line)}; 2)" else "=ARRONDI(#{capitalized_interests_start(line)} - #{period_reimbursed_capitalized_interests(line)}; 2)" end end |
#capitalized_interests_start_formula(line:) ⇒ Object
107 108 109 110 111 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 107 def capitalized_interests_start_formula(line:) return excel_float(loan.starting_capitalized_interests) if line == 2 "=ARRONDI(#{capitalized_interests_end(line - 1)}; 2)" end |
#delta_formula(line:) ⇒ Object
135 136 137 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 135 def delta_formula(line:) "=#{period_theoric_interests(line)} - #{period_interests(line)}" end |
#due_on_formula(line:) ⇒ Object
17 18 19 20 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 17 def due_on_formula(line:) term = line - 1 loan.due_on + ((term - 1) * loan.period_duration).months end |
#index_formula(line:) ⇒ Object
13 14 15 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 13 def index_formula(line:) line - 1 end |
#period_calculated_capital_formula(line:) ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 50 def period_calculated_capital_formula(line:) term = line - 1 if term <= loan.total_deferred_duration excel_float(0.0) else @loan_type_formula.period_calculated_capital_formula(line: line) end end |
#period_calculated_interests_formula(line:) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 68 def period_calculated_interests_formula(line:) term = line - 1 if loan.type == 'standard' && loan.total_deferred_duration < term return @loan_type_formula.period_calculated_interests_formula(line: line) end amount_to_capitalize = [ '(', remaining_capital_start(line), '+', capitalized_interests_start(line), ')' ].join(' ') "=#{amount_to_capitalize} * #{period_rate(line)}" end |
#period_capital_formula(line:) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 22 def period_capital_formula(line:) if line == loan.duration + 1 "=ARRONDI(#{excel_float(loan.amount)} - #{total_paid_capital_end_of_period(line - 1)}; 2)" else "=ARRONDI(#{period_calculated_capital(line)} - #{period_reimbursed_capitalized_interests(line)}; 2)" end end |
#period_interests_formula(line:) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 30 def period_interests_formula(line:) term = line - 1 if term <= loan.deferred_and_capitalized excel_float(0.0) else "=ARRONDI(#{period_calculated_interests(line)}; 2)" end end |
#period_leap_days_formula(line:) ⇒ Object
149 150 151 152 153 154 155 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 149 def period_leap_days_formula(line:) term = line - 1 from = loan.due_on + ((term - 2) * loan.period_duration).months to = loan.due_on + ((term - 1) * loan.period_duration).months (from...to).sum { |d| d.leap? ? 1 : 0 } end |
#period_non_leap_days_formula(line:) ⇒ Object
157 158 159 160 161 162 163 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 157 def period_non_leap_days_formula(line:) term = line - 1 from = loan.due_on + ((term - 2) * loan.period_duration).months to = loan.due_on + ((term - 1) * loan.period_duration).months (from...to).sum { |d| d.leap? ? 0 : 1 } end |
#period_rate_formula(line:) ⇒ Object
131 132 133 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 131 def period_rate_formula(line:) @interests_formula.period_rate_formula(line: line) end |
#period_reimbursed_capitalized_interests_formula(line:) ⇒ Object
122 123 124 125 126 127 128 129 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 122 def period_reimbursed_capitalized_interests_formula(line:) term = line - 1 if term <= loan.total_deferred_duration excel_float(0.0) else "=ARRONDI(MIN(#{period_calculated_capital(line)}; #{capitalized_interests_start(line)}); 2)" end end |
#period_theoric_interests_formula(line:) ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 59 def period_theoric_interests_formula(line:) term = line - 1 if term <= loan.deferred_and_capitalized excel_float(0.0) else "=#{period_calculated_interests(line)}" end end |
#period_total_formula(line:) ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 39 def period_total_formula(line:) total = [ period_capital(line), '+', period_interests(line), '+', period_reimbursed_capitalized_interests(line) ].join(' ') "=ARRONDI(#{total}; 2)" end |
#remaining_capital_end_formula(line:) ⇒ Object
91 92 93 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 91 def remaining_capital_end_formula(line:) "=#{excel_float(loan.amount)} - #{total_paid_capital_end_of_period(line)}" end |
#remaining_capital_start_formula(line:) ⇒ Object
85 86 87 88 89 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 85 def remaining_capital_start_formula(line:) return excel_float(loan.amount) if line == 2 "=#{excel_float(loan.amount)} - #{total_paid_capital_end_of_period(line - 1)}" end |
#total_paid_capital_end_of_period_formula(line:) ⇒ Object
95 96 97 98 99 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 95 def total_paid_capital_end_of_period_formula(line:) return "=#{period_capital(line)}" if line == 2 "=ARRONDI(SOMME(#{column_range(column: period_capital, upto: line)}); 2)" end |
#total_paid_interests_end_of_period_formula(line:) ⇒ Object
101 102 103 104 105 |
# File 'lib/spreadsheet_loan_generator/formula.rb', line 101 def total_paid_interests_end_of_period_formula(line:) return "=#{period_interests(line)}" if line == 2 "=ARRONDI(SOMME(#{column_range(column: period_interests, upto: line)}); 2)" end |