diff --git a/account_loan/__manifest__.py b/account_loan/__manifest__.py index 7b75d2a4..8ad68efe 100644 --- a/account_loan/__manifest__.py +++ b/account_loan/__manifest__.py @@ -17,6 +17,7 @@ "wizards/account_loan_post_view.xml", "views/account_loan_view.xml", "views/account_move_view.xml", + "views/res_partner.xml", ], "installable": True, "maintainers": ["etobella"], diff --git a/account_loan/models/__init__.py b/account_loan/models/__init__.py index d07b9f2f..9822a4a3 100644 --- a/account_loan/models/__init__.py +++ b/account_loan/models/__init__.py @@ -4,3 +4,4 @@ from . import account_loan from . import account_loan_line from . import account_move +from . import res_partner diff --git a/account_loan/models/res_partner.py b/account_loan/models/res_partner.py new file mode 100644 index 00000000..b782113b --- /dev/null +++ b/account_loan/models/res_partner.py @@ -0,0 +1,32 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ResPartner(models.Model): + + _inherit = "res.partner" + + lended_loan_ids = fields.One2many("account.loan", inverse_name="partner_id") + lended_loan_count = fields.Integer( + compute="_compute_lended_loan_count", + help="How many Loans this partner lended to us ?", + ) + + @api.depends("lended_loan_ids") + def _compute_lended_loan_count(self): + for record in self: + record.lended_loan_count = len(record.lended_loan_ids) + + def action_view_partner_lended_loans(self): + + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "account_loan.account_loan_action" + ) + all_child = self.with_context(active_test=False).search( + [("id", "child_of", self.ids)] + ) + action["domain"] = [("partner_id", "in", all_child.ids)] + return action diff --git a/account_loan/tests/test_loan.py b/account_loan/tests/test_loan.py index 25df3acd..d4f453ff 100644 --- a/account_loan/tests/test_loan.py +++ b/account_loan/tests/test_loan.py @@ -77,6 +77,13 @@ class TestLoan(TransactionCase): loan._onchange_company() self.assertFalse(loan.interest_expenses_account_id) + def test_partner_loans(self): + self.assertFalse(self.partner.lended_loan_count) + loan = self.create_loan("fixed-annuity", 500000, 1, 60) + self.assertEqual(1, self.partner.lended_loan_count) + action = self.partner.action_view_partner_lended_loans() + self.assertEqual(loan, self.env[action["res_model"]].search(action["domain"])) + def test_round_on_end(self): loan = self.create_loan("fixed-annuity", 500000, 1, 60) loan.round_on_end = True diff --git a/account_loan/views/account_loan_view.xml b/account_loan/views/account_loan_view.xml index b789682c..184bed31 100644 --- a/account_loan/views/account_loan_view.xml +++ b/account_loan/views/account_loan_view.xml @@ -3,6 +3,17 @@ Copyright 2016 Antonio Espinosa License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> + + + account.loan.tree + account.loan + + + + + + + account.loan.tree account.loan diff --git a/account_loan/views/res_partner.xml b/account_loan/views/res_partner.xml new file mode 100644 index 00000000..7d8ad25c --- /dev/null +++ b/account_loan/views/res_partner.xml @@ -0,0 +1,34 @@ + + + + + + res.partner.form (in account_loan) + res.partner + + +
+ +
+
+
+ + + +