odoo-addon-account-loan 17.0.1.0.1__py3-none-any.whl → 17.0.1.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. odoo/addons/account_loan/README.rst +4 -1
  2. odoo/addons/account_loan/__manifest__.py +1 -1
  3. odoo/addons/account_loan/i18n/account_loan.pot +12 -5
  4. odoo/addons/account_loan/i18n/am.po +12 -5
  5. odoo/addons/account_loan/i18n/ar.po +12 -5
  6. odoo/addons/account_loan/i18n/bg.po +12 -5
  7. odoo/addons/account_loan/i18n/bs.po +12 -5
  8. odoo/addons/account_loan/i18n/ca.po +15 -5
  9. odoo/addons/account_loan/i18n/ca_ES.po +12 -5
  10. odoo/addons/account_loan/i18n/cs.po +12 -5
  11. odoo/addons/account_loan/i18n/da.po +12 -5
  12. odoo/addons/account_loan/i18n/de.po +15 -5
  13. odoo/addons/account_loan/i18n/el_GR.po +12 -5
  14. odoo/addons/account_loan/i18n/en_AU.po +12 -5
  15. odoo/addons/account_loan/i18n/en_GB.po +12 -5
  16. odoo/addons/account_loan/i18n/es.po +15 -5
  17. odoo/addons/account_loan/i18n/es_AR.po +15 -5
  18. odoo/addons/account_loan/i18n/es_CL.po +12 -5
  19. odoo/addons/account_loan/i18n/es_CO.po +12 -5
  20. odoo/addons/account_loan/i18n/es_CR.po +12 -5
  21. odoo/addons/account_loan/i18n/es_DO.po +12 -5
  22. odoo/addons/account_loan/i18n/es_EC.po +12 -5
  23. odoo/addons/account_loan/i18n/es_ES.po +12 -5
  24. odoo/addons/account_loan/i18n/es_MX.po +12 -5
  25. odoo/addons/account_loan/i18n/es_PE.po +12 -5
  26. odoo/addons/account_loan/i18n/es_PY.po +12 -5
  27. odoo/addons/account_loan/i18n/es_VE.po +12 -5
  28. odoo/addons/account_loan/i18n/et.po +12 -5
  29. odoo/addons/account_loan/i18n/eu.po +12 -5
  30. odoo/addons/account_loan/i18n/fa.po +12 -5
  31. odoo/addons/account_loan/i18n/fi.po +12 -5
  32. odoo/addons/account_loan/i18n/fr.po +12 -5
  33. odoo/addons/account_loan/i18n/fr_CA.po +12 -5
  34. odoo/addons/account_loan/i18n/fr_CH.po +12 -5
  35. odoo/addons/account_loan/i18n/fr_FR.po +12 -5
  36. odoo/addons/account_loan/i18n/gl.po +12 -5
  37. odoo/addons/account_loan/i18n/gl_ES.po +12 -5
  38. odoo/addons/account_loan/i18n/gu.po +12 -5
  39. odoo/addons/account_loan/i18n/he.po +12 -5
  40. odoo/addons/account_loan/i18n/hi.po +12 -5
  41. odoo/addons/account_loan/i18n/hr.po +12 -5
  42. odoo/addons/account_loan/i18n/hr_HR.po +12 -5
  43. odoo/addons/account_loan/i18n/hu.po +12 -5
  44. odoo/addons/account_loan/i18n/id.po +12 -5
  45. odoo/addons/account_loan/i18n/it.po +15 -5
  46. odoo/addons/account_loan/i18n/ja.po +12 -5
  47. odoo/addons/account_loan/i18n/ko.po +12 -5
  48. odoo/addons/account_loan/i18n/lo.po +12 -5
  49. odoo/addons/account_loan/i18n/lt.po +12 -5
  50. odoo/addons/account_loan/i18n/lt_LT.po +12 -5
  51. odoo/addons/account_loan/i18n/lv.po +12 -5
  52. odoo/addons/account_loan/i18n/mk.po +12 -5
  53. odoo/addons/account_loan/i18n/mn.po +12 -5
  54. odoo/addons/account_loan/i18n/nb.po +12 -5
  55. odoo/addons/account_loan/i18n/nb_NO.po +12 -5
  56. odoo/addons/account_loan/i18n/nl.po +12 -5
  57. odoo/addons/account_loan/i18n/nl_BE.po +12 -5
  58. odoo/addons/account_loan/i18n/nl_NL.po +12 -5
  59. odoo/addons/account_loan/i18n/pl.po +12 -5
  60. odoo/addons/account_loan/i18n/pt.po +12 -5
  61. odoo/addons/account_loan/i18n/pt_BR.po +15 -5
  62. odoo/addons/account_loan/i18n/pt_PT.po +12 -5
  63. odoo/addons/account_loan/i18n/ro.po +12 -5
  64. odoo/addons/account_loan/i18n/ru.po +12 -5
  65. odoo/addons/account_loan/i18n/sk.po +12 -5
  66. odoo/addons/account_loan/i18n/sk_SK.po +12 -5
  67. odoo/addons/account_loan/i18n/sl.po +12 -5
  68. odoo/addons/account_loan/i18n/sr.po +12 -5
  69. odoo/addons/account_loan/i18n/sr@latin.po +12 -5
  70. odoo/addons/account_loan/i18n/sv.po +15 -5
  71. odoo/addons/account_loan/i18n/th.po +12 -5
  72. odoo/addons/account_loan/i18n/tr.po +12 -5
  73. odoo/addons/account_loan/i18n/tr_TR.po +12 -5
  74. odoo/addons/account_loan/i18n/uk.po +12 -5
  75. odoo/addons/account_loan/i18n/vi.po +12 -5
  76. odoo/addons/account_loan/i18n/vi_VN.po +12 -5
  77. odoo/addons/account_loan/i18n/zh_CN.po +12 -5
  78. odoo/addons/account_loan/i18n/zh_TW.po +12 -5
  79. odoo/addons/account_loan/models/account_loan.py +21 -3
  80. odoo/addons/account_loan/models/account_loan_line.py +36 -12
  81. odoo/addons/account_loan/readme/CONTRIBUTORS.md +2 -0
  82. odoo/addons/account_loan/static/description/index.html +5 -1
  83. odoo/addons/account_loan/tests/test_loan.py +33 -0
  84. odoo/addons/account_loan/views/account_loan_lines_view.xml +12 -5
  85. odoo/addons/account_loan/views/account_loan_view.xml +1 -0
  86. odoo/addons/account_loan/wizards/account_loan_post.py +12 -0
  87. {odoo_addon_account_loan-17.0.1.0.1.dist-info → odoo_addon_account_loan-17.0.1.1.1.dist-info}/METADATA +5 -2
  88. odoo_addon_account_loan-17.0.1.1.1.dist-info/RECORD +114 -0
  89. odoo_addon_account_loan-17.0.1.0.1.dist-info/RECORD +0 -114
  90. {odoo_addon_account_loan-17.0.1.0.1.dist-info → odoo_addon_account_loan-17.0.1.1.1.dist-info}/WHEEL +0 -0
  91. {odoo_addon_account_loan-17.0.1.0.1.dist-info → odoo_addon_account_loan-17.0.1.1.1.dist-info}/top_level.txt +0 -0
@@ -864,11 +864,6 @@ msgstr ""
864
864
  msgid "Sequence"
865
865
  msgstr ""
866
866
 
867
- #. module: account_loan
868
- #: model:ir.model.constraint,message:account_loan.constraint_account_loan_line_sequence_loan
869
- msgid "Sequence must be unique in a loan"
870
- msgstr ""
871
-
872
867
  #. module: account_loan
873
868
  #: model:ir.model.fields,field_description:account_loan.field_account_loan__short_term_loan_account_id
874
869
  #: model:ir.model.fields,field_description:account_loan.field_account_loan_line__short_term_loan_account_id
@@ -951,6 +946,13 @@ msgid ""
951
946
  "Planned: Future activities."
952
947
  msgstr ""
953
948
 
949
+ #. module: account_loan
950
+ #. odoo-python
951
+ #: code:addons/account_loan/wizards/account_loan_post.py:0
952
+ #, python-format
953
+ msgid "The total principal amount does not match the loan amount."
954
+ msgstr ""
955
+
954
956
  #. module: account_loan
955
957
  #: model:ir.model.fields,help:account_loan.field_account_loan_line__payment_amount
956
958
  msgid "Total amount that will be payed (Annuity)"
@@ -1008,6 +1010,11 @@ msgstr ""
1008
1010
  msgid "When checked, the first payment will be on start date"
1009
1011
  msgstr ""
1010
1012
 
1013
+ #. module: account_loan
1014
+ #: model_terms:ir.ui.view,arch_db:account_loan.account_loan_line_tree
1015
+ msgid "principal_amount"
1016
+ msgstr ""
1017
+
1011
1018
  #~ msgid "Last Modified on"
1012
1019
  #~ msgstr "Остання модифікація"
1013
1020
 
@@ -863,11 +863,6 @@ msgstr ""
863
863
  msgid "Sequence"
864
864
  msgstr ""
865
865
 
866
- #. module: account_loan
867
- #: model:ir.model.constraint,message:account_loan.constraint_account_loan_line_sequence_loan
868
- msgid "Sequence must be unique in a loan"
869
- msgstr ""
870
-
871
866
  #. module: account_loan
872
867
  #: model:ir.model.fields,field_description:account_loan.field_account_loan__short_term_loan_account_id
873
868
  #: model:ir.model.fields,field_description:account_loan.field_account_loan_line__short_term_loan_account_id
@@ -950,6 +945,13 @@ msgid ""
950
945
  "Planned: Future activities."
951
946
  msgstr ""
952
947
 
948
+ #. module: account_loan
949
+ #. odoo-python
950
+ #: code:addons/account_loan/wizards/account_loan_post.py:0
951
+ #, python-format
952
+ msgid "The total principal amount does not match the loan amount."
953
+ msgstr ""
954
+
953
955
  #. module: account_loan
954
956
  #: model:ir.model.fields,help:account_loan.field_account_loan_line__payment_amount
955
957
  msgid "Total amount that will be payed (Annuity)"
@@ -1007,6 +1009,11 @@ msgstr ""
1007
1009
  msgid "When checked, the first payment will be on start date"
1008
1010
  msgstr ""
1009
1011
 
1012
+ #. module: account_loan
1013
+ #: model_terms:ir.ui.view,arch_db:account_loan.account_loan_line_tree
1014
+ msgid "principal_amount"
1015
+ msgstr ""
1016
+
1010
1017
  #~ msgid "Last Modified on"
1011
1018
  #~ msgstr "Sửa lần cuối vào"
1012
1019
 
@@ -864,11 +864,6 @@ msgstr ""
864
864
  msgid "Sequence"
865
865
  msgstr ""
866
866
 
867
- #. module: account_loan
868
- #: model:ir.model.constraint,message:account_loan.constraint_account_loan_line_sequence_loan
869
- msgid "Sequence must be unique in a loan"
870
- msgstr ""
871
-
872
867
  #. module: account_loan
873
868
  #: model:ir.model.fields,field_description:account_loan.field_account_loan__short_term_loan_account_id
874
869
  #: model:ir.model.fields,field_description:account_loan.field_account_loan_line__short_term_loan_account_id
@@ -951,6 +946,13 @@ msgid ""
951
946
  "Planned: Future activities."
952
947
  msgstr ""
953
948
 
949
+ #. module: account_loan
950
+ #. odoo-python
951
+ #: code:addons/account_loan/wizards/account_loan_post.py:0
952
+ #, python-format
953
+ msgid "The total principal amount does not match the loan amount."
954
+ msgstr ""
955
+
954
956
  #. module: account_loan
955
957
  #: model:ir.model.fields,help:account_loan.field_account_loan_line__payment_amount
956
958
  msgid "Total amount that will be payed (Annuity)"
@@ -1008,5 +1010,10 @@ msgstr ""
1008
1010
  msgid "When checked, the first payment will be on start date"
1009
1011
  msgstr ""
1010
1012
 
1013
+ #. module: account_loan
1014
+ #: model_terms:ir.ui.view,arch_db:account_loan.account_loan_line_tree
1015
+ msgid "principal_amount"
1016
+ msgstr ""
1017
+
1011
1018
  #~ msgid "or"
1012
1019
  #~ msgstr "hoặc"
@@ -865,11 +865,6 @@ msgstr ""
865
865
  msgid "Sequence"
866
866
  msgstr ""
867
867
 
868
- #. module: account_loan
869
- #: model:ir.model.constraint,message:account_loan.constraint_account_loan_line_sequence_loan
870
- msgid "Sequence must be unique in a loan"
871
- msgstr ""
872
-
873
868
  #. module: account_loan
874
869
  #: model:ir.model.fields,field_description:account_loan.field_account_loan__short_term_loan_account_id
875
870
  #: model:ir.model.fields,field_description:account_loan.field_account_loan_line__short_term_loan_account_id
@@ -952,6 +947,13 @@ msgid ""
952
947
  "Planned: Future activities."
953
948
  msgstr ""
954
949
 
950
+ #. module: account_loan
951
+ #. odoo-python
952
+ #: code:addons/account_loan/wizards/account_loan_post.py:0
953
+ #, python-format
954
+ msgid "The total principal amount does not match the loan amount."
955
+ msgstr ""
956
+
955
957
  #. module: account_loan
956
958
  #: model:ir.model.fields,help:account_loan.field_account_loan_line__payment_amount
957
959
  msgid "Total amount that will be payed (Annuity)"
@@ -1009,6 +1011,11 @@ msgstr ""
1009
1011
  msgid "When checked, the first payment will be on start date"
1010
1012
  msgstr ""
1011
1013
 
1014
+ #. module: account_loan
1015
+ #: model_terms:ir.ui.view,arch_db:account_loan.account_loan_line_tree
1016
+ msgid "principal_amount"
1017
+ msgstr ""
1018
+
1012
1019
  #~ msgid "Last Modified on"
1013
1020
  #~ msgstr "Last Modified on"
1014
1021
 
@@ -865,11 +865,6 @@ msgstr ""
865
865
  msgid "Sequence"
866
866
  msgstr ""
867
867
 
868
- #. module: account_loan
869
- #: model:ir.model.constraint,message:account_loan.constraint_account_loan_line_sequence_loan
870
- msgid "Sequence must be unique in a loan"
871
- msgstr ""
872
-
873
868
  #. module: account_loan
874
869
  #: model:ir.model.fields,field_description:account_loan.field_account_loan__short_term_loan_account_id
875
870
  #: model:ir.model.fields,field_description:account_loan.field_account_loan_line__short_term_loan_account_id
@@ -952,6 +947,13 @@ msgid ""
952
947
  "Planned: Future activities."
953
948
  msgstr ""
954
949
 
950
+ #. module: account_loan
951
+ #. odoo-python
952
+ #: code:addons/account_loan/wizards/account_loan_post.py:0
953
+ #, python-format
954
+ msgid "The total principal amount does not match the loan amount."
955
+ msgstr ""
956
+
955
957
  #. module: account_loan
956
958
  #: model:ir.model.fields,help:account_loan.field_account_loan_line__payment_amount
957
959
  msgid "Total amount that will be payed (Annuity)"
@@ -1009,6 +1011,11 @@ msgstr ""
1009
1011
  msgid "When checked, the first payment will be on start date"
1010
1012
  msgstr ""
1011
1013
 
1014
+ #. module: account_loan
1015
+ #: model_terms:ir.ui.view,arch_db:account_loan.account_loan_line_tree
1016
+ msgid "principal_amount"
1017
+ msgstr ""
1018
+
1012
1019
  #~ msgid "Last Modified on"
1013
1020
  #~ msgstr "最後修改:"
1014
1021
 
@@ -205,6 +205,22 @@ class AccountLoan(models.Model):
205
205
  ("name_uniq", "unique(name, company_id)", "Loan name must be unique"),
206
206
  ]
207
207
 
208
+ @api.onchange("line_ids")
209
+ def _onchange_line_ids_draft_manual(self):
210
+ if self.state == "draft":
211
+ self.line_ids = self.line_ids.sorted(key=lambda line: line.sequence)
212
+ previous_pending_principal = 0
213
+ previous_principal_amount = 0
214
+ for line in self.line_ids:
215
+ if line.sequence == 1:
216
+ line.pending_principal_amount = line.loan_id.loan_amount
217
+ else:
218
+ line.pending_principal_amount = (
219
+ previous_pending_principal - previous_principal_amount
220
+ )
221
+ previous_pending_principal = line.pending_principal_amount
222
+ previous_principal_amount = line.principal_amount
223
+
208
224
  @api.depends("line_ids", "currency_id", "loan_amount")
209
225
  def _compute_total_amounts(self):
210
226
  for record in self:
@@ -319,7 +335,8 @@ class AccountLoan(models.Model):
319
335
  self.ensure_one()
320
336
  if not self.start_date:
321
337
  self.start_date = fields.Date.today()
322
- self._compute_draft_lines()
338
+ if not self.line_ids:
339
+ self._compute_draft_lines()
323
340
  self.write({"state": "posted"})
324
341
 
325
342
  def close(self):
@@ -388,15 +405,16 @@ class AccountLoan(models.Model):
388
405
  date = self.start_date
389
406
  else:
390
407
  date = datetime.today().date()
408
+ initial_date = date
391
409
  delta = relativedelta(months=self.method_period)
392
410
  if not self.payment_on_first_period:
393
- date += delta
411
+ date = initial_date + delta
394
412
  for i in range(1, self.periods + 1):
395
413
  line = self.env["account.loan.line"].create(
396
414
  self._new_line_vals(i, date, amount)
397
415
  )
398
416
  line._check_amount()
399
- date += delta
417
+ date = initial_date + delta * i
400
418
  amount -= line.payment_amount - line.interests_amount
401
419
  if self.long_term_loan_account_id:
402
420
  self._check_long_term_principal_amount()
@@ -70,12 +70,14 @@ class AccountLoanLine(models.Model):
70
70
  )
71
71
  rate = fields.Float(
72
72
  required=True,
73
- readonly=True,
73
+ readonly=False,
74
+ store=True,
74
75
  digits=(8, 6),
76
+ compute="_compute_rate",
75
77
  )
76
78
  pending_principal_amount = fields.Monetary(
77
79
  currency_field="currency_id",
78
- readonly=True,
80
+ readonly=False,
79
81
  help="Pending amount of the loan before the payment",
80
82
  )
81
83
  long_term_pending_principal_amount = fields.Monetary(
@@ -86,17 +88,22 @@ class AccountLoanLine(models.Model):
86
88
  )
87
89
  payment_amount = fields.Monetary(
88
90
  currency_field="currency_id",
89
- readonly=True,
91
+ readonly=False,
92
+ store=True,
93
+ compute="_compute_payment_amount",
90
94
  help="Total amount that will be payed (Annuity)",
91
95
  )
92
96
  interests_amount = fields.Monetary(
93
97
  currency_field="currency_id",
94
- readonly=True,
98
+ readonly=False,
99
+ store=True,
100
+ compute="_compute_interests_amount",
95
101
  help="Amount of the payment that will be assigned to interests",
96
102
  )
97
103
  principal_amount = fields.Monetary(
98
104
  currency_field="currency_id",
99
- compute="_compute_amounts",
105
+ compute="_compute_principal_amount",
106
+ store=True,
100
107
  help="Amount of the payment that will reduce the pending loan amount",
101
108
  )
102
109
  long_term_principal_amount = fields.Monetary(
@@ -107,6 +114,7 @@ class AccountLoanLine(models.Model):
107
114
  final_pending_principal_amount = fields.Monetary(
108
115
  currency_field="currency_id",
109
116
  compute="_compute_amounts",
117
+ store=True,
110
118
  help="Pending amount of the loan after the payment",
111
119
  )
112
120
  move_ids = fields.One2many(
@@ -115,13 +123,20 @@ class AccountLoanLine(models.Model):
115
123
  )
116
124
  has_moves = fields.Boolean(compute="_compute_has_moves")
117
125
  has_invoices = fields.Boolean(compute="_compute_has_invoices")
118
- _sql_constraints = [
119
- (
120
- "sequence_loan",
121
- "unique(loan_id, sequence)",
122
- "Sequence must be unique in a loan",
123
- )
124
- ]
126
+
127
+ @api.depends("interests_amount")
128
+ def _compute_rate(self):
129
+ for record in self:
130
+ record.rate = (
131
+ record.interests_amount * 100
132
+ ) / record.pending_principal_amount
133
+
134
+ @api.depends("rate")
135
+ def _compute_interests_amount(self):
136
+ for record in self:
137
+ record.interests_amount = (
138
+ record.pending_principal_amount * record.rate
139
+ ) / 100
125
140
 
126
141
  @api.depends("move_ids")
127
142
  def _compute_has_moves(self):
@@ -138,12 +153,21 @@ class AccountLoanLine(models.Model):
138
153
  for record in self:
139
154
  record.name = "%s-%d" % (record.loan_id.name, record.sequence)
140
155
 
156
+ @api.depends("principal_amount", "interests_amount")
157
+ def _compute_payment_amount(self):
158
+ for rec in self:
159
+ rec.payment_amount = rec.principal_amount + rec.interests_amount
160
+
141
161
  @api.depends("payment_amount", "interests_amount", "pending_principal_amount")
142
162
  def _compute_amounts(self):
143
163
  for rec in self:
144
164
  rec.final_pending_principal_amount = (
145
165
  rec.pending_principal_amount - rec.payment_amount + rec.interests_amount
146
166
  )
167
+
168
+ @api.depends("pending_principal_amount")
169
+ def _compute_principal_amount(self):
170
+ for rec in self:
147
171
  rec.principal_amount = rec.payment_amount - rec.interests_amount
148
172
 
149
173
  def _compute_amount(self):
@@ -1,3 +1,5 @@
1
1
  - Enric Tobella \<<etobella@creublanca.es>\>
2
2
  - Bhavesh Odedra \<<bodedra@opensourceintegrators.com>\>
3
3
  - Alberto Martín Cortada \<<alberto.martin@guadaltech.es>\>
4
+ - [Tecnativa](https://www.tecnativa.com):
5
+ - Juan Carlos Oñate
@@ -367,7 +367,7 @@ ul.auto-toc {
367
367
  !! This file is generated by oca-gen-addon-readme !!
368
368
  !! changes will be overwritten. !!
369
369
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370
- !! source digest: sha256:78f845e7c79f02ff4819e127d5acfcea95cb060ee430113947defd26ef63cf7c
370
+ !! source digest: sha256:64c6fa5e3a0b16d71144e17fa2a1df4504724e573bd68d30abb3a092a14ec771
371
371
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
372
372
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-financial-tools/tree/17.0/account_loan"><img alt="OCA/account-financial-tools" src="https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-financial-tools-17-0/account-financial-tools-17-0-account_loan"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-financial-tools&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
373
  <p>This module extends the functionality of accounting to support loans. It
@@ -453,6 +453,10 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
453
453
  <li>Enric Tobella &lt;<a class="reference external" href="mailto:etobella&#64;creublanca.es">etobella&#64;creublanca.es</a>&gt;</li>
454
454
  <li>Bhavesh Odedra &lt;<a class="reference external" href="mailto:bodedra&#64;opensourceintegrators.com">bodedra&#64;opensourceintegrators.com</a>&gt;</li>
455
455
  <li>Alberto Martín Cortada &lt;<a class="reference external" href="mailto:alberto.martin&#64;guadaltech.es">alberto.martin&#64;guadaltech.es</a>&gt;</li>
456
+ <li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
457
+ <li>Juan Carlos Oñate</li>
458
+ </ul>
459
+ </li>
456
460
  </ul>
457
461
  </div>
458
462
  <div class="section" id="maintainers">
@@ -86,6 +86,39 @@ class TestLoan(BaseCommon):
86
86
  action = self.partner.action_view_partner_lended_loans()
87
87
  self.assertEqual(loan, self.env[action["res_model"]].search(action["domain"]))
88
88
 
89
+ @mute_logger("odoo.models.unlink")
90
+ @freeze_time("2025-01-31")
91
+ def test_loan_lines_custom_day(self):
92
+ loan = self.create_loan("fixed-annuity", 500000, 1, 60)
93
+ loan.long_term_loan_account_id = self.lt_loan_account
94
+ loan.compute_lines()
95
+ dates_by_sequence = {}
96
+ for line in loan.line_ids:
97
+ dates_by_sequence[line.sequence] = line.date
98
+ self.assertEqual(dates_by_sequence[1], fields.Date.from_string("2025-01-31"))
99
+ self.assertEqual(dates_by_sequence[2], fields.Date.from_string("2025-02-28"))
100
+ self.assertEqual(dates_by_sequence[3], fields.Date.from_string("2025-03-31"))
101
+ self.assertEqual(dates_by_sequence[4], fields.Date.from_string("2025-04-30"))
102
+ self.assertEqual(dates_by_sequence[5], fields.Date.from_string("2025-05-31"))
103
+ self.assertEqual(dates_by_sequence[6], fields.Date.from_string("2025-06-30"))
104
+ self.assertEqual(dates_by_sequence[7], fields.Date.from_string("2025-07-31"))
105
+ self.assertEqual(dates_by_sequence[8], fields.Date.from_string("2025-08-31"))
106
+ self.assertEqual(dates_by_sequence[9], fields.Date.from_string("2025-09-30"))
107
+ self.assertEqual(dates_by_sequence[10], fields.Date.from_string("2025-10-31"))
108
+ self.assertEqual(dates_by_sequence[11], fields.Date.from_string("2025-11-30"))
109
+ self.assertEqual(dates_by_sequence[12], fields.Date.from_string("2025-12-31"))
110
+ self.assertEqual(dates_by_sequence[13], fields.Date.from_string("2026-01-31"))
111
+ line_1 = loan.line_ids.filtered(lambda x: x.sequence == 1)
112
+ self.assertEqual(line_1.long_term_pending_principal_amount, 401989.15)
113
+ self.assertAlmostEqual(line_1.long_term_principal_amount, 8211.88)
114
+ line_2 = loan.line_ids.filtered(lambda x: x.sequence == 2)
115
+ self.assertEqual(line_2.long_term_pending_principal_amount, 393777.27)
116
+ line_13 = loan.line_ids.filtered(lambda x: x.sequence == 13)
117
+ self.assertEqual(line_13.pending_principal_amount, 401989.15)
118
+ self.assertEqual(
119
+ line_1.long_term_pending_principal_amount, line_13.pending_principal_amount
120
+ )
121
+
89
122
  @mute_logger("odoo.models.unlink")
90
123
  def test_round_on_end(self):
91
124
  loan = self.create_loan("fixed-annuity", 500000, 1, 60)
@@ -6,21 +6,28 @@
6
6
  <field name="model">account.loan.line</field>
7
7
  <field name="priority">99</field>
8
8
  <field name="arch" type="xml">
9
- <tree create="0">
10
- <field name="sequence" />
11
- <field name="date" />
9
+ <tree editable="bottom">
10
+ <field name="sequence" readonly="false" widget="handle" />
11
+ <field name="sequence" readonly="false" />
12
+ <field name="date" readonly="false" />
12
13
  <field name="rate" />
13
- <field name="pending_principal_amount" />
14
+ <field name="pending_principal_amount" readonly="True" force_save="1" />
14
15
  <field name="payment_amount" sum="Total payments" />
15
- <field name="principal_amount" />
16
+ <field
17
+ name="principal_amount"
18
+ sum="principal_amount"
19
+ readonly="false"
20
+ />
16
21
  <field name="interests_amount" sum="Total interests" />
17
22
  <field
18
23
  name="long_term_pending_principal_amount"
19
24
  column_invisible="not parent.long_term_loan_account_id"
25
+ readonly="false"
20
26
  />
21
27
  <field
22
28
  name="long_term_principal_amount"
23
29
  column_invisible="not parent.long_term_loan_account_id"
30
+ readonly="false"
24
31
  />
25
32
  <field name="long_term_loan_account_id" column_invisible="True" />
26
33
  <field name="loan_state" column_invisible="True" />
@@ -142,6 +142,7 @@
142
142
  <field
143
143
  name="line_ids"
144
144
  context="{'tree_view_ref': 'account_loan.account_loan_line_tree'}"
145
+ readonly="state != 'draft'"
145
146
  />
146
147
  </page>
147
148
  <page string="Accounts" id="accounting">
@@ -2,6 +2,7 @@
2
2
 
3
3
  from odoo import Command, _, api, fields, models
4
4
  from odoo.exceptions import UserError
5
+ from odoo.tools import float_compare
5
6
 
6
7
 
7
8
  class AccountLoanPost(models.TransientModel):
@@ -87,6 +88,17 @@ class AccountLoanPost(models.TransientModel):
87
88
 
88
89
  def run(self):
89
90
  self.ensure_one()
91
+ if self.loan_id.line_ids:
92
+ total_principal = sum(self.loan_id.line_ids.mapped("principal_amount"))
93
+ if (
94
+ float_compare(
95
+ self.loan_id.loan_amount, total_principal, precision_digits=2
96
+ )
97
+ != 0
98
+ ):
99
+ raise UserError(
100
+ _("The total principal amount does not match the loan amount.")
101
+ )
90
102
  if self.loan_id.state != "draft":
91
103
  raise UserError(_("Only loans in draft state can be posted"))
92
104
  self.loan_id.post()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-account_loan
3
- Version: 17.0.1.0.1
3
+ Version: 17.0.1.1.1
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: numpy-financial<=1.0.0
6
6
  Requires-Dist: numpy>=1.15
@@ -24,7 +24,7 @@ Account Loan management
24
24
  !! This file is generated by oca-gen-addon-readme !!
25
25
  !! changes will be overwritten. !!
26
26
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
- !! source digest: sha256:78f845e7c79f02ff4819e127d5acfcea95cb060ee430113947defd26ef63cf7c
27
+ !! source digest: sha256:64c6fa5e3a0b16d71144e17fa2a1df4504724e573bd68d30abb3a092a14ec771
28
28
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29
29
 
30
30
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -121,6 +121,9 @@ Contributors
121
121
  - Enric Tobella <etobella@creublanca.es>
122
122
  - Bhavesh Odedra <bodedra@opensourceintegrators.com>
123
123
  - Alberto Martín Cortada <alberto.martin@guadaltech.es>
124
+ - `Tecnativa <https://www.tecnativa.com>`__:
125
+
126
+ - Juan Carlos Oñate
124
127
 
125
128
  Maintainers
126
129
  -----------
@@ -0,0 +1,114 @@
1
+ odoo/addons/account_loan/README.rst,sha256=bTw_BCnQF3DPv2XrmM3zR0OiyOe1iXa2pU3fOGUsN6I,4864
2
+ odoo/addons/account_loan/__init__.py,sha256=o9EnCAU5AKoGmP2X6ytOhQFxVqIh5Y1itLUOmzxSUJY,113
3
+ odoo/addons/account_loan/__manifest__.py,sha256=aBt2eGUxMCZH_H20j5i7qaJ06M4jfcd_5QtwG8SiBVM,1083
4
+ odoo/addons/account_loan/data/ir_sequence_data.xml,sha256=bLydnK8X-0QWzFoBms4UpGYYle25C2DmbpVECEG4PMc,540
5
+ odoo/addons/account_loan/i18n/account_loan.pot,sha256=_7MOi8QU---Hmul8GCK4W1hvYWG8vjjaNaeu3OHwc5s,35253
6
+ odoo/addons/account_loan/i18n/am.po,sha256=uFav8c0Tyk-mOoPQYCqd2gqXCtx4AfL1-YunXvZasRk,35663
7
+ odoo/addons/account_loan/i18n/ar.po,sha256=pcKOygVuzAR5N-x4zIWzo-tjrESG2lirUxEMdpC7w4M,35939
8
+ odoo/addons/account_loan/i18n/bg.po,sha256=rvdgYUA4gU-CmwxzjdavetS8KiqmElQwnC0o57o262I,35870
9
+ odoo/addons/account_loan/i18n/bs.po,sha256=5nkvxxu_nzZJf9GCwNLwXQHYy2c0j6K7jm35zowDA3c,35839
10
+ odoo/addons/account_loan/i18n/ca.po,sha256=q6saYkCyyqPGcOQdiaDRP6_V0048G7vM02Yw0g8NnEs,40334
11
+ odoo/addons/account_loan/i18n/ca_ES.po,sha256=zQTrDcvPX9a3e9AOeJ4zHEoz57JmLnSSuQBZ3IEsUus,35591
12
+ odoo/addons/account_loan/i18n/cs.po,sha256=-xSE-9B2oDhmAv-e11TvUtEhbJzsGd0LAvsiUEXLcjk,35800
13
+ odoo/addons/account_loan/i18n/da.po,sha256=ZQSVb27ZT7RhF27f9ne67RGZpkc4rxIpcu6ZqArL2YA,35725
14
+ odoo/addons/account_loan/i18n/de.po,sha256=I2UGxdT5mxuqi4K4s44XXuZODSMQHj992RvvTF7Tbxg,39308
15
+ odoo/addons/account_loan/i18n/el_GR.po,sha256=6FdKqhxCOvJhjdivnQlh9hbULvGe1nkSxeDwrSAZ_1A,35841
16
+ odoo/addons/account_loan/i18n/en_AU.po,sha256=bsZZOvWZ1_rNGvClAEK9FzIMMyCjUWuKHoYDy5vSrOU,35612
17
+ odoo/addons/account_loan/i18n/en_GB.po,sha256=aQYykdmrwsWzLIYoELTO96exSaqK4aHgXdQswA8eEbc,35778
18
+ odoo/addons/account_loan/i18n/es.po,sha256=wt35ObXynN0iU5yqCMkjoO4esHIfYDmToLb3iCawy1c,40910
19
+ odoo/addons/account_loan/i18n/es_AR.po,sha256=9Wds1uDumkosXsJ-T61GQx0nS8rcEi2QMUvGEtXCY3Y,40680
20
+ odoo/addons/account_loan/i18n/es_CL.po,sha256=zKjZFM0vhDVTE8jUDCE5XBOE-gnEOzER6M8SLybmS3w,35779
21
+ odoo/addons/account_loan/i18n/es_CO.po,sha256=PQ4c7LTt25ivWNK086gAY_9XbucpVCQJP3DZFugUIQ8,35833
22
+ odoo/addons/account_loan/i18n/es_CR.po,sha256=oBYO5PgLMiBJz-szbu-uc9ExNdRAHTsg9EK-FdOj418,35730
23
+ odoo/addons/account_loan/i18n/es_DO.po,sha256=Kk55gwAYi5dZJ3_7IBxaVQCHuopCegblKIaR_4MrXV4,35774
24
+ odoo/addons/account_loan/i18n/es_EC.po,sha256=tZ2pJKBMEsSFjd2EIdIx7vCJJZ2mUiG1-PSyvSBI_jY,35833
25
+ odoo/addons/account_loan/i18n/es_ES.po,sha256=U42Nd9H9GuwCm0G54uyimRahuhhyD2B6dzyy5mi_sFI,35776
26
+ odoo/addons/account_loan/i18n/es_MX.po,sha256=C3fmbqWq-W6bbJ4Bvj14tCP-BfoaQAr8w9xahxfcgCE,35821
27
+ odoo/addons/account_loan/i18n/es_PE.po,sha256=BWn7R7r77Cuz6roba4Vt56XyyKEcedE-xshiICVz3co,35750
28
+ odoo/addons/account_loan/i18n/es_PY.po,sha256=wOKJlylNOmSrGT_ycOdBvB0iommEEWcf3uH3PsTc0EE,35653
29
+ odoo/addons/account_loan/i18n/es_VE.po,sha256=AZODhD7jtXv_gBP6_RoDnnD1DlFNzwPAYs0cUAFDR5g,35760
30
+ odoo/addons/account_loan/i18n/et.po,sha256=gwQd4urH40Y4yX9DIgdSvGkVw-MsT9uPavzrGnYB06w,35753
31
+ odoo/addons/account_loan/i18n/eu.po,sha256=ZPVDhkkHqQWBLvGKfBXTEzDcZ7klkT8e6R4RJxbhH2o,35659
32
+ odoo/addons/account_loan/i18n/fa.po,sha256=Yq6dL-0teRFRUZyeaYIFgIcjQYMP9BUIwzBjV6gIMK0,35830
33
+ odoo/addons/account_loan/i18n/fi.po,sha256=MJUaO7C4WmMRo7MBv30fIZuEDLBNUj3KtFacFaBpTcw,35739
34
+ odoo/addons/account_loan/i18n/fr.po,sha256=TG8InN-nq-86Q6bnYUB7__t9QzXh2UHm4cKuGn0mhM8,36798
35
+ odoo/addons/account_loan/i18n/fr_CA.po,sha256=XrAHlybTozNNpEpkV8luEqanhbypwCnpt7_PqOuIP_k,35720
36
+ odoo/addons/account_loan/i18n/fr_CH.po,sha256=AlMgbuU4B7cfwrKimfeUSPX7T1CpVKv4lVyt9fi97WA,35752
37
+ odoo/addons/account_loan/i18n/fr_FR.po,sha256=P4e5ztuaWdZB_-sN6TRTeBeESkZopaWL6Um4bjBkIjA,35684
38
+ odoo/addons/account_loan/i18n/gl.po,sha256=m0dN3MTTqxXlFv7IvufaAVutoJ7zKn0frmPUlonrLDo,35745
39
+ odoo/addons/account_loan/i18n/gl_ES.po,sha256=KUvw3q0VutT4FQFLeTsPg9EBCjaSW3Nvc-Bb4Sb4Lzo,35575
40
+ odoo/addons/account_loan/i18n/gu.po,sha256=03IvUKY-TOFAXP_p2y4vp4EtFkAEw_PQsG8dzP3qPUk,35596
41
+ odoo/addons/account_loan/i18n/he.po,sha256=DV6yPk-GJajb2w8BxF85ceK6lbR_zPvSpOa-43R_e-4,35790
42
+ odoo/addons/account_loan/i18n/hi.po,sha256=i8HSGqYAZ-55WXMJJZ8P2sdk1Gyvi7OREwbGqHwFiKI,35565
43
+ odoo/addons/account_loan/i18n/hr.po,sha256=Vy-ZphqqiCzM4GEd88zYUk8mTFcEp7b1gCXScokOrpo,35850
44
+ odoo/addons/account_loan/i18n/hr_HR.po,sha256=CWl8VToVA4jIOhwsTKbKd5IumHSQg08jxxGdVr_GS4A,35797
45
+ odoo/addons/account_loan/i18n/hu.po,sha256=t--UJfuwKyqEbhBVJ9jHOMocp-PoMCbGkK4_QzgX4io,35811
46
+ odoo/addons/account_loan/i18n/id.po,sha256=OAHGGY7skEHJpgyTb6MsamNaROfBoVgy5Z0TpnrCIYc,35765
47
+ odoo/addons/account_loan/i18n/it.po,sha256=PHm7Zf7muQzbqcIJpY8jhBJNdvHP82fYmhCSC8jEOIw,40412
48
+ odoo/addons/account_loan/i18n/ja.po,sha256=Unyza1AOuh_ktUqdyPbIKEfkrYeq9J2JETVOj_a1fHY,35768
49
+ odoo/addons/account_loan/i18n/ko.po,sha256=lc6IjC1pPp9GPMHuydxPY3vpxO3Kg5vElYSSOejUBOU,35718
50
+ odoo/addons/account_loan/i18n/lo.po,sha256=GGHgttDU02Cj6yU24aG0_qXRFT6wty3WCiCeBlfAx-Q,35605
51
+ odoo/addons/account_loan/i18n/lt.po,sha256=6xj0keatIs7IC6qCeH_RqffeATgRO6L0FCYrK-8X9Go,35892
52
+ odoo/addons/account_loan/i18n/lt_LT.po,sha256=4CIkZNxz-dPTcw9TSamtiAfH4SDSqK-ka5lzl6IAtvM,35758
53
+ odoo/addons/account_loan/i18n/lv.po,sha256=3B8kpV1vjlpWDzaLTiG8lB14Ab2dosoQEeOfpGOI0JM,35694
54
+ odoo/addons/account_loan/i18n/mk.po,sha256=GjIcVsO1zAcEF08cGz90O6X-w_x5mBCRL6qYwPK4lIU,35928
55
+ odoo/addons/account_loan/i18n/mn.po,sha256=-Nt1BV69TFiiGhTnc2YLZO6lNlgQ6J3ywsunFLAxvRQ,35919
56
+ odoo/addons/account_loan/i18n/nb.po,sha256=MtIn4-5P-yCtkRkzFNK3c7V3QHfcbPmEl-pryhiDJNk,35772
57
+ odoo/addons/account_loan/i18n/nb_NO.po,sha256=IPsxVhdMsSp9WRmwO6ZtRdXenyaADm2lBKILwwZ1ExU,35725
58
+ odoo/addons/account_loan/i18n/nl.po,sha256=n0u_5wZ_gaJ6KXdyKrUQrUGm61QQRAtbA6QJXc1gpEA,35780
59
+ odoo/addons/account_loan/i18n/nl_BE.po,sha256=6V9zOauzWzpE3bInG116RDDoRdSOvPMK02NynDif7zQ,35790
60
+ odoo/addons/account_loan/i18n/nl_NL.po,sha256=dhGKlC-_Itrw5Qjwtsr8nKgGTZ0pb6fGjIappdhPftA,35592
61
+ odoo/addons/account_loan/i18n/pl.po,sha256=VssP4FAPXmzWyfsaY2ERkCyyQx7Mi5Jwf-eR84sxp9M,35924
62
+ odoo/addons/account_loan/i18n/pt.po,sha256=9nA8e45yfPVLg17AioiHcN01H3rMriY6WeWe2FIbwF0,37704
63
+ odoo/addons/account_loan/i18n/pt_BR.po,sha256=RmTOhSYRo3uYi3NlMeLaGSTHL7mboYML_F_qz0Xpb9c,39000
64
+ odoo/addons/account_loan/i18n/pt_PT.po,sha256=dNk78C8ZzxMgkhrtUn4Aor0E88kjDiHpb0nGVsV7VnI,35824
65
+ odoo/addons/account_loan/i18n/ro.po,sha256=cY4AThH9MuNNzATCQH0Fd-PLZ0-eIFS595d5UBABM0Y,35826
66
+ odoo/addons/account_loan/i18n/ru.po,sha256=7a0xyxgzIPJICcg8ouZdHGy8i_qcThPPVzSTJBuUI2Y,35894
67
+ odoo/addons/account_loan/i18n/sk.po,sha256=d6lMVYjL-yXshaq-G-ma_3KKRmULpbPBXpKNJxeHFpI,35768
68
+ odoo/addons/account_loan/i18n/sk_SK.po,sha256=KJnVYSEcRLtaRNrxYumVIIte9YBLV3dwU95FZxGJwig,35618
69
+ odoo/addons/account_loan/i18n/sl.po,sha256=SoQuAZM71yf7S2fH3UTBZphYMOIkoL6jYDFBDv8NISo,35895
70
+ odoo/addons/account_loan/i18n/sr.po,sha256=wEyO-m3oW20dhyfYL8ThcbtfZh9AkG20HNJaxXzum3I,35648
71
+ odoo/addons/account_loan/i18n/sr@latin.po,sha256=g6h2ftBxBo_yXUJtTulWWLj_Fo0UiwUv22xH3Kml7iY,35820
72
+ odoo/addons/account_loan/i18n/sv.po,sha256=Avxjuxz1H_Tafnc3T2XvDej-HtmH0dirPZdOC9hD8u4,40346
73
+ odoo/addons/account_loan/i18n/th.po,sha256=vG38h1LC_5Zr5rkgXoFWHnXApOQekOMFXDNCJMLpRsw,36044
74
+ odoo/addons/account_loan/i18n/tr.po,sha256=9BGZo26ttfy_tmmZw4LIVlq5dR_LRRF1WL8RjA3pV1g,35762
75
+ odoo/addons/account_loan/i18n/tr_TR.po,sha256=mHR5a665xyOJkuQpbjni5RXYOsPCqvZzoG75Ufh9tY8,35822
76
+ odoo/addons/account_loan/i18n/uk.po,sha256=vsqhxlC8c6X2FeCTxc2Tv9uX5l6AefIAR2ki49yzLJ8,35912
77
+ odoo/addons/account_loan/i18n/vi.po,sha256=wevOkkAhJoho1xKNIheBaiejO0iB8t3scfrrDCUjg_U,35789
78
+ odoo/addons/account_loan/i18n/vi_VN.po,sha256=xIL-5TMMX2_wB2pcCtmp5W-Fh-uZOelpkIDH5crSKK4,35694
79
+ odoo/addons/account_loan/i18n/zh_CN.po,sha256=6dcyojksdX1sgf8CON8EEXoYlsE6l29XiSBGkGoBxLg,35770
80
+ odoo/addons/account_loan/i18n/zh_TW.po,sha256=IqTd4oYt78_0lCHKDuzEWSeB_LlnkhETjcPlX0FGt0I,35763
81
+ odoo/addons/account_loan/migrations/17.0.1.0.0/noupdate_changes.xml,sha256=bZbGut6mOAMZsniduY1yY2QA8W31LLNcBJFGjt1EFeE,398
82
+ odoo/addons/account_loan/migrations/17.0.1.0.0/post-migration.py,sha256=0XUOqdMYcrw_CbdeWHc5BgWUEhEG_Rxed6I1bdq9H3c,314
83
+ odoo/addons/account_loan/models/__init__.py,sha256=jwLlr4SgTaxqvv5CCJkgGwhwNus45E4E4e3pijuROJY,211
84
+ odoo/addons/account_loan/models/account_loan.py,sha256=4vNaYaMzx1WD0tx6j-T0SXSlaL4YxOsNcQSenf9ft1I,15813
85
+ odoo/addons/account_loan/models/account_loan_line.py,sha256=qd_vhO-ZujsmrwEVg9N7THxScx5LEmEYQkhkW9Grh9U,17959
86
+ odoo/addons/account_loan/models/account_move.py,sha256=8p2V854_J060o_yupWrGyVa5Ps44d8GpkY4azcAUz3k,937
87
+ odoo/addons/account_loan/models/res_partner.py,sha256=6NgoxHUstcHftmDGj9NWzxfb9MBDG6XATj_1OwMao84,995
88
+ odoo/addons/account_loan/readme/CONTRIBUTORS.md,sha256=w4frkcHOfPes7QOWbCyGpnNbYcxJhFM0A9x0qCxxQd4,227
89
+ odoo/addons/account_loan/readme/DESCRIPTION.md,sha256=tgKIF8E4LJiqio5knhWzXzUeop9VUvNXwc3fDV1bIz8,598
90
+ odoo/addons/account_loan/readme/HISTORY.md,sha256=JSQtr1egUJ0sGZB8KBTv4ksGWDVDoGf8c8b9VDlD8hE,158
91
+ odoo/addons/account_loan/readme/USAGE.md,sha256=pQ7Eb0xRbAdguo8JAxUQ-irEFkOdIeor3uxe-uX0rZo,726
92
+ odoo/addons/account_loan/security/account_loan_security.xml,sha256=je25Lct1hJDX_5Qz9vhmXWF9n3s47WSzN9Ic8l8mr2k,752
93
+ odoo/addons/account_loan/security/ir.model.access.csv,sha256=3RwBdFKlfSzAJCUWYxDBGUw0t0ZLuBphkZWYtNHGmlI,1009
94
+ odoo/addons/account_loan/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
95
+ odoo/addons/account_loan/static/description/index.html,sha256=O_5PT4xNa04f3Bt07vUXYCDoEJMYdnOujmGxsZr7RCM,15392
96
+ odoo/addons/account_loan/tests/__init__.py,sha256=I1GwELsBL3FTRS0pVrE5q-qEk537mMnSOXpWkPVcBnY,94
97
+ odoo/addons/account_loan/tests/test_loan.py,sha256=KM4WS1X2biunT6rhkrpbmvl-zNzBP9bCXzxBywxsStY,28575
98
+ odoo/addons/account_loan/views/account_loan_lines_view.xml,sha256=BNt633HUe9J-rpSi-VbJ8fp4IagJNf-LS46A9g6sVoc,6224
99
+ odoo/addons/account_loan/views/account_loan_view.xml,sha256=CWZiAzZtF0sD5a7R1uyVQhju3q5CMjhcN5EQ7IgJxCE,10536
100
+ odoo/addons/account_loan/views/account_move_view.xml,sha256=-dFzRj3e84NTkLCoaAzneAPlwxVtzbjBZyAt6eK_NfM,814
101
+ odoo/addons/account_loan/views/res_partner.xml,sha256=rneFt7lW3cUoI8UVaLQc9mkiSCii2Os1T3TTYCEB_s0,1248
102
+ odoo/addons/account_loan/wizards/__init__.py,sha256=mq87kRH_mXzIn76cBCeuzptRiIOdQWjImjmZ_HNGUVU,227
103
+ odoo/addons/account_loan/wizards/account_loan_generate_entries.py,sha256=gnEZPTwuelzmSDRnqqmIJocHjrCxJA23oyflQ2hpPRo,1503
104
+ odoo/addons/account_loan/wizards/account_loan_generate_entries_view.xml,sha256=tugTvlYen6e1DLjWSUrwLytSH1d30ocdV_9c19ObGbg,1648
105
+ odoo/addons/account_loan/wizards/account_loan_increase_amount.py,sha256=rR_xp2lMuGFGSzp-deUBIdBvM2H8U4U-22eIMF_xGt4,4527
106
+ odoo/addons/account_loan/wizards/account_loan_increase_amount.xml,sha256=0g90b8YuFL8DalKXc2482c4WfO-Txbv46T0StIVinfI,1454
107
+ odoo/addons/account_loan/wizards/account_loan_pay_amount.py,sha256=-kG1q8Ueh0Fl_glZIr3pRVW-7GnPTPhKbVXm_pfOm1Y,4135
108
+ odoo/addons/account_loan/wizards/account_loan_pay_amount_view.xml,sha256=9rCkG5kL3u2vc4Mmz9zo5Sqfp6raGnPz3ZGv2AlLIN4,1596
109
+ odoo/addons/account_loan/wizards/account_loan_post.py,sha256=9aRQaqPGdV5NSUJ6oiTV8kaUhT5TzuqJ3oFJKefL3Tw,3667
110
+ odoo/addons/account_loan/wizards/account_loan_post_view.xml,sha256=s-teTEY9HCEA2CHD3_tQZJIGOHJMZNAlR1pSN5Dpdn8,1440
111
+ odoo_addon_account_loan-17.0.1.1.1.dist-info/METADATA,sha256=_YUnDn2Kal-paEHkOQQbGHkRv8Lq4B-90xeg4YtYxlA,5450
112
+ odoo_addon_account_loan-17.0.1.1.1.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
113
+ odoo_addon_account_loan-17.0.1.1.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
114
+ odoo_addon_account_loan-17.0.1.1.1.dist-info/RECORD,,