From 430f51fbd272996c92251184b2dbc74afa2c540f Mon Sep 17 00:00:00 2001 From: william-andre Date: Mon, 13 Nov 2023 17:42:43 +0100 Subject: [PATCH] [IMP] account: unify reconciliation of import Purpose ------- Allow to reconcile entries during import easily. * Have one uniform way of doing it - fix bugs only once - reduce number of fields - make it generic and not only for some imports * avoid the need to post during imports - faster to import, can import bigger batches, because we do neither post or reconcile, both are among the most time consuming steps. - still allows to check the data before posting if needed * make splitting import into smaller batches easier because the reconciliation is not cut/dependent on the batches anymore * allow to reconcile entries in the future by using the same mechanism (i.e. cut-off) Implementation -------------- Allow setting the matching number to `I*` manually, where `*` can be anything. When posting the last item with the same manually set number, we will reconcile all the lines with the same number. task-3593885 closes odoo/odoo#142017 Related: odoo/enterprise#50627 Signed-off-by: Quentin De Paoli --- addons/account/i18n/account.pot | 7 +++ addons/account/models/account_account.py | 1 + addons/account/models/account_move.py | 1 + addons/account/models/account_move_line.py | 50 ++++++++++++++++-- .../static/xls/aml_import_template.xlsx | Bin 86878 -> 86991 bytes .../tests/test_account_move_reconcile.py | 21 ++++++++ 6 files changed, 77 insertions(+), 3 deletions(-) diff --git a/addons/account/i18n/account.pot b/addons/account/i18n/account.pot index bd46e113f41..f5aea3f85f1 100644 --- a/addons/account/i18n/account.pot +++ b/addons/account/i18n/account.pot @@ -1339,6 +1339,13 @@ msgstr "" msgid "A tax fiscal position could be defined only one time on same taxes." msgstr "" +#. module: account +#. odoo-python +#: code:addons/account/models/account_move_line.py:0 +#, python-format +msgid "A temporary number can not be used in a real matching" +msgstr "" + #. module: account #: model:res.groups,name:account.group_warning_account msgid "A warning can be set on a partner (Account)" diff --git a/addons/account/models/account_account.py b/addons/account/models/account_account.py index 46f93b09a69..56d9ef87ae4 100644 --- a/addons/account/models/account_account.py +++ b/addons/account/models/account_account.py @@ -688,6 +688,7 @@ class AccountAccount(models.Model): WHERE full_reconcile_id IS NULL and account_id IN %s """ self.env.cr.execute(query, [tuple(self.ids)]) + self.env['account.move.line'].invalidate_model(['amount_residual', 'amount_residual_currency', 'reconciled']) def _toggle_reconcile_to_false(self): '''Toggle the `reconcile´ boolean from True -> False diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index 4f57d6c1d1e..3a0d5ecc001 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -3758,6 +3758,7 @@ class AccountMove(models.Model): }) draft_reverse_moves.reversed_entry_id._reconcile_reversed_moves(draft_reverse_moves, self._context.get('move_reverse_cancel', False)) + to_post.line_ids._reconcile_marked() for invoice in to_post: invoice.message_subscribe([ diff --git a/addons/account/models/account_move_line.py b/addons/account/models/account_move_line.py index eab6de2610e..e623a117525 100644 --- a/addons/account/models/account_move_line.py +++ b/addons/account/models/account_move_line.py @@ -1,7 +1,8 @@ -import ast from collections import defaultdict from contextlib import contextmanager from datetime import date +import logging +import re from odoo import api, fields, models, Command, _ from odoo.exceptions import ValidationError, UserError @@ -13,6 +14,9 @@ from odoo.addons.web.controllers.utils import clean_action from odoo.addons.account.models.account_move import MAX_HASH_VERSION +_logger = logging.getLogger(__name__) + + class AccountMoveLine(models.Model): _name = "account.move.line" _inherit = "analytic.mixin" @@ -256,10 +260,10 @@ class AccountMoveLine(models.Model): ) matching_number = fields.Char( string="Matching #", - readonly=True, + copy=False, help="Matching number for this line, 'P' if it is only partially reconcile, or the name of " "the full reconcile if it exists.", - ) + ) # can also start with `I` for imports: see `_reconcile_marked` is_account_reconcile = fields.Boolean( string='Account Reconcile', related='account_id.reconcile', @@ -1340,6 +1344,23 @@ class AccountMoveLine(models.Model): if common_tags: raise ValidationError(_("Taxes exigible on payment and on invoice cannot be mixed on the same journal item if they share some tag.")) + @api.constrains('matching_number', 'matched_debit_ids', 'matched_credit_ids') + def _constrains_matching_number(self): + for line in self: + if line.matching_number: + if not re.match(r'^((P?\d+)|(I.+))$', line.matching_number): + raise Exception("Invalid matching number format") + elif line.matching_number.startswith('I') and (line.matched_debit_ids or line.matched_credit_ids): + raise ValidationError(_("A temporary number can not be used in a real matching")) + elif line.matching_number.startswith('P') and not (line.matched_debit_ids or line.matched_credit_ids): + raise Exception("Should have partials") + elif line.matching_number.startswith('P') and line.full_reconcile_id: + raise Exception("Should not be partial number") + elif line.full_reconcile_id and line.matching_number != str(line.full_reconcile_id.id): + raise Exception("Matching number should be the full reconcile") + elif line.matched_debit_ids or line.matched_credit_ids: + raise Exception("Should have number") + # ------------------------------------------------------------------------- # CRUD/ORM # ------------------------------------------------------------------------- @@ -2903,6 +2924,29 @@ class AccountMoveLine(models.Model): """ Undo a reconciliation """ (self.matched_debit_ids + self.matched_credit_ids).unlink() + def _reconcile_marked(self): + """Process the pending reconciliation of entries marked (i.e. uring imports). + + The entries can be marked using the string `I*` as matching number where `*` can be anything. + Once all the entries using identical numbers are posted, this function proceeds to do the real matching. + """ + temp_numbers = list({ + line.matching_number + for line in self + if line.matching_number and line.matching_number.startswith('I') + }) + if temp_numbers: + for _matching_number, account, lines in self._read_group( + domain=[('matching_number', 'in', temp_numbers)], + groupby=['matching_number', 'account_id'], + aggregates=['id:recordset'], + ): + if all(move.state == 'posted' for move in lines.move_id): + if not account.reconcile: + _logger.info("%s has reconciled lines, changing the config", account.display_name) + account.reconcile = True + lines.with_context(no_exchange_difference=True, no_cash_basis=True).reconcile() + # ------------------------------------------------------------------------- # ANALYTIC # ------------------------------------------------------------------------- diff --git a/addons/account/static/xls/aml_import_template.xlsx b/addons/account/static/xls/aml_import_template.xlsx index ddad540682e49d6184721792c55496940eb439f6..be1f39af16e6ea3e4132e39e3aa3d128de8d08c1 100644 GIT binary patch literal 86991 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 b%H*?HO@YP*D;vm40U$I2CZu+MpidY8vAw|Q literal 86878 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 v7~miS_CF{wK@&Y9xub^xayfu%O4V7cra