blend_spreadsheet_loan_generator 0.1.43 → 0.1.100
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/blend_spreadsheet_loan_generator/concerns/spreadsheet_concern.rb +4 -4
- data/lib/blend_spreadsheet_loan_generator/early_repay.rb +1 -1
- data/lib/blend_spreadsheet_loan_generator/formula.rb +12 -15
- data/lib/blend_spreadsheet_loan_generator/loan.rb +1 -1
- data/lib/blend_spreadsheet_loan_generator/restructure.rb +1 -1
- data/lib/blend_spreadsheet_loan_generator/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '094d6041671fe31e1d4065b08a380527d0c823a14921d1e240fe27668de71062'
|
4
|
+
data.tar.gz: 445f25c29e92de5b36dcd6a687f4a94fbfe0a2d30705dd623fb1f03315f3991a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12f8be613825bbf69472ea9332e72d77ef85d4cf53072f1734ac3be632b0ddcfa2d7a3b9f53e7cb6dc2fb719de90a364e7c76dee05995215753233f7d10f5d9c
|
7
|
+
data.tar.gz: 9c0735c99dcf516f92b9458dedd69e42e2c303df500dfaf809d0164cc35054f26dd34e9c48d2f6ba558aeb12e1a702253e2f3e6aacdc74456f23afac837ef577
|
@@ -87,21 +87,21 @@ module BlendSpreadsheetLoanGenerator
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
def
|
90
|
+
def first_term_skip_columns
|
91
91
|
%w[
|
92
92
|
period_calculated_fees
|
93
93
|
capitalized_fees_end
|
94
94
|
]
|
95
95
|
end
|
96
96
|
|
97
|
-
def apply_formulas(worksheet:,
|
97
|
+
def apply_formulas(worksheet:, first_term_skip: false)
|
98
98
|
columns.each.with_index do |title, column|
|
99
99
|
worksheet[1, column + 1] = title
|
100
100
|
end
|
101
101
|
loan.duration.times do |line|
|
102
102
|
columns.each.with_index do |title, column|
|
103
|
-
if
|
104
|
-
worksheet[line + 2, column + 1] = @formula.send("#{title}_formula", line: line + 2,
|
103
|
+
if first_term_skip && title.in?(custom_early_repayment)
|
104
|
+
worksheet[line + 2, column + 1] = @formula.send("#{title}_formula", line: line + 2, first_term_skip: true)
|
105
105
|
else
|
106
106
|
worksheet[line + 2, column + 1] = @formula.send("#{title}_formula", line: line + 2)
|
107
107
|
end
|
@@ -127,7 +127,7 @@ module BlendSpreadsheetLoanGenerator
|
|
127
127
|
|
128
128
|
@formula = Formula.new(loan: loan)
|
129
129
|
|
130
|
-
apply_formulas(worksheet: worksheet,
|
130
|
+
apply_formulas(worksheet: worksheet, first_term_skip: true)
|
131
131
|
|
132
132
|
worksheet[2, columns.index('remaining_capital_start') + 1] =
|
133
133
|
excel_float(values[last_paid_line + 1][:remaining_capital_start])
|
@@ -168,26 +168,23 @@ module BlendSpreadsheetLoanGenerator
|
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
171
|
-
def period_calculated_fees_formula(line:,
|
171
|
+
def period_calculated_fees_formula(line:, first_term_skip: false)
|
172
172
|
term = line - 1
|
173
|
-
if loan.
|
174
|
-
|
175
|
-
without_fees = "#{remaining_capital_start(line)} * (1 + #{period_rate(line)})^#{loan.deferred_and_capitalized} * #{period_rate(line)}"
|
173
|
+
if loan.bullet_term?(term)
|
174
|
+
index = first_term_skip ? index(line - 1) : index(line)
|
176
175
|
|
177
|
-
"=#{with_fees} - #{without_fees}"
|
178
|
-
elsif loan.bullet_term?(term)
|
179
|
-
index = (
|
180
|
-
if early_repayment
|
181
|
-
index(line - 1)
|
182
|
-
else
|
183
|
-
index(line)
|
184
|
-
end
|
185
|
-
)
|
186
176
|
with_fees = "#{remaining_capital_start(line)} * (1 + #{period_fees_rate(line)} + #{period_rate(line)})^#{index}"
|
187
177
|
without_fees = "#{remaining_capital_start(line)} * (1 + #{period_rate(line)})^#{index}"
|
188
178
|
current = "#{with_fees} - #{without_fees}"
|
189
179
|
|
190
180
|
"=#{current} - #{capitalized_fees_start(line)}"
|
181
|
+
elsif loan.deferred_and_capitalized > 0 && term > loan.deferred_and_capitalized
|
182
|
+
index = first_term_skip ? loan.deferred_and_capitalized : loan.deferred_and_capitalized - 1
|
183
|
+
|
184
|
+
with_fees = "#{remaining_capital_start(line)} * (1 + #{period_rate(line)} + #{period_fees_rate(line)})^#{index} * (#{period_rate(line)} + #{period_fees_rate(line)})"
|
185
|
+
without_fees = "#{remaining_capital_start(line)} * (1 + #{period_rate(line)})^#{index} * #{period_rate(line)}"
|
186
|
+
|
187
|
+
"=#{with_fees} - #{without_fees}"
|
191
188
|
else
|
192
189
|
amount_to_capitalize = [
|
193
190
|
'(',
|
@@ -207,10 +204,10 @@ module BlendSpreadsheetLoanGenerator
|
|
207
204
|
"=ARRONDI(#{capitalized_fees_end(line - 1)}; 2)"
|
208
205
|
end
|
209
206
|
|
210
|
-
def capitalized_fees_end_formula(line:,
|
207
|
+
def capitalized_fees_end_formula(line:, first_term_skip: false)
|
211
208
|
term = line - 1
|
212
209
|
if term <= loan.deferred_and_capitalized
|
213
|
-
index =
|
210
|
+
index = first_term_skip ? index(line - 1) : index(line)
|
214
211
|
with_fees = "#{remaining_capital_start(line)} * (1 + #{period_fees_rate(line)} + #{period_rate(line)})^#{index}"
|
215
212
|
without_fees = "#{remaining_capital_start(line)} * (1 + #{period_rate(line)})^#{index}"
|
216
213
|
"=ARRONDI(#{with_fees} - #{without_fees}; 2)"
|
@@ -72,7 +72,7 @@ module BlendSpreadsheetLoanGenerator
|
|
72
72
|
spreadsheet = session.create_spreadsheet(loan.name)
|
73
73
|
worksheet = spreadsheet.add_worksheet(loan.type, loan.duration + 2, columns.count + 1, index: 0)
|
74
74
|
|
75
|
-
@formula = Formula.new(loan: loan)
|
75
|
+
@formula = Formula.new(loan: loan, first_term_skip: true)
|
76
76
|
|
77
77
|
apply_formulas(worksheet: worksheet)
|
78
78
|
apply_formats(worksheet: worksheet)
|