From 7f7eb28226e7ab027b7e5e615bcc89109fad1da8 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Fri, 23 Aug 2013 13:55:17 +0200 Subject: [PATCH 1/4] [FIX] Select account receivable/payable based on partner settings if any --- account_banking/banking_import_transaction.py | 32 ++++++++------- .../wizard/banking_transaction_wizard.py | 41 +++++++++++++++---- 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index aeaaeef82..87832412e 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1112,21 +1112,23 @@ class banking_import_transaction(orm.Model): # the internal type of these accounts to either 'payable' # or 'receivable' to enable usage like this. if transaction.statement_line_id.amount < 0: - if len(partner_banks) == 1: - account_id = ( - partner_banks[0].partner_id.property_account_payable and - partner_banks[0].partner_id.property_account_payable.id) - if len(partner_banks) != 1 or not account_id or account_id == def_pay_account_id: - account_id = (account_info.default_credit_account_id and - account_info.default_credit_account_id.id) + account_type = 'payable' else: - if len(partner_banks) == 1: - account_id = ( - partner_banks[0].partner_id.property_account_receivable and - partner_banks[0].partner_id.property_account_receivable.id) - if len(partner_banks) != 1 or not account_id or account_id == def_rec_account_id: - account_id = (account_info.default_debit_account_id and - account_info.default_debit_account_id.id) + account_type = 'receivable' + if len(partner_banks) == 1: + partner = partner_banks[0].partner_id + if partner.supplier and not partner.customer: + account_type = 'payable' + elif partner.customer and not partner.supplier: + account_type = 'payable' + if partner['property_acccount_' + account_type]: + account_id = partner['property_acccount_' + account_type].id + if not account_id or account_id in (def_pay_account_id, def_rec_account_id): + if account_type == 'payable': + account_id = account_info.default_credit_account_id + else: + account_id = account_info.default_debit_account_id + values = {'account_id': account_id} self_values = {} if move_info: @@ -1495,7 +1497,7 @@ class account_bank_statement_line(orm.Model): if (not statement_line.import_transaction_id or not statement_line.import_transaction_id.remote_account): - raise osv.except_osv( + raise orm.except_orm( _("Error"), _("No bank account available to link partner to")) diff --git a/account_banking/wizard/banking_transaction_wizard.py b/account_banking/wizard/banking_transaction_wizard.py index 255d7979c..fbe63c994 100644 --- a/account_banking/wizard/banking_transaction_wizard.py +++ b/account_banking/wizard/banking_transaction_wizard.py @@ -256,14 +256,7 @@ class banking_transaction_wizard(orm.TransientModel): account_id = False journal_id = wiz.statement_line_id.statement_id.journal_id.id setting_ids = settings_pool.find(cr, uid, journal_id, context=context) - if len(setting_ids)>0: - setting = settings_pool.browse(cr, uid, setting_ids[0], context=context) - if wiz.amount < 0: - account_id = setting.default_credit_account_id and setting.default_credit_account_id.id - else: - account_id = setting.default_debit_account_id and setting.default_debit_account_id.id - statement_pool.write(cr, uid, wiz.statement_line_id.id, {'account_id':account_id}) - + # Restore partner id from the bank account or else reset partner_id = False if (wiz.statement_line_id.partner_bank_id and @@ -271,6 +264,38 @@ class banking_transaction_wizard(orm.TransientModel): partner_id = wiz.statement_line_id.partner_bank_id.partner_id.id wiz.write({'partner_id': partner_id}) + # Select account type by parter customer or supplier, + # or default based on amount sign + if wiz.amount < 0: + account_type = 'payable' + else: + account_type = 'receivable' + + if partner_id: + partner = wiz.statement_line_id.partner_bank_id.partner_id + if partner.supplier and not partner.customer: + account_type = 'payable' + elif partner.customer and not partner.supplier: + account_type = 'payable' + if partner['property_acccount_' + account_type]: + account_id = partner['property_acccount_' + account_type].id + + company_partner = wiz.statement_line_id.statement_id.company_id.partner_id + if len(setting_ids) and ( + not account_id + or account_id in ( + company_partner.property_account_payable.id, + company_partner.property_account_receivable.id) + ): + setting = settings_pool.browse(cr, uid, setting_ids[0], context=context) + if account_type == 'payable': + account_id = setting.default_credit_account_id.id + else: + account_id = setting.default_debit_account_id.id + + if account_id: + wiz.statement_line_id.write({'account_id': account_id}) + if wiz.statement_line_id: #delete splits causing an unsplit if this is a split #transaction From 0742dbd81827f25bb8f840cb72d97adc6e1256e2 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Fri, 23 Aug 2013 14:12:22 +0200 Subject: [PATCH 2/4] [FIX] typos --- account_banking/banking_import_transaction.py | 4 ++-- account_banking/wizard/banking_transaction_wizard.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index 87832412e..e5ded171a 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1121,8 +1121,8 @@ class banking_import_transaction(orm.Model): account_type = 'payable' elif partner.customer and not partner.supplier: account_type = 'payable' - if partner['property_acccount_' + account_type]: - account_id = partner['property_acccount_' + account_type].id + if partner['property_account_' + account_type]: + account_id = partner['property_account_' + account_type].id if not account_id or account_id in (def_pay_account_id, def_rec_account_id): if account_type == 'payable': account_id = account_info.default_credit_account_id diff --git a/account_banking/wizard/banking_transaction_wizard.py b/account_banking/wizard/banking_transaction_wizard.py index fbe63c994..7d4a9c7fa 100644 --- a/account_banking/wizard/banking_transaction_wizard.py +++ b/account_banking/wizard/banking_transaction_wizard.py @@ -277,8 +277,8 @@ class banking_transaction_wizard(orm.TransientModel): account_type = 'payable' elif partner.customer and not partner.supplier: account_type = 'payable' - if partner['property_acccount_' + account_type]: - account_id = partner['property_acccount_' + account_type].id + if partner['property_account_' + account_type]: + account_id = partner['property_account_' + account_type].id company_partner = wiz.statement_line_id.statement_id.company_id.partner_id if len(setting_ids) and ( From 6d0e01535835bfafa3de814ff1c447a55212a249 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Fri, 23 Aug 2013 14:17:50 +0200 Subject: [PATCH 3/4] [FIX] Assign id, not browse record --- account_banking/banking_import_transaction.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index e5ded171a..72b6ac45d 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1125,9 +1125,9 @@ class banking_import_transaction(orm.Model): account_id = partner['property_account_' + account_type].id if not account_id or account_id in (def_pay_account_id, def_rec_account_id): if account_type == 'payable': - account_id = account_info.default_credit_account_id + account_id = account_info.default_credit_account_id.id else: - account_id = account_info.default_debit_account_id + account_id = account_info.default_debit_account_id.id values = {'account_id': account_id} self_values = {} From 97504cb0711ec9b3038bf00cd11a83dcd75a2045 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Fri, 23 Aug 2013 14:27:10 +0200 Subject: [PATCH 4/4] [FIX] Do assign a receivable account some of the time --- account_banking/banking_import_transaction.py | 2 +- account_banking/wizard/banking_transaction_wizard.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index 72b6ac45d..f219986d9 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1120,7 +1120,7 @@ class banking_import_transaction(orm.Model): if partner.supplier and not partner.customer: account_type = 'payable' elif partner.customer and not partner.supplier: - account_type = 'payable' + account_type = 'receivable' if partner['property_account_' + account_type]: account_id = partner['property_account_' + account_type].id if not account_id or account_id in (def_pay_account_id, def_rec_account_id): diff --git a/account_banking/wizard/banking_transaction_wizard.py b/account_banking/wizard/banking_transaction_wizard.py index 7d4a9c7fa..a84016b8f 100644 --- a/account_banking/wizard/banking_transaction_wizard.py +++ b/account_banking/wizard/banking_transaction_wizard.py @@ -276,7 +276,7 @@ class banking_transaction_wizard(orm.TransientModel): if partner.supplier and not partner.customer: account_type = 'payable' elif partner.customer and not partner.supplier: - account_type = 'payable' + account_type = 'receivable' if partner['property_account_' + account_type]: account_id = partner['property_account_' + account_type].id