odoo-addon-account-loan 17.0.1.1.1__py3-none-any.whl → 17.0.2.2.0__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 +6 -2
  2. odoo/addons/account_loan/__manifest__.py +1 -1
  3. odoo/addons/account_loan/i18n/account_loan.pot +46 -0
  4. odoo/addons/account_loan/i18n/am.po +36 -0
  5. odoo/addons/account_loan/i18n/ar.po +36 -0
  6. odoo/addons/account_loan/i18n/bg.po +36 -0
  7. odoo/addons/account_loan/i18n/bs.po +36 -0
  8. odoo/addons/account_loan/i18n/ca.po +36 -0
  9. odoo/addons/account_loan/i18n/ca_ES.po +36 -0
  10. odoo/addons/account_loan/i18n/cs.po +36 -0
  11. odoo/addons/account_loan/i18n/da.po +36 -0
  12. odoo/addons/account_loan/i18n/de.po +36 -0
  13. odoo/addons/account_loan/i18n/el_GR.po +36 -0
  14. odoo/addons/account_loan/i18n/en_AU.po +36 -0
  15. odoo/addons/account_loan/i18n/en_GB.po +36 -0
  16. odoo/addons/account_loan/i18n/es.po +36 -0
  17. odoo/addons/account_loan/i18n/es_AR.po +36 -0
  18. odoo/addons/account_loan/i18n/es_CL.po +36 -0
  19. odoo/addons/account_loan/i18n/es_CO.po +36 -0
  20. odoo/addons/account_loan/i18n/es_CR.po +36 -0
  21. odoo/addons/account_loan/i18n/es_DO.po +36 -0
  22. odoo/addons/account_loan/i18n/es_EC.po +36 -0
  23. odoo/addons/account_loan/i18n/es_ES.po +36 -0
  24. odoo/addons/account_loan/i18n/es_MX.po +36 -0
  25. odoo/addons/account_loan/i18n/es_PE.po +36 -0
  26. odoo/addons/account_loan/i18n/es_PY.po +36 -0
  27. odoo/addons/account_loan/i18n/es_VE.po +36 -0
  28. odoo/addons/account_loan/i18n/et.po +36 -0
  29. odoo/addons/account_loan/i18n/eu.po +36 -0
  30. odoo/addons/account_loan/i18n/fa.po +36 -0
  31. odoo/addons/account_loan/i18n/fi.po +36 -0
  32. odoo/addons/account_loan/i18n/fr.po +36 -0
  33. odoo/addons/account_loan/i18n/fr_CA.po +36 -0
  34. odoo/addons/account_loan/i18n/fr_CH.po +36 -0
  35. odoo/addons/account_loan/i18n/fr_FR.po +36 -0
  36. odoo/addons/account_loan/i18n/gl.po +36 -0
  37. odoo/addons/account_loan/i18n/gl_ES.po +36 -0
  38. odoo/addons/account_loan/i18n/gu.po +36 -0
  39. odoo/addons/account_loan/i18n/he.po +36 -0
  40. odoo/addons/account_loan/i18n/hi.po +36 -0
  41. odoo/addons/account_loan/i18n/hr.po +36 -0
  42. odoo/addons/account_loan/i18n/hr_HR.po +36 -0
  43. odoo/addons/account_loan/i18n/hu.po +36 -0
  44. odoo/addons/account_loan/i18n/id.po +36 -0
  45. odoo/addons/account_loan/i18n/it.po +46 -5
  46. odoo/addons/account_loan/i18n/ja.po +36 -0
  47. odoo/addons/account_loan/i18n/ko.po +36 -0
  48. odoo/addons/account_loan/i18n/lo.po +36 -0
  49. odoo/addons/account_loan/i18n/lt.po +36 -0
  50. odoo/addons/account_loan/i18n/lt_LT.po +36 -0
  51. odoo/addons/account_loan/i18n/lv.po +36 -0
  52. odoo/addons/account_loan/i18n/mk.po +36 -0
  53. odoo/addons/account_loan/i18n/mn.po +36 -0
  54. odoo/addons/account_loan/i18n/nb.po +36 -0
  55. odoo/addons/account_loan/i18n/nb_NO.po +36 -0
  56. odoo/addons/account_loan/i18n/nl.po +36 -0
  57. odoo/addons/account_loan/i18n/nl_BE.po +36 -0
  58. odoo/addons/account_loan/i18n/nl_NL.po +36 -0
  59. odoo/addons/account_loan/i18n/pl.po +36 -0
  60. odoo/addons/account_loan/i18n/pt.po +36 -0
  61. odoo/addons/account_loan/i18n/pt_BR.po +36 -0
  62. odoo/addons/account_loan/i18n/pt_PT.po +36 -0
  63. odoo/addons/account_loan/i18n/ro.po +36 -0
  64. odoo/addons/account_loan/i18n/ru.po +36 -0
  65. odoo/addons/account_loan/i18n/sk.po +36 -0
  66. odoo/addons/account_loan/i18n/sk_SK.po +36 -0
  67. odoo/addons/account_loan/i18n/sl.po +36 -0
  68. odoo/addons/account_loan/i18n/sr.po +36 -0
  69. odoo/addons/account_loan/i18n/sr@latin.po +36 -0
  70. odoo/addons/account_loan/i18n/sv.po +36 -0
  71. odoo/addons/account_loan/i18n/th.po +36 -0
  72. odoo/addons/account_loan/i18n/tr.po +36 -0
  73. odoo/addons/account_loan/i18n/tr_TR.po +36 -0
  74. odoo/addons/account_loan/i18n/uk.po +36 -0
  75. odoo/addons/account_loan/i18n/vi.po +36 -0
  76. odoo/addons/account_loan/i18n/vi_VN.po +36 -0
  77. odoo/addons/account_loan/i18n/zh_CN.po +36 -0
  78. odoo/addons/account_loan/i18n/zh_TW.po +36 -0
  79. odoo/addons/account_loan/models/account_loan.py +44 -14
  80. odoo/addons/account_loan/models/account_loan_line.py +30 -18
  81. odoo/addons/account_loan/models/account_move.py +0 -1
  82. odoo/addons/account_loan/static/description/index.html +19 -13
  83. odoo/addons/account_loan/tests/test_loan.py +49 -1
  84. odoo/addons/account_loan/views/account_loan_lines_view.xml +18 -10
  85. odoo/addons/account_loan/views/account_loan_view.xml +24 -4
  86. odoo/addons/account_loan/wizards/account_loan_post.py +15 -15
  87. {odoo_addon_account_loan-17.0.1.1.1.dist-info → odoo_addon_account_loan-17.0.2.2.0.dist-info}/METADATA +8 -3
  88. odoo_addon_account_loan-17.0.2.2.0.dist-info/RECORD +114 -0
  89. {odoo_addon_account_loan-17.0.1.1.1.dist-info → odoo_addon_account_loan-17.0.2.2.0.dist-info}/WHEEL +1 -1
  90. odoo_addon_account_loan-17.0.1.1.1.dist-info/RECORD +0 -114
  91. {odoo_addon_account_loan-17.0.1.1.1.dist-info → odoo_addon_account_loan-17.0.2.2.0.dist-info}/top_level.txt +0 -0
@@ -5,6 +5,7 @@ import logging
5
5
 
6
6
  from odoo import Command, _, api, fields, models
7
7
  from odoo.exceptions import UserError
8
+ from odoo.tools import float_is_zero
8
9
 
9
10
  _logger = logging.getLogger(__name__)
10
11
  try:
@@ -127,16 +128,18 @@ class AccountLoanLine(models.Model):
127
128
  @api.depends("interests_amount")
128
129
  def _compute_rate(self):
129
130
  for record in self:
130
- record.rate = (
131
- record.interests_amount * 100
132
- ) / record.pending_principal_amount
131
+ rate = 0
132
+ if not float_is_zero(record.pending_principal_amount, precision_digits=2):
133
+ rate = (record.interests_amount * 100) / record.pending_principal_amount
134
+ record.rate = rate
133
135
 
134
136
  @api.depends("rate")
135
137
  def _compute_interests_amount(self):
136
138
  for record in self:
137
- record.interests_amount = (
138
- record.pending_principal_amount * record.rate
139
- ) / 100
139
+ if record.interests_amount and record.pending_principal_amount:
140
+ record.interests_amount = (
141
+ record.pending_principal_amount * record.rate
142
+ ) / 100
140
143
 
141
144
  @api.depends("move_ids")
142
145
  def _compute_has_moves(self):
@@ -292,43 +295,52 @@ class AccountLoanLine(models.Model):
292
295
  def _move_line_vals(self, account=False):
293
296
  vals = []
294
297
  partner = self.loan_id.partner_id.with_company(self.loan_id.company_id)
298
+ # Amounts are evaled if > 0 for allowing negative loans to be able to be the
299
+ # donors of the loan
300
+ partner_account = (
301
+ partner.property_account_payable_id
302
+ if self.payment_amount > 0
303
+ else partner.property_account_receivable_id
304
+ )
295
305
  vals.append(
296
306
  {
297
- "account_id": (account and account.id)
298
- or partner.property_account_payable_id.id,
307
+ "account_id": (account and account.id) or partner_account.id,
299
308
  "partner_id": partner.id,
300
- "credit": self.payment_amount,
301
- "debit": 0,
309
+ "credit": self.payment_amount if self.payment_amount > 0 else 0,
310
+ "debit": -self.payment_amount if self.payment_amount < 0 else 0,
302
311
  }
303
312
  )
304
313
  if self.interests_amount:
314
+ amount = self.interests_amount
305
315
  vals.append(
306
316
  {
307
317
  "account_id": self.loan_id.interest_expenses_account_id.id,
308
- "credit": 0,
309
- "debit": self.interests_amount,
318
+ "credit": -amount if amount < 0 else 0,
319
+ "debit": amount if amount > 0 else 0,
310
320
  }
311
321
  )
322
+ diff_amount = self.payment_amount - self.interests_amount
312
323
  vals.append(
313
324
  {
314
325
  "account_id": self.loan_id.short_term_loan_account_id.id,
315
- "credit": 0,
316
- "debit": self.payment_amount - self.interests_amount,
326
+ "credit": -diff_amount if diff_amount < 0 else 0,
327
+ "debit": diff_amount if diff_amount > 0 else 0,
317
328
  }
318
329
  )
319
330
  if self.long_term_loan_account_id and self.long_term_principal_amount:
331
+ amount = self.long_term_principal_amount
320
332
  vals.append(
321
333
  {
322
334
  "account_id": self.loan_id.short_term_loan_account_id.id,
323
- "credit": self.long_term_principal_amount,
324
- "debit": 0,
335
+ "credit": amount if amount > 0 else 0,
336
+ "debit": -amount if amount < 0 else 0,
325
337
  }
326
338
  )
327
339
  vals.append(
328
340
  {
329
341
  "account_id": self.long_term_loan_account_id.id,
330
- "credit": 0,
331
- "debit": self.long_term_principal_amount,
342
+ "credit": -amount if amount < 0 else 0,
343
+ "debit": amount if amount > 0 else 0,
332
344
  }
333
345
  )
334
346
  return vals
@@ -26,7 +26,6 @@ class AccountMove(models.Model):
26
26
  if loan_line_id:
27
27
  record.loan_id = loan_line_id.loan_id
28
28
  record.loan_line_id._check_move_amount()
29
- record.loan_line_id.loan_id._compute_posted_lines()
30
29
  if record.loan_line_id.sequence == record.loan_id.periods:
31
30
  record.loan_id.close()
32
31
  return res
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
6
- <title>Account Loan management</title>
6
+ <title>README.rst</title>
7
7
  <style type="text/css">
8
8
 
9
9
  /*
@@ -360,16 +360,21 @@ ul.auto-toc {
360
360
  </style>
361
361
  </head>
362
362
  <body>
363
- <div class="document" id="account-loan-management">
364
- <h1 class="title">Account Loan management</h1>
363
+ <div class="document">
365
364
 
365
+
366
+ <a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
367
+ <img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
368
+ </a>
369
+ <div class="section" id="account-loan-management">
370
+ <h1>Account Loan management</h1>
366
371
  <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
367
372
  !! This file is generated by oca-gen-addon-readme !!
368
373
  !! changes will be overwritten. !!
369
374
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370
- !! source digest: sha256:64c6fa5e3a0b16d71144e17fa2a1df4504724e573bd68d30abb3a092a14ec771
375
+ !! source digest: sha256:cf116fbc449f4763c68b322ad6d401b4199e1f9652dca73ec333c69c896a2d38
371
376
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
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>
377
+ <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/license-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
378
  <p>This module extends the functionality of accounting to support loans. It
374
379
  will create automatically moves or invoices for loans. Moreover, you can
375
380
  check the pending amount to be paid and reduce the debt.</p>
@@ -404,7 +409,7 @@ check the pending amount to be paid and reduce the debt.</p>
404
409
  </ul>
405
410
  </div>
406
411
  <div class="section" id="usage">
407
- <h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
412
+ <h2><a class="toc-backref" href="#toc-entry-1">Usage</a></h2>
408
413
  <p>To use this module, you need to:</p>
409
414
  <ol class="arabic simple">
410
415
  <li>Go to Invoicing / Accounting &gt; Accounting &gt; Loans</li>
@@ -424,15 +429,15 @@ and leases before a selected date</li>
424
429
  <p><a class="reference external image-reference" href="https://runbot.odoo-community.org/runbot/92/12.0"><img alt="Try me on Runbot" src="https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas" /></a></p>
425
430
  </div>
426
431
  <div class="section" id="changelog">
427
- <h1><a class="toc-backref" href="#toc-entry-2">Changelog</a></h1>
432
+ <h2><a class="toc-backref" href="#toc-entry-2">Changelog</a></h2>
428
433
  <div class="section" id="section-1">
429
- <h2><a class="toc-backref" href="#toc-entry-3">16.0.1.0.0</a></h2>
434
+ <h3><a class="toc-backref" href="#toc-entry-3">16.0.1.0.0</a></h3>
430
435
  <p>Due to the changes on 16, we will generate two moves on leasings, one
431
436
  for the invoice, and another one for the change from long to short term.</p>
432
437
  </div>
433
438
  </div>
434
439
  <div class="section" id="bug-tracker">
435
- <h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
440
+ <h2><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h2>
436
441
  <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-financial-tools/issues">GitHub Issues</a>.
437
442
  In case of trouble, please check there if your issue has already been reported.
438
443
  If you spotted it first, help us to smash it by providing a detailed and welcomed
@@ -440,15 +445,15 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
440
445
  <p>Do not contact contributors directly about support or help with technical issues.</p>
441
446
  </div>
442
447
  <div class="section" id="credits">
443
- <h1><a class="toc-backref" href="#toc-entry-5">Credits</a></h1>
448
+ <h2><a class="toc-backref" href="#toc-entry-5">Credits</a></h2>
444
449
  <div class="section" id="authors">
445
- <h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
450
+ <h3><a class="toc-backref" href="#toc-entry-6">Authors</a></h3>
446
451
  <ul class="simple">
447
452
  <li>Creu Blanca</li>
448
453
  </ul>
449
454
  </div>
450
455
  <div class="section" id="contributors">
451
- <h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
456
+ <h3><a class="toc-backref" href="#toc-entry-7">Contributors</a></h3>
452
457
  <ul class="simple">
453
458
  <li>Enric Tobella &lt;<a class="reference external" href="mailto:etobella&#64;creublanca.es">etobella&#64;creublanca.es</a>&gt;</li>
454
459
  <li>Bhavesh Odedra &lt;<a class="reference external" href="mailto:bodedra&#64;opensourceintegrators.com">bodedra&#64;opensourceintegrators.com</a>&gt;</li>
@@ -460,7 +465,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
460
465
  </ul>
461
466
  </div>
462
467
  <div class="section" id="maintainers">
463
- <h2><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h2>
468
+ <h3><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h3>
464
469
  <p>This module is maintained by the OCA.</p>
465
470
  <a class="reference external image-reference" href="https://odoo-community.org">
466
471
  <img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
@@ -475,5 +480,6 @@ promote its widespread use.</p>
475
480
  </div>
476
481
  </div>
477
482
  </div>
483
+ </div>
478
484
  </body>
479
485
  </html>
@@ -88,7 +88,7 @@ class TestLoan(BaseCommon):
88
88
 
89
89
  @mute_logger("odoo.models.unlink")
90
90
  @freeze_time("2025-01-31")
91
- def test_loan_lines_custom_day(self):
91
+ def test_loan_lines_custom_day_01(self):
92
92
  loan = self.create_loan("fixed-annuity", 500000, 1, 60)
93
93
  loan.long_term_loan_account_id = self.lt_loan_account
94
94
  loan.compute_lines()
@@ -119,6 +119,40 @@ class TestLoan(BaseCommon):
119
119
  line_1.long_term_pending_principal_amount, line_13.pending_principal_amount
120
120
  )
121
121
 
122
+ @mute_logger("odoo.models.unlink")
123
+ @freeze_time("2024-12-31")
124
+ def test_loan_lines_custom_day_02(self):
125
+ loan = self.create_loan("fixed-annuity", 500000, 1, 60)
126
+ loan.long_term_loan_account_id = self.lt_loan_account
127
+ loan.payment_on_first_period = False
128
+ loan.compute_lines()
129
+ dates_by_sequence = {}
130
+ for line in loan.line_ids:
131
+ dates_by_sequence[line.sequence] = line.date
132
+ self.assertEqual(dates_by_sequence[1], fields.Date.from_string("2025-01-31"))
133
+ self.assertEqual(dates_by_sequence[2], fields.Date.from_string("2025-02-28"))
134
+ self.assertEqual(dates_by_sequence[3], fields.Date.from_string("2025-03-31"))
135
+ self.assertEqual(dates_by_sequence[4], fields.Date.from_string("2025-04-30"))
136
+ self.assertEqual(dates_by_sequence[5], fields.Date.from_string("2025-05-31"))
137
+ self.assertEqual(dates_by_sequence[6], fields.Date.from_string("2025-06-30"))
138
+ self.assertEqual(dates_by_sequence[7], fields.Date.from_string("2025-07-31"))
139
+ self.assertEqual(dates_by_sequence[8], fields.Date.from_string("2025-08-31"))
140
+ self.assertEqual(dates_by_sequence[9], fields.Date.from_string("2025-09-30"))
141
+ self.assertEqual(dates_by_sequence[10], fields.Date.from_string("2025-10-31"))
142
+ self.assertEqual(dates_by_sequence[11], fields.Date.from_string("2025-11-30"))
143
+ self.assertEqual(dates_by_sequence[12], fields.Date.from_string("2025-12-31"))
144
+ self.assertEqual(dates_by_sequence[13], fields.Date.from_string("2026-01-31"))
145
+ line_1 = loan.line_ids.filtered(lambda x: x.sequence == 1)
146
+ self.assertEqual(line_1.long_term_pending_principal_amount, 401989.15)
147
+ self.assertAlmostEqual(line_1.long_term_principal_amount, 8211.88)
148
+ line_2 = loan.line_ids.filtered(lambda x: x.sequence == 2)
149
+ self.assertEqual(line_2.long_term_pending_principal_amount, 393777.27)
150
+ line_13 = loan.line_ids.filtered(lambda x: x.sequence == 13)
151
+ self.assertEqual(line_13.pending_principal_amount, 401989.15)
152
+ self.assertEqual(
153
+ line_1.long_term_pending_principal_amount, line_13.pending_principal_amount
154
+ )
155
+
122
156
  @mute_logger("odoo.models.unlink")
123
157
  def test_round_on_end(self):
124
158
  loan = self.create_loan("fixed-annuity", 500000, 1, 60)
@@ -608,12 +642,20 @@ class TestLoan(BaseCommon):
608
642
  self.assertEqual(loan.payment_amount - loan.interests_amount, amount)
609
643
  self.assertEqual(loan.pending_principal_amount, 0)
610
644
 
645
+ def test_negative_loan(self):
646
+ # Check that negatives amounts don't give an error
647
+ loan = self.create_loan("fixed-annuity", -4000, 1, 10)
648
+ self.post(loan)
649
+ loan.line_ids[0].view_process_values()
650
+
611
651
  @mute_logger("odoo.models.unlink")
612
652
  def test_cancel_loan(self):
613
653
  amount = 10000
614
654
  periods = 10
615
655
  loan = self.create_loan("fixed-annuity", amount, 1, periods)
616
656
  self.post(loan)
657
+ with self.assertRaises(UserError):
658
+ loan.button_draft()
617
659
  line = loan.line_ids.filtered(lambda r: r.sequence == 1)
618
660
  line.view_process_values()
619
661
  self.assertTrue(line.move_ids)
@@ -626,6 +668,12 @@ class TestLoan(BaseCommon):
626
668
  self.assertEqual(pay.amount, line.final_pending_principal_amount)
627
669
  pay.run()
628
670
  self.assertEqual(loan.state, "cancelled")
671
+ with self.assertRaises(UserError):
672
+ loan.button_draft()
673
+ loan.move_ids.button_draft()
674
+ loan.move_ids.unlink()
675
+ loan.button_draft()
676
+ self.assertEqual(loan.state, "draft")
629
677
 
630
678
  def post(self, loan):
631
679
  self.assertFalse(loan.move_ids)
@@ -7,27 +7,35 @@
7
7
  <field name="priority">99</field>
8
8
  <field name="arch" type="xml">
9
9
  <tree editable="bottom">
10
- <field name="sequence" readonly="false" widget="handle" />
11
- <field name="sequence" readonly="false" />
12
- <field name="date" readonly="false" />
13
- <field name="rate" />
14
- <field name="pending_principal_amount" readonly="True" force_save="1" />
15
- <field name="payment_amount" sum="Total payments" />
10
+ <field
11
+ name="sequence"
12
+ readonly="has_moves or has_invoices"
13
+ widget="handle"
14
+ />
15
+ <field name="sequence" readonly="has_moves or has_invoices" />
16
+ <field name="date" readonly="has_moves or has_invoices" />
17
+ <field name="rate" readonly="has_moves or has_invoices" />
18
+ <field name="pending_principal_amount" readonly="True" />
19
+ <field name="payment_amount" sum="Total payments" readonly="True" />
16
20
  <field
17
21
  name="principal_amount"
18
22
  sum="principal_amount"
19
- readonly="false"
23
+ readonly="has_moves or has_invoices"
24
+ />
25
+ <field
26
+ name="interests_amount"
27
+ sum="Total interests"
28
+ readonly="has_moves or has_invoices"
20
29
  />
21
- <field name="interests_amount" sum="Total interests" />
22
30
  <field
23
31
  name="long_term_pending_principal_amount"
24
32
  column_invisible="not parent.long_term_loan_account_id"
25
- readonly="false"
33
+ readonly="has_moves or has_invoices"
26
34
  />
27
35
  <field
28
36
  name="long_term_principal_amount"
29
37
  column_invisible="not parent.long_term_loan_account_id"
30
- readonly="false"
38
+ readonly="has_moves or has_invoices"
31
39
  />
32
40
  <field name="long_term_loan_account_id" column_invisible="True" />
33
41
  <field name="loan_state" column_invisible="True" />
@@ -26,12 +26,22 @@
26
26
  <field name="state" />
27
27
  <field name="rate" optional="hide" />
28
28
  <field name="loan_amount" optional="hide" />
29
- <field name="pending_principal_amount" optional="hide" />
29
+ <field name="pending_principal_amount" optional="hide" sum="Total" />
30
30
  <field name="periods" optional="hide" />
31
31
  <field name="start_date" optional="hide" />
32
32
  </tree>
33
33
  </field>
34
34
  </record>
35
+ <record id="account_loan_pivot" model="ir.ui.view">
36
+ <field name="name">account.loan.pivot</field>
37
+ <field name="model">account.loan</field>
38
+ <field name="arch" type="xml">
39
+ <pivot string="Loans pivot">
40
+ <field name="name" type="row" />
41
+ <field name="loan_amount" type="measure" />
42
+ </pivot>
43
+ </field>
44
+ </record>
35
45
  <record id="account_loan_form" model="ir.ui.view">
36
46
  <field name="name">account.loan.form</field>
37
47
  <field name="model">account.loan</field>
@@ -42,10 +52,18 @@
42
52
  <button
43
53
  name="%(account_loan_post_action)d"
44
54
  invisible="state != 'draft'"
55
+ class="oe_highlight"
45
56
  type="action"
46
57
  string="Post"
47
58
  groups="account.group_account_manager"
48
59
  />
60
+ <button
61
+ name="button_draft"
62
+ invisible="state not in ('posted', 'cancelled') or move_count != 0"
63
+ type="object"
64
+ string="Reset to draft"
65
+ groups="account.group_account_manager"
66
+ />
49
67
  <field name="state" widget="statusbar" />
50
68
  </header>
51
69
  <sheet>
@@ -56,8 +74,9 @@
56
74
  icon="fa-bars"
57
75
  invisible="state == 'draft'"
58
76
  type="object"
59
- string="Moves"
60
- />
77
+ >
78
+ <field string="Moves" name="move_count" widget="statinfo" />
79
+ </button>
61
80
  <button
62
81
  name="view_account_invoices"
63
82
  class="oe_stat_button"
@@ -142,7 +161,7 @@
142
161
  <field
143
162
  name="line_ids"
144
163
  context="{'tree_view_ref': 'account_loan.account_loan_line_tree'}"
145
- readonly="state != 'draft'"
164
+ readonly="state in ['canlcelled', 'closed']"
146
165
  />
147
166
  </page>
148
167
  <page string="Accounts" id="accounting">
@@ -208,6 +227,7 @@
208
227
  <record id="account_loan_action" model="ir.actions.act_window">
209
228
  <field name="name">Loans</field>
210
229
  <field name="res_model">account.loan</field>
230
+ <field name="view_mode">tree,form,pivot</field>
211
231
  </record>
212
232
 
213
233
  <menuitem
@@ -43,38 +43,38 @@ class AccountLoanPost(models.TransientModel):
43
43
  res = list()
44
44
  partner = self.loan_id.partner_id.with_company(self.loan_id.company_id)
45
45
  line = self.loan_id.line_ids.filtered(lambda r: r.sequence == 1)
46
+ # Amounts are evaled if > 0 for allowing negative loans to be able to be the
47
+ # donors of the loan
48
+ amount = line.pending_principal_amount
46
49
  res.append(
47
50
  {
48
51
  "account_id": self.account_id.id,
49
52
  "name": self.loan_id.name,
50
53
  "partner_id": partner.id,
51
- "credit": 0,
52
- "debit": line.pending_principal_amount,
54
+ "credit": -amount if amount < 0 else 0,
55
+ "debit": amount if amount > 0 else 0,
53
56
  }
54
57
  )
55
- if line.pending_principal_amount - line.long_term_pending_principal_amount > 0:
58
+ diff_amount = abs(line.pending_principal_amount) - abs(
59
+ line.long_term_pending_principal_amount
60
+ )
61
+ if diff_amount > 0:
56
62
  res.append(
57
63
  {
58
64
  "account_id": self.loan_id.short_term_loan_account_id.id,
59
- "credit": (
60
- line.pending_principal_amount
61
- - line.long_term_pending_principal_amount
62
- ),
63
- "debit": 0,
65
+ "credit": diff_amount if amount > 0 else 0,
66
+ "debit": diff_amount if amount < 0 else 0,
64
67
  }
65
68
  )
66
- if (
67
- line.long_term_pending_principal_amount > 0
68
- and self.loan_id.long_term_loan_account_id
69
- ):
69
+ diff_amount = abs(line.long_term_pending_principal_amount)
70
+ if diff_amount > 0 and self.loan_id.long_term_loan_account_id:
70
71
  res.append(
71
72
  {
72
73
  "account_id": self.loan_id.long_term_loan_account_id.id,
73
- "credit": line.long_term_pending_principal_amount,
74
- "debit": 0,
74
+ "credit": diff_amount if amount > 0 else 0,
75
+ "debit": diff_amount if amount < 0 else 0,
75
76
  }
76
77
  )
77
-
78
78
  return res
79
79
 
80
80
  def move_vals(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-account_loan
3
- Version: 17.0.1.1.1
3
+ Version: 17.0.2.2.0
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: numpy-financial<=1.0.0
6
6
  Requires-Dist: numpy>=1.15
@@ -14,6 +14,11 @@ Classifier: Programming Language :: Python
14
14
  Classifier: Framework :: Odoo
15
15
  Classifier: Framework :: Odoo :: 17.0
16
16
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3
17
+ Description-Content-Type: text/x-rst
18
+
19
+ .. image:: https://odoo-community.org/readme-banner-image
20
+ :target: https://odoo-community.org/get-involved?utm_source=readme
21
+ :alt: Odoo Community Association
17
22
 
18
23
  =======================
19
24
  Account Loan management
@@ -24,13 +29,13 @@ Account Loan management
24
29
  !! This file is generated by oca-gen-addon-readme !!
25
30
  !! changes will be overwritten. !!
26
31
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
- !! source digest: sha256:64c6fa5e3a0b16d71144e17fa2a1df4504724e573bd68d30abb3a092a14ec771
32
+ !! source digest: sha256:cf116fbc449f4763c68b322ad6d401b4199e1f9652dca73ec333c69c896a2d38
28
33
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29
34
 
30
35
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
31
36
  :target: https://odoo-community.org/page/development-status
32
37
  :alt: Beta
33
- .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
38
+ .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
34
39
  :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
35
40
  :alt: License: AGPL-3
36
41
  .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github
@@ -0,0 +1,114 @@
1
+ odoo/addons/account_loan/README.rst,sha256=WggSobHvtn4-iq2AFStLvlbGjud4IT-WwVIZ3hX1Om4,5029
2
+ odoo/addons/account_loan/__init__.py,sha256=o9EnCAU5AKoGmP2X6ytOhQFxVqIh5Y1itLUOmzxSUJY,113
3
+ odoo/addons/account_loan/__manifest__.py,sha256=6HuTrbyqWsh4n1wwCulILrjTUyfP9c6TeDO7clDFePc,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=waUySljdY7G6nVl_FmadYbbSB2WhL9tfr_A4AFd_o-w,36463
6
+ odoo/addons/account_loan/i18n/am.po,sha256=Rn10i6Wvs5TCUVx0rMoFYm3g-dhbySHsuqJLYht5wlE,36638
7
+ odoo/addons/account_loan/i18n/ar.po,sha256=mjW7AERtAZLpH4W-KAIbANShtT4mN-K74Em2BI2K4dE,36914
8
+ odoo/addons/account_loan/i18n/bg.po,sha256=MtpP4qrra6MAkXurqK_qUzwfjquJHAg5bP8xxRYBQRE,36845
9
+ odoo/addons/account_loan/i18n/bs.po,sha256=uWxgZk7a2dGuBus-CN474RPBMabJ4u0o6_83nt21AtA,36814
10
+ odoo/addons/account_loan/i18n/ca.po,sha256=p2tkYqHKkA2uDhsa4l1waTScansHR-tbAzzEApsUMvY,41309
11
+ odoo/addons/account_loan/i18n/ca_ES.po,sha256=eOA9fkHTMLVyVtg9fawFlPbWvXux2vu9duJzj6yqipA,36566
12
+ odoo/addons/account_loan/i18n/cs.po,sha256=-AWou2Dh7O7KJjMbiCJol8HCPzg7NSmgQYV9Zb0a0sk,36775
13
+ odoo/addons/account_loan/i18n/da.po,sha256=sHcfKKy2LICjPDiUfnSgmNEdXfvnpzLKKeoFT1M7uaA,36700
14
+ odoo/addons/account_loan/i18n/de.po,sha256=ZY1_nV2Is67EJ6xyrpHGhKui0BE8TYRZZ8NLRgyFky0,40283
15
+ odoo/addons/account_loan/i18n/el_GR.po,sha256=aHOfrJAU26zcafm-mO_leRJbpo8X867Pt8nppuLe0mE,36816
16
+ odoo/addons/account_loan/i18n/en_AU.po,sha256=rkNYLNQkG2C1NYAaQ5YiL5VL-gI0mMo_8mHIWczsC1c,36587
17
+ odoo/addons/account_loan/i18n/en_GB.po,sha256=seb1aT6H_p1kcqoyXWYRHwrKbUYVNJMfXh5iUjfXwRY,36753
18
+ odoo/addons/account_loan/i18n/es.po,sha256=OgTxVhC5S8VZHR6ycCQodfH6SdCh3HPy_AogrPgVe8U,41885
19
+ odoo/addons/account_loan/i18n/es_AR.po,sha256=8KD7ZcyO1yxqXAXqU3mrCZFH2qpiYghQB4MdLGZxfBk,41655
20
+ odoo/addons/account_loan/i18n/es_CL.po,sha256=Lm6OpHx70NOfmH8GoV8B4l2sW1kqGEKkknZLppaQ9kM,36754
21
+ odoo/addons/account_loan/i18n/es_CO.po,sha256=nQKCas4RVqPdnIhIB4wcWdBJENoYe6w9nhTXzm5hC9I,36808
22
+ odoo/addons/account_loan/i18n/es_CR.po,sha256=olOQAV5VlbinvGRwmfh3fUxrsl4J_ymedUAoLZ4bTjs,36705
23
+ odoo/addons/account_loan/i18n/es_DO.po,sha256=BDreHDBrFMKJrJEbRn95L-ArFgB1XRyX4r6X39U58Ng,36749
24
+ odoo/addons/account_loan/i18n/es_EC.po,sha256=iK7hBOaGO3rS9pY14pYj7m4PGqYhn5el74ueySeXY50,36808
25
+ odoo/addons/account_loan/i18n/es_ES.po,sha256=3CCJqA3tCCwv-H0PAP5c47mD2U2vZM5EnJwzB0gZgpw,36751
26
+ odoo/addons/account_loan/i18n/es_MX.po,sha256=U8gaFHhheEGg_CmM03RlWW9tmNSV6CUWyDWB2EN3xuU,36796
27
+ odoo/addons/account_loan/i18n/es_PE.po,sha256=E7CR7t0n44eGOSODLXaL-q2AMiWdA4gTZZIGsj8zzc4,36725
28
+ odoo/addons/account_loan/i18n/es_PY.po,sha256=btWcvYRAfki-FjOF9nMFFNP_M9Y0rO1QIJWHYPxB5y4,36628
29
+ odoo/addons/account_loan/i18n/es_VE.po,sha256=Y4tWS5KnQNYW_LtojvIEeesSroHFsGlDwXSyHdjoSzo,36735
30
+ odoo/addons/account_loan/i18n/et.po,sha256=UVojN0niVII3WdkFVLhVNKFmNTFgQlM_4Eofo5eR1dU,36728
31
+ odoo/addons/account_loan/i18n/eu.po,sha256=YG00wLGxRyIe1m1EqUv8uRUnbGXV5E7z3LOyHlB4U2o,36634
32
+ odoo/addons/account_loan/i18n/fa.po,sha256=Xk9F1RwbBo_0RUJUkC6GlO5iAe2eHjKdZSExWVWBBZE,36805
33
+ odoo/addons/account_loan/i18n/fi.po,sha256=PJlu2hLUDLpaBf5B8zEEv-5wC0j7gUBwm3eFfXckw3Q,36714
34
+ odoo/addons/account_loan/i18n/fr.po,sha256=zFGCYOgz63bkdTuCdSxK83Bp9OjU0I9C6HWYG42yju4,37773
35
+ odoo/addons/account_loan/i18n/fr_CA.po,sha256=bUNflq_AAKNx0g1zcsGBCu0bRXY1sxFTrp-ZkfDxeeo,36695
36
+ odoo/addons/account_loan/i18n/fr_CH.po,sha256=FM8TZJJ9HpTtuOJkMlyhvSoXg6GBOrQr5J3y55cLCEM,36727
37
+ odoo/addons/account_loan/i18n/fr_FR.po,sha256=YcRGnU88z-L_03nF9o5TCD8PBz5Y0l5tXPXQQ4l8oDo,36659
38
+ odoo/addons/account_loan/i18n/gl.po,sha256=0eqT9tGCHS4qgXuogQkp-NITVO_Vrm2h23FLdUOrpKs,36720
39
+ odoo/addons/account_loan/i18n/gl_ES.po,sha256=2bBPX8SwRcmnD-8kDksUjkxWKLt46d9b6BhgzeWn74E,36550
40
+ odoo/addons/account_loan/i18n/gu.po,sha256=Jc-qrXSTMjRHrc3MrcUX9Gr1up18-tSlBrtn_pg9BKw,36571
41
+ odoo/addons/account_loan/i18n/he.po,sha256=I7wa0KzhuLhaZVVOhnnGK1B4nFJgiYl7t_844Jnj6qw,36765
42
+ odoo/addons/account_loan/i18n/hi.po,sha256=yeP2DAEJnb5nkPH72I-X58yr_1EeJGvuZlJ0p6DGlZk,36540
43
+ odoo/addons/account_loan/i18n/hr.po,sha256=Sn2al5izPo8xngj5Ah6uSS1lWB8tg6SucSsPPDb1LEU,36825
44
+ odoo/addons/account_loan/i18n/hr_HR.po,sha256=h0t8DXBtNJc027gQIUPxEuOJsXW_QA08lE14Cc2ajbU,36772
45
+ odoo/addons/account_loan/i18n/hu.po,sha256=ouGXM-wl_aueBZQh1As-c_zc9vybXJOIpZ5qqmMFy5o,36786
46
+ odoo/addons/account_loan/i18n/id.po,sha256=-Vvt2UxP_eJ4lAOfRvrZb7TkE3ZBTW0DydLWTjTERls,36740
47
+ odoo/addons/account_loan/i18n/it.po,sha256=zPqSo8TqW40BQWCBMPzBOwlJ2RFHwSlHWfhwdD0x2Q0,41863
48
+ odoo/addons/account_loan/i18n/ja.po,sha256=l5pSrAE4lJAF_PD4s5nkMAbzx5eVJT14aotpOY4zR-g,36743
49
+ odoo/addons/account_loan/i18n/ko.po,sha256=VptZZzVPcB8B6bKs2uwO7WishuV2ahl0SyP4cgjv6g8,36693
50
+ odoo/addons/account_loan/i18n/lo.po,sha256=keJ3NyF5CMH5m55oMRMJULQb00D8TuRXtcWs1jW9NeU,36580
51
+ odoo/addons/account_loan/i18n/lt.po,sha256=BekhKufF2syMk2zYMmMwqHf0c5m9olzNTamUWq_a7_Y,36867
52
+ odoo/addons/account_loan/i18n/lt_LT.po,sha256=kovHNXkMb9E9mUYFQwlhHjIe6MMVCI__j0MyWSLyVz4,36733
53
+ odoo/addons/account_loan/i18n/lv.po,sha256=WTHYu_8mntTwaDMhaqzynV_gIhYGdmNsTXRqR5uSD4I,36669
54
+ odoo/addons/account_loan/i18n/mk.po,sha256=1HjoMlmLpajaDkH9k26N_z2L75rNSAGSPJJoYEUhTHE,36903
55
+ odoo/addons/account_loan/i18n/mn.po,sha256=5F0JP3RsecNpri8BMqHdTn3Vr1y4B2DZo-ka92vI6dU,36894
56
+ odoo/addons/account_loan/i18n/nb.po,sha256=iOP2ctrdGYAdS_8ZFwKWvviQqXIx8NRXmBn_Q6TKshY,36747
57
+ odoo/addons/account_loan/i18n/nb_NO.po,sha256=pdleGCsnt6bK8lpeYvj_-qwzQr1Z--h045Kz8xWApdk,36700
58
+ odoo/addons/account_loan/i18n/nl.po,sha256=XCD_Ph_nvmo4K9-PxhJhq88NrtTWIgWzE3G7xn8ZrC8,36755
59
+ odoo/addons/account_loan/i18n/nl_BE.po,sha256=TIzEDMtqXSMKty9Xza-9JaeiHNVFU5YGNKCfTTrrg_8,36765
60
+ odoo/addons/account_loan/i18n/nl_NL.po,sha256=OW1sQCqbN_walCuyVE__B52yREfZ2ecdzeTXdV1yyPI,36567
61
+ odoo/addons/account_loan/i18n/pl.po,sha256=3BEUzLOCf3nu70qt44-Yw7mcVANev5it3885Yjib1-o,36899
62
+ odoo/addons/account_loan/i18n/pt.po,sha256=4vbS8bj7rRuB4G7BXQhKnjU8jRHr73hv4-PsWRhNOfs,38679
63
+ odoo/addons/account_loan/i18n/pt_BR.po,sha256=q-SXNdefacXA-1sOv5PCFxkSu0LBuekb7isAwOSg3yE,39975
64
+ odoo/addons/account_loan/i18n/pt_PT.po,sha256=n7FTVn1i-GPXHN2X0NfsSXkmu1393dVMxoLy1lAPxBc,36799
65
+ odoo/addons/account_loan/i18n/ro.po,sha256=9MBkglZ1l806qkmv_epoPO2X_PoOZ5Q2KXdfOnrKPOs,36801
66
+ odoo/addons/account_loan/i18n/ru.po,sha256=Q9NfMh9a_XGR25bFNcaBJkpXGb2TFbfqEy_ntdMHf3E,36869
67
+ odoo/addons/account_loan/i18n/sk.po,sha256=AkNQX_u2YT9whqmF98lwEVloXC7AES-aUzNCizC5UXc,36743
68
+ odoo/addons/account_loan/i18n/sk_SK.po,sha256=n3QEa1fJugti_VVHVZFcwoqmHS_83ZimC8lcDtVBr6k,36593
69
+ odoo/addons/account_loan/i18n/sl.po,sha256=pO-gbak_T_WKP9Hr_s5cJJfyy-2F3bsKYtBIlhcRv4w,36870
70
+ odoo/addons/account_loan/i18n/sr.po,sha256=pSgSYe5PnLMhRmjtKM2QjdjbNPsLdUlHxpbMbbub_74,36623
71
+ odoo/addons/account_loan/i18n/sr@latin.po,sha256=iP75OCTGVW71vAcKyR4T0CgK-1ucexlLt36ZM7BHSUA,36795
72
+ odoo/addons/account_loan/i18n/sv.po,sha256=ZheKmmmF8iSP766FtIHfz1SWq9_ZZNqs7KMAJo6UesU,41321
73
+ odoo/addons/account_loan/i18n/th.po,sha256=B2fPq5gsBpgDVuSLV3By__92oTClG2fTUr0ethFVaLc,37019
74
+ odoo/addons/account_loan/i18n/tr.po,sha256=kGkQYzb_0wAYJ2W3WD71YaRYuYsfZPn6Kshvg7Q9mRU,36737
75
+ odoo/addons/account_loan/i18n/tr_TR.po,sha256=eVKa7xPtF4cePZTluPxZaiv_w8Ii72ARJfaZFJKHpp0,36797
76
+ odoo/addons/account_loan/i18n/uk.po,sha256=qbpF_Gw1xFmxr3raUjZoPL-fwCWgNsJ3AOhlUglD9tI,36887
77
+ odoo/addons/account_loan/i18n/vi.po,sha256=F89h3zfm2EX3RxnxwODy6HdVfySHj3WAdfZ9DPRhMOQ,36764
78
+ odoo/addons/account_loan/i18n/vi_VN.po,sha256=X4eYzJoMpUVg0IOShykN79hpk3Y0HOHgFhTRUXJHbGY,36669
79
+ odoo/addons/account_loan/i18n/zh_CN.po,sha256=AYn0QYAKWX4w_15sZ_6s3BuyV4uGbr7bxzdNLReQ4cU,36745
80
+ odoo/addons/account_loan/i18n/zh_TW.po,sha256=I9c3jFQPXx9FRTrl7i0Xf-82BLwVzcV6ute-qTbbT40,36738
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=Dxz5apL4uD9YdZkGJkFuNMtNW2vL0G-cIPPNMFP1FhI,16936
85
+ odoo/addons/account_loan/models/account_loan_line.py,sha256=eL638G70AudYQwdNVUMVcPr6vR7IjcDGOzDA_Hu17jU,18808
86
+ odoo/addons/account_loan/models/account_move.py,sha256=cL0Z4bvK77L7eEulSNBmI4zhw5CSpIbHSJcgoCHGwfs,869
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=jLRh8ppsxFBZ_NEiF2i9PQ6pHHyovJVa6PpocdmUEio,15606
96
+ odoo/addons/account_loan/tests/__init__.py,sha256=I1GwELsBL3FTRS0pVrE5q-qEk537mMnSOXpWkPVcBnY,94
97
+ odoo/addons/account_loan/tests/test_loan.py,sha256=2uUFsBx8yF9LVIWL-dFHrXAUXsnKRpxYF_7bjlIfAPw,31289
98
+ odoo/addons/account_loan/views/account_loan_lines_view.xml,sha256=wBhtozQ_gfyRFklFNsvuvWk9-vgFereQtSghBA931ik,6571
99
+ odoo/addons/account_loan/views/account_loan_view.xml,sha256=AufFsGbQu0fXkM0AznbGW5fYiqs5A4xUcicWa8Hlqq4,11481
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=giy-_9ln5eSKjhF8u9o0muGGuGiUeeIQfZA0tIIEAkU,3865
110
+ odoo/addons/account_loan/wizards/account_loan_post_view.xml,sha256=s-teTEY9HCEA2CHD3_tQZJIGOHJMZNAlR1pSN5Dpdn8,1440
111
+ odoo_addon_account_loan-17.0.2.2.0.dist-info/METADATA,sha256=FJwvP6KI-9ydOFAcOJi_RTBj8adLul7FLLKU3dW4U_0,5652
112
+ odoo_addon_account_loan-17.0.2.2.0.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
113
+ odoo_addon_account_loan-17.0.2.2.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
114
+ odoo_addon_account_loan-17.0.2.2.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: Whool 1.2
2
+ Generator: Whool 1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5