From b25332284f0300236f4430bf33fd252935da9fe0 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (aka lmi)" Date: Mon, 7 Jul 2014 12:46:20 +0200 Subject: [PATCH 1/6] [IMP] Improve the matching on acc_number by removing the formatting characters when querying the res_partner_bank table --- .../__init__.py | 3 +- .../res_partner_bank.py | 49 +++++++++++++ .../statement.py | 4 +- .../tests/test_bankaccount_completion.py | 68 +++++++++++-------- 4 files changed, 94 insertions(+), 30 deletions(-) create mode 100644 account_statement_bankaccount_completion/res_partner_bank.py diff --git a/account_statement_bankaccount_completion/__init__.py b/account_statement_bankaccount_completion/__init__.py index 133223b9..cac9a795 100644 --- a/account_statement_bankaccount_completion/__init__.py +++ b/account_statement_bankaccount_completion/__init__.py @@ -18,4 +18,5 @@ # along with this program. If not, see . # # -import statement +from . import statement +from . import res_partner_bank diff --git a/account_statement_bankaccount_completion/res_partner_bank.py b/account_statement_bankaccount_completion/res_partner_bank.py new file mode 100644 index 00000000..4af45adb --- /dev/null +++ b/account_statement_bankaccount_completion/res_partner_bank.py @@ -0,0 +1,49 @@ +# +# Authors: Laurent Mignon +# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu) +# All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# +from openerp.osv.orm import Model +from openerp.addons.base_iban import base_iban + + +class res_partner_bank(Model): + _inherit = 'res.partner.bank' + + def search_by_acc_number(self, cr, uid, acc_number, context=None): + ''' + Try to find the Account Number using a 'like' operator to avoid problems with the input mask + used to store the value. + ''' + # first try with an exact match + ids = self.search(cr, + uid, + [('acc_number', '=', acc_number)], + context=context) + if ids: + return ids + + cr.execute(""" + SELECT + id + FROM + res_partner_bank + WHERE + regexp_replace(acc_number,'([^[:alnum:]])', '','g') ilike regexp_replace(%s,'([^[:alnum:]])', '','g') """, + (acc_number,)) + #apply security constraints by using the orm + return self.search(cr, uid, [('id', 'in', [r[0] for r in cr.fetchall()])]) diff --git a/account_statement_bankaccount_completion/statement.py b/account_statement_bankaccount_completion/statement.py index 48b81942..6f6cdb74 100644 --- a/account_statement_bankaccount_completion/statement.py +++ b/account_statement_bankaccount_completion/statement.py @@ -56,9 +56,9 @@ class AccountStatementCompletionRule(Model): st_obj = self.pool.get('account.bank.statement.line') res = {} res_bank_obj = self.pool.get('res.partner.bank') - ids = res_bank_obj.search(cr, + ids = res_bank_obj.search_by_acc_number(cr, uid, - [('acc_number', '=', partner_acc_number)], + partner_acc_number, context=context) if len(ids) > 1: raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more than ' diff --git a/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py b/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py index 5f1f9142..e9fb7331 100644 --- a/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py +++ b/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py @@ -22,29 +22,28 @@ from openerp.tests import common import time -ACC_NUMBER = "BE38733040385372" +ACC_NUMBER = " BE38 7330 4038 5372 " class bankaccount_completion(common.TransactionCase): - def prepare(self): + def setUp(self): + super(bankaccount_completion, self).setUp() self.company_a = self.browse_ref('base.main_company') self.profile_obj = self.registry("account.statement.profile") self.account_bank_statement_obj = self.registry("account.bank.statement") self.account_bank_statement_line_obj = self.registry("account.bank.statement.line") self.completion_rule_id = self.ref('account_statement_bankaccount_completion.bank_statement_completion_rule_10') - self.journal_id = self.registry("ir.model.data").get_object_reference(self.cr, self. uid, "account", "bank_journal")[1] + self.journal_id = self.ref("account.bank_journal") self.partner_id = self.ref('base.main_partner') + self.account_id = self.ref("account.a_recv") + # Create the profile - self.account_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "account", "a_recv")[1] - self.journal_id = self.registry("ir.model.data").get_object_reference(self.cr, self. uid, "account", "bank_journal")[1] self.profile_id = self.profile_obj.create(self.cr, self.uid, { "name": "TEST", "commission_account_id": self.account_id, "journal_id": self.journal_id, "rule_ids": [(6, 0, [self.completion_rule_id])]}) - # Create the completion rule - # Create a bank statement self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, { "balance_end_real": 0.0, @@ -55,18 +54,9 @@ class bankaccount_completion(common.TransactionCase): }) - # Create bank a statement line - self.statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { - 'amount': 1000.0, - 'name': 'EXT001', - 'ref': 'My ref', - 'statement_id': self.statement_id, - 'partner_acc_number': ACC_NUMBER - }) - # Add a bank account number to the partner - res_bank_obj = self.registry('res.partner.bank') - res_bank_obj.create(self.cr, self.uid, { + self.res_partner_bank_obj = self.registry('res.partner.bank') + self.res_partner_bank_id = self.res_partner_bank_obj.create(self.cr, self.uid, { "state": "bank", "company_id": self.company_a.id, "partner_id": self.partner_id, @@ -77,15 +67,39 @@ class bankaccount_completion(common.TransactionCase): def test_00(self): """Test complete partner_id from bank account number - Test the automatic completion of the partner_id based on the account number associated to the statement line """ - self.prepare() - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line_id) - # before import, the - self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion") - statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) - statement_obj.button_auto_completion() - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line_id) - self.assertEquals(self.partner_id, statement_line.partner_id['id'], "Missing expected partner id after completion") + for bank_acc_number in [ACC_NUMBER, ACC_NUMBER.replace(" ", ""), ACC_NUMBER.replace(" ", "-")]: + # check the completion for well formatted and not well formatted account number + self.res_partner_bank_obj.write(self.cr, self.uid, self.res_partner_bank_id, { + "acc_number": bank_acc_number, + }) + for acc_number in [ACC_NUMBER, ACC_NUMBER.replace(" ", ""), ACC_NUMBER.replace(" ", "-"), " BE38-7330 4038-5372 "]: + statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { + 'amount': 1000.0, + 'name': 'EXT001', + 'ref': 'My ref', + 'statement_id': self.statement_id, + 'partner_acc_number': acc_number + }) + statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) + self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion") + statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) + statement_obj.button_auto_completion() + statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) + self.assertEquals(self.partner_id, statement_line.partner_id['id'], "Missing expected partner id after completion") + + statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { + 'amount': 1000.0, + 'name': 'EXT001', + 'ref': 'My ref', + 'statement_id': self.statement_id, + 'partner_acc_number': 'BE38a7330.4038-5372.' + }) + statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) + self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion") + statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) + statement_obj.button_auto_completion() + statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) + self.assertFalse(statement_line.partner_id.id) From 55e53a6d5dd6b1a945711fefb2a1c34341884f05 Mon Sep 17 00:00:00 2001 From: Laurent Mignon Date: Fri, 1 Aug 2014 09:22:03 +0200 Subject: [PATCH 2/6] [PEP8] max-line-length=80 --- .../res_partner_bank.py | 23 ++-- .../statement.py | 40 ++++-- .../tests/test_bankaccount_completion.py | 125 +++++++++++------- .../tests/test_base_completion.py | 8 +- .../tests/test_regex_account_completion.py | 10 +- 5 files changed, 125 insertions(+), 81 deletions(-) diff --git a/account_statement_bankaccount_completion/res_partner_bank.py b/account_statement_bankaccount_completion/res_partner_bank.py index 4af45adb..ea826f96 100644 --- a/account_statement_bankaccount_completion/res_partner_bank.py +++ b/account_statement_bankaccount_completion/res_partner_bank.py @@ -18,7 +18,6 @@ # # from openerp.osv.orm import Model -from openerp.addons.base_iban import base_iban class res_partner_bank(Model): @@ -26,14 +25,14 @@ class res_partner_bank(Model): def search_by_acc_number(self, cr, uid, acc_number, context=None): ''' - Try to find the Account Number using a 'like' operator to avoid problems with the input mask - used to store the value. + Try to find the Account Number using a 'like' operator to avoid + problems with the input mask used to store the value. ''' # first try with an exact match ids = self.search(cr, - uid, - [('acc_number', '=', acc_number)], - context=context) + uid, + [('acc_number', '=', acc_number)], + context=context) if ids: return ids @@ -43,7 +42,11 @@ class res_partner_bank(Model): FROM res_partner_bank WHERE - regexp_replace(acc_number,'([^[:alnum:]])', '','g') ilike regexp_replace(%s,'([^[:alnum:]])', '','g') """, - (acc_number,)) - #apply security constraints by using the orm - return self.search(cr, uid, [('id', 'in', [r[0] for r in cr.fetchall()])]) + regexp_replace(acc_number,'([^[:alnum:]])', '','g') + ilike + regexp_replace(%s,'([^[:alnum:]])', '','g') + """, (acc_number,)) + # apply security constraints by using the orm + return self.search(cr, uid, + [('id', 'in', [r[0] for r in cr.fetchall()])], + context=context) diff --git a/account_statement_bankaccount_completion/statement.py b/account_statement_bankaccount_completion/statement.py index 6f6cdb74..07895a29 100644 --- a/account_statement_bankaccount_completion/statement.py +++ b/account_statement_bankaccount_completion/statement.py @@ -23,7 +23,8 @@ from openerp.tools.translate import _ from openerp.osv.orm import Model from openerp.osv import fields -from openerp.addons.account_statement_base_completion.statement import ErrorTooManyPartner +from openerp.addons.account_statement_base_completion.statement \ + import ErrorTooManyPartner class AccountStatementCompletionRule(Model): @@ -57,22 +58,34 @@ class AccountStatementCompletionRule(Model): res = {} res_bank_obj = self.pool.get('res.partner.bank') ids = res_bank_obj.search_by_acc_number(cr, - uid, - partner_acc_number, - context=context) + uid, + partner_acc_number, + context=context) if len(ids) > 1: - raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more than ' - 'one partner for account number "%s".') % (st_line['name'], st_line['ref'], partner_acc_number)) + raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched ' + 'by more than one partner for account ' + 'number "%s".') % + (st_line['name'], + st_line['ref'], + partner_acc_number)) if len(ids) == 1: - partner = res_bank_obj.browse(cr, uid, ids[0], context=context).partner_id + partner = res_bank_obj.browse(cr, + uid, + ids[0], + context=context).partner_id res['partner_id'] = partner.id + profile_id = st_line['profile_id'] + m_acc_id = st_line['master_account_id'] + partner_id = res.get('partner_id', False) + line_type = st_line['type'] + amout = st_line['amount'] if st_line['amount'] else 0.0 st_vals = st_obj.get_values_for_line(cr, uid, - profile_id=st_line['profile_id'], - master_account_id=st_line['master_account_id'], - partner_id=res.get('partner_id', False), - line_type=st_line['type'], - amount=st_line['amount'] if st_line['amount'] else 0.0, + profile_id=profile_id, + master_account_id=m_acc_id, + partner_id=partner_id, + line_type=line_type, + amount=amout, context=context) res.update(st_vals) return res @@ -82,7 +95,8 @@ class AccountStatementLine(Model): _inherit = "account.bank.statement.line" _columns = { - # 'additional_bank_fields' : fields.serialized('Additional infos from bank', help="Used by completion and import system."), + # 'additional_bank_fields' : fields.serialized('Additional infos from + # bank', help="Used by completion and import system."), 'partner_acc_number': fields.sparse( type='char', string='Account Number', diff --git a/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py b/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py index e9fb7331..9ed5c06b 100644 --- a/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py +++ b/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py @@ -31,9 +31,12 @@ class bankaccount_completion(common.TransactionCase): super(bankaccount_completion, self).setUp() self.company_a = self.browse_ref('base.main_company') self.profile_obj = self.registry("account.statement.profile") - self.account_bank_statement_obj = self.registry("account.bank.statement") - self.account_bank_statement_line_obj = self.registry("account.bank.statement.line") - self.completion_rule_id = self.ref('account_statement_bankaccount_completion.bank_statement_completion_rule_10') + self.acc_bk_stmt = self.registry("account.bank.statement") + self.acc_bk_stmt_line_obj = \ + self.registry("account.bank.statement.line") + self.completion_rule_id = \ + self.ref('account_statement_bankaccount_completion.' + 'bank_statement_completion_rule_10') self.journal_id = self.ref("account.bank_journal") self.partner_id = self.ref('base.main_partner') self.account_id = self.ref("account.a_recv") @@ -45,61 +48,85 @@ class bankaccount_completion(common.TransactionCase): "journal_id": self.journal_id, "rule_ids": [(6, 0, [self.completion_rule_id])]}) # Create a bank statement - self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, { - "balance_end_real": 0.0, - "balance_start": 0.0, - "date": time.strftime('%Y-%m-%d'), - "journal_id": self.journal_id, - "profile_id": self.profile_id - - }) + vals = {"balance_end_real": 0.0, + "balance_start": 0.0, + "date": time.strftime('%Y-%m-%d'), + "journal_id": self.journal_id, + "profile_id": self.profile_id, + } + self.statement_id = self.acc_bk_stmt.create(self.cr, + self.uid, + vals) # Add a bank account number to the partner self.res_partner_bank_obj = self.registry('res.partner.bank') - self.res_partner_bank_id = self.res_partner_bank_obj.create(self.cr, self.uid, { - "state": "bank", - "company_id": self.company_a.id, - "partner_id": self.partner_id, - "acc_number": ACC_NUMBER, - "footer": True, - "bank_name": "Reserve" - }) + vals = {"state": "bank", + "company_id": self.company_a.id, + "partner_id": self.partner_id, + "acc_number": ACC_NUMBER, + "footer": True, + "bank_name": "Reserve", + } + self.res_partner_bank_id = self.res_partner_bank_obj.create(self.cr, + self.uid, + vals) def test_00(self): """Test complete partner_id from bank account number - Test the automatic completion of the partner_id based on the account number associated to the - statement line + Test the automatic completion of the partner_id based on the accoun + t number associated to the statement line """ - for bank_acc_number in [ACC_NUMBER, ACC_NUMBER.replace(" ", ""), ACC_NUMBER.replace(" ", "-")]: - # check the completion for well formatted and not well formatted account number - self.res_partner_bank_obj.write(self.cr, self.uid, self.res_partner_bank_id, { - "acc_number": bank_acc_number, - }) - for acc_number in [ACC_NUMBER, ACC_NUMBER.replace(" ", ""), ACC_NUMBER.replace(" ", "-"), " BE38-7330 4038-5372 "]: - statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { - 'amount': 1000.0, - 'name': 'EXT001', - 'ref': 'My ref', - 'statement_id': self.statement_id, - 'partner_acc_number': acc_number - }) - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) - self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion") - statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) + for bank_acc_number in [ACC_NUMBER, ACC_NUMBER.replace(" ", ""), + ACC_NUMBER.replace(" ", "-")]: + # check the completion for well formatted and not well + # formatted account number + self.res_partner_bank_obj.write(self.cr, + self.uid, + self.res_partner_bank_id, + {"acc_number": bank_acc_number} + ) + for acc_number in [ACC_NUMBER, ACC_NUMBER.replace(" ", ""), + ACC_NUMBER.replace(" ", "-"), + " BE38-7330 4038-5372 "]: + vals = {'amount': 1000.0, + 'name': 'EXT001', + 'ref': 'My ref', + 'statement_id': self.statement_id, + 'partner_acc_number': acc_number + } + line_id = self.acc_bk_stmt_line_obj.create(self.cr, + self.uid, + vals) + line = self.acc_bk_stmt_line_obj.browse(self.cr, + self.uid, + line_id) + self.assertFalse(line.partner_id, + 'Partner_id must be blank before completion') + statement_obj = self.acc_bk_stmt.browse(self.cr, + self.uid, + self.statement_id) statement_obj.button_auto_completion() - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) - self.assertEquals(self.partner_id, statement_line.partner_id['id'], "Missing expected partner id after completion") - - statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { - 'amount': 1000.0, + line = self.acc_bk_stmt_line_obj.browse(self.cr, + self.uid, + line_id) + self.assertEquals(self.partner_id, line.partner_id['id'], + 'Missing expected partner id after ' + 'completion') + vals = {'amount': 1000.0, 'name': 'EXT001', 'ref': 'My ref', 'statement_id': self.statement_id, - 'partner_acc_number': 'BE38a7330.4038-5372.' - }) - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) - self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion") - statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) + 'partner_acc_number': 'BE38a7330.4038-5372.', + } + line_id = self.acc_bk_stmt_line_obj.create(self.cr, + self.uid, + vals) + line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, line_id) + self.assertFalse(line.partner_id, + 'Partner_id must be blank before completion') + statement_obj = self.acc_bk_stmt.browse(self.cr, + self.uid, + self.statement_id) statement_obj.button_auto_completion() - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) - self.assertFalse(statement_line.partner_id.id) + line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, line_id) + self.assertFalse(line.partner_id.id) diff --git a/account_statement_base_completion/tests/test_base_completion.py b/account_statement_base_completion/tests/test_base_completion.py index 6e2d8d3e..19319567 100644 --- a/account_statement_base_completion/tests/test_base_completion.py +++ b/account_statement_base_completion/tests/test_base_completion.py @@ -49,7 +49,7 @@ class base_completion(common.TransactionCase): self.profile_obj = self.registry("account.statement.profile") self.partner_obj = self.registry("res.partner") self.account_bank_statement_obj = self.registry("account.bank.statement") - self.account_bank_statement_line_obj = self.registry("account.bank.statement.line") + self.acc_bk_stmt_line_obj = self.registry("account.bank.statement.line") self.journal_id = self.ref("account.bank_journal") self.partner_id = self.ref('base.main_partner') self.account_id = self.ref("account.a_recv") @@ -78,17 +78,17 @@ class base_completion(common.TransactionCase): for case in NAMES_COMPLETION_CASES: self.partner_obj.write(self.cr, self.uid, self.partner_id, {'name': case.partner_name}) - statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { + statement_line_id = self.acc_bk_stmt_line_obj.create(self.cr, self.uid, { 'amount': 1000.0, 'name': case.line_label, 'ref': 'My ref', 'statement_id': self.statement_id, }) - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) + statement_line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, statement_line_id) self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion") statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) statement_obj.button_auto_completion() - statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id) + statement_line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, statement_line_id) if case.should_match: self.assertEquals(self.partner_id, statement_line.partner_id['id'], "Missing expected partner id after completion (partner_name: %s, line_name: %s)" % (case.partner_name, case.line_label)) diff --git a/account_statement_regex_account_completion/tests/test_regex_account_completion.py b/account_statement_regex_account_completion/tests/test_regex_account_completion.py index 64958844..cfe66848 100644 --- a/account_statement_regex_account_completion/tests/test_regex_account_completion.py +++ b/account_statement_regex_account_completion/tests/test_regex_account_completion.py @@ -37,7 +37,7 @@ class test_regex_account_completion(common.TransactionCase): def prepare(self): self.account_bank_statement_obj = self.registry("account.bank.statement") - self.account_bank_statement_line_obj = self.registry("account.bank.statement.line") + self.acc_bk_stmt_line_obj = self.registry("account.bank.statement.line") self.account_id = self.ref('account.a_expense') # create the completion rule rule_vals = {'function_to_call': 'set_account', @@ -63,7 +63,7 @@ class test_regex_account_completion(common.TransactionCase): }) # Create two bank statement lines - self.statement_line1_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { + self.statement_line1_id = self.acc_bk_stmt_line_obj.create(self.cr, self.uid, { 'amount': 1000.0, 'name': 'My statement', 'ref': 'My ref', @@ -71,7 +71,7 @@ class test_regex_account_completion(common.TransactionCase): 'partner_acc_number': ACC_NUMBER }) - self.statement_line2_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, { + self.statement_line2_id = self.acc_bk_stmt_line_obj.create(self.cr, self.uid, { 'amount': 2000.0, 'name': 'My second statement', 'ref': 'My second ref', @@ -85,7 +85,7 @@ class test_regex_account_completion(common.TransactionCase): self.prepare() statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) statement_obj.button_auto_completion() - statement_line1 = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line1_id) + statement_line1 = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, self.statement_line1_id) self.assertEquals(self.account_id, statement_line1.account_id.id, "The account should be the account of the completion") - statement_line2 = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line2_id) + statement_line2 = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, self.statement_line2_id) self.assertNotEqual(self.account_id, statement_line2.account_id.id, "The account should be not the account of the completion") From 7cafa70ab6b78ce9741124ee7c3453fa044c446d Mon Sep 17 00:00:00 2001 From: Laurent Mignon Date: Fri, 1 Aug 2014 10:04:23 +0200 Subject: [PATCH 3/6] [FIX] rename 'acc_bk_stmt_line_obj' to 'st_line_obj' --- .../tests/test_bankaccount_completion.py | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py b/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py index 9ed5c06b..bef61969 100644 --- a/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py +++ b/account_statement_bankaccount_completion/tests/test_bankaccount_completion.py @@ -32,8 +32,7 @@ class bankaccount_completion(common.TransactionCase): self.company_a = self.browse_ref('base.main_company') self.profile_obj = self.registry("account.statement.profile") self.acc_bk_stmt = self.registry("account.bank.statement") - self.acc_bk_stmt_line_obj = \ - self.registry("account.bank.statement.line") + self.st_line_obj = self.registry("account.bank.statement.line") self.completion_rule_id = \ self.ref('account_statement_bankaccount_completion.' 'bank_statement_completion_rule_10') @@ -73,8 +72,8 @@ class bankaccount_completion(common.TransactionCase): def test_00(self): """Test complete partner_id from bank account number - Test the automatic completion of the partner_id based on the accoun - t number associated to the statement line + Test the automatic completion of the partner_id based on the account + number associated to the statement line """ for bank_acc_number in [ACC_NUMBER, ACC_NUMBER.replace(" ", ""), ACC_NUMBER.replace(" ", "-")]: @@ -94,21 +93,15 @@ class bankaccount_completion(common.TransactionCase): 'statement_id': self.statement_id, 'partner_acc_number': acc_number } - line_id = self.acc_bk_stmt_line_obj.create(self.cr, - self.uid, - vals) - line = self.acc_bk_stmt_line_obj.browse(self.cr, - self.uid, - line_id) + line_id = self.st_line_obj.create(self.cr, self.uid, vals) + line = self.st_line_obj.browse(self.cr, self.uid, line_id) self.assertFalse(line.partner_id, 'Partner_id must be blank before completion') statement_obj = self.acc_bk_stmt.browse(self.cr, self.uid, self.statement_id) statement_obj.button_auto_completion() - line = self.acc_bk_stmt_line_obj.browse(self.cr, - self.uid, - line_id) + line = self.st_line_obj.browse(self.cr, self.uid, line_id) self.assertEquals(self.partner_id, line.partner_id['id'], 'Missing expected partner id after ' 'completion') @@ -118,15 +111,13 @@ class bankaccount_completion(common.TransactionCase): 'statement_id': self.statement_id, 'partner_acc_number': 'BE38a7330.4038-5372.', } - line_id = self.acc_bk_stmt_line_obj.create(self.cr, - self.uid, - vals) - line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, line_id) + line_id = self.st_line_obj.create(self.cr, self.uid, vals) + line = self.st_line_obj.browse(self.cr, self.uid, line_id) self.assertFalse(line.partner_id, 'Partner_id must be blank before completion') statement_obj = self.acc_bk_stmt.browse(self.cr, self.uid, self.statement_id) statement_obj.button_auto_completion() - line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, line_id) + line = self.st_line_obj.browse(self.cr, self.uid, line_id) self.assertFalse(line.partner_id.id) From f34f3fbbd64132bae8e7a0690fcb0c2ffc677c2e Mon Sep 17 00:00:00 2001 From: Laurent Mignon Date: Mon, 4 Aug 2014 15:32:34 +0200 Subject: [PATCH 4/6] [FIX] improve code quality --- .../statement.py | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/account_statement_bankaccount_completion/statement.py b/account_statement_bankaccount_completion/statement.py index 07895a29..3c40204f 100644 --- a/account_statement_bankaccount_completion/statement.py +++ b/account_statement_bankaccount_completion/statement.py @@ -54,9 +54,9 @@ class AccountStatementCompletionRule(Model): partner_acc_number = st_line['partner_acc_number'] if not partner_acc_number: return {} - st_obj = self.pool.get('account.bank.statement.line') + st_obj = self.pool['account.bank.statement.line'] res = {} - res_bank_obj = self.pool.get('res.partner.bank') + res_bank_obj = self.pool['res.partner.bank'] ids = res_bank_obj.search_by_acc_number(cr, uid, partner_acc_number, @@ -74,19 +74,13 @@ class AccountStatementCompletionRule(Model): ids[0], context=context).partner_id res['partner_id'] = partner.id - profile_id = st_line['profile_id'] - m_acc_id = st_line['master_account_id'] - partner_id = res.get('partner_id', False) - line_type = st_line['type'] - amout = st_line['amount'] if st_line['amount'] else 0.0 - st_vals = st_obj.get_values_for_line(cr, - uid, - profile_id=profile_id, - master_account_id=m_acc_id, - partner_id=partner_id, - line_type=line_type, - amount=amout, - context=context) + st_vals = st_obj.get_values_for_line( + cr, uid, profile_id=st_line['profile_id'], + master_account_id=st_line['master_account_id'], + partner_id=res.get('partner_id', False), + line_type=st_line['type'], + amount=st_line['amount'] if st_line['amount'] else 0.0, + context=context) res.update(st_vals) return res @@ -95,8 +89,6 @@ class AccountStatementLine(Model): _inherit = "account.bank.statement.line" _columns = { - # 'additional_bank_fields' : fields.serialized('Additional infos from - # bank', help="Used by completion and import system."), 'partner_acc_number': fields.sparse( type='char', string='Account Number', From 410c8c47b32def08ce420587d0b801a433c9caec Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (aka lmi)" Date: Wed, 6 Aug 2014 16:17:36 +0200 Subject: [PATCH 5/6] [FIX] conflicts incorrectly resolved when merging upstream/7.0 --- .../tests/test_base_completion.py | 98 ++++++++++++------- .../tests/test_regex_account_completion.py | 59 ++++++----- 2 files changed, 95 insertions(+), 62 deletions(-) diff --git a/account_statement_base_completion/tests/test_base_completion.py b/account_statement_base_completion/tests/test_base_completion.py index 19319567..40dbf6ef 100644 --- a/account_statement_base_completion/tests/test_base_completion.py +++ b/account_statement_base_completion/tests/test_base_completion.py @@ -23,22 +23,28 @@ from openerp.tests import common import time from collections import namedtuple -name_completion_case = namedtuple("name_completion_case", ["partner_name", "line_label", "should_match"]) +name_completion_case = namedtuple( + "name_completion_case", ["partner_name", "line_label", "should_match"]) NAMES_COMPLETION_CASES = [ - name_completion_case("Acsone", "Line for Acsone SA", True), - name_completion_case("Acsone", "Line for Acsone", True), - name_completion_case("Acsone", "Acsone for line", True), - name_completion_case("acsone", "Acsone for line", True), - name_completion_case("Acsone SA", "Line for Acsone SA test", True), - name_completion_case("Ac..ne", "Acsone for line", False), - name_completion_case("é@|r{}", "Acsone é@|r{} for line", True), - name_completion_case("Acsone", "A..one for line", False), - name_completion_case("A.one SA", "A.one SA for line", True), - name_completion_case("Acsone SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA test", False), - name_completion_case("Acsone ([^a-zA-Z0-9 -]) SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA test", True), - name_completion_case(r"Acsone (.^$*+?()[{\| -]\) SA", r"Line for Acsone (.^$*+?()[{\| -]\) SA test", True), - name_completion_case("Acšone SA", "Line for Acšone SA test", True), - ] + name_completion_case("Acsone", "Line for Acsone SA", True), + name_completion_case("Acsone", "Line for Acsone", True), + name_completion_case("Acsone", "Acsone for line", True), + name_completion_case("acsone", "Acsone for line", True), + name_completion_case("Acsone SA", "Line for Acsone SA test", True), + name_completion_case("Ac..ne", "Acsone for line", False), + name_completion_case("é@|r{}", "Acsone é@|r{} for line", True), + name_completion_case("Acsone", "A..one for line", False), + name_completion_case("A.one SA", "A.one SA for line", True), + name_completion_case( + "Acsone SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA test", False), + name_completion_case( + "Acsone ([^a-zA-Z0-9 -]) SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA " + "test", True), + name_completion_case( + r"Acsone (.^$*+?()[{\| -]\) SA", r"Line for Acsone (.^$*+?()[{\| -]\) " + r"SA test", True), + name_completion_case("Acšone SA", "Line for Acšone SA test", True), +] class base_completion(common.TransactionCase): @@ -48,8 +54,10 @@ class base_completion(common.TransactionCase): self.company_a = self.browse_ref('base.main_company') self.profile_obj = self.registry("account.statement.profile") self.partner_obj = self.registry("res.partner") - self.account_bank_statement_obj = self.registry("account.bank.statement") - self.acc_bk_stmt_line_obj = self.registry("account.bank.statement.line") + self.account_bank_statement_obj = self.registry( + "account.bank.statement") + self.account_bank_statement_line_obj = self.registry( + "account.bank.statement.line") self.journal_id = self.ref("account.bank_journal") self.partner_id = self.ref('base.main_partner') self.account_id = self.ref("account.a_recv") @@ -57,10 +65,12 @@ class base_completion(common.TransactionCase): def test_name_completion(self): """Test complete partner_id from statement line label - Test the automatic completion of the partner_id based if the name of the partner appears in - the statement line label + Test the automatic completion of the partner_id based if the name of the + partner appears in the statement line label """ - self.completion_rule_id = self.ref('account_statement_base_completion.bank_statement_completion_rule_3') + self.completion_rule_id = self.ref( + 'account_statement_base_completion.' + 'bank_statement_completion_rule_3') # Create the profile self.profile_id = self.profile_obj.create(self.cr, self.uid, { "name": "TEST", @@ -68,30 +78,44 @@ class base_completion(common.TransactionCase): "journal_id": self.journal_id, "rule_ids": [(6, 0, [self.completion_rule_id])]}) # Create a bank statement - self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, { - "balance_end_real": 0.0, - "balance_start": 0.0, - "date": time.strftime('%Y-%m-%d'), - "journal_id": self.journal_id, - "profile_id": self.profile_id - }) + self.statement_id = self.account_bank_statement_obj.create( + self.cr, self.uid, { + "balance_end_real": 0.0, + "balance_start": 0.0, + "date": time.strftime('%Y-%m-%d'), + "journal_id": self.journal_id, + "profile_id": self.profile_id + }) for case in NAMES_COMPLETION_CASES: - self.partner_obj.write(self.cr, self.uid, self.partner_id, {'name': case.partner_name}) - statement_line_id = self.acc_bk_stmt_line_obj.create(self.cr, self.uid, { + self.partner_obj.write( + self.cr, self.uid, self.partner_id, {'name': case.partner_name}) + statement_line_id = self.account_bank_statement_line_obj.create( + self.cr, self.uid, { 'amount': 1000.0, 'name': case.line_label, 'ref': 'My ref', 'statement_id': self.statement_id, }) - statement_line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, statement_line_id) - self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion") - statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) + statement_line = self.account_bank_statement_line_obj.browse( + self.cr, self.uid, statement_line_id) + self.assertFalse( + statement_line.partner_id, + "Partner_id must be blank before completion") + statement_obj = self.account_bank_statement_obj.browse( + self.cr, self.uid, self.statement_id) statement_obj.button_auto_completion() - statement_line = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, statement_line_id) + statement_line = self.account_bank_statement_line_obj.browse( + self.cr, self.uid, statement_line_id) if case.should_match: - self.assertEquals(self.partner_id, statement_line.partner_id['id'], - "Missing expected partner id after completion (partner_name: %s, line_name: %s)" % (case.partner_name, case.line_label)) + self.assertEquals( + self.partner_id, statement_line.partner_id['id'], + "Missing expected partner id after completion " + "(partner_name: %s, line_name: %s)" % + (case.partner_name, case.line_label)) else: - self.assertNotEquals(self.partner_id, statement_line.partner_id['id'], - "Partner id should be empty after completion(partner_name: %s, line_name: %s)" % (case.partner_name, case.line_label)) + self.assertNotEquals( + self.partner_id, statement_line.partner_id['id'], + "Partner id should be empty after completion(partner_name: " + "%s, line_name: %s)" % (case.partner_name, case.line_label)) + diff --git a/account_statement_regex_account_completion/tests/test_regex_account_completion.py b/account_statement_regex_account_completion/tests/test_regex_account_completion.py index cfe66848..ea3af52c 100644 --- a/account_statement_regex_account_completion/tests/test_regex_account_completion.py +++ b/account_statement_regex_account_completion/tests/test_regex_account_completion.py @@ -36,34 +36,38 @@ ACC_NUMBER = "BE38733040385372" class test_regex_account_completion(common.TransactionCase): def prepare(self): - self.account_bank_statement_obj = self.registry("account.bank.statement") - self.acc_bk_stmt_line_obj = self.registry("account.bank.statement.line") + self.st_obj = self.registry( + "account.bank.statement") + self.st_line_obj = self.registry( + "account.bank.statement.line") self.account_id = self.ref('account.a_expense') # create the completion rule rule_vals = {'function_to_call': 'set_account', 'regex': '^My statement', 'account_id': self.account_id} - completion_rule_id = self.registry("account.statement.completion.rule").create(self.cr, self.uid, rule_vals) - + completion_rule_id = self.registry( + "account.statement.completion.rule").create( + self.cr, self.uid, rule_vals) # Create the profile journal_id = self.ref("account.bank_journal") - profile_id = self.registry("account.statement.profile").create(self.cr, self.uid, { - "name": "TEST", - "commission_account_id": self.ref("account.a_recv"), - "journal_id": journal_id, - "rule_ids": [(6, 0, [completion_rule_id])]}) - + profile_id = self.registry("account.statement.profile").create( + self.cr, self.uid, { + "name": "TEST", + "commission_account_id": self.ref("account.a_recv"), + "journal_id": journal_id, + "rule_ids": [(6, 0, [completion_rule_id])] + }) # Create a bank statement - self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, { - "balance_end_real": 0.0, - "balance_start": 0.0, - "date": time.strftime('%Y-%m-%d'), - "journal_id": journal_id, - "profile_id": profile_id - }) - + self.statement_id = self.st_obj.create( + self.cr, self.uid, { + "balance_end_real": 0.0, + "balance_start": 0.0, + "date": time.strftime('%Y-%m-%d'), + "journal_id": journal_id, + "profile_id": profile_id + }) # Create two bank statement lines - self.statement_line1_id = self.acc_bk_stmt_line_obj.create(self.cr, self.uid, { + self.statement_line1_id = self.st_line_obj.create(self.cr, self.uid, { 'amount': 1000.0, 'name': 'My statement', 'ref': 'My ref', @@ -71,7 +75,7 @@ class test_regex_account_completion(common.TransactionCase): 'partner_acc_number': ACC_NUMBER }) - self.statement_line2_id = self.acc_bk_stmt_line_obj.create(self.cr, self.uid, { + self.statement_line2_id = self.st_line_obj.create(self.cr, self.uid, { 'amount': 2000.0, 'name': 'My second statement', 'ref': 'My second ref', @@ -83,9 +87,14 @@ class test_regex_account_completion(common.TransactionCase): """Test the automatic completion on account """ self.prepare() - statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id) + statement_obj = self.st_obj.browse(self.cr, self.uid, self.statement_id) statement_obj.button_auto_completion() - statement_line1 = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, self.statement_line1_id) - self.assertEquals(self.account_id, statement_line1.account_id.id, "The account should be the account of the completion") - statement_line2 = self.acc_bk_stmt_line_obj.browse(self.cr, self.uid, self.statement_line2_id) - self.assertNotEqual(self.account_id, statement_line2.account_id.id, "The account should be not the account of the completion") + statement_line1 = self.st_line_obj.browse( + self.cr, self.uid, self.statement_line1_id) + self.assertEquals(self.account_id, statement_line1.account_id.id, + "The account should be the account of the completion") + statement_line2 = self.st_line_obj.browse( + self.cr, self.uid, self.statement_line2_id) + self.assertNotEqual(self.account_id, statement_line2.account_id.id, + "The account should be not the account of the " + "completion") From aed71450efb48f9e3eb503011db1ed8892bff555 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (aka lmi)" Date: Wed, 6 Aug 2014 16:20:11 +0200 Subject: [PATCH 6/6] [FIX] conflicts incorrectly resolved when merging upstream/7.0 --- account_statement_base_completion/tests/test_base_completion.py | 1 - 1 file changed, 1 deletion(-) diff --git a/account_statement_base_completion/tests/test_base_completion.py b/account_statement_base_completion/tests/test_base_completion.py index 40dbf6ef..acbabbb0 100644 --- a/account_statement_base_completion/tests/test_base_completion.py +++ b/account_statement_base_completion/tests/test_base_completion.py @@ -118,4 +118,3 @@ class base_completion(common.TransactionCase): self.partner_id, statement_line.partner_id['id'], "Partner id should be empty after completion(partner_name: " "%s, line_name: %s)" % (case.partner_name, case.line_label)) -