From 45a2d99a65f966102b5a01b45434c9a5a5e1cd68 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Tue, 23 Jan 2024 16:41:52 +0100 Subject: [PATCH] [MIG] account_check_deposit to v17 Migration from v16 to v17 Convert read_group to _read_group() for perf improvements --- account_check_deposit/__manifest__.py | 6 +- .../models/account_check_deposit.py | 44 +++---- .../tests/test_check_deposit.py | 107 +++++++----------- .../views/account_check_deposit_view.xml | 32 ++++-- .../views/account_move_line_view.xml | 2 +- 5 files changed, 86 insertions(+), 105 deletions(-) diff --git a/account_check_deposit/__manifest__.py b/account_check_deposit/__manifest__.py index 464d718d0..bbcc59e53 100644 --- a/account_check_deposit/__manifest__.py +++ b/account_check_deposit/__manifest__.py @@ -7,7 +7,7 @@ { "name": "Account Check Deposit", - "version": "16.0.1.0.0", + "version": "17.0.1.0.0", "category": "Accounting", "license": "AGPL-3", "summary": "Manage deposit of checks to the bank", @@ -19,10 +19,10 @@ "security/ir.model.access.csv", "security/check_deposit_security.xml", "data/sequence.xml", - "views/account_check_deposit_view.xml", - "views/account_move_line_view.xml", "report/report.xml", "report/report_checkdeposit.xml", + "views/account_check_deposit_view.xml", + "views/account_move_line_view.xml", ], "installable": True, } diff --git a/account_check_deposit/models/account_check_deposit.py b/account_check_deposit/models/account_check_deposit.py index 037089201..e4c840ab7 100644 --- a/account_check_deposit/models/account_check_deposit.py +++ b/account_check_deposit/models/account_check_deposit.py @@ -18,17 +18,15 @@ class AccountCheckDeposit(models.Model): _check_company_auto = True name = fields.Char( - size=64, readonly=True, default=lambda self: _("New"), copy=False + readonly=True, default=lambda self: _("New"), copy=False ) check_payment_ids = fields.One2many( comodel_name="account.move.line", inverse_name="check_deposit_id", string="Check Payments", - states={"done": [("readonly", "=", True)]}, ) deposit_date = fields.Date( required=True, - states={"done": [("readonly", "=", True)]}, default=fields.Date.context_today, tracking=True, copy=False, @@ -40,7 +38,6 @@ class AccountCheckDeposit(models.Model): "('bank_account_id', '=', False)]", required=True, check_company=True, - states={"done": [("readonly", "=", True)]}, tracking=True, ) in_hand_check_account_id = fields.Many2one( @@ -55,7 +52,6 @@ class AccountCheckDeposit(models.Model): precompute=True, readonly=False, required=True, - states={"done": [("readonly", "=", True)]}, tracking=True, ) state = fields.Selection( @@ -78,7 +74,6 @@ class AccountCheckDeposit(models.Model): domain="[('company_id', '=', company_id), ('type', '=', 'bank'), " "('bank_account_id', '!=', False)]", check_company=True, - states={"done": [("readonly", "=", True)]}, tracking=True, ) line_ids = fields.One2many( @@ -89,7 +84,6 @@ class AccountCheckDeposit(models.Model): company_id = fields.Many2one( comodel_name="res.company", required=True, - states={"done": [("readonly", "=", True)]}, default=lambda self: self.env.company, tracking=True, ) @@ -122,18 +116,18 @@ class AccountCheckDeposit(models.Model): "move_id.line_ids.reconciled", ) def _compute_check_deposit(self): - rg_res = self.env["account.move.line"].read_group( + rg_res = self.env["account.move.line"]._read_group( [("check_deposit_id", "in", self.ids)], - ["check_deposit_id", "amount_currency:sum", "debit:sum"], - ["check_deposit_id"], + groupby=["check_deposit_id"], + aggregates=["amount_currency:sum", "debit:sum", "id:count"], ) mapped_data = { - x["check_deposit_id"][0]: { - "debit": x["debit"], - "amount_currency": x["amount_currency"], - "count": x["check_deposit_id_count"], + deposit.id: { + "debit": total_debit, + "amount_currency": total_amount_currency, + "count": line_count, } - for x in rg_res + for (deposit, total_amount_currency, total_debit, line_count) in rg_res } for deposit in self: @@ -206,20 +200,23 @@ class AccountCheckDeposit(models.Model): return super().unlink() def backtodraft(self): + amlo = self.env["account.move.line"] for deposit in self: if deposit.move_id: move = deposit.move_id - counterpart_move_line = move.line_ids.filtered( - lambda x: x.account_id.id != deposit.in_hand_check_account_id.id - ) + check_move_lines = amlo + counterpart_move_line = amlo + for move_line in move.line_ids: + if move_line.account_id.id == deposit.in_hand_check_account_id.id: + check_move_lines |= move_line + else: + counterpart_move_line |= move_line if counterpart_move_line.reconciled: raise UserError( _("Deposit '%s' has already been credited on the bank account.") % deposit.display_name ) - move.line_ids.filtered( - lambda x: x.account_id.id == deposit.in_hand_check_account_id.id - ).remove_move_reconcile() + check_move_lines.remove_move_reconcile() if move.state == "posted": move.button_cancel() move.with_context(force_delete=True).unlink() @@ -305,11 +302,6 @@ class AccountCheckDeposit(models.Model): lines_to_rec.reconcile() deposit.write({"state": "done", "move_id": move.id}) - def get_report(self): - report = self.env.ref("account_check_deposit.report_account_check_deposit") - action = report.with_context(discard_logo_check=True).report_action(self) - return action - def get_all_checks(self): self.ensure_one() if not self.in_hand_check_account_id: diff --git a/account_check_deposit/tests/test_check_deposit.py b/account_check_deposit/tests/test_check_deposit.py index 46615e4ba..530ca6699 100644 --- a/account_check_deposit/tests/test_check_deposit.py +++ b/account_check_deposit/tests/test_check_deposit.py @@ -4,105 +4,83 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo.tests import tagged -from odoo.tests.common import TransactionCase +from odoo import Command +from odoo.addons.account.tests.common import AccountTestInvoicingCommon + @tagged("post_install", "-at_install") -class TestPayment(TransactionCase): - def setUp(self): - super().setUp() - self.account_model = self.env["account.account"] - self.partner = self.env["res.partner"].create({"name": "Test partner"}) - self.main_company = self.env.company - self.currency = self.main_company.currency_id - self.product = self.env["product.product"].create({"name": "Test product"}) - self.account_model.create( +class TestAccountCheckDeposit(AccountTestInvoicingCommon): + @classmethod + def setUpClass(cls, chart_template_ref=None): + super().setUpClass(chart_template_ref=chart_template_ref) + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.fr_test_company = cls.setup_company_data( + "Chq deposit test company", + chart_template=chart_template_ref, + country_id=cls.env.ref("base.fr").id, + ) + cls.company = cls.fr_test_company["company"] + cls.user.write( { - "code": "4111ZZ", - "name": "Debtors - (test)", - "reconcile": True, - "account_type": "asset_receivable", - "company_id": self.main_company.id, + "company_ids": [Command.link(cls.company.id)], + "company_id": cls.company.id, } ) - self.account_model.create( - { - "code": "7071ZZ", - "name": "Product Sales - (test)", - "account_type": "income", - "company_id": self.main_company.id, - } - ) - received_check_account = self.account_model.create( + cls.product = cls.env['product.product'].create({'name': 'Test Product'}) + cls.account_model = cls.env["account.account"] + cls.partner = cls.env["res.partner"].create({"name": "Test partner"}) + cls.currency = cls.company.currency_id + cls.received_check_account = cls.account_model.create( { "code": "5112ZZ", "name": "Received check - (test)", "reconcile": True, "account_type": "asset_current", - "company_id": self.main_company.id, + "company_id": cls.company.id, } ) - self.transfer_account = self.account_model.create( + cls.check_journal = cls.env["account.journal"].create( { - "code": "5115ZZ", - "name": "Check deposis waiting for credit on bank account - (test)", - "reconcile": True, - "account_type": "asset_current", - "company_id": self.main_company.id, - } - ) - self.manual_method_in = self.env.ref("account.account_payment_method_manual_in") - self.check_journal = self._create_journal( - "received check", "bank", "CHK", received_check_account - ) - self.bank_journal = self._create_journal( - "Bank Test Chq", "bank", "TEST@@", self.transfer_account - ) - self.bank_journal.bank_account_id = self.env["res.partner.bank"].create( - { - "acc_number": "SI56 1910 0000 0123 438 584", - "partner_id": self.main_company.partner_id.id, - } - ) - - def _create_journal(self, name, journal_type, code, payment_account): - return self.env["account.journal"].create( - { - "name": name, - "type": journal_type, - "code": code, - "company_id": self.main_company.id, + "name": "Received check", + "type": "bank", + "code": "ZZCHK", + "company_id": cls.company.id, "inbound_payment_method_line_ids": [ ( 0, 0, { - "payment_method_id": self.manual_method_in.id, - "payment_account_id": payment_account.id, + "payment_method_id": cls.env.ref("account.account_payment_method_manual_in").id, + "payment_account_id": cls.received_check_account.id, }, ) ], } ) + cls.fr_test_company['default_journal_bank'].bank_account_id = cls.env["res.partner.bank"].create( + { + "acc_number": "SI56 1910 0000 0123 438 584", + "partner_id": cls.company.partner_id.id, + } + ) def create_invoice(self, amount=100): """Returns an open invoice""" invoice = self.env["account.move"].create( { - "company_id": self.main_company.id, + "company_id": self.company.id, "move_type": "out_invoice", "partner_id": self.partner.id, "currency_id": self.currency.id, "invoice_line_ids": [ - ( - 0, - 0, + Command.create( { "product_id": self.product.id, "quantity": 1, "price_unit": amount, "tax_ids": [], - }, + } ) ], } @@ -114,9 +92,9 @@ class TestPayment(TransactionCase): """Returns an validated check deposit""" check_deposit = self.env["account.check.deposit"].create( { - "company_id": self.main_company.id, + "company_id": self.company.id, "journal_id": self.check_journal.id, - "bank_journal_id": self.bank_journal.id, + "bank_journal_id": self.fr_test_company['default_journal_bank'].id, "currency_id": self.currency.id, } ) @@ -142,8 +120,9 @@ class TestPayment(TransactionCase): self.assertAlmostEqual(payment.amount, 300) self.assertEqual(payment.state, "posted") check_deposit = self.create_check_deposit() + self.assertEqual(check_deposit.in_hand_check_account_id, self.received_check_account) liquidity_aml = check_deposit.move_id.line_ids.filtered( - lambda r: r.account_id == self.transfer_account + lambda r: r.account_id != check_deposit.in_hand_check_account_id ) self.assertAlmostEqual(check_deposit.total_amount, 300) self.assertAlmostEqual(liquidity_aml.debit, 300) diff --git a/account_check_deposit/views/account_check_deposit_view.xml b/account_check_deposit/views/account_check_deposit_view.xml index 0c85e4c2a..420e52944 100644 --- a/account_check_deposit/views/account_check_deposit_view.xml +++ b/account_check_deposit/views/account_check_deposit_view.xml @@ -14,26 +14,30 @@