From fee65b9d9e618ed331c10496d114e2ad444cf0c2 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Tue, 21 Jan 2025 16:10:15 +0100 Subject: [PATCH] [MIG] account_reconcile_oca from v17 to v18 --- account_reconcile_oca/__manifest__.py | 2 +- .../models/account_account_reconcile.py | 14 +-- .../models/account_bank_statement_line.py | 26 +++-- .../models/account_reconcile_abstract.py | 2 +- .../js/reconcile/reconcile_controller.esm.js | 5 +- .../reconcile/reconcile_kanban_record.esm.js | 2 - .../js/reconcile/reconcile_renderer.esm.js | 2 - .../src/js/reconcile/reconcile_view.esm.js | 2 - .../reconcile_form_controller.esm.js | 4 +- .../reconcile_form_notebook.esm.js | 1 - .../reconcile_form_renderer.esm.js | 2 - .../reconcile_form/reconcile_form_view.esm.js | 2 - .../reconcile_manual_controller.esm.js | 2 - .../reconcile_manual_view.esm.js | 2 - .../reconcile_move_line_controller.esm.js | 2 - .../reconcile_move_line_renderer.esm.js | 2 - .../reconcile_move_line_view.esm.js | 2 - .../js/widgets/reconcile_chatter_field.esm.js | 6 +- .../js/widgets/reconcile_data_widget.esm.js | 1 - .../widgets/reconcile_move_line_widget.esm.js | 2 - .../js/widgets/selection_badge_uncheck.esm.js | 1 - .../static/src/xml/reconcile.xml | 2 +- .../tests/test_account_reconcile.py | 87 ++++++--------- .../tests/test_bank_account_reconcile.py | 55 ++++----- .../views/account_account.xml | 6 +- .../views/account_account_reconcile.xml | 29 ++--- .../views/account_bank_statement_line.xml | 104 +++++++++--------- .../views/account_journal.xml | 19 ++-- .../views/account_move_line.xml | 6 +- 29 files changed, 165 insertions(+), 227 deletions(-) diff --git a/account_reconcile_oca/__manifest__.py b/account_reconcile_oca/__manifest__.py index b34888a2..06448dbd 100644 --- a/account_reconcile_oca/__manifest__.py +++ b/account_reconcile_oca/__manifest__.py @@ -5,7 +5,7 @@ "name": "Account Reconcile Oca", "summary": """ Reconcile addons for Odoo CE accounting""", - "version": "17.0.1.5.6", + "version": "18.0.1.0.0", "license": "AGPL-3", "author": "CreuBlanca,Dixmit,Odoo Community Association (OCA)", "maintainers": ["etobella"], diff --git a/account_reconcile_oca/models/account_account_reconcile.py b/account_reconcile_oca/models/account_account_reconcile.py index ea8285f0..e7da55e2 100644 --- a/account_reconcile_oca/models/account_account_reconcile.py +++ b/account_reconcile_oca/models/account_account_reconcile.py @@ -24,13 +24,11 @@ class AccountAccountReconcile(models.Model): @property def _table_query(self): - return "{} {} {} {} {}".format( - self._select(), - self._from(), - self._where(), - self._groupby(), - self._having(), + query = ( + f"{self._select()} {self._from()} {self._where()} " + f"{self._groupby()} {self._having()}" ) + return query def _select(self): account_account_name_field = ( @@ -55,7 +53,7 @@ class AccountAccountReconcile(models.Model): a.id as account_id, FALSE as is_reconciled, aml.currency_id as currency_id, - a.company_id, + am.company_id, null as foreign_currency_id """ @@ -84,7 +82,7 @@ class AccountAccountReconcile(models.Model): ELSE NULL END, aml.currency_id, - a.company_id + am.company_id """ def _having(self): diff --git a/account_reconcile_oca/models/account_bank_statement_line.py b/account_reconcile_oca/models/account_bank_statement_line.py index bf1fb530..ea73b8d3 100644 --- a/account_reconcile_oca/models/account_bank_statement_line.py +++ b/account_reconcile_oca/models/account_bank_statement_line.py @@ -22,7 +22,6 @@ class AccountBankStatementLine(models.Model): ._fields["reconcile_mode"] .selection ) - company_id = fields.Many2one(related="journal_id.company_id") reconcile_data = fields.Serialized() manual_line_id = fields.Many2one( "account.move.line", @@ -290,7 +289,7 @@ class AccountBankStatementLine(models.Model): can_reconcile = True account = self.partner_id.property_account_payable_id suspense_line = { - "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "reference": f"reconcile_auxiliary;{reconcile_auxiliary_id}", "id": False, "account_id": [account.id, account.display_name], "partner_id": self.partner_id @@ -587,7 +586,7 @@ class AccountBankStatementLine(models.Model): ) new_line.update( { - "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "reference": f"reconcile_auxiliary;{reconcile_auxiliary_id}", "id": False, "amount": amount, "debit": amount if amount > 0 else 0, @@ -765,7 +764,7 @@ class AccountBankStatementLine(models.Model): def reconcile_bank_line(self): self.ensure_one() self.reconcile_mode = self.journal_id.reconcile_mode - result = getattr(self, "_reconcile_bank_line_%s" % self.reconcile_mode)( + result = getattr(self, f"_reconcile_bank_line_{self.reconcile_mode}")( self._prepare_reconcile_line_data(self.reconcile_data_info["data"]) ) self.reconcile_data = False @@ -773,7 +772,9 @@ class AccountBankStatementLine(models.Model): def _reconcile_bank_line_edit(self, data): _liquidity_lines, suspense_lines, other_lines = self._seek_for_lines() - lines_to_remove = [(2, line.id) for line in suspense_lines + other_lines] + lines_to_remove = [ + Command.delete(line.id) for line in suspense_lines + other_lines + ] # Cleanup previous lines. move = self.move_id @@ -784,6 +785,7 @@ class AccountBankStatementLine(models.Model): skip_account_move_synchronization=True, force_delete=True, skip_invoice_sync=True, + skip_readonly_check=True, ).write( { "line_ids": lines_to_remove, @@ -983,9 +985,9 @@ class AccountBankStatementLine(models.Model): ) if not data.get("can_reconcile"): continue - getattr( - record, "_reconcile_bank_line_%s" % record.journal_id.reconcile_mode - )(self._prepare_reconcile_line_data(data["data"])) + getattr(record, f"_reconcile_bank_line_{record.journal_id.reconcile_mode}")( + self._prepare_reconcile_line_data(data["data"]) + ) return result def _synchronize_to_moves(self, changed_fields): @@ -1100,7 +1102,7 @@ class AccountBankStatementLine(models.Model): new_data += lines new_data.append( { - "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "reference": f"reconcile_auxiliary;{reconcile_auxiliary_id}", "id": False, "account_id": line["account_id"], "partner_id": line.get("partner_id"), @@ -1127,13 +1129,13 @@ class AccountBankStatementLine(models.Model): def action_to_check(self): self.ensure_one() - self.move_id.to_check = True + self.move_id.write({"checked": False}) if self.can_reconcile and self.journal_id.reconcile_mode == "edit": self.reconcile_bank_line() def action_checked(self): self.ensure_one() - self.move_id.to_check = False + self.move_id.write({"checked": True}) def _get_reconcile_line( self, @@ -1219,7 +1221,7 @@ class AccountBankStatementLine(models.Model): data = { "is_exchange_counterpart": True, "original_exchange_line_id": line.id, - "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "reference": f"reconcile_auxiliary;{reconcile_auxiliary_id}", "id": False, "account_id": (account.id, account.display_name), "partner_id": False, diff --git a/account_reconcile_oca/models/account_reconcile_abstract.py b/account_reconcile_oca/models/account_reconcile_abstract.py index 47c4e9be..13d58005 100644 --- a/account_reconcile_oca/models/account_reconcile_abstract.py +++ b/account_reconcile_oca/models/account_reconcile_abstract.py @@ -88,7 +88,7 @@ class AccountReconcileAbstract(models.AbstractModel): vals = { "move_id": move and line.move_id.id, "move": move and line.move_id.name, - "reference": "account.move.line;%s" % line.id, + "reference": f"account.move.line;{line.id}", "id": line.id, "account_id": [line.account_id.id, line.account_id.display_name], "partner_id": [line.partner_id.id, line.partner_id.display_name] diff --git a/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js b/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js index dc5ed085..21281cc9 100644 --- a/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js @@ -1,9 +1,9 @@ -/** @odoo-module */ const {onMounted, onWillStart, useState, useSubEnv} = owl; import {useBus, useService} from "@web/core/utils/hooks"; import {KanbanController} from "@web/views/kanban/kanban_controller"; import {View} from "@web/views/view"; import {formatMonetary} from "@web/views/fields/formatters"; +import {router} from "@web/core/browser/router"; export class ReconcileController extends KanbanController { async setup() { @@ -20,7 +20,6 @@ export class ReconcileController extends KanbanController { this.effect = useService("effect"); this.orm = useService("orm"); this.action = useService("action"); - this.router = useService("router"); this.activeActions = this.props.archInfo.activeActions; useBus(this.model.bus, "update", () => { this.selectRecord(); @@ -134,7 +133,7 @@ export class ReconcileController extends KanbanController { this.selectRecord(record); } updateURL(resId) { - this.router.pushState({id: resId}); + router.pushState({id: resId}); } } diff --git a/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js b/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js index a97c5258..329801c7 100644 --- a/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {KanbanRecord} from "@web/views/kanban/kanban_record"; export class ReconcileKanbanRecord extends KanbanRecord { diff --git a/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js b/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js index 25fe2ac4..b092e93c 100644 --- a/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {KanbanRenderer} from "@web/views/kanban/kanban_renderer"; import {ReconcileKanbanRecord} from "./reconcile_kanban_record.esm.js"; import {formatMonetary} from "@web/views/fields/formatters"; diff --git a/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js b/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js index 4bcb8ade..a10642b9 100644 --- a/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {ReconcileController} from "./reconcile_controller.esm.js"; import {ReconcileRenderer} from "./reconcile_renderer.esm.js"; import {kanbanView} from "@web/views/kanban/kanban_view"; diff --git a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js index ae5640dd..b0c8effc 100644 --- a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {FormController} from "@web/views/form/form_controller"; import {useService} from "@web/core/utils/hooks"; import {useViewButtons} from "@web/views/view_button/view_button_hook"; @@ -11,7 +9,7 @@ export class ReconcileFormController extends FormController { this.env.exposeController(this); this.orm = useService("orm"); const rootRef = useRef("root"); - useViewButtons(this.model, rootRef, { + useViewButtons(rootRef, { reload: this.reloadFormController.bind(this), beforeExecuteAction: this.beforeExecuteActionButton.bind(this), afterExecuteAction: this.afterExecuteActionButton.bind(this), diff --git a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js index 1a89716f..1b6bc9a9 100644 --- a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js @@ -1,4 +1,3 @@ -/** @odoo-module */ import {Notebook} from "@web/core/notebook/notebook"; import {onWillDestroy} from "@odoo/owl"; diff --git a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js index c0a0d138..ce178dd5 100644 --- a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {FormRenderer} from "@web/views/form/form_renderer"; import {ReconcileFormNotebook} from "./reconcile_form_notebook.esm.js"; diff --git a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js index 3a2b0312..e7617aa4 100644 --- a/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {ReconcileFormController} from "./reconcile_form_controller.esm.js"; import {ReconcileFormRenderer} from "./reconcile_form_renderer.esm.js"; import {formView} from "@web/views/form/form_view"; diff --git a/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js b/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js index f5feb11a..ad52a541 100644 --- a/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {FormController} from "@web/views/form/form_controller"; import {useViewButtons} from "@web/views/view_button/view_button_hook"; const {useRef} = owl; diff --git a/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js b/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js index 36b974a2..dc5e9608 100644 --- a/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {ReconcileManualController} from "./reconcile_manual_controller.esm.js"; import {formView} from "@web/views/form/form_view"; import {registry} from "@web/core/registry"; diff --git a/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js b/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js index 82ab8cb5..c49e3f17 100644 --- a/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {ListController} from "@web/views/list/list_controller"; export class ReconcileMoveLineController extends ListController { diff --git a/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js b/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js index 682328b7..445835ae 100644 --- a/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {ListRenderer} from "@web/views/list/list_renderer"; export class ReconcileMoveLineRenderer extends ListRenderer { diff --git a/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js b/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js index 979570ba..a2fdab89 100644 --- a/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js +++ b/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module */ - import {ReconcileMoveLineController} from "./reconcile_move_line_controller.esm.js"; import {ReconcileMoveLineRenderer} from "./reconcile_move_line_renderer.esm.js"; diff --git a/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js b/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js index 632768dd..1a154f13 100644 --- a/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js +++ b/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js @@ -1,8 +1,6 @@ -/** @odoo-module **/ - -// import {ChatterContainer} from "@mail/components/chatter_container/chatter_container"; +// Import {ChatterContainer} from "@mail/components/chatter_container/chatter_container"; // import {Chatter} from "@mail/core/web/chatter"; -import {Chatter} from "@mail/core/web/chatter"; +import {Chatter} from "@mail/chatter/web_portal/chatter"; import {registry} from "@web/core/registry"; import {standardFieldProps} from "@web/views/fields/standard_field_props"; diff --git a/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js b/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js index a4dd95e7..340ac171 100644 --- a/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js +++ b/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js @@ -1,4 +1,3 @@ -/** @odoo-module **/ import {formatDate, parseDate} from "@web/core/l10n/dates"; import {formatMonetary} from "@web/views/fields/formatters"; import {registry} from "@web/core/registry"; diff --git a/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js b/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js index ca8e1ca5..c7675646 100644 --- a/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js +++ b/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module **/ - import {View} from "@web/views/view"; import {evaluateBooleanExpr} from "@web/core/py_js/py"; import {getFieldContext} from "@web/model/relational_model/utils"; diff --git a/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js b/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js index 906d7e39..cd5ec2e7 100644 --- a/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js +++ b/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js @@ -1,4 +1,3 @@ -/** @odoo-module **/ import { BadgeSelectionField, badgeSelectionField, diff --git a/account_reconcile_oca/static/src/xml/reconcile.xml b/account_reconcile_oca/static/src/xml/reconcile.xml index d0972c9c..b1934d87 100644 --- a/account_reconcile_oca/static/src/xml/reconcile.xml +++ b/account_reconcile_oca/static/src/xml/reconcile.xml @@ -81,7 +81,7 @@ diff --git a/account_reconcile_oca/tests/test_account_reconcile.py b/account_reconcile_oca/tests/test_account_reconcile.py index 114c7113..c5d5c5b0 100644 --- a/account_reconcile_oca/tests/test_account_reconcile.py +++ b/account_reconcile_oca/tests/test_account_reconcile.py @@ -1,3 +1,4 @@ +from odoo import Command from odoo.tests import Form, tagged from odoo.addons.account_reconcile_model_oca.tests.common import ( @@ -12,9 +13,9 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): return {**cls.env.context, "_test_account_reconcile_oca": True} @classmethod - def setUpClass(cls, chart_template_ref=None): - super().setUpClass(chart_template_ref=chart_template_ref) - cls.env = cls.env(context=cls._setup_context()) + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) cls.acc_bank_stmt_model = cls.env["account.bank.statement"] cls.acc_bank_stmt_line_model = cls.env["account.bank.statement.line"] cls.bank_journal_usd.suspense_account_id = ( @@ -28,7 +29,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): .search( [ ("account_type", "=", "asset_current"), - ("company_id", "=", cls.env.company.id), + ("company_ids", "in", cls.env.company.id), ], limit=1, ) @@ -40,7 +41,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): .search( [ ("account_type", "=", "asset_receivable"), - ("company_id", "=", cls.env.company.id), + ("company_ids", "in", cls.env.company.id), ], limit=1, ) @@ -52,7 +53,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): .search( [ ("account_type", "=", "equity"), - ("company_id", "=", cls.env.company.id), + ("company_ids", "in", cls.env.company.id), ], limit=1, ) @@ -63,7 +64,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): .search( [ ("account_type", "=", "asset_non_current"), - ("company_id", "=", cls.env.company.id), + ("company_ids", "in", cls.env.company.id), ], limit=1, ) @@ -73,23 +74,19 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): cls.move_1 = cls.env["account.move"].create( { "line_ids": [ - ( - 0, - 0, + Command.create( { "account_id": cls.current_assets_account.id, "name": "DEMO", "credit": 100, - }, + } ), - ( - 0, - 0, + Command.create( { "account_id": cls.non_current_assets_account.id, "name": "DEMO", "debit": 100, - }, + } ), ] } @@ -98,23 +95,19 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): cls.move_2 = cls.env["account.move"].create( { "line_ids": [ - ( - 0, - 0, + Command.create( { "account_id": cls.non_current_assets_account.id, "name": "DEMO", "credit": 50, - }, + } ), - ( - 0, - 0, + Command.create( { "account_id": cls.equity_account.id, "name": "DEMO", "debit": 50, - }, + } ), ] } @@ -123,23 +116,19 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): cls.move_3 = cls.env["account.move"].create( { "line_ids": [ - ( - 0, - 0, + Command.create( { "account_id": cls.non_current_assets_account.id, "name": "DEMO", "credit": 50, - }, + } ), - ( - 0, - 0, + Command.create( { "account_id": cls.equity_account.id, "name": "DEMO", "debit": 50, - }, + } ), ] } @@ -216,24 +205,20 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): move_1 = self.env["account.move"].create( { "line_ids": [ - ( - 0, - 0, + Command.create( { "account_id": self.current_assets_account.id, "name": "DEMO", "credit": 100, - }, + } ), - ( - 0, - 0, + Command.create( { "account_id": self.asset_receivable_account.id, "partner_id": self.env.user.partner_id.id, "name": "DEMO", "debit": 100, - }, + } ), ] } @@ -243,24 +228,20 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): move_2 = self.env["account.move"].create( { "line_ids": [ - ( - 0, - 0, + Command.create( { "account_id": self.current_assets_account.id, "name": "DEMO", "debit": 100, - }, + } ), - ( - 0, - 0, + Command.create( { "account_id": self.asset_receivable_account.id, "partner_id": self.env.company.partner_id.id, "name": "DEMO", "credit": 100, - }, + } ), ] } @@ -277,24 +258,20 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): move_3 = self.env["account.move"].create( { "line_ids": [ - ( - 0, - 0, + Command.create( { "account_id": self.current_assets_account.id, "name": "DEMO", "debit": 100, - }, + } ), - ( - 0, - 0, + Command.create( { "account_id": self.asset_receivable_account.id, "partner_id": self.env.user.partner_id.id, "name": "DEMO", "credit": 100, - }, + } ), ] } diff --git a/account_reconcile_oca/tests/test_bank_account_reconcile.py b/account_reconcile_oca/tests/test_bank_account_reconcile.py index 3aeb2148..88f73f27 100644 --- a/account_reconcile_oca/tests/test_bank_account_reconcile.py +++ b/account_reconcile_oca/tests/test_bank_account_reconcile.py @@ -1,5 +1,6 @@ import time +from odoo import Command from odoo.tests import Form, tagged from odoo.addons.account_reconcile_model_oca.tests.common import ( @@ -14,8 +15,8 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): return {**cls.env.context, "_test_account_reconcile_oca": True} @classmethod - def setUpClass(cls, chart_template_ref=None): - super().setUpClass(chart_template_ref=chart_template_ref) + def setUpClass(cls): + super().setUpClass() cls.env = cls.env(context=cls._setup_context()) # Auto-disable reconciliation model created automatically with # generate_account_reconcile_model() to avoid side effects in tests @@ -39,7 +40,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): cls.current_assets_account = cls.env["account.account"].search( [ ("account_type", "=", "asset_current"), - ("company_id", "=", cls.env.company.id), + ("company_ids", "in", cls.env.company.id), ], limit=1, ) @@ -51,7 +52,9 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): "rule_type": "writeoff_button", "match_partner": True, "match_partner_ids": [], - "line_ids": [(0, 0, {"account_id": cls.current_assets_account.id})], + "line_ids": [ + Command.create({"account_id": cls.current_assets_account.id}) + ], } ) cls.tax_10 = cls.env["account.tax"].create( @@ -190,7 +193,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): f.add_account_move_line_id = receivable1 self.assertFalse(f.add_account_move_line_id) self.assertTrue(f.can_reconcile) - f.manual_reference = "account.move.line;%s" % receivable1.id + f.manual_reference = f"account.move.line;{receivable1.id}" self.assertEqual(-50, f.manual_amount) self.assertEqual(2, len(bank_stmt_line.reconcile_data_info["data"])) bank_stmt_line.button_manual_reference_full_paid() @@ -199,7 +202,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): bank_stmt_line, view="account_reconcile_oca.bank_statement_line_form_reconcile_view", ) as f: - f.manual_reference = "account.move.line;%s" % receivable1.id + f.manual_reference = f"account.move.line;{receivable1.id}" self.assertEqual(-100, f.manual_amount) def test_reconcile_invoice_unreconcile(self): @@ -303,12 +306,12 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): f.add_account_move_line_id = receivable1 self.assertFalse(f.add_account_move_line_id) self.assertTrue(f.can_reconcile) - f.manual_reference = "account.move.line;%s" % receivable1.id + f.manual_reference = f"account.move.line;{receivable1.id}" self.assertEqual(f.manual_amount, -100) f.manual_amount = -70 self.assertFalse(f.can_reconcile) f.add_account_move_line_id = receivable2 - f.manual_reference = "account.move.line;%s" % receivable2.id + f.manual_reference = f"account.move.line;{receivable2.id}" self.assertEqual(f.manual_amount, -30) self.assertTrue(f.can_reconcile) self.assertEqual(inv1.amount_residual_signed, 100) @@ -366,12 +369,12 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): f.add_account_move_line_id = receivable1 self.assertFalse(f.add_account_move_line_id) self.assertTrue(f.can_reconcile) - f.manual_reference = "account.move.line;%s" % receivable1.id + f.manual_reference = f"account.move.line;{receivable1.id}" self.assertEqual(f.manual_amount, 100) f.manual_amount = 70 self.assertFalse(f.can_reconcile) f.add_account_move_line_id = receivable2 - f.manual_reference = "account.move.line;%s" % receivable2.id + f.manual_reference = f"account.move.line;{receivable2.id}" self.assertEqual(f.manual_amount, 30) self.assertTrue(f.can_reconcile) self.assertEqual(inv1.amount_residual_signed, -100) @@ -430,7 +433,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): bank statement. """ self.rule.line_ids.write( - {"tax_ids": [(4, self.tax_10.id)], "force_tax_included": True} + {"tax_ids": [Command.link(self.tax_10.id)], "force_tax_included": True} ) bank_stmt = self.acc_bank_stmt_model.create( { @@ -541,7 +544,9 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): "match_label": "contains", "match_label_param": "DEMO WRITEOFF", "auto_reconcile": True, - "line_ids": [(0, 0, {"account_id": self.current_assets_account.id})], + "line_ids": [ + Command.create({"account_id": self.current_assets_account.id}) + ], } ) @@ -617,7 +622,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): .move_id ) bank_stmt_line.unreconcile_bank_line() - self.assertTrue(reconcile_move.reversal_move_id) + self.assertTrue(reconcile_move.reversal_move_ids) self.assertFalse(bank_stmt_line.is_reconciled) def test_reconcile_model_with_foreign_currency(self): @@ -709,13 +714,13 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): f.add_account_move_line_id = receivable1 self.assertTrue(f.can_reconcile) self.assertFalse(bank_stmt_line.is_reconciled) - self.assertFalse(bank_stmt_line.to_check) + self.assertTrue(bank_stmt_line.checked) bank_stmt_line.action_to_check() self.assertTrue(bank_stmt_line.is_reconciled) - self.assertTrue(bank_stmt_line.to_check) + self.assertFalse(bank_stmt_line.checked) bank_stmt_line.action_checked() self.assertTrue(bank_stmt_line.is_reconciled) - self.assertFalse(bank_stmt_line.to_check) + self.assertTrue(bank_stmt_line.checked) def test_reconcile_invoice_to_check_not_reconciled(self): """ @@ -740,13 +745,13 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): } ) self.assertFalse(bank_stmt_line.is_reconciled) - self.assertFalse(bank_stmt_line.to_check) + self.assertTrue(bank_stmt_line.checked) bank_stmt_line.action_to_check() self.assertFalse(bank_stmt_line.is_reconciled) - self.assertTrue(bank_stmt_line.to_check) + self.assertFalse(bank_stmt_line.checked) bank_stmt_line.action_checked() self.assertFalse(bank_stmt_line.is_reconciled) - self.assertFalse(bank_stmt_line.to_check) + self.assertTrue(bank_stmt_line.checked) # Testing widget @@ -821,7 +826,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): f.add_account_move_line_id = receivable1 self.assertFalse(f.add_account_move_line_id) self.assertTrue(f.can_reconcile) - f.manual_reference = "account.move.line;%s" % receivable1.id + f.manual_reference = f"account.move.line;{receivable1.id}" self.assertEqual(f.manual_amount, -100) f.manual_delete = True self.assertFalse(f.can_reconcile) @@ -897,7 +902,7 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): ) as f: self.assertFalse(f.can_reconcile) self.assertFalse(f.partner_id) - f.manual_reference = "account.move.line;%s" % liquidity_lines.id + f.manual_reference = f"account.move.line;{liquidity_lines.id}" f.manual_partner_id = inv1.partner_id f.save() self.assertEqual(f.partner_id, inv1.partner_id) @@ -1051,12 +1056,12 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): def test_partner_name_with_parent(self): parent_partner = self.env["res.partner"].create( { - "name": "test", + "name": "test_account_reconcile_oca", } ) child_partner = self.env["res.partner"].create( { - "name": "test", + "name": "test_account_reconcile_oca", "parent_id": parent_partner.id, "type": "delivery", } @@ -1072,7 +1077,6 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): "name": "test", } ) - self.invoice_matching_models.active = True self.invoice_matching_models.match_text_location_label = False bank_stmt_line = self.acc_bank_stmt_line_model.create( @@ -1083,10 +1087,9 @@ class TestReconciliationWidget(TestAccountReconciliationCommon): "amount": 100, "date": time.strftime("%Y-07-15"), "payment_ref": "test", - "partner_name": "test", + "partner_name": "test_account_reconcile_oca", } ) - bkstmt_data = bank_stmt_line.reconcile_data_info self.assertEqual(len(bkstmt_data["counterparts"]), 1) self.assertEqual( diff --git a/account_reconcile_oca/views/account_account.xml b/account_reconcile_oca/views/account_account.xml index 72bd824b..1d8a2b9f 100644 --- a/account_reconcile_oca/views/account_account.xml +++ b/account_reconcile_oca/views/account_account.xml @@ -4,11 +4,11 @@ - account.account.tree (in account_reconcile_oca) + account.account.list (in account_reconcile_oca) account.account - + - + - account.move.line.tree.reconcile + account.move.line.list.reconcile account.move.line 99 - - +