From 6195846934b8f1339c2e796fe8f389a75c4d1a3a Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 6 May 2013 12:07:19 +0200 Subject: [PATCH] [FIX] the semantics of match_type returned by _get_move_info is meant to be 'there are only matches of this type', but there were several cases where this didn't hold --- account_banking/banking_import_transaction.py | 68 +++++++------------ 1 file changed, 26 insertions(+), 42 deletions(-) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index 0215b7ad4..dd2146b26 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1016,50 +1016,34 @@ class banking_import_transaction(osv.osv): 'account_id': False, } move_lines = self.pool.get('account.move.line').browse(cr, uid, move_line_ids) - for move_line in move_lines: - if move_line.partner_id: - if retval['partner_id']: - if retval['partner_id'] != move_line.partner_id.id: - retval['partner_id'] = False - break - else: - retval['partner_id'] = move_line.partner_id.id - else: - if retval['partner_id']: - retval['partner_id'] = False - break - for move_line in move_lines: - if move_line.account_id: - if retval['account_id']: - if retval['account_id'] != move_line.account_id.id: - retval['account_id'] = False - break - else: - retval['account_id'] = move_line.account_id.id - else: - if retval['account_id']: - retval['account_id'] = False - break - for move_line in move_lines: - if move_line.invoice: - if retval['match_type']: - if retval['match_type'] != 'invoice': - retval['match_type'] = False - break - else: - retval['match_type'] = 'invoice' - retval['type'] = type_map[move_line.invoice.type] - else: - if retval['match_type']: - retval['match_type'] = False - break - if move_lines and not retval['match_type']: + + if not move_lines: + return retval + + if move_lines[0].partner_id and all( + [move_line.partner_id == move_lines[0].partner_id + for move_line in move_lines): + retval['partner_id'] = move_lines[0].partner_id.id + + if move_lines[0].account_id and all( + [move_line.account_id == move_lines[0].account_id + for move_line in move_lines]): + retval['account_id'] = move_lines[0].account_id.id + + if move_lines[0].invoice and all( + [move_line.invoice == move_lines[0].invoice + for move_line in move_lines]): + retval['match_type'] = 'invoice' + retval['type'] = type_map[move_lines[0].invoice.type] + retval['invoice_ids'] = list( + set([x.invoice.id for x in move_lines)) + + if not retval['match_type']: retval['match_type'] = 'move' - if move_lines and len(move_lines) == 1: + + if len(move_lines) == 1: retval['reference'] = move_lines[0].ref - if retval['match_type'] == 'invoice': - retval['invoice_ids'] = list(set( - [x.invoice.id for x in move_lines if x.invoice])) + return retval def match(self, cr, uid, ids, results=None, context=None):