Merge lp:~therp-nl/banking-addons/ba70-partner_journal_accounts into lp:banking-addons

Proposed by Stefan Rijnhart (Opener)
Status: Merged
Merged at revision: 210
Proposed branch: lp:~therp-nl/banking-addons/ba70-partner_journal_accounts
Merge into: lp:banking-addons
Diff against target: 431 lines (+314/-39)
10 files modified
account_banking/__init__.py (+1/-0)
account_banking/banking_import_transaction.py (+13/-19)
account_banking/res_partner.py (+72/-0)
account_banking/wizard/banking_transaction_wizard.py (+18/-20)
account_banking_partner_journal_account/__init__.py (+1/-0)
account_banking_partner_journal_account/__openerp__.py (+44/-0)
account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot (+35/-0)
account_banking_partner_journal_account/i18n/nl.po (+41/-0)
account_banking_partner_journal_account/res_partner.py (+68/-0)
account_banking_partner_journal_account/res_partner_view.xml (+21/-0)
To merge this branch: bzr merge lp:~therp-nl/banking-addons/ba70-partner_journal_accounts
Reviewer Review Type Date Requested Status
Holger Brunn (Therp) code review Approve
Review via email: mp+195517@code.launchpad.net

Commit message

[ADD] Module that allows for alternative partner journal accounts
 to be used as defaults in imported bank statements (incl. small,
 necessary refactoring in core module)

Description of the change

Adding a module with the following 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.
===

About the code:

For this functionality, a small refactoring was needed in account_banking

Same as 6.1 version here: https://code.launchpad.net/~therp-nl/banking-addons/ba61-partner_journal_accounts/+merge/195519, except that in 7.0 the code to retrieve the default account was already honouring the customer/supplier setting of the partner. These lines are now refactored.

There is also an additional change in 7.0 because this version resets the account when matching is being undone which calls for the same logic.

To post a comment you must log in.
208. By Stefan Rijnhart (Opener)

[FIX] Allow for any kind of account
[RFR] Use property fields

Revision history for this message
Holger Brunn (Therp) (hbrunn) :
review: Approve (code review)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'account_banking/__init__.py'
2--- account_banking/__init__.py 2013-04-15 13:59:50 +0000
3+++ account_banking/__init__.py 2013-11-26 19:45:37 +0000
4@@ -30,5 +30,6 @@
5 import account_banking
6 import parsers
7 import wizard
8+import res_partner
9
10 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
11
12=== modified file 'account_banking/banking_import_transaction.py'
13--- account_banking/banking_import_transaction.py 2013-10-14 12:33:57 +0000
14+++ account_banking/banking_import_transaction.py 2013-11-26 19:45:37 +0000
15@@ -875,9 +875,6 @@
16 # when retrieving move_line_ids below.
17 company = company_obj.browse(
18 cr, uid, transaction.company_id.id, context)
19- # Get default defaults
20- def_pay_account_id = company.partner_id.property_account_payable.id
21- def_rec_account_id = company.partner_id.property_account_receivable.id
22
23 # Get interesting journals once
24 # Added type 'general' to capture fund transfers
25@@ -1112,24 +1109,21 @@
26 account_id = move_info and move_info.get('account_id', False)
27 if not account_id:
28 # Use the default settings, but allow individual partner
29- # settings to overrule this. Note that you need to change
30- # the internal type of these accounts to either 'payable'
31- # or 'receivable' to enable usage like this.
32+ # settings to overrule this.
33+ bank_partner = (
34+ partner_banks[0].partner_id if len(partner_banks) == 1
35+ else False)
36 if transaction.statement_line_id.amount < 0:
37- account_type = 'payable'
38- else:
39- account_type = 'receivable'
40- if len(partner_banks) == 1:
41- partner = partner_banks[0].partner_id
42- if partner.supplier and not partner.customer:
43- account_type = 'payable'
44- elif partner.customer and not partner.supplier:
45- account_type = 'receivable'
46- if partner['property_account_' + account_type]:
47- account_id = partner['property_account_' + account_type].id
48- if not account_id or account_id in (def_pay_account_id, def_rec_account_id):
49- if account_type == 'payable':
50+ if bank_partner:
51+ account_id = bank_partner.\
52+ def_journal_account_bank_decr()[bank_partner.id]
53+ else:
54 account_id = account_info.default_credit_account_id.id
55+ else:
56+
57+ if bank_partner:
58+ account_id = bank_partner.\
59+ def_journal_account_bank_incr()[bank_partner.id]
60 else:
61 account_id = account_info.default_debit_account_id.id
62
63
64=== added file 'account_banking/res_partner.py'
65--- account_banking/res_partner.py 1970-01-01 00:00:00 +0000
66+++ account_banking/res_partner.py 2013-11-26 19:45:37 +0000
67@@ -0,0 +1,72 @@
68+# -*- encoding: utf-8 -*-
69+##############################################################################
70+#
71+# Copyright (C) 2013 Therp BV (<http://therp.nl>).
72+#
73+# All Rights Reserved
74+#
75+# This program is free software: you can redistribute it and/or modify
76+# it under the terms of the GNU General Public License as published by
77+# the Free Software Foundation, either version 3 of the License, or
78+# (at your option) any later version.
79+#
80+# This program is distributed in the hope that it will be useful,
81+# but WITHOUT ANY WARRANTY; without even the implied warranty of
82+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83+# GNU General Public License for more details.
84+#
85+# You should have received a copy of the GNU General Public License
86+# along with this program. If not, see <http://www.gnu.org/licenses/>.
87+#
88+##############################################################################
89+
90+from openerp.osv import orm
91+
92+
93+class ResPartner(orm.Model):
94+ _inherit = 'res.partner'
95+
96+ def def_journal_account_bank(
97+ self, cr, uid, ids, get_property_account, context=None):
98+ """
99+ Returns the property journal account for the given partners ids.
100+
101+ :param get_property_account: method of this object that takes
102+ a partner browse record and returns a field name of type many2one.
103+ """
104+ if not ids:
105+ return {}
106+ res = dict([(res_id, False) for res_id in ids])
107+ for partner in self.browse(cr, uid, ids, context=context):
108+ property_account = get_property_account(partner)
109+ if partner[property_account]:
110+ res[partner.id] = partner[property_account].id
111+ return res
112+
113+ def get_property_account_decrease(self, partner):
114+ if partner.customer and not partner.supplier:
115+ return 'property_account_receivable'
116+ return 'property_account_payable'
117+
118+ def get_property_account_increase(self, partner):
119+ if partner.supplier and not partner.customer:
120+ return 'property_account_payable'
121+ return 'property_account_receivable'
122+
123+ def def_journal_account_bank_decr(
124+ self, cr, uid, ids, context=None):
125+ """
126+ Return the default journal account to be used for this partner
127+ in the case of bank transactions that decrease the balance.
128+ """
129+ return self.def_journal_account_bank(
130+ cr, uid, ids, self.get_property_account_decrease, context=context)
131+
132+ def def_journal_account_bank_incr(
133+ self, cr, uid, ids, context=None):
134+ """
135+ Return the default journal account to be used for this partner
136+ in the case of bank transactions that increase the balance.
137+ """
138+ return self.def_journal_account_bank(
139+ cr, uid, ids, self.get_property_account_increase, context=context)
140
141=== modified file 'account_banking/wizard/banking_transaction_wizard.py'
142--- account_banking/wizard/banking_transaction_wizard.py 2013-10-14 12:33:57 +0000
143+++ account_banking/wizard/banking_transaction_wizard.py 2013-11-26 19:45:37 +0000
144@@ -271,27 +271,25 @@
145 else:
146 account_type = 'receivable'
147
148+ bank_partner = False
149 if partner_id:
150- partner = wiz.statement_line_id.partner_bank_id.partner_id
151- if partner.supplier and not partner.customer:
152- account_type = 'payable'
153- elif partner.customer and not partner.supplier:
154- account_type = 'receivable'
155- if partner['property_account_' + account_type]:
156- account_id = partner['property_account_' + account_type].id
157-
158- company_partner = wiz.statement_line_id.statement_id.company_id.partner_id
159- if len(setting_ids) and (
160- not account_id
161- or account_id in (
162- company_partner.property_account_payable.id,
163- company_partner.property_account_receivable.id)
164- ):
165- setting = settings_pool.browse(cr, uid, setting_ids[0], context=context)
166- if account_type == 'payable':
167- account_id = setting.default_credit_account_id.id
168- else:
169- account_id = setting.default_debit_account_id.id
170+ bank_partner = wiz.statement_line_id.partner_bank_id.partner_id
171+ if wiz.amount < 0:
172+ if bank_partner:
173+ account_id = bank_partner.\
174+ def_journal_account_bank_decr()[bank_partner.id]
175+ elif setting_ids:
176+ account_id = settings_pool.browse(
177+ cr, uid, setting_ids[0],
178+ context=context).default_credit_account_id.id
179+ else:
180+ if bank_partner:
181+ account_id = bank_partner.\
182+ def_journal_account_bank_incr()[bank_partner.id]
183+ elif setting_ids:
184+ account_id = settings_pool.browse(
185+ cr, uid, setting_ids[0],
186+ context=context).default_debit_account_id.id
187
188 if account_id:
189 wiz.statement_line_id.write({'account_id': account_id})
190
191=== added directory 'account_banking_partner_journal_account'
192=== added file 'account_banking_partner_journal_account/__init__.py'
193--- account_banking_partner_journal_account/__init__.py 1970-01-01 00:00:00 +0000
194+++ account_banking_partner_journal_account/__init__.py 2013-11-26 19:45:37 +0000
195@@ -0,0 +1,1 @@
196+from . import res_partner
197
198=== added file 'account_banking_partner_journal_account/__openerp__.py'
199--- account_banking_partner_journal_account/__openerp__.py 1970-01-01 00:00:00 +0000
200+++ account_banking_partner_journal_account/__openerp__.py 2013-11-26 19:45:37 +0000
201@@ -0,0 +1,44 @@
202+##############################################################################
203+#
204+# Copyright (C) 2013 Therp BV (<http://therp.nl>)
205+# All Rights Reserved
206+#
207+# This program is free software: you can redistribute it and/or modify
208+# it under the terms of the GNU Affero General Public License as published by
209+# the Free Software Foundation, either version 3 of the License, or
210+# (at your option) any later version.
211+#
212+# This program is distributed in the hope that it will be useful,
213+# but WITHOUT ANY WARRANTY; without even the implied warranty of
214+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
215+# GNU Affero General Public License for more details.
216+#
217+# You should have received a copy of the GNU Affero General Public License
218+# along with this program. If not, see <http://www.gnu.org/licenses/>.
219+#
220+##############################################################################
221+{
222+ 'name': 'Banking Addons - Default partner journal accounts for bank transactions',
223+ 'version': '0.1',
224+ 'license': 'AGPL-3',
225+ 'author': 'Therp BV',
226+ 'website': 'https://launchpad.net/banking-addons',
227+ 'category': 'Banking addons',
228+ 'depends': ['account_banking'],
229+ 'description': '''
230+This module allows to set alternative journal accounts on partners to use
231+as default accounts in imported bank statements.
232+
233+This is useful when regular transactions on clearing accounts occur. Such
234+clearing accounts cannot usually be selected as default partner accounts
235+because they are neither of type 'payable' nor 'receivable' (or at least
236+never at the same time!). For the alternative journal accounts for bank
237+transactions, any reconcilable account can be selected.
238+
239+When a transaction matches a specific move in the system, the account
240+from the move line takes still precedence so as not to impede
241+reconciliation.
242+ ''',
243+ 'data': ['res_partner_view.xml'],
244+ 'installable': True,
245+}
246
247=== added directory 'account_banking_partner_journal_account/i18n'
248=== added file 'account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot'
249--- account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot 1970-01-01 00:00:00 +0000
250+++ account_banking_partner_journal_account/i18n/account_banking_partner_journal_account.pot 2013-11-26 19:45:37 +0000
251@@ -0,0 +1,35 @@
252+# Translation of OpenERP Server.
253+# This file contains the translation of the following modules:
254+# * account_banking_partner_journal_account
255+#
256+msgid ""
257+msgstr ""
258+
259+#. module: account_banking_partner_journal_account
260+#: model:ir.model,name:account_banking_partner_journal_account.model_res_partner
261+msgid "Partner"
262+msgstr ""
263+
264+#. module: account_banking_partner_journal_account
265+#: help:res.partner,account_receivable_bank_id:0
266+msgid ""
267+"Optional default journal account on bank statements for debits from this "
268+"partner. Overrides the default debit account."
269+msgstr ""
270+
271+#. module: account_banking_partner_journal_account
272+#: field:res.partner,account_payable_bank_id:0
273+msgid "Default bank credit account"
274+msgstr ""
275+
276+#. module: account_banking_partner_journal_account
277+#: help:res.partner,account_payable_bank_id:0
278+msgid ""
279+"Optional default journal account on bank statements for credits from this "
280+"partner. Overrides the default credit account."
281+msgstr ""
282+
283+#. module: account_banking_partner_journal_account
284+#: field:res.partner,account_receivable_bank_id:0
285+msgid "Default bank debit account"
286+msgstr ""
287
288=== added file 'account_banking_partner_journal_account/i18n/nl.po'
289--- account_banking_partner_journal_account/i18n/nl.po 1970-01-01 00:00:00 +0000
290+++ account_banking_partner_journal_account/i18n/nl.po 2013-11-26 19:45:37 +0000
291@@ -0,0 +1,41 @@
292+# Translation of OpenERP Server.
293+# This file contains the translation of the following modules:
294+# * account_banking_partner_journal_account
295+#
296+msgid ""
297+msgstr ""
298+"Project-Id-Version: OpenERP Server 6.1\n"
299+"Report-Msgid-Bugs-To: \n"
300+"POT-Creation-Date: 2013-11-26 19:34+0000\n"
301+"PO-Revision-Date: 2013-11-26 19:34+0000\n"
302+"Last-Translator: <>\n"
303+"Language-Team: \n"
304+"MIME-Version: 1.0\n"
305+"Content-Type: text/plain; charset=UTF-8\n"
306+"Content-Transfer-Encoding: \n"
307+"Plural-Forms: \n"
308+
309+#. module: account_banking_partner_journal_account
310+#: model:ir.model,name:account_banking_partner_journal_account.model_res_partner
311+msgid "Partner"
312+msgstr "Relatie"
313+
314+#. module: account_banking_partner_journal_account
315+#: help:res.partner,property_account_receivable_bank_id:0
316+msgid "Optional default journal account on bank statements for debits from this partner. Overrides the default debit account."
317+msgstr "Optionele standaard grootboekrekening voor geïmporteerde bankbijschrijvingen, in plaats van de standaard debiteurenrekening."
318+
319+#. module: account_banking_partner_journal_account
320+#: field:res.partner,property_account_payable_bank_id:0
321+msgid "Default bank credit account"
322+msgstr "Standaardrekening bankafschrijvingen"
323+
324+#. module: account_banking_partner_journal_account
325+#: help:res.partner,property_account_payable_bank_id:0
326+msgid "Optional default journal account on bank statements for credits from this partner. Overrides the default credit account."
327+msgstr "Optionele standaard grootboekrekening voor geïmporteerde bankafschrijvingen, in plaats van de standaard crediteurenrekening."
328+
329+#. module: account_banking_partner_journal_account
330+#: field:res.partner,property_account_receivable_bank_id:0
331+msgid "Default bank debit account"
332+msgstr "Standaardrekening bankbijschrijvingen"
333
334=== added file 'account_banking_partner_journal_account/res_partner.py'
335--- account_banking_partner_journal_account/res_partner.py 1970-01-01 00:00:00 +0000
336+++ account_banking_partner_journal_account/res_partner.py 2013-11-26 19:45:37 +0000
337@@ -0,0 +1,68 @@
338+# -*- coding: utf-8 -*-
339+##############################################################################
340+#
341+# Copyright (C) 2013 Therp BV (<http://therp.nl>).
342+#
343+# This program is free software: you can redistribute it and/or modify
344+# it under the terms of the GNU Affero General Public License as
345+# published by the Free Software Foundation, either version 3 of the
346+# License, or (at your option) any later version.
347+#
348+# This program is distributed in the hope that it will be useful,
349+# but WITHOUT ANY WARRANTY; without even the implied warranty of
350+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
351+# GNU Affero General Public License for more details.
352+#
353+# You should have received a copy of the GNU Affero General Public License
354+# along with this program. If not, see <http://www.gnu.org/licenses/>.
355+#
356+##############################################################################
357+
358+from openerp.osv import orm, fields
359+
360+
361+class ResPartner(orm.Model):
362+ _inherit = 'res.partner'
363+
364+ _columns = {
365+ 'property_account_payable_bank_id': fields.property(
366+ 'account.account',
367+ type='many2one',
368+ relation='account.account',
369+ string='Default bank credit account',
370+ help=('Optional default journal account on bank statements for '
371+ 'credits from this partner. Overrides the default credit '
372+ 'account.'),
373+ domain=[('type', '!=', 'view')]),
374+ 'property_account_receivable_bank_id': fields.property(
375+ 'account.account',
376+ type='many2one',
377+ relation='account.account',
378+ string='Default bank debit account',
379+ help=('Optional default journal account on bank statements for '
380+ 'debits from this partner. Overrides the default debit '
381+ 'account.'),
382+ domain=[('type', '!=', 'view')]),
383+ }
384+
385+ def def_journal_account_bank_decr(
386+ self, cr, uid, ids, context=None):
387+ if not ids:
388+ return {}
389+ res = super(ResPartner, self).def_journal_account_bank_decr(
390+ cr, uid, ids, context=context)
391+ for partner in self.browse(cr, uid, ids, context=context):
392+ if partner.property_account_payable_bank_id:
393+ res[partner.id] = partner.property_account_payable_bank_id.id
394+ return res
395+
396+ def def_journal_account_bank_incr(
397+ self, cr, uid, ids, context=None):
398+ if not ids:
399+ return {}
400+ res = super(ResPartner, self).def_journal_account_bank_incr(
401+ cr, uid, ids, context=context)
402+ for partner in self.browse(cr, uid, ids, context=context):
403+ if partner.property_account_receivable_bank_id:
404+ res[partner.id] = partner.property_account_receivable_bank_id.id
405+ return res
406
407=== added file 'account_banking_partner_journal_account/res_partner_view.xml'
408--- account_banking_partner_journal_account/res_partner_view.xml 1970-01-01 00:00:00 +0000
409+++ account_banking_partner_journal_account/res_partner_view.xml 2013-11-26 19:45:37 +0000
410@@ -0,0 +1,21 @@
411+<?xml version="1.0" encoding="utf-8"?>
412+<openerp>
413+ <data>
414+ <record id="view_partner_form" model="ir.ui.view">
415+ <field name="name">Add default accounts on bank statements</field>
416+ <field name="model">res.partner</field>
417+ <field name="inherit_id" ref="base.view_partner_form"/>
418+ <field name="arch" type="xml">
419+ <field name="property_account_receivable" position="after">
420+ <field name="property_account_receivable_bank_id"
421+ groups="account.group_account_invoice" />
422+ </field>
423+ <field name="property_account_payable" position="after">
424+ <field name="property_account_payable_bank_id"
425+ groups="account.group_account_invoice" />
426+ </field>
427+ </field>
428+ </record>
429+ </data>
430+</openerp>
431+

Subscribers

People subscribed via source and target branches

to status/vote changes: