diff --git a/account_reconcile_model_oca/models/account_reconcile_model.py b/account_reconcile_model_oca/models/account_reconcile_model.py index c691391a..9558b16b 100644 --- a/account_reconcile_model_oca/models/account_reconcile_model.py +++ b/account_reconcile_model_oca/models/account_reconcile_model.py @@ -399,11 +399,29 @@ class AccountReconcileModel(models.Model): sub_queries = [] all_params = [] + aml_cte = "" ( numerical_tokens, exact_tokens, _text_tokens, ) = self._get_invoice_matching_st_line_tokens(st_line) + if numerical_tokens or exact_tokens: + aml_cte = rf""" + WITH aml_cte AS ( + SELECT + account_move_line.id as account_move_line_id, + account_move_line.date as account_move_line_date, + account_move_line.date_maturity as account_move_line_date_maturity, + account_move_line.name as account_move_line_name, + account_move_line__move_id.name as account_move_line__move_id_name, + account_move_line__move_id.ref as account_move_line__move_id_ref + FROM {from_clause} + JOIN account_move account_move_line__move_id + ON account_move_line__move_id.id = account_move_line.move_id + WHERE {where_clause} + ) + """ # noqa: E501 + all_params += where_params if numerical_tokens: for table_alias, field in ( ("account_move_line", "name"), @@ -413,27 +431,24 @@ class AccountReconcileModel(models.Model): sub_queries.append( rf""" SELECT - account_move_line.id, - account_move_line.date, - account_move_line.date_maturity, + account_move_line_id as id, + account_move_line_date as date, + account_move_line_date_maturity as date_maturity, UNNEST( REGEXP_SPLIT_TO_ARRAY( SUBSTRING( REGEXP_REPLACE( - {table_alias}.{field}, '[^0-9\s]', '', 'g' + {table_alias}_{field}, '[^0-9\s]', '', 'g' ), '\S(?:.*\S)*' ), '\s+' ) ) AS token - FROM {from_clause} - JOIN account_move account_move_line__move_id - ON account_move_line__move_id.id = account_move_line.move_id - WHERE {where_clause} AND {table_alias}.{field} IS NOT NULL + FROM aml_cte + WHERE {table_alias}_{field} IS NOT NULL """ ) - all_params += where_params if exact_tokens: for table_alias, field in ( @@ -444,22 +459,20 @@ class AccountReconcileModel(models.Model): sub_queries.append( rf""" SELECT - account_move_line.id, - account_move_line.date, - account_move_line.date_maturity, - {table_alias}.{field} AS token - FROM {from_clause} - JOIN account_move account_move_line__move_id - ON account_move_line__move_id.id = account_move_line.move_id - WHERE {where_clause} AND COALESCE({table_alias}.{field}, '') != '' + account_move_line_id as id, + account_move_line_date as date, + account_move_line_date_maturity as date_maturity, + {table_alias}_{field} AS token + FROM aml_cte + WHERE COALESCE({table_alias}_{field}, '') != '' """ ) - all_params += where_params if sub_queries: order_by = get_order_by_clause(alias="sub") self._cr.execute( - """ + aml_cte + + """ SELECT sub.id, COUNT(*) AS nb_match