From 20c3fa915f5c990f3a277159e541a4f9c8b06912 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sat, 16 Nov 2013 11:37:09 +0100 Subject: [PATCH 1/6] [RFR] Refactor out the code that retrieves default debit or credit account of the partner [RFR] Remove suspicious references to the company partner debit and credit accounts [ADD] Module that allows for alternative partner journal accounts to be used as defaults in imported bank statements --- account_banking/__init__.py | 1 + account_banking/banking_import_transaction.py | 24 +++---- account_banking/res_partner.py | 72 +++++++++++++++++++ .../__init__.py | 1 + .../__openerp__.py | 34 +++++++++ ...ccount_banking_partner_journal_account.pot | 35 +++++++++ .../i18n/nl.po | 42 +++++++++++ .../res_partner.py | 64 +++++++++++++++++ .../res_partner_view.xml | 21 ++++++ 9 files changed, 281 insertions(+), 13 deletions(-) create mode 100644 account_banking/res_partner.py create mode 100644 account_banking_partner_journal_account/__init__.py create mode 100644 account_banking_partner_journal_account/__openerp__.py create mode 100644 account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot create mode 100644 account_banking_partner_journal_account/i18n/nl.po create mode 100644 account_banking_partner_journal_account/res_partner.py create mode 100644 account_banking_partner_journal_account/res_partner_view.xml diff --git a/account_banking/__init__.py b/account_banking/__init__.py index 0640b6cc6..908f86d6a 100644 --- a/account_banking/__init__.py +++ b/account_banking/__init__.py @@ -30,5 +30,6 @@ import banking_import_transaction import account_banking import parsers import wizard +import res_partner # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/account_banking/banking_import_transaction.py b/account_banking/banking_import_transaction.py index bd1a371c4..c161a1ee4 100644 --- a/account_banking/banking_import_transaction.py +++ b/account_banking/banking_import_transaction.py @@ -1130,9 +1130,6 @@ class banking_import_transaction(osv.osv): # when retrieving move_line_ids below. company = company_obj.browse( cr, uid, transaction.company_id.id, context) - # Get default defaults - def_pay_account_id = company.partner_id.property_account_payable.id - def_rec_account_id = company.partner_id.property_account_receivable.id # Get interesting journals once # Added type 'general' to capture fund transfers @@ -1340,20 +1337,21 @@ class banking_import_transaction(osv.osv): # settings to overrule this. Note that you need to change # the internal type of these accounts to either 'payable' # or 'receivable' to enable usage like this. + bank_partner = ( + partner_banks[0].partner_id if len(partner_banks) == 1 + else False) if transaction.transferred_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: + if bank_partner: + account_id = bank_partner.\ + def_journal_account_bank_decr()[bank_partner.id] + if not account_id: account_id = (account_info.default_credit_account_id and account_info.default_credit_account_id.id) 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: + if bank_partner: + account_id = bank_partner.\ + def_journal_account_bank_incr()[bank_partner.id] + if not account_id: account_id = (account_info.default_debit_account_id and account_info.default_debit_account_id.id) values = {} diff --git a/account_banking/res_partner.py b/account_banking/res_partner.py new file mode 100644 index 000000000..4166b89d5 --- /dev/null +++ b/account_banking/res_partner.py @@ -0,0 +1,72 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2013 Therp BV (). +# +# All Rights Reserved +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import orm + + +class ResPartner(orm.Model): + _inherit = 'res.partner' + + def def_journal_account_bank( + self, cr, uid, ids, get_property_account, context=None): + """ + Returns the property journal account for the given partners ids. + + :param get_property_account: method of this object that takes + a partner browse record and returns a field name of type many2one. + """ + if not ids: + return {} + res = dict([(res_id, False) for res_id in ids]) + for partner in self.browse(cr, uid, ids, context=context): + property_account = get_property_account(partner) + if partner[property_account]: + res[partner.id] = partner[property_account].id + return res + + def get_property_account_decrease(self, partner): + if partner.customer and not partner.supplier: + return 'property_account_receivable' + return 'property_account_payable' + + def get_property_account_increase(self, partner): + if partner.supplier and not partner.customer: + return 'property_account_payable' + return 'property_account_receivable' + + def def_journal_account_bank_decr( + self, cr, uid, ids, context=None): + """ + Return the default journal account to be used for this partner + in the case of bank transactions that decrease the balance. + """ + return self.def_journal_account_bank( + cr, uid, ids, self.get_property_account_decrease, context=context) + + def def_journal_account_bank_incr( + self, cr, uid, ids, context=None): + """ + Return the default journal account to be used for this partner + in the case of bank transactions that increase the balance. + """ + return self.def_journal_account_bank( + cr, uid, ids, self.get_property_account_increase, context=context) diff --git a/account_banking_partner_journal_account/__init__.py b/account_banking_partner_journal_account/__init__.py new file mode 100644 index 000000000..91fed54d4 --- /dev/null +++ b/account_banking_partner_journal_account/__init__.py @@ -0,0 +1 @@ +from . import res_partner diff --git a/account_banking_partner_journal_account/__openerp__.py b/account_banking_partner_journal_account/__openerp__.py new file mode 100644 index 000000000..2d9660d65 --- /dev/null +++ b/account_banking_partner_journal_account/__openerp__.py @@ -0,0 +1,34 @@ +############################################################################## +# +# Copyright (C) 2013 Therp BV () +# 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 . +# +############################################################################## +{ + 'name': 'Banking Addons - Default partner journal accounts for bank transactions', + 'version': '0.1', + 'license': 'AGPL-3', + 'author': 'Therp BV', + 'website': 'https://launchpad.net/banking-addons', + 'category': 'Banking addons', + 'depends': ['account_banking'], + 'description': ''' +This module allows to set alternative journal accounts on partners to use +as default accounts in imported bank statements. + ''', + 'data': ['res_partner_view.xml'], + 'installable': True, +} diff --git a/account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot b/account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot new file mode 100644 index 000000000..9ba2a975b --- /dev/null +++ b/account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot @@ -0,0 +1,35 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_banking_partner_journal_account +# +msgid "" +msgstr "" + +#. module: account_banking_partner_journal_account +#: model:ir.model,name:account_banking_partner_journal_account.model_res_partner +msgid "Partner" +msgstr "" + +#. module: account_banking_partner_journal_account +#: help:res.partner,account_receivable_bank_id:0 +msgid "" +"Optional default journal account on bank statements for debits from this " +"partner. Overrides the default debit account." +msgstr "" + +#. module: account_banking_partner_journal_account +#: field:res.partner,account_payable_bank_id:0 +msgid "Default bank credit account" +msgstr "" + +#. module: account_banking_partner_journal_account +#: help:res.partner,account_payable_bank_id:0 +msgid "" +"Optional default journal account on bank statements for credits from this " +"partner. Overrides the default credit account." +msgstr "" + +#. module: account_banking_partner_journal_account +#: field:res.partner,account_receivable_bank_id:0 +msgid "Default bank debit account" +msgstr "" diff --git a/account_banking_partner_journal_account/i18n/nl.po b/account_banking_partner_journal_account/i18n/nl.po new file mode 100644 index 000000000..d70456d9a --- /dev/null +++ b/account_banking_partner_journal_account/i18n/nl.po @@ -0,0 +1,42 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * account_banking_partner_journal_account +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-11-16 10:29+0000\n" +"PO-Revision-Date: 2013-11-16 10:29+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_banking_partner_journal_account +#: model:ir.model,name:account_banking_partner_journal_account.model_res_partner +msgid "Partner" +msgstr "Relatie" + +#. module: account_banking_partner_journal_account +#: help:res.partner,account_receivable_bank_id:0 +msgid "Optional default journal account on bank statements for debits from this partner. Overrides the default debit account." +msgstr "Optionele standaard grootboekrekening voor geïmporteerde bankbijschrijvingen, in plaats van de standaard debiteurenrekening." + +#. module: account_banking_partner_journal_account +#: field:res.partner,account_payable_bank_id:0 +msgid "Default bank credit account" +msgstr "Standaardrekening afschrijvingen" + +#. module: account_banking_partner_journal_account +#: help:res.partner,account_payable_bank_id:0 +msgid "Optional default journal account on bank statements for credits from this partner. Overrides the default credit account." +msgstr "Optionele standaard grootboekrekening voor geïmporteerde bankafschrijvingen, in plaats van de standaard crediteurenrekening." + +#. module: account_banking_partner_journal_account +#: field:res.partner,account_receivable_bank_id:0 +msgid "Default bank debit account" +msgstr "Standaardrekening bankbijschrijvingen" + diff --git a/account_banking_partner_journal_account/res_partner.py b/account_banking_partner_journal_account/res_partner.py new file mode 100644 index 000000000..9ac52c930 --- /dev/null +++ b/account_banking_partner_journal_account/res_partner.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2013 Therp BV (). +# +# 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 import orm, fields + + +class ResPartner(orm.Model): + _inherit = 'res.partner' + + _columns = { + 'account_payable_bank_id': fields.many2one( + 'account.account', + 'Default bank credit account', + help=('Optional default journal account on bank statements for ' + 'credits from this partner. Overrides the default credit ' + 'account.'), + domain=[('reconcile', '=', True)]), + 'account_receivable_bank_id': fields.many2one( + 'account.account', + 'Default bank debit account', + help=('Optional default journal account on bank statements for ' + 'debits from this partner. Overrides the default debit ' + 'account.'), + domain=[('reconcile', '=', True)]), + } + + def def_journal_account_bank_decr( + self, cr, uid, ids, context=None): + if not ids: + return {} + res = super(ResPartner, self).def_journal_account_bank_decr( + cr, uid, ids, context=context) + for partner in self.browse(cr, uid, ids, context=context): + if partner.account_payable_bank_id: + res[partner.id] = partner.account_payable_bank_id.id + return res + + def def_journal_account_bank_incr( + self, cr, uid, ids, context=None): + if not ids: + return {} + res = super(ResPartner, self).def_journal_account_bank_decr( + cr, uid, ids, context=context) + for partner in self.browse(cr, uid, ids, context=context): + if partner.account_receivable_bank_id: + res[partner.id] = partner.account_receivable_bank_id.id + return res diff --git a/account_banking_partner_journal_account/res_partner_view.xml b/account_banking_partner_journal_account/res_partner_view.xml new file mode 100644 index 000000000..7b4afa5e3 --- /dev/null +++ b/account_banking_partner_journal_account/res_partner_view.xml @@ -0,0 +1,21 @@ + + + + + Add default accounts on bank statements + res.partner + + + + + + + + + + + + + From 30f7a664a38efed98d703c64f6d80b4bd0af084c Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sat, 16 Nov 2013 11:43:24 +0100 Subject: [PATCH 2/6] [IMP] Module description --- account_banking_partner_journal_account/__openerp__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/account_banking_partner_journal_account/__openerp__.py b/account_banking_partner_journal_account/__openerp__.py index 2d9660d65..7a042283e 100644 --- a/account_banking_partner_journal_account/__openerp__.py +++ b/account_banking_partner_journal_account/__openerp__.py @@ -28,6 +28,16 @@ 'description': ''' This module allows to set alternative journal accounts on partners to use as default accounts in imported bank statements. + +This is useful when regular transactions on clearing accounts occur. Such +clearing accounts cannot usually be selected as default partner accounts +because they are neither of type 'payable' nor 'receivable' (or at least +never at the same time!). For the alternative journal accounts for bank +transactions, any reconcilable account can be selected. + +When a transaction matches a specific move in the system, the account +from the move line takes still precedence so as not to impede +reconciliation. ''', 'data': ['res_partner_view.xml'], 'installable': True, From 06fc73635a9ef32062dd13ae43f947e8f9f6b591 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sun, 17 Nov 2013 20:52:14 +0100 Subject: [PATCH 3/6] [UPD] translation --- account_banking_partner_journal_account/i18n/nl.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/account_banking_partner_journal_account/i18n/nl.po b/account_banking_partner_journal_account/i18n/nl.po index d70456d9a..9d99149ba 100644 --- a/account_banking_partner_journal_account/i18n/nl.po +++ b/account_banking_partner_journal_account/i18n/nl.po @@ -28,7 +28,7 @@ msgstr "Optionele standaard grootboekrekening voor geïmporteerde bankbijschrijv #. module: account_banking_partner_journal_account #: field:res.partner,account_payable_bank_id:0 msgid "Default bank credit account" -msgstr "Standaardrekening afschrijvingen" +msgstr "Standaardrekening bankafschrijvingen" #. module: account_banking_partner_journal_account #: help:res.partner,account_payable_bank_id:0 From 23f3af0a5e29485850c36ab3db3740bb845fbdef Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sun, 17 Nov 2013 21:03:24 +0100 Subject: [PATCH 4/6] [FIX] Calling the right super --- account_banking_partner_journal_account/res_partner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/account_banking_partner_journal_account/res_partner.py b/account_banking_partner_journal_account/res_partner.py index 9ac52c930..5f2891823 100644 --- a/account_banking_partner_journal_account/res_partner.py +++ b/account_banking_partner_journal_account/res_partner.py @@ -56,7 +56,7 @@ class ResPartner(orm.Model): self, cr, uid, ids, context=None): if not ids: return {} - res = super(ResPartner, self).def_journal_account_bank_decr( + res = super(ResPartner, self).def_journal_account_bank_incr( cr, uid, ids, context=context) for partner in self.browse(cr, uid, ids, context=context): if partner.account_receivable_bank_id: From 2bb202a5948fd14b56425f5335fe5dc6d8ef127b Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Tue, 26 Nov 2013 13:48:07 +0100 Subject: [PATCH 5/6] [FIX] Allow for any kind of account --- account_banking_partner_journal_account/res_partner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/account_banking_partner_journal_account/res_partner.py b/account_banking_partner_journal_account/res_partner.py index 5f2891823..e86fb97d1 100644 --- a/account_banking_partner_journal_account/res_partner.py +++ b/account_banking_partner_journal_account/res_partner.py @@ -31,14 +31,14 @@ class ResPartner(orm.Model): help=('Optional default journal account on bank statements for ' 'credits from this partner. Overrides the default credit ' 'account.'), - domain=[('reconcile', '=', True)]), + ), 'account_receivable_bank_id': fields.many2one( 'account.account', 'Default bank debit account', help=('Optional default journal account on bank statements for ' 'debits from this partner. Overrides the default debit ' 'account.'), - domain=[('reconcile', '=', True)]), + ), } def def_journal_account_bank_decr( From 30ffabde774e290da05834faeb1b4f2447452884 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Tue, 26 Nov 2013 20:36:53 +0100 Subject: [PATCH 6/6] [RFR] Use property fields --- .../i18n/nl.po | 13 +++++----- .../res_partner.py | 24 +++++++++++-------- .../res_partner_view.xml | 4 ++-- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/account_banking_partner_journal_account/i18n/nl.po b/account_banking_partner_journal_account/i18n/nl.po index 9d99149ba..ff6bc8fb0 100644 --- a/account_banking_partner_journal_account/i18n/nl.po +++ b/account_banking_partner_journal_account/i18n/nl.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: OpenERP Server 6.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-16 10:29+0000\n" -"PO-Revision-Date: 2013-11-16 10:29+0000\n" +"POT-Creation-Date: 2013-11-26 19:34+0000\n" +"PO-Revision-Date: 2013-11-26 19:34+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -21,22 +21,21 @@ msgid "Partner" msgstr "Relatie" #. module: account_banking_partner_journal_account -#: help:res.partner,account_receivable_bank_id:0 +#: help:res.partner,property_account_receivable_bank_id:0 msgid "Optional default journal account on bank statements for debits from this partner. Overrides the default debit account." msgstr "Optionele standaard grootboekrekening voor geïmporteerde bankbijschrijvingen, in plaats van de standaard debiteurenrekening." #. module: account_banking_partner_journal_account -#: field:res.partner,account_payable_bank_id:0 +#: field:res.partner,property_account_payable_bank_id:0 msgid "Default bank credit account" msgstr "Standaardrekening bankafschrijvingen" #. module: account_banking_partner_journal_account -#: help:res.partner,account_payable_bank_id:0 +#: help:res.partner,property_account_payable_bank_id:0 msgid "Optional default journal account on bank statements for credits from this partner. Overrides the default credit account." msgstr "Optionele standaard grootboekrekening voor geïmporteerde bankafschrijvingen, in plaats van de standaard crediteurenrekening." #. module: account_banking_partner_journal_account -#: field:res.partner,account_receivable_bank_id:0 +#: field:res.partner,property_account_receivable_bank_id:0 msgid "Default bank debit account" msgstr "Standaardrekening bankbijschrijvingen" - diff --git a/account_banking_partner_journal_account/res_partner.py b/account_banking_partner_journal_account/res_partner.py index e86fb97d1..04315f88b 100644 --- a/account_banking_partner_journal_account/res_partner.py +++ b/account_banking_partner_journal_account/res_partner.py @@ -25,20 +25,24 @@ class ResPartner(orm.Model): _inherit = 'res.partner' _columns = { - 'account_payable_bank_id': fields.many2one( + 'property_account_payable_bank_id': fields.property( 'account.account', - 'Default bank credit account', + type='many2one', + relation='account.account', + string='Default bank credit account', help=('Optional default journal account on bank statements for ' 'credits from this partner. Overrides the default credit ' 'account.'), - ), - 'account_receivable_bank_id': fields.many2one( + domain=[('type', '!=', 'view')]), + 'property_account_receivable_bank_id': fields.property( 'account.account', - 'Default bank debit account', + type='many2one', + relation='account.account', + string='Default bank debit account', help=('Optional default journal account on bank statements for ' 'debits from this partner. Overrides the default debit ' 'account.'), - ), + domain=[('type', '!=', 'view')]), } def def_journal_account_bank_decr( @@ -48,8 +52,8 @@ class ResPartner(orm.Model): res = super(ResPartner, self).def_journal_account_bank_decr( cr, uid, ids, context=context) for partner in self.browse(cr, uid, ids, context=context): - if partner.account_payable_bank_id: - res[partner.id] = partner.account_payable_bank_id.id + if partner.property_account_payable_bank_id: + res[partner.id] = partner.property_account_payable_bank_id.id return res def def_journal_account_bank_incr( @@ -59,6 +63,6 @@ class ResPartner(orm.Model): res = super(ResPartner, self).def_journal_account_bank_incr( cr, uid, ids, context=context) for partner in self.browse(cr, uid, ids, context=context): - if partner.account_receivable_bank_id: - res[partner.id] = partner.account_receivable_bank_id.id + if partner.property_account_receivable_bank_id: + res[partner.id] = partner.property_account_receivable_bank_id.id return res diff --git a/account_banking_partner_journal_account/res_partner_view.xml b/account_banking_partner_journal_account/res_partner_view.xml index 7b4afa5e3..fc05ddfcb 100644 --- a/account_banking_partner_journal_account/res_partner_view.xml +++ b/account_banking_partner_journal_account/res_partner_view.xml @@ -7,11 +7,11 @@ - -