From 0a7fd6a943b15347ae747faade517b250e50ac5d Mon Sep 17 00:00:00 2001 From: Arthur Maniet Date: Wed, 17 Sep 2014 13:49:39 +0200 Subject: [PATCH] [FIX] account: bank statement reconciliation: when fetching moves lines for reconciliation, if lines from the same partial reconciliation are filtered out, keep fetching to returne the correct number of lines --- addons/account/account_bank_statement.py | 31 ++++++++++++++++-------- addons/account/account_move_line.py | 4 --- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 5cd3b37c151..7ece0426244 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -602,22 +602,33 @@ class account_bank_statement_line(osv.osv): domain.insert(-1, '|', ) domain.append(('partner_id.name', 'ilike', str)) + # Get move lines ; in case of a partial reconciliation, only consider one line + filtered_lines = [] + reconcile_partial_ids = [] + shift = 0 + while True: + actual_offset = offset and offset+limit*shift or offset + actual_limit = limit and limit+limit*shift or limit + line_ids = mv_line_pool.search(cr, uid, domain, offset=actual_offset, limit=actual_limit, order="date_maturity asc, id asc", context=context) + lines = mv_line_pool.browse(cr, uid, line_ids, context=context) - # Get move lines - line_ids = mv_line_pool.search(cr, uid, domain, offset=offset, limit=limit, order="date_maturity asc, id asc", context=context) - lines = mv_line_pool.browse(cr, uid, line_ids, context=context) - - # Either return number of lines - if count: - nb_lines = 0 - reconcile_partial_ids = [] # for a partial reconciliation, take only one line + did_filter_out_lines = False for line in lines: if line.reconcile_partial_id and line.reconcile_partial_id.id in reconcile_partial_ids: + did_filter_out_lines = True continue - nb_lines += 1 + filtered_lines.append(line) if line.reconcile_partial_id: reconcile_partial_ids.append(line.reconcile_partial_id.id) - return nb_lines + + if not limit or not did_filter_out_lines or len(filtered_lines) >= limit: + break + shift += 1 + lines = limit and filtered_lines[:limit] or filtered_lines + + # Either return number of lines + if count: + return len(lines) # Or return list of dicts representing the formatted move lines else: diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 45b0304be89..2c29b0a5dd5 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -766,15 +766,11 @@ class account_move_line(osv.osv): currency_obj = self.pool.get('res.currency') company_currency = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id rml_parser = report_sxw.rml_parse(cr, uid, 'reconciliation_widget_aml', context=context) - reconcile_partial_ids = [] # for a partial reconciliation, take only one line ret = [] for line in lines: - if line.reconcile_partial_id and line.reconcile_partial_id.id in reconcile_partial_ids: - continue partial_reconciliation_siblings_ids = [] if line.reconcile_partial_id: - reconcile_partial_ids.append(line.reconcile_partial_id.id) partial_reconciliation_siblings_ids = self.search(cr, uid, [('reconcile_partial_id', '=', line.reconcile_partial_id.id)], context=context) partial_reconciliation_siblings_ids.remove(line.id)