Merge lp:~therp-nl/openobject-addons/community_remove_deprecated into lp:~openerp-community/openobject-addons/trunk-addons-community

Proposed by Stefan Rijnhart (Opener)
Status: Needs review
Proposed branch: lp:~therp-nl/openobject-addons/community_remove_deprecated
Merge into: lp:~openerp-community/openobject-addons/trunk-addons-community
Diff against target: 12585 lines (+0/-12336)
47 files modified
account_banking/__init__.py (+0/-34)
account_banking/__openerp__.py (+0/-97)
account_banking/account_banking.py (+0/-752)
account_banking/account_banking_demo.xml (+0/-32)
account_banking/account_banking_import_wizard.xml (+0/-15)
account_banking/account_banking_view.xml (+0/-211)
account_banking/account_banking_workflow.xml (+0/-30)
account_banking/i18n/account_banking.pot (+0/-562)
account_banking/i18n/en_US.po (+0/-562)
account_banking/i18n/nl_NL.po (+0/-607)
account_banking/parsers/__init__.py (+0/-24)
account_banking/parsers/convert.py (+0/-41)
account_banking/parsers/models.py (+0/-161)
account_banking/record.py (+0/-182)
account_banking/sepa.py (+0/-421)
account_banking/wizard/__init__.py (+0/-23)
account_banking/wizard/bank_import.py (+0/-583)
account_banking/wizard/banktools.py (+0/-292)
account_banking_nl_clieop/__init__.py (+0/-30)
account_banking_nl_clieop/__openerp__.py (+0/-48)
account_banking_nl_clieop/account_banking_clieop.py (+0/-96)
account_banking_nl_clieop/account_banking_clieop.xml (+0/-63)
account_banking_nl_clieop/account_banking_export_wizard.xml (+0/-15)
account_banking_nl_clieop/data/banking_export_clieop.xml (+0/-22)
account_banking_nl_clieop/i18n/account_banking_nl_clieop.pot (+0/-335)
account_banking_nl_clieop/i18n/en_US.po (+0/-335)
account_banking_nl_clieop/i18n/nl_NL.po (+0/-341)
account_banking_nl_clieop/wizard/__init__.py (+0/-23)
account_banking_nl_clieop/wizard/clieop.py (+0/-406)
account_banking_nl_clieop/wizard/export_clieop.py (+0/-368)
account_banking_nl_multibank/__init__.py (+0/-29)
account_banking_nl_multibank/__openerp__.py (+0/-44)
account_banking_nl_multibank/i18n/account_banking_nl_multibank.pot (+0/-48)
account_banking_nl_multibank/i18n/en_US.po (+0/-48)
account_banking_nl_multibank/i18n/nl_NL.po (+0/-56)
account_banking_nl_multibank/multibank.py (+0/-163)
l10n_nl/__init__.py (+0/-29)
l10n_nl/__terp__.py (+0/-133)
l10n_nl/account_chart_netherlands.xml (+0/-4645)
l10n_nl/l10n_nl_wizard.xml (+0/-19)
mass_editing/__init__.py (+0/-27)
mass_editing/__openerp__.py (+0/-47)
mass_editing/mass_editing.py (+0/-104)
mass_editing/mass_editing_view.xml (+0/-73)
mass_editing/security/ir.model.access.csv (+0/-2)
mass_editing/wizard/__init__.py (+0/-25)
mass_editing/wizard/mass_editing_wizard.py (+0/-133)
To merge this branch: bzr merge lp:~therp-nl/openobject-addons/community_remove_deprecated
Reviewer Review Type Date Requested Status
Pedro Manuel Baeza Approve
Review via email: mp+181755@code.launchpad.net

Description of the change

Removed the following modules from this branch, which are maintained in other repositories:

mass_editing -> lp:server-env-tools
l10n_nl -> lp:openobject-addons
account_banking* -> lp:banking-addons

Their presence in this branch messes up the Apps site.

To post a comment you must log in.
Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

Of course, this is absolutely needed. Moreover, why that branch is registered in OpenERP apps? Is it still maintain?

Regards.

review: Approve
Revision history for this message
Pieter J. Kersten (EduSense BV) (pieterj) wrote :

yes, it is still maintained.

Regards,
--
Pieter J. Kersten

Op 23-08-13 11:50, Pedro Manuel Baeza schreef:
> Review: Approve
>
> Of course, this is absolutely needed. Moreover, why that branch is registered in OpenERP apps? Is it still maintain?
>
> Regards.

Revision history for this message
Stefan Rijnhart (Opener) (stefan-opener) wrote :

Pieter, to avoid any confusion:

this is about a branch lp:~openerp-community/openobject-addons/trunk-addons-community which contained a very old version of the account_banking module, not about lp:account-banking itself.

Revision history for this message
Pieter J. Kersten (EduSense BV) (pieterj) wrote :

Ok, that branch was indeed left to die. Good it did.

CU,
--
Pieter J. Kersten

Op 23-08-13 14:45, Stefan Rijnhart (Therp) schreef:
> Pieter, to avoid any confusion:
>
> this is about a branch lp:~openerp-community/openobject-addons/trunk-addons-community which contained a very old version of the account_banking module, not about lp:account-banking itself.
>
>
>

Unmerged revisions

377. By Stefan Rijnhart (Opener)

[DEL] Remove modules that are deprecated in this repository

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== removed directory 'account_banking'
2=== removed file 'account_banking/__init__.py'
3--- account_banking/__init__.py 2010-01-13 20:15:24 +0000
4+++ account_banking/__init__.py 1970-01-01 00:00:00 +0000
5@@ -1,34 +0,0 @@
6-# -*- encoding: utf-8 -*-
7-##############################################################################
8-#
9-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
10-# All Rights Reserved
11-#
12-# WARNING: This program as such is intended to be used by professional
13-# programmers who take the whole responsability of assessing all potential
14-# consequences resulting from its eventual inadequacies and bugs
15-# End users who are looking for a ready-to-use solution with commercial
16-# garantees and support are strongly adviced to contract EduSense BV
17-#
18-# This program is free software: you can redistribute it and/or modify
19-# it under the terms of the GNU General Public License as published by
20-# the Free Software Foundation, either version 3 of the License, or
21-# (at your option) any later version.
22-#
23-# This program is distributed in the hope that it will be useful,
24-# but WITHOUT ANY WARRANTY; without even the implied warranty of
25-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26-# GNU General Public License for more details.
27-#
28-# You should have received a copy of the GNU General Public License
29-# along with this program. If not, see <http://www.gnu.org/licenses/>.
30-#
31-##############################################################################
32-print 'Importing account_banking.account_banking'
33-import account_banking
34-print 'Importing account_banking.parsers'
35-import parsers
36-print 'Importing account_banking.wizard'
37-import wizard
38-
39-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
40
41=== removed file 'account_banking/__openerp__.py'
42--- account_banking/__openerp__.py 2012-10-15 09:31:37 +0000
43+++ account_banking/__openerp__.py 1970-01-01 00:00:00 +0000
44@@ -1,97 +0,0 @@
45-##############################################################################
46-#
47-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
48-# All Rights Reserved
49-#
50-# WARNING: This program as such is intended to be used by professional
51-# programmers who take the whole responsability of assessing all potential
52-# consequences resulting from its eventual inadequacies and bugs
53-# End users who are looking for a ready-to-use solution with commercial
54-# garantees and support are strongly adviced to contract EduSense BV
55-#
56-# This program is free software: you can redistribute it and/or modify
57-# it under the terms of the GNU General Public License as published by
58-# the Free Software Foundation, either version 3 of the License, or
59-# (at your option) any later version.
60-#
61-# This program is distributed in the hope that it will be useful,
62-# but WITHOUT ANY WARRANTY; without even the implied warranty of
63-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
64-# GNU General Public License for more details.
65-#
66-# You should have received a copy of the GNU General Public License
67-# along with this program. If not, see <http://www.gnu.org/licenses/>.
68-#
69-##############################################################################
70-{
71- 'name': 'Account Banking',
72- 'version': '0.1',
73- 'license': 'GPL-3',
74- 'author': 'EduSense BV',
75- 'category': 'Account Banking',
76- 'depends': ['base', 'base_iban', 'account', 'account_payment'],
77- 'init_xml': [],
78- 'update_xml': [
79- #'security/ir.model.access.csv',
80- 'account_banking_import_wizard.xml',
81- 'account_banking_view.xml',
82- 'account_banking_workflow.xml',
83- ],
84- 'description': '''
85- Module to do banking.
86-
87- This modules tries to combine all current banking import and export
88- schemes. Rationale for this is that it is quite common to have foreign
89- bank account numbers next to national bank account numbers. The current
90- approach, which hides the national banking interface schemes in the
91- l10n_xxx modules, makes it very difficult to use these simultanious.
92- A more banking oriented approach seems more logical and cleaner.
93-
94- Changes to default OpenERP:
95-
96- * Puts focus on the real life messaging with banks:
97- + Bank statement lines upgraded to independent bank transactions.
98- + Banking statements have no special accountancy meaning, they're just
99- message envelopes for a number of bank transactions.
100- + Bank statements can be either encoded by hand to reflect the document
101- version of Bank Statements, or created as an optional side effect of
102- importing Bank Transactions.
103-
104- * Preparations for SEPA:
105- + IBAN accounts are the standard in the SEPA countries
106- + local accounts are derived from SEPA (excluding Turkey) but are
107- considered to be identical to the corresponding SEPA account.
108- + Banks are identified with either Country + Bank code + Branch code or BIC
109- + Each bank can have its own pace in introducing SEPA into their
110- communication with their customers.
111- + National online databases can be used to convert BBAN's to IBAN's.
112-
113- * Adds dropin extensible import facility for bank communication in:
114- + MultiBank (NL) format transaction files,
115- - (todo) MT940 (Swift) format transaction files,
116- - (todo) CODA (BE) format transaction files,
117- - (wish) SEPA Credits (ISO 200022) messages,
118-
119- * Extends payments for digital banking:
120- + Adapted workflow in payments to reflect banking operations
121- + Relies on account_payment mechanics to extend with export generators.
122- - ClieOp3 (NL) payment and direct debit orders files available as
123- account_banking_nl_clieop
124- - (wish) BTL91 (NL) payment orders files (no format description available),
125- - (wish) SEPA Direct Debits (ISO 200022) messages
126-
127- * Additional features for the import/export mechanism:
128- + Automatic matching and creation of bank accounts, banks and partners,
129- during import of statements.
130- + Automatic matching with invoices and payments.
131- + Sound import mechanism, allowing multiple imports of the same
132- transactions repeated over multiple files.
133- + Journal configuration per bank account.
134- + Business logic and format parsing strictly separated to ease the
135- development of new parsers.
136- + No special configuration needed for the parsers, new parsers are
137- recognized and made available at server (re)start.
138- ''',
139- 'active': False,
140- 'installable': True,
141-}
142
143=== removed file 'account_banking/account_banking.py'
144--- account_banking/account_banking.py 2010-05-25 21:18:44 +0000
145+++ account_banking/account_banking.py 1970-01-01 00:00:00 +0000
146@@ -1,752 +0,0 @@
147-# -*- encoding: utf-8 -*-
148-##############################################################################
149-#
150-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
151-# All Rights Reserved
152-#
153-# This program is free software: you can redistribute it and/or modify
154-# it under the terms of the GNU General Public License as published by
155-# the Free Software Foundation, either version 3 of the License, or
156-# (at your option) any later version.
157-#
158-# This program is distributed in the hope that it will be useful,
159-# but WITHOUT ANY WARRANTY; without even the implied warranty of
160-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
161-# GNU General Public License for more details.
162-#
163-# You should have received a copy of the GNU General Public License
164-# along with this program. If not, see <http://www.gnu.org/licenses/>.
165-#
166-##############################################################################
167-
168-'''
169-This module shows resemblance to both account_bankimport/bankimport.py,
170-account/account_bank_statement.py and account_payment(_export). All hail to
171-the makers. account_bankimport is only referenced for their ideas and the
172-framework of the filters, which they in their turn seem to have derived
173-from account_coda.
174-
175-Modifications are extensive:
176-
177-1. In relation to account/account_bank_statement.py:
178- account.bank.statement is effectively stripped from its account.period
179- association, while account.bank.statement.line is extended with the same
180- association, thereby reflecting real world usage of bank.statement as a
181- list of bank transactions and bank.statement.line as a bank transaction.
182-
183-2. In relation to account/account_bankimport:
184- All filter objects and extensions to res.company are removed. Instead a
185- flexible auto-loading and auto-browsing plugin structure is created,
186- whereby business logic and encoding logic are strictly separated.
187- Both parsers and business logic are rewritten from scratch.
188-
189- The association of account.journal with res.company is replaced by an
190- association of account.journal with res.partner.bank, thereby allowing
191- multiple bank accounts per company and one journal per bank account.
192-
193- The imported bank statement file does not result in a single 'bank
194- statement', but in a list of bank statements by definition of whatever the
195- bank sees as a statement. Every imported bank statement contains at least
196- one bank transaction, which is a modded account.bank.statement.line.
197-
198-3. In relation to account_payment:
199- An additional state was inserted between 'open' and 'done', to reflect a
200- exported bank orders file which was not reported back through statements.
201- The import of statements matches the payments and reconciles them when
202- needed, flagging them 'done'. When no export wizards are found, the
203- default behavior is to flag the orders as 'sent', not as 'done'.
204-'''
205-import time
206-from osv import osv, fields
207-from tools.translate import _
208-
209-class account_banking_account_settings(osv.osv):
210- '''Default Journal for Bank Account'''
211- _name = 'account.banking.account.settings'
212- _description = __doc__
213- _columns = {
214- 'company_id': fields.many2one('res.company', 'Company', select=True,
215- required=True),
216- 'partner_bank_id': fields.many2one('res.partner.bank', 'Bank Account',
217- select=True, required=True),
218- 'journal_id': fields.many2one('account.journal', 'Journal',
219- required=True),
220- 'default_credit_account_id': fields.many2one(
221- 'account.account', 'Default credit account', select=True,
222- help=('The account to use when an unexpected payment was signaled. '
223- 'This can happen when a direct debit payment is cancelled '
224- 'by a customer, or when no matching payment can be found. '
225- ' Mind that you can correct movements before confirming them.'
226- ),
227- required=True
228- ),
229- 'default_debit_account_id': fields.many2one(
230- 'account.account', 'Default debit account',
231- select=True, required=True,
232- help=('The account to use when an unexpected payment is received. '
233- 'This can be needed when a customer pays in advance or when '
234- 'no matching invoice can be found. Mind that you can correct '
235- 'movements before confirming them.'
236- ),
237- ),
238- }
239-
240- def _default_company(self, cursor, uid, context={}):
241- user = self.pool.get('res.users').browse(cursor, uid, uid, context=context)
242- if user.company_id:
243- return user.company_id.id
244- return self.pool.get('res.company').search(cursor, uid,
245- [('parent_id', '=', False)]
246- )[0]
247-
248- _defaults = {
249- 'company_id': _default_company,
250- }
251-account_banking_account_settings()
252-
253-class account_banking_imported_file(osv.osv):
254- '''Imported Bank Statements File'''
255- _name = 'account.banking.imported.file'
256- _description = __doc__
257- _columns = {
258- 'company_id': fields.many2one('res.company', 'Company',
259- select=True, readonly=True
260- ),
261- 'date': fields.datetime('Import Date', readonly=False, select=True),
262- 'format': fields.char('File Format', size=20, readonly=False),
263- 'file': fields.binary('Raw Data', readonly=False),
264- 'log': fields.text('Import Log', readonly=False),
265- 'user_id': fields.many2one('res.users', 'Responsible User',
266- readonly=False, select=True
267- ),
268- 'state': fields.selection(
269- [('unfinished', 'Unfinished'),
270- ('error', 'Error'),
271- ('ready', 'Finished'),
272- ], 'State', select=True, readonly=True
273- ),
274- 'statement_ids': fields.one2many('account.bank.statement',
275- 'banking_id', 'Statements',
276- readonly=False,
277- ),
278- }
279- _defaults = {
280- 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
281- 'user_id': lambda self, cursor, uid, context: uid,
282- }
283-account_banking_imported_file()
284-
285-class account_bank_statement(osv.osv):
286- '''
287- Extensions from account_bank_statement:
288- 1. Removed period_id (transformed to optional boolean) - as it is no
289- longer needed.
290- 2. Extended 'button_confirm' trigger to cope with the period per
291- statement_line situation.
292- 3. Added optional relation with imported statements file
293- '''
294- _inherit = 'account.bank.statement'
295- _columns = {
296- 'period_id': fields.many2one('account.period', 'Period',
297- required=False, readonly=True),
298- 'banking_id': fields.many2one('account.banking.imported.file',
299- 'Imported File', readonly=True,
300- ),
301- }
302- _defaults = {
303- 'period_id': lambda *a: False,
304- }
305-
306- def _get_period(self, cursor, uid, date, context={}):
307- '''
308- Find matching period for date, not meant for _defaults.
309- '''
310- period_obj = self.pool.get('account.period')
311- periods = period_obj.find(cursor, uid, dt=date, context=context)
312- return periods and periods[0] or False
313-
314- def button_confirm(self, cursor, uid, ids, context=None):
315- # This is largely a copy of the original code in account
316- # As there is no valid inheritance mechanism for large actions, this
317- # is the only option to add functionality to existing actions.
318- # WARNING: when the original code changes, this trigger has to be
319- # updated in sync.
320- done = []
321- res_currency_obj = self.pool.get('res.currency')
322- res_users_obj = self.pool.get('res.users')
323- account_move_obj = self.pool.get('account.move')
324- account_move_line_obj = self.pool.get('account.move.line')
325- account_bank_statement_line_obj = \
326- self.pool.get('account.bank.statement.line')
327-
328- company_currency_id = res_users_obj.browse(cursor, uid, uid,
329- context=context).company_id.currency_id.id
330-
331- for st in self.browse(cursor, uid, ids, context):
332- if not st.state=='draft':
333- continue
334- end_bal = st.balance_end or 0.0
335- if not (abs(end_bal - st.balance_end_real) < 0.0001):
336- raise osv.except_osv(_('Error !'),
337- _('The statement balance is incorrect !\n') +
338- _('The expected balance (%.2f) is different '
339- 'than the computed one. (%.2f)') % (
340- st.balance_end_real, st.balance_end
341- ))
342- if (not st.journal_id.default_credit_account_id) \
343- or (not st.journal_id.default_debit_account_id):
344- raise osv.except_osv(_('Configration Error !'),
345- _('Please verify that an account is defined in the journal.'))
346-
347- for line in st.move_line_ids:
348- if line.state <> 'valid':
349- raise osv.except_osv(_('Error !'),
350- _('The account entries lines are not in valid state.'))
351-
352- for move in st.line_ids:
353- period_id = self._get_period(cursor, uid, move.date, context=context)
354- move_id = account_move_obj.create(cursor, uid, {
355- 'journal_id': st.journal_id.id,
356- 'period_id': period_id,
357- }, context=context)
358- account_bank_statement_line_obj.write(cursor, uid, [move.id], {
359- 'move_ids': [(4, move_id, False)]
360- })
361- if not move.amount:
362- continue
363-
364- torec = []
365- if move.amount >= 0:
366- account_id = st.journal_id.default_credit_account_id.id
367- else:
368- account_id = st.journal_id.default_debit_account_id.id
369- acc_cur = ((move.amount<=0) and st.journal_id.default_debit_account_id) \
370- or move.account_id
371- amount = res_currency_obj.compute(cursor, uid, st.currency.id,
372- company_currency_id, move.amount, context=context,
373- account=acc_cur)
374- if move.reconcile_id and move.reconcile_id.line_new_ids:
375- for newline in move.reconcile_id.line_new_ids:
376- amount += newline.amount
377-
378- val = {
379- 'name': move.name,
380- 'date': move.date,
381- 'ref': move.ref,
382- 'move_id': move_id,
383- 'partner_id': ((move.partner_id) and move.partner_id.id) or False,
384- 'account_id': (move.account_id) and move.account_id.id,
385- 'credit': ((amount>0) and amount) or 0.0,
386- 'debit': ((amount<0) and -amount) or 0.0,
387- 'statement_id': st.id,
388- 'journal_id': st.journal_id.id,
389- 'period_id': period_id,
390- 'currency_id': st.currency.id,
391- }
392-
393- amount = res_currency_obj.compute(cursor, uid, st.currency.id,
394- company_currency_id, move.amount, context=context,
395- account=acc_cur)
396-
397- if move.account_id and move.account_id.currency_id:
398- val['currency_id'] = move.account_id.currency_id.id
399- if company_currency_id==move.account_id.currency_id.id:
400- amount_cur = move.amount
401- else:
402- amount_cur = res_currency_obj.compute(cursor, uid, company_currency_id,
403- move.account_id.currency_id.id, amount, context=context,
404- account=acc_cur)
405- val['amount_currency'] = amount_cur
406-
407- torec.append(account_move_line_obj.create(cursor, uid, val , context=context))
408-
409- if move.reconcile_id and move.reconcile_id.line_new_ids:
410- for newline in move.reconcile_id.line_new_ids:
411- account_move_line_obj.create(cursor, uid, {
412- 'name': newline.name or move.name,
413- 'date': move.date,
414- 'ref': move.ref,
415- 'move_id': move_id,
416- 'partner_id': ((move.partner_id) and move.partner_id.id) or False,
417- 'account_id': (newline.account_id) and newline.account_id.id,
418- 'debit': newline.amount>0 and newline.amount or 0.0,
419- 'credit': newline.amount<0 and -newline.amount or 0.0,
420- 'statement_id': st.id,
421- 'journal_id': st.journal_id.id,
422- 'period_id': period_id,
423- }, context=context)
424-
425- # Fill the secondary amount/currency
426- # if currency is not the same as the company
427- amount_currency = False
428- currency_id = False
429- if st.currency.id <> company_currency_id:
430- amount_currency = move.amount
431- currency_id = st.currency.id
432-
433- account_move_line_obj.create(cursor, uid, {
434- 'name': move.name,
435- 'date': move.date,
436- 'ref': move.ref,
437- 'move_id': move_id,
438- 'partner_id': ((move.partner_id) and move.partner_id.id) or False,
439- 'account_id': account_id,
440- 'credit': ((amount < 0) and -amount) or 0.0,
441- 'debit': ((amount > 0) and amount) or 0.0,
442- 'statement_id': st.id,
443- 'journal_id': st.journal_id.id,
444- 'period_id': period_id,
445- 'amount_currency': amount_currency,
446- 'currency_id': currency_id,
447- }, context=context)
448-
449- for line in account_move_line_obj.browse(cursor, uid, [x.id for x in
450- account_move_obj.browse(cursor, uid, move_id, context=context).line_id
451- ], context=context):
452- if line.state <> 'valid':
453- raise osv.except_osv(
454- _('Error !'),
455- _('Account move line "%s" is not valid')
456- % line.name
457- )
458-
459- if move.reconcile_id and move.reconcile_id.line_ids:
460- torec += map(lambda x: x.id, move.reconcile_id.line_ids)
461- #try:
462- if abs(move.reconcile_amount-move.amount)<0.0001:
463- account_move_line_obj.reconcile(
464- cursor, uid, torec, 'statement', context
465- )
466- else:
467- account_move_line_obj.reconcile_partial(
468- cursor, uid, torec, 'statement', context
469- )
470- #except:
471- # raise osv.except_osv(
472- # _('Error !'),
473- # _('Unable to reconcile entry "%s": %.2f') %
474- # (move.name, move.amount)
475- # )
476-
477- if st.journal_id.entry_posted:
478- account_move_obj.write(cursor, uid, [move_id], {'state':'posted'})
479- done.append(st.id)
480- self.write(cursor, uid, done, {'state':'confirm'}, context=context)
481- return True
482-
483-account_bank_statement()
484-
485-class account_bank_statement_line(osv.osv):
486- '''
487- Extension on basic class:
488- 1. Extra links to account.period and res.partner.bank for tracing and
489- matching.
490- 2. Extra 'trans' field to carry the transaction id of the bank.
491- 3. Extra 'international' flag to indicate the missing of a remote
492- account number. Some banks use seperate international banking
493- modules that do not integrate with the standard transaction files.
494- 4. Readonly states for most fields except when in draft.
495- '''
496- _inherit = 'account.bank.statement.line'
497- _description = 'Bank Transaction'
498-
499- def _get_period(self, cursor, uid, context={}):
500- date = context.get('date') and context['date'] or None
501- periods = self.pool.get('account.period').find(cursor, uid, dt=date)
502- return periods and periods[0] or False
503-
504- def _seems_international(self, cursor, uid, context={}):
505- '''
506- Some banks have seperate international banking modules which do not
507- translate correctly into the national formats. Instead, they
508- leave key fields blank and signal this anomaly with a special
509- transfer type.
510- With the introduction of SEPA, this may worsen greatly, as SEPA
511- payments are considered to be analogous to international payments
512- by most local formats.
513- '''
514- # Quick and dirty check: if remote bank account is missing, assume
515- # international transfer
516- return not (
517- context.get('partner_bank_id') and context['partner_bank_id']
518- )
519- # Not so dirty check: check if partner_id is set. If it is, check the
520- # default/invoice addresses country. If it is the same as our
521- # company's, its local, else international.
522- # TODO: to be done
523-
524- _columns = {
525- # Redefines
526- 'amount': fields.float('Amount', readonly=True,
527- states={'draft': [('readonly', False)]}),
528- 'ref': fields.char('Ref.', size=32, readonly=True,
529- states={'draft': [('readonly', False)]}),
530- 'name': fields.char('Name', size=64, required=True, readonly=True,
531- states={'draft': [('readonly', False)]}),
532- 'date': fields.date('Date', required=True, readonly=True,
533- states={'draft': [('readonly', False)]}),
534- # New columns
535- 'trans': fields.char('Bank Transaction ID', size=15, required=False,
536- readonly=True,
537- states={'draft':[('readonly', False)]},
538- ),
539- 'partner_bank_id': fields.many2one('res.partner.bank', 'Bank Account',
540- required=False, readonly=True,
541- states={'draft':[('readonly', False)]},
542- ),
543- 'period_id': fields.many2one('account.period', 'Period', required=True,
544- states={'confirm': [('readonly', True)]}),
545- # Not used yet, but usefull in the future.
546- 'international': fields.boolean('International Transaction',
547- required=False,
548- states={'confirm': [('readonly', True)]},
549- ),
550- }
551-
552- _defaults = {
553- 'period_id': _get_period,
554- 'international': _seems_international,
555- }
556-
557- def onchange_partner_id(self, cursor, uid, line_id, partner_id, type,
558- currency_id, context={}
559- ):
560- if not partner_id:
561- return {}
562- users_obj = self.pool.get('res.users')
563- partner_obj = self.pool.get('res.partner')
564-
565- company_currency_id = users_obj.browse(cursor, uid, uid, context=context)\
566- .company_id.currency_id.id
567-
568- if not currency_id:
569- currency_id = company_currency_id
570-
571- partner = partner_obj.browse(cursor, uid, partner_id, context=context)
572- if partner.supplier and not part.customer:
573- account_id = part.property_account_payable.id
574- type = 'supplier'
575- elif partner.supplier and not part.customer:
576- account_id = part.property_account_receivable.id
577- type = 'customer'
578- else:
579- account_id = 0
580- type = 'general'
581-
582- return {'value': {'type': type , 'account_id': account_id}}
583-
584- def write(self, cursor, uid, ids, values, context={}):
585- # TODO: Not sure what to do with this, as it seems that most of
586- # this code is related to res_partner_bank and not to this class.
587- account_numbers = []
588- bank_obj = self.pool.get('res.partner.bank')
589- statement_line_obj = self.pool.get('account.bank.statement.line')
590-
591- if 'partner_id' in values:
592- bank_account_ids = bank_obj.search(cursor, uid,
593- [('partner_id','=', values['partner_id'])]
594- )
595- bank_accounts = bank_obj.browse(cursor, uid, bank_account_ids)
596- import_account_numbers = statement_line_obj.browse(cursor, uid, ids)
597-
598- for accno in bank_accounts:
599- # Allow acc_number and iban to co-exist (SEPA will unite the
600- # two, but - as seen now - in an uneven pace per country)
601- if accno.acc_number:
602- account_numbers.append(accno.acc_number)
603- if accno.iban:
604- account_numbers.append(accno.iban)
605-
606- if any([x for x in import_account_numbers if x.bank_accnumber in
607- account_numbers]):
608- for accno in import_account_numbers:
609- account_data = _get_account_data(accno.bank_accnumber)
610- if account_data:
611- bank_id = bank_obj.search(cursor, uid, [
612- ('name', '=', account_data['bank_name'])
613- ])
614- if not bank_id:
615- bank_id = bank_obj.create(cursor, uid, {
616- 'name': account_data['bank_name'],
617- 'bic': account_data['bic'],
618- 'active': 1,
619- })
620- else:
621- bank_id = bank_id[0]
622-
623- bank_acc = bank_obj.create(cursor, uid, {
624- 'state': 'bank',
625- 'partner_id': values['partner_id'],
626- 'bank': bank_id,
627- 'acc_number': accno.bank_accnumber,
628- })
629-
630- bank_iban = bank_obj.create(cursor, uid, {
631- 'state': 'iban',
632- 'partner_id': values['partner_id'],
633- 'bank': bank_id,
634- 'iban': account_data['iban'],
635- })
636-
637- else:
638- bank_acc = bank_obj.create(cursor, uid, {
639- 'state': 'bank',
640- 'partner_id': values['partner_id'],
641- 'acc_number': accno.bank_accnumber,
642- })
643-
644- return super(account_bank_statement_line, self).write(
645- cursor, uid, ids, values, context
646- )
647-
648-account_bank_statement_line()
649-
650-class payment_type(osv.osv):
651- '''
652- Make description field translatable #, add country context
653- '''
654- _inherit = 'payment.type'
655- _columns = {
656- 'name': fields.char('Name', size=64, required=True, translate=True,
657- help='Payment Type'
658- ),
659- #'country_id': fields.many2one('res.country', 'Country',
660- # required=False,
661- # help='Use this to limit this type to a specific country'
662- # ),
663- }
664- #_defaults = {
665- # 'country_id': lambda *a: False,
666- #}
667-payment_type()
668-
669-class payment_line(osv.osv):
670- '''
671- Add extra export_state and date_done fields; make destination bank account
672- mandatory, as it makes no sense to send payments into thin air.
673- '''
674- _inherit = 'payment.line'
675- _columns = {
676- # New fields
677- 'bank_id': fields.many2one('res.partner.bank',
678- 'Destination Bank account',
679- required=True
680- ),
681- 'export_state': fields.selection([
682- ('draft', 'Draft'),
683- ('open','Confirmed'),
684- ('cancel','Cancelled'),
685- ('sent', 'Sent'),
686- ('done','Done'),
687- ], 'State', select=True
688- ),
689- # Redefined fields: added states
690- 'date_done': fields.datetime('Date Confirmed', select=True,
691- readonly=True),
692- 'name': fields.char(
693- 'Your Reference', size=64, required=True,
694- states={
695- 'sent': [('readonly', True)],
696- 'done': [('readonly', True)]
697- },
698- ),
699- 'communication': fields.char(
700- 'Communication', size=64, required=True,
701- help=("Used as the message between ordering customer and current "
702- "company. Depicts 'What do you want to say to the recipient"
703- " about this order ?'"
704- ),
705- states={
706- 'sent': [('readonly', True)],
707- 'done': [('readonly', True)]
708- },
709- ),
710- 'communication2': fields.char(
711- 'Communication 2', size=64,
712- help='The successor message of Communication.',
713- states={
714- 'sent': [('readonly', True)],
715- 'done': [('readonly', True)]
716- },
717- ),
718- 'move_line_id': fields.many2one(
719- 'account.move.line', 'Entry line',
720- domain=[('reconcile_id','=', False),
721- ('account_id.type', '=','payable')
722- ],
723- help=('This Entry Line will be referred for the information of '
724- 'the ordering customer.'
725- ),
726- states={
727- 'sent': [('readonly', True)],
728- 'done': [('readonly', True)]
729- },
730- ),
731- 'amount_currency': fields.float(
732- 'Amount in Partner Currency', digits=(16,2),
733- required=True,
734- help='Payment amount in the partner currency',
735- states={
736- 'sent': [('readonly', True)],
737- 'done': [('readonly', True)]
738- },
739- ),
740- 'currency': fields.many2one(
741- 'res.currency', 'Partner Currency', required=True,
742- states={
743- 'sent': [('readonly', True)],
744- 'done': [('readonly', True)]
745- },
746- ),
747- 'bank_id': fields.many2one(
748- 'res.partner.bank', 'Destination Bank account',
749- states={
750- 'sent': [('readonly', True)],
751- 'done': [('readonly', True)]
752- },
753- ),
754- 'order_id': fields.many2one(
755- 'payment.order', 'Order', required=True,
756- ondelete='cascade', select=True,
757- states={
758- 'sent': [('readonly', True)],
759- 'done': [('readonly', True)]
760- },
761- ),
762- 'partner_id': fields.many2one(
763- 'res.partner', string="Partner", required=True,
764- help='The Ordering Customer',
765- states={
766- 'sent': [('readonly', True)],
767- 'done': [('readonly', True)]
768- },
769- ),
770- 'date': fields.date(
771- 'Payment Date',
772- help=("If no payment date is specified, the bank will treat this "
773- "payment line directly"
774- ),
775- states={
776- 'sent': [('readonly', True)],
777- 'done': [('readonly', True)]
778- },
779- ),
780- 'state': fields.selection([
781- ('normal','Free'),
782- ('structured','Structured')
783- ], 'Communication Type', required=True,
784- states={
785- 'sent': [('readonly', True)],
786- 'done': [('readonly', True)]
787- },
788- ),
789- }
790- _defaults = {
791- 'export_state': lambda *a: 'draft',
792- 'date_done': lambda *a: False,
793- }
794-payment_line()
795-
796-class payment_order(osv.osv):
797- '''
798- Enable extra state for payment exports
799- '''
800- _inherit = 'payment.order'
801- _columns = {
802- 'date_planned': fields.date(
803- 'Scheduled date if fixed',
804- states={
805- 'sent': [('readonly', True)],
806- 'done': [('readonly', True)]
807- },
808- help='Select a date if you have chosen Preferred Date to be fixed.'
809- ),
810- 'reference': fields.char(
811- 'Reference', size=128, required=True,
812- states={
813- 'sent': [('readonly', True)],
814- 'done': [('readonly', True)]
815- },
816- ),
817- 'mode': fields.many2one(
818- 'payment.mode', 'Payment mode', select=True, required=True,
819- states={
820- 'sent': [('readonly', True)],
821- 'done': [('readonly', True)]
822- },
823- help='Select the Payment Mode to be applied.'
824- ),
825- 'state': fields.selection([
826- ('draft', 'Draft'),
827- ('open','Confirmed'),
828- ('cancel','Cancelled'),
829- ('sent', 'Sent'),
830- ('done','Done'),
831- ], 'State', select=True
832- ),
833- 'line_ids': fields.one2many(
834- 'payment.line', 'order_id', 'Payment lines',
835- states={
836- 'sent': [('readonly', True)],
837- 'done': [('readonly', True)]
838- },
839- ),
840- 'user_id': fields.many2one(
841- 'res.users','User', required=True,
842- states={
843- 'sent': [('readonly', True)],
844- 'done': [('readonly', True)]
845- },
846- ),
847- 'date_prefered': fields.selection([
848- ('now', 'Directly'),
849- ('due', 'Due date'),
850- ('fixed', 'Fixed date')
851- ], "Preferred date", change_default=True, required=True,
852- states={
853- 'sent': [('readonly', True)],
854- 'done': [('readonly', True)]
855- },
856- help=("Choose an option for the Payment Order:'Fixed' stands for a "
857- "date specified by you.'Directly' stands for the direct "
858- "execution.'Due date' stands for the scheduled date of "
859- "execution."
860- )
861- ),
862- }
863-
864- def set_to_draft(self, cr, uid, ids, *args):
865- cr.execute("UPDATE payment_line "
866- "SET export_state = 'draft' "
867- "WHERE order_id in (%s)" % (
868- ','.join(map(str, ids))
869- ))
870- return super(payment_order, self).set_to_draft(
871- cr, uid, ids, *args
872- )
873-
874- def action_sent(self, cr, uid, ids, *args):
875- cr.execute("UPDATE payment_line "
876- "SET export_state = 'sent' "
877- "WHERE order_id in (%s)" % (
878- ','.join(map(str, ids))
879- ))
880- return True
881-
882- def set_done(self, cr, uid, id, *args):
883- '''
884- Extend standard transition to update childs as well.
885- '''
886- cr.execute("UPDATE payment_line "
887- "SET export_state = 'done', date_done = '%s' "
888- "WHERE order_id = %s" % (
889- time.strftime('%Y-%m-%d'),
890- self.id
891- ))
892- return super(payment_order, self).set_done(
893- cr, uid, id, *args
894- )
895-
896-payment_order()
897-
898-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
899
900=== removed file 'account_banking/account_banking_demo.xml'
901--- account_banking/account_banking_demo.xml 2010-01-13 20:15:24 +0000
902+++ account_banking/account_banking_demo.xml 1970-01-01 00:00:00 +0000
903@@ -1,32 +0,0 @@
904-<?xml version="1.0" encoding="utf-8"?>
905-<openerp>
906-<data noupdate="1">
907- <record model="res.partner" id="partner_demo1">
908- <field name="name">Tiny S.p.r.l</field>
909- </record>
910- <record model="res.partner.bank" id="partner_bank1">
911- <field name="acc_number">301915554082</field>
912- <field name="state">bank</field>
913- <field name="partner_id" ref="partner_demo1"></field>
914- </record>
915-
916- <record model="res.partner" id="partner_demo2">
917- <field name="name">The-design Company</field>
918- </record>
919- <record model="res.partner.bank" id="partner_bank2">
920- <field name="acc_number">050000000017</field>
921- <field name="state">iban</field>
922- <field name="partner_id" ref="partner_demo2"></field>
923- </record>
924-
925-<!-- <record model="res.partner.bank" id="partner_agrolait">
926- <field name="acc_number">301915554082</field>
927- <field name="partner_id" ref="base.res_partner_agrolait"/>
928- </record>
929-
930- <record model="res.partner.bank" id="res_partner_10">
931- <field name="acc_number">050000000017</field>
932- <field name="partner_id" ref="base.res_partner_10"/>
933- </record>-->
934-</data>
935-</openerp>
936
937=== removed file 'account_banking/account_banking_import_wizard.xml'
938--- account_banking/account_banking_import_wizard.xml 2010-01-13 20:15:24 +0000
939+++ account_banking/account_banking_import_wizard.xml 1970-01-01 00:00:00 +0000
940@@ -1,15 +0,0 @@
941-<?xml version="1.0" encoding="utf-8"?>
942-<!--
943- Copyright (C) EduSense BV <http://www.edusense.nl>
944- All rights reserved.
945- The licence is in the file __terp__.py
946--->
947-<openerp>
948- <data>
949- <wizard id="wizard_account_banking_import_file"
950- string="Import Bank Statements File"
951- model="account.bank.statement"
952- name="account_banking.banking_import"
953- />
954- </data>
955-</openerp>
956
957=== removed file 'account_banking/account_banking_view.xml'
958--- account_banking/account_banking_view.xml 2010-01-13 20:15:24 +0000
959+++ account_banking/account_banking_view.xml 1970-01-01 00:00:00 +0000
960@@ -1,211 +0,0 @@
961-<?xml version="1.0" encoding="utf-8"?>
962-<!--
963- Copyright (C) EduSense BV <http://www.edusense.nl>
964- All rights reserved.
965- The licence is in the file __terp__.py
966--->
967-<openerp>
968- <data>
969- <!-- Create new submenu in finance/periodical processing -->
970- <menuitem name="Banking"
971- id="account_banking.menu_finance_banking_actions"
972- parent="account.menu_finance_periodical_processing"
973- />
974- <!-- Create new submenu in finance/configuration -->
975- <menuitem name="Banking"
976- id="account_banking.menu_finance_banking_settings"
977- parent="account.menu_finance_configuration"
978- />
979-
980- <!-- Create new view on default journals for bank accounts -->
981- <record model="ir.ui.view" id="view_banking_account_settings_form">
982- <field name="name">account.banking.account.settings.form</field>
983- <field name="model">account.banking.account.settings</field>
984- <field name="type">form</field>
985- <field name="arch" type="xml">
986- <form string="Default Import Settings for Bank Account">
987- <field name="company_id" />
988- <separator string="Bank Account Details" colspan="4" />
989- <field name="partner_bank_id" /> <!-- Needs fiddling... domain="[('partner_id','=',company_id.partner_id)]"/-->
990- <field name="journal_id" domain="[('type','=','cash')]" />
991- <separator string="Default Accounts for Unknown Movements" colspan="4" />
992- <field name="default_credit_account_id" />
993- <field name="default_debit_account_id" />
994- </form>
995- </field>
996- </record>
997- <record model="ir.ui.view" id="view_banking_account_settings_tree">
998- <field name="name">account.banking.account.settings.tree</field>
999- <field name="model">account.banking.account.settings</field>
1000- <field name="type">tree</field>
1001- <field name="arch" type="xml">
1002- <tree string="Default Import Settings for Bank Account">
1003- <field name="company_id" />
1004- <field name="partner_bank_id" /> <!-- Needs fiddling... domain="[('partner_id','=',company_id.partner_id)]"/-->
1005- <field name="journal_id" domain="[('type','=','cash')]" />
1006- </tree>
1007- </field>
1008- </record>
1009- <record model="ir.actions.act_window" id="action_account_banking_journals">
1010- <field name="name">Default Import Settings for Bank Accounts</field>
1011- <field name="type">ir.actions.act_window</field>
1012- <field name="res_model">account.banking.account.settings</field>
1013- <field name="view_type">form</field>
1014- <field name="view_mode">tree,form</field>
1015- </record>
1016-
1017- <!-- Create new submenu for finance configuration -->
1018- <menuitem name="Default Import Settings for Bank Accounts"
1019- id="menu_action_account_banking_bank_journals"
1020- parent="account_banking.menu_finance_banking_settings"
1021- action="action_account_banking_journals"
1022- sequence="12"
1023- />
1024-
1025- <!-- Create new view on imported statement files -->
1026- <record model="ir.ui.view" id="view_account_banking_imported_file_form">
1027- <field name="name">account.banking.imported.file.form</field>
1028- <field name="model">account.banking.imported.file</field>
1029- <field name="type">form</field>
1030- <field name="arch" type="xml">
1031- <form string="Imported Bank Statements">
1032- <notebook colspan="4">
1033- <page string="Import Details">
1034- <field name="company_id" />
1035- <field name="date" />
1036- <field name="user_id" />
1037- <field name="state" />
1038- <field name="file"/>
1039- <field name="format" />
1040- </page>
1041- <page string="Statements">
1042- <field name="statement_ids" colspan="4"/>
1043- </page>
1044- <page string="Import Log">
1045- <field name="log" colspan="4"/>
1046- </page>
1047- </notebook>
1048- </form>
1049- </field>
1050- </record>
1051- <record model="ir.ui.view" id="view_account_banking_imported_file_tree">
1052- <field name="name">account.banking.imported.file.tree</field>
1053- <field name="model">account.banking.imported.file</field>
1054- <field name="type">tree</field>
1055- <field name="arch" type="xml">
1056- <tree string="Imported Bank Statements Files" colors="red:state=='error';blue:state=='unfinished'">
1057- <field name="company_id" />
1058- <field name="date" />
1059- <field name="user_id" />
1060- <field name="state" />
1061- </tree>
1062- </field>
1063- </record>
1064- <record model="ir.actions.act_window" id="action_account_banking_imported_files">
1065- <field name="name">Imported Bank Statements Files</field>
1066- <field name="type">ir.actions.act_window</field>
1067- <field name="res_model">account.banking.imported.file</field>
1068- <field name="view_type">form</field>
1069- <field name="view_mode">tree,form</field>
1070- </record>
1071-
1072- <!-- Add a menu item for it -->
1073- <menuitem name="Imported Bank Statements Files"
1074- id="menu_action_account_banking_imported_files"
1075- parent="account_banking.menu_finance_banking_actions"
1076- action="action_account_banking_imported_files"
1077- sequence="12"
1078- />
1079-
1080- <!-- Add the import wizard to the menu -->
1081- <menuitem name="Import Bank Statements File"
1082- id="menu_account_banking_import_wizard"
1083- parent="account_banking.menu_finance_banking_actions"
1084- type="wizard"
1085- action="wizard_account_banking_import_file"
1086- sequence="15"/>
1087-
1088- <!-- Create right menu entry to see statements -->
1089- <act_window name="Bank Statements File"
1090- domain="[('banking_id', '=', active_id)]"
1091- res_model="account.banking.imported.file"
1092- src_model="account.bank.statement"
1093- view_type="form"
1094- view_mode="tree,form"
1095- id="act_account_payment_account_bank_statement"/>
1096-
1097- <!-- Move period_id from bank_statement form to bank_statement_line form
1098- -->
1099- <record id="view_banking_bank_statement_tree_1" model="ir.ui.view">
1100- <field name="name">account.bank.statement.tree.banking</field>
1101- <field name="inherit_id" ref="account.view_bank_statement_tree" />
1102- <field name="model">account.bank.statement</field>
1103- <field name="type">tree</field>
1104- <field name="arch" type="xml">
1105- <field name="period_id" position="replace"/>
1106- </field>
1107- </record>
1108- <record id="view_banking_bank_statement_form_1" model="ir.ui.view">
1109- <field name="name">account.bank.statement.form.banking-1</field>
1110- <field name="inherit_id" ref="account.view_bank_statement_form" />
1111- <field name="model">account.bank.statement</field>
1112- <field name="type">form</field>
1113- <field name="arch" type="xml">
1114- <field name="period_id" position="replace"/>
1115- </field>
1116- </record>
1117- <record id="view_banking_bank_statement_form_2" model="ir.ui.view">
1118- <field name="name">account.bank.statement.form.banking-2</field>
1119- <field name="inherit_id" ref="account.view_bank_statement_form" />
1120- <field name="model">account.bank.statement</field>
1121- <field name="type">form</field>
1122- <field name="arch" type="xml">
1123- <xpath expr="/form/notebook/page[@string='Entry encoding']/field/tree/field[@name='type']" position="after">
1124- <field name="period_id"/>
1125- </xpath>
1126- </field>
1127- </record>
1128- <record id="view_banking_bank_statement_form_3" model="ir.ui.view">
1129- <field name="name">account.bank.statement.form.banking-3</field>
1130- <field name="inherit_id" ref="account.view_bank_statement_form" />
1131- <field name="model">account.bank.statement</field>
1132- <field name="type">form</field>
1133- <field name="arch" type="xml">
1134- <xpath expr="/form/notebook/page[@string='Entry encoding']/field/form/field[@name='type']" position="after">
1135- <field name="period_id"/>
1136- </xpath>
1137- </field>
1138- </record>
1139-
1140- <!-- Reset trigger on button_confirm to the trigger code in this module -->
1141- <record id="view_banking_bank_statement_form_4" model="ir.ui.view">
1142- <field name="name">account.bank.statement.form.banking-4</field>
1143- <field name="inherit_id" ref="account.view_bank_statement_form" />
1144- <field name="model">account.bank.statement</field>
1145- <field name="type">form</field>
1146- <field name="arch" type="xml">
1147- <button name="button_confirm" position="replace">
1148- <button name="button_confirm" states="draft" string="Confirm" type="object"/>
1149- </button>
1150- </field>
1151- </record>
1152-
1153- <!-- Make buttons on payment order sensitive for 'Sent' state -->
1154- <record id="view_banking_payment_order_form_1" model="ir.ui.view">
1155- <field name="name">account.payment.order.form.banking-1</field>
1156- <field name="inherit_id" ref="account_payment.view_payment_order_form" />
1157- <field name="model">payment.order</field>
1158- <field name="type">form</field>
1159- <field name="arch" type="xml">
1160- <xpath expr="/form/button[@string='Select Invoices to Pay']"
1161- position="replace">
1162- <button name="%(account_payment.wizard_populate_payment)s"
1163- colspan="2" type="action" states="draft,open"
1164- string="Select Invoices to Pay"
1165- />
1166- </xpath>
1167- </field>
1168- </record>
1169-
1170- </data>
1171-</openerp>
1172
1173=== removed file 'account_banking/account_banking_workflow.xml'
1174--- account_banking/account_banking_workflow.xml 2010-01-13 20:15:24 +0000
1175+++ account_banking/account_banking_workflow.xml 1970-01-01 00:00:00 +0000
1176@@ -1,30 +0,0 @@
1177-<?xml version="1.0" encoding="utf-8"?>
1178-<!--
1179- Copyright (C) EduSense BV <http://www.edusense.nl>
1180- All rights reserved.
1181- The licence is in the file __terp__.py
1182--->
1183-<openerp>
1184- <data>
1185- <!-- New activity for workflow payment order: sent -->
1186- <record id="act_sent" model="workflow.activity">
1187- <field name="name">sent</field>
1188- <field name="wkf_id" ref="account_payment.wkf_payment_order"/>
1189- <field name="action">action_sent()
1190-write({'state':'sent'})</field>
1191- <field name="kind">function</field>
1192- </record>
1193- <!-- Add new transition sent -> done -->
1194- <record id="trans_sent_done" model="workflow.transition">
1195- <field name="act_from" ref="act_sent"/>
1196- <field name="act_to" ref="account_payment.act_done"/>
1197- <field name="signal">done</field>
1198- </record>
1199- <!-- Rewrite existing open -> done transition to include 'sent' -->
1200- <record id="account_payment.trans_open_done" model="workflow.transition">
1201- <field name="act_from" ref="account_payment.act_open"/>
1202- <field name="act_to" ref="act_sent"/>
1203- <field name="signal">sent</field>
1204- </record>
1205- </data>
1206-</openerp>
1207
1208=== removed directory 'account_banking/i18n'
1209=== removed file 'account_banking/i18n/account_banking.pot'
1210--- account_banking/i18n/account_banking.pot 2010-01-13 20:15:24 +0000
1211+++ account_banking/i18n/account_banking.pot 1970-01-01 00:00:00 +0000
1212@@ -1,562 +0,0 @@
1213-# Translation of OpenERP Server.
1214-# This file contains the translation of the following modules:
1215-# * account_banking
1216-#
1217-msgid ""
1218-msgstr ""
1219-"Project-Id-Version: OpenERP Server 5.0.7\n"
1220-"Report-Msgid-Bugs-To: support@openerp.com\n"
1221-"POT-Creation-Date: 2010-01-08 15:30:50+0000\n"
1222-"PO-Revision-Date: 2010-01-08 15:30:50+0000\n"
1223-"Last-Translator: <>\n"
1224-"Language-Team: \n"
1225-"MIME-Version: 1.0\n"
1226-"Content-Type: text/plain; charset=UTF-8\n"
1227-"Content-Transfer-Encoding: \n"
1228-"Plural-Forms: \n"
1229-
1230-#. module: account_banking
1231-#: wizard_view:account_banking.banking_import,import:0
1232-msgid "Results:"
1233-msgstr ""
1234-
1235-#. module: account_banking
1236-#: code:addons/account_banking/wizard/bank_import.py:0
1237-#, python-format
1238-msgid "Number of errors found"
1239-msgstr ""
1240-
1241-#. module: account_banking
1242-#: wizard_view:account_banking.banking_import,init:0
1243-msgid "Select the processing details:"
1244-msgstr ""
1245-
1246-#. module: account_banking
1247-#: constraint:ir.actions.act_window:0
1248-msgid "Invalid model name in the action definition."
1249-msgstr ""
1250-
1251-#. module: account_banking
1252-#: wizard_button:account_banking.banking_import,import,open:0
1253-msgid "_Open Statement"
1254-msgstr ""
1255-
1256-#. module: account_banking
1257-#: field:payment.line,date_done:0
1258-msgid "Date Confirmed"
1259-msgstr ""
1260-
1261-#. module: account_banking
1262-#: wizard_button:account_banking.banking_import,import,end:0
1263-msgid "_Close"
1264-msgstr ""
1265-
1266-#. module: account_banking
1267-#: model:ir.model,name:account_banking.model_account_banking_account_settings
1268-msgid "Default Journal for Bank Account"
1269-msgstr ""
1270-
1271-#. module: account_banking
1272-#: wizard_field:account_banking.banking_import,init,file:0
1273-msgid "Statements File"
1274-msgstr ""
1275-
1276-#. module: account_banking
1277-#: code:addons/account_banking/wizard/banktools.py:0
1278-#, python-format
1279-msgid "More than one bank account was found with the same number %(account_no)s"
1280-msgstr ""
1281-
1282-#. module: account_banking
1283-#: code:addons/account_banking/wizard/bank_import.py:0
1284-#, python-format
1285-msgid "Total number of transactions"
1286-msgstr ""
1287-
1288-#. module: account_banking
1289-#: code:addons/account_banking/account_banking.py:0
1290-#, python-format
1291-msgid "Account move line \"%s\" is not valid"
1292-msgstr ""
1293-
1294-#. module: account_banking
1295-#: help:account.banking.account.settings,default_debit_account_id:0
1296-msgid "The account to use when an unexpected payment is received. This can be needed when a customer pays in advance or when no matching invoice can be found. Mind that you can correct movements before confirming them."
1297-msgstr ""
1298-
1299-#. module: account_banking
1300-#: code:addons/account_banking/wizard/banktools.py:0
1301-#, python-format
1302-msgid "Bank account %(account_no)s was not found in the database"
1303-msgstr ""
1304-
1305-#. module: account_banking
1306-#: code:addons/account_banking/wizard/bank_import.py:0
1307-#, python-format
1308-msgid "Number of transactions skipped due to errors"
1309-msgstr ""
1310-
1311-#. module: account_banking
1312-#: code:addons/account_banking/account_banking.py:0
1313-#, python-format
1314-msgid "The expected balance (%.2f) is different '\n"
1315-" 'than the computed one. (%.2f)"
1316-msgstr ""
1317-
1318-#. module: account_banking
1319-#: code:addons/account_banking/wizard/bank_import.py:0
1320-#, python-format
1321-msgid "Statement for account %(bank_account)s uses different '\n"
1322-" 'currency than the defined bank journal."
1323-msgstr ""
1324-
1325-#. module: account_banking
1326-#: code:addons/account_banking/wizard/bank_import.py:0
1327-#, python-format
1328-msgid "Number of statements skipped due to errors"
1329-msgstr ""
1330-
1331-#. module: account_banking
1332-#: view:account.banking.account.settings:0
1333-msgid "Default Import Settings for Bank Account"
1334-msgstr ""
1335-
1336-#. module: account_banking
1337-#: help:account.banking.account.settings,default_credit_account_id:0
1338-msgid "The account to use when an unexpected payment was signaled. This can happen when a direct debit payment is cancelled by a customer, or when no matching payment can be found. Mind that you can correct movements before confirming them."
1339-msgstr ""
1340-
1341-#. module: account_banking
1342-#: code:addons/account_banking/wizard/bank_import.py:0
1343-#, python-format
1344-msgid "Unable to import parser %(parser)s. Parser class not found."
1345-msgstr ""
1346-
1347-#. module: account_banking
1348-#: selection:payment.line,export_state:0
1349-msgid "Cancelled"
1350-msgstr ""
1351-
1352-#. module: account_banking
1353-#: view:account.banking.imported.file:0
1354-#: field:account.banking.imported.file,statement_ids:0
1355-msgid "Statements"
1356-msgstr ""
1357-
1358-#. module: account_banking
1359-#: field:account.banking.account.settings,default_debit_account_id:0
1360-msgid "Default debit account"
1361-msgstr ""
1362-
1363-#. module: account_banking
1364-#: wizard_button:account_banking.banking_import,init,end:0
1365-msgid "_Cancel"
1366-msgstr ""
1367-
1368-#. module: account_banking
1369-#: selection:payment.line,export_state:0
1370-msgid "Draft"
1371-msgstr ""
1372-
1373-#. module: account_banking
1374-#: field:account.banking.imported.file,date:0
1375-msgid "Import Date"
1376-msgstr ""
1377-
1378-#. module: account_banking
1379-#: selection:payment.line,export_state:0
1380-msgid "Confirmed"
1381-msgstr ""
1382-
1383-#. module: account_banking
1384-#: view:account.banking.account.settings:0
1385-msgid "Default Accounts for Unknown Movements"
1386-msgstr ""
1387-
1388-#. module: account_banking
1389-#: view:account.bank.statement:0
1390-msgid "Confirm"
1391-msgstr ""
1392-
1393-#. module: account_banking
1394-#: field:account.banking.account.settings,default_credit_account_id:0
1395-msgid "Default credit account"
1396-msgstr ""
1397-
1398-#. module: account_banking
1399-#: code:addons/account_banking/wizard/bank_import.py:0
1400-#, python-format
1401-msgid "Statements found for account %(bank_account)s, '\n"
1402-" 'but no default journal was defined."
1403-msgstr ""
1404-
1405-#. module: account_banking
1406-#: field:account.bank.statement.line,international:0
1407-msgid "International Transaction"
1408-msgstr ""
1409-
1410-#. module: account_banking
1411-#: code:addons/account_banking/account_banking.py:0
1412-#, python-format
1413-msgid "Please verify that an account is defined in the journal."
1414-msgstr ""
1415-
1416-#. module: account_banking
1417-#: field:account.bank.statement.line,trans:0
1418-msgid "Bank Transaction ID"
1419-msgstr ""
1420-
1421-#. module: account_banking
1422-#: code:addons/account_banking/wizard/bank_import.py:0
1423-#, python-format
1424-msgid "Statement %(id)s known - skipped"
1425-msgstr ""
1426-
1427-#. module: account_banking
1428-#: selection:payment.line,export_state:0
1429-msgid "Sent"
1430-msgstr ""
1431-
1432-#. module: account_banking
1433-#: code:addons/account_banking/account_banking.py:0
1434-#, python-format
1435-msgid "Error !"
1436-msgstr ""
1437-
1438-#. module: account_banking
1439-#: code:addons/account_banking/account_banking.py:0
1440-#, python-format
1441-msgid "The account entries lines are not in valid state."
1442-msgstr ""
1443-
1444-#. module: account_banking
1445-#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
1446-#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals
1447-msgid "Default Import Settings for Bank Accounts"
1448-msgstr ""
1449-
1450-#. module: account_banking
1451-#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file
1452-#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard
1453-msgid "Import Bank Statements File"
1454-msgstr ""
1455-
1456-#. module: account_banking
1457-#: help:account_banking.banking_import,init,file:0
1458-msgid "The Transactions File to import. Please note that while it is perfectly safe to reload the same file multiple times or to load in timeframe overlapping statements files, there are formats that may introduce different sequencing, which may create double entries.\n"
1459-"\n"
1460-"To stay on the safe side, always load bank statements files using the same format."
1461-msgstr ""
1462-
1463-#. module: account_banking
1464-#: constraint:ir.ui.view:0
1465-msgid "Invalid XML for View Architecture!"
1466-msgstr ""
1467-
1468-#. module: account_banking
1469-#: view:account.banking.imported.file:0
1470-msgid "Imported Bank Statements"
1471-msgstr ""
1472-
1473-#. module: account_banking
1474-#: wizard_view:account_banking.banking_import,import:0
1475-#: wizard_view:account_banking.banking_import,init:0
1476-msgid "Import Bank Transactions File"
1477-msgstr ""
1478-
1479-#. module: account_banking
1480-#: code:addons/account_banking/wizard/banktools.py:0
1481-#, python-format
1482-msgid "Account %(account_no)s is not owned by %(partner)s"
1483-msgstr ""
1484-
1485-#. module: account_banking
1486-#: wizard_button:account_banking.banking_import,init,import:0
1487-msgid "_Ok"
1488-msgstr ""
1489-
1490-#. module: account_banking
1491-#: code:addons/account_banking/wizard/banktools.py:0
1492-#, python-format
1493-msgid "More then one possible match found for partner with name %(name)s"
1494-msgstr ""
1495-
1496-#. module: account_banking
1497-#: field:account.banking.imported.file,state:0
1498-#: field:payment.line,export_state:0
1499-msgid "State"
1500-msgstr ""
1501-
1502-#. module: account_banking
1503-#: code:addons/account_banking/wizard/bank_import.py:0
1504-#, python-format
1505-msgid "ERROR!"
1506-msgstr ""
1507-
1508-#. module: account_banking
1509-#: code:addons/account_banking/wizard/banktools.py:0
1510-#, python-format
1511-msgid "No suitable period found for date %(date)s"
1512-msgstr ""
1513-
1514-#. module: account_banking
1515-#: code:addons/account_banking/wizard/banktools.py:0
1516-#, python-format
1517-msgid "Multiple overlapping periods for date %(date)s"
1518-msgstr ""
1519-
1520-#. module: account_banking
1521-#: field:account.banking.account.settings,company_id:0
1522-#: field:account.banking.imported.file,company_id:0
1523-#: wizard_field:account_banking.banking_import,init,company:0
1524-msgid "Company"
1525-msgstr ""
1526-
1527-#. module: account_banking
1528-#: wizard_field:account_banking.banking_import,import,log:0
1529-msgid "Log"
1530-msgstr ""
1531-
1532-#. module: account_banking
1533-#: field:account.banking.imported.file,file:0
1534-msgid "Raw Data"
1535-msgstr ""
1536-
1537-#. module: account_banking
1538-#: code:addons/account_banking/account_banking.py:0
1539-#, python-format
1540-msgid "Configration Error !"
1541-msgstr ""
1542-
1543-#. module: account_banking
1544-#: model:ir.module.module,description:account_banking.module_meta_information
1545-msgid "\n"
1546-" Module to do banking.\n"
1547-"\n"
1548-" This modules tries to combine all current banking import and export\n"
1549-" schemes. Rationale for this is that it is quite common to have foreign\n"
1550-" bank account numbers next to national bank account numbers. The current\n"
1551-" approach, which hides the national banking interface schemes in the\n"
1552-" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
1553-" A more banking oriented approach seems more logical and cleaner.\n"
1554-"\n"
1555-" Changes to default OpenERP:\n"
1556-"\n"
1557-" * Puts focus on the real life messaging with banks:\n"
1558-" + Bank statement lines upgraded to independent bank transactions.\n"
1559-" + Banking statements have no special accountancy meaning, they're just\n"
1560-" message envelopes for a number of bank transactions.\n"
1561-" + Bank statements can be either encoded by hand to reflect the document\n"
1562-" version of Bank Statements, or created as an optional side effect of\n"
1563-" importing Bank Transactions.\n"
1564-"\n"
1565-" * Preparations for SEPA:\n"
1566-" + IBAN accounts are the standard in the SEPA countries\n"
1567-" + local accounts are derived from SEPA (excluding Turkey) but are\n"
1568-" considered to be identical to the corresponding SEPA account.\n"
1569-" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
1570-" + Each bank can have its own pace in introducing SEPA into their\n"
1571-" communication with their customers.\n"
1572-" + National online databases can be used to convert BBAN's to IBAN's.\n"
1573-"\n"
1574-" * Adds dropin extensible import facility for bank communication in:\n"
1575-" + MultiBank (NL) format transaction files,\n"
1576-" - (todo) MT940 (Swift) format transaction files,\n"
1577-" - (todo) CODA (BE) format transaction files,\n"
1578-" - (wish) SEPA Credits (ISO 200022) messages,\n"
1579-"\n"
1580-" * Extends payments for digital banking:\n"
1581-" + Adapted workflow in payments to reflect banking operations\n"
1582-" + Relies on account_payment mechanics to extend with export generators.\n"
1583-" - ClieOp3 (NL) payment and direct debit orders files available as\n"
1584-" account_banking_nl_clieop\n"
1585-" - (wish) BTL91 (NL) payment orders files (no format description available),\n"
1586-" - (wish) SEPA Direct Debits (ISO 200022) messages\n"
1587-"\n"
1588-" * Additional features for the import/export mechanism:\n"
1589-" + Automatic matching and creation of bank accounts, banks and partners,\n"
1590-" during import of statements.\n"
1591-" + Automatic matching with invoices and payments.\n"
1592-" + Sound import mechanism, allowing multiple imports of the same\n"
1593-" transactions repeated over multiple files.\n"
1594-" + Journal configuration per bank account.\n"
1595-" + Business logic and format parsing strictly separated to ease the\n"
1596-" development of new parsers.\n"
1597-" + No special configuration needed for the parsers, new parsers are\n"
1598-" recognized and made available at server (re)start.\n"
1599-" "
1600-msgstr ""
1601-
1602-#. module: account_banking
1603-#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
1604-msgid "Bank Statements File"
1605-msgstr ""
1606-
1607-#. module: account_banking
1608-#: code:addons/account_banking/parsers/models.py:0
1609-#, python-format
1610-msgid "This is a stub. Please implement your own."
1611-msgstr ""
1612-
1613-#. module: account_banking
1614-#: view:account.banking.imported.file:0
1615-#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
1616-#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files
1617-msgid "Imported Bank Statements Files"
1618-msgstr ""
1619-
1620-#. module: account_banking
1621-#: field:account.bank.statement,banking_id:0
1622-msgid "Imported File"
1623-msgstr ""
1624-
1625-#. module: account_banking
1626-#: view:account.banking.imported.file:0
1627-#: field:account.banking.imported.file,log:0
1628-msgid "Import Log"
1629-msgstr ""
1630-
1631-#. module: account_banking
1632-#: code:addons/account_banking/wizard/bank_import.py:0
1633-#, python-format
1634-msgid "The imported statements appear to be invalid! Check your file."
1635-msgstr ""
1636-
1637-#. module: account_banking
1638-#: code:addons/account_banking/wizard/bank_import.py:0
1639-#, python-format
1640-msgid "Number of statements loaded"
1641-msgstr ""
1642-
1643-#. module: account_banking
1644-#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions
1645-#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings
1646-msgid "Banking"
1647-msgstr ""
1648-
1649-#. module: account_banking
1650-#: selection:account.banking.imported.file,state:0
1651-msgid "Error"
1652-msgstr ""
1653-
1654-#. module: account_banking
1655-#: code:addons/account_banking/account_banking.py:0
1656-#, python-format
1657-msgid "Unable to reconcile entry \"%s\": %.2f"
1658-msgstr ""
1659-
1660-#. module: account_banking
1661-#: view:account.banking.imported.file:0
1662-msgid "Import Details"
1663-msgstr ""
1664-
1665-#. module: account_banking
1666-#: field:account.bank.statement.line,period_id:0
1667-msgid "Period"
1668-msgstr ""
1669-
1670-#. module: account_banking
1671-#: selection:payment.line,export_state:0
1672-msgid "Done"
1673-msgstr ""
1674-
1675-#. module: account_banking
1676-#: view:payment.order:0
1677-msgid "Select Invoices to Pay"
1678-msgstr ""
1679-
1680-#. module: account_banking
1681-#: field:account.banking.imported.file,user_id:0
1682-msgid "Responsible User"
1683-msgstr ""
1684-
1685-#. module: account_banking
1686-#: code:addons/account_banking/account_banking.py:0
1687-#, python-format
1688-msgid "The statement balance is incorrect !\n"
1689-msgstr ""
1690-
1691-#. module: account_banking
1692-#: constraint:ir.model:0
1693-msgid "The Object name must start with x_ and not contain any special character !"
1694-msgstr ""
1695-
1696-#. module: account_banking
1697-#: selection:account.banking.imported.file,state:0
1698-msgid "Unfinished"
1699-msgstr ""
1700-
1701-#. module: account_banking
1702-#: code:addons/account_banking/wizard/bank_import.py:0
1703-#, python-format
1704-msgid "Statements found for unknown account %(bank_account)s"
1705-msgstr ""
1706-
1707-#. module: account_banking
1708-#: model:ir.module.module,shortdesc:account_banking.module_meta_information
1709-msgid "Account Banking"
1710-msgstr ""
1711-
1712-#. module: account_banking
1713-#: code:addons/account_banking/wizard/bank_import.py:0
1714-#, python-format
1715-msgid "Total number of statements"
1716-msgstr ""
1717-
1718-#. module: account_banking
1719-#: field:account.banking.imported.file,format:0
1720-#: wizard_field:account_banking.banking_import,init,parser:0
1721-msgid "File Format"
1722-msgstr ""
1723-
1724-#. module: account_banking
1725-#: field:account.banking.account.settings,journal_id:0
1726-msgid "Journal"
1727-msgstr ""
1728-
1729-#. module: account_banking
1730-#: selection:account.banking.imported.file,state:0
1731-msgid "Finished"
1732-msgstr ""
1733-
1734-#. module: account_banking
1735-#: code:addons/account_banking/wizard/banktools.py:0
1736-#, python-format
1737-msgid "No suitable fiscal year found for company %(company_name)s"
1738-msgstr ""
1739-
1740-#. module: account_banking
1741-#: view:account.banking.account.settings:0
1742-msgid "Bank Account Details"
1743-msgstr ""
1744-
1745-#. module: account_banking
1746-#: code:addons/account_banking/wizard/bank_import.py:0
1747-#, python-format
1748-msgid "Unable to link transaction %(trans)s to invoice: '\n"
1749-" '%(no_candidates)s candidates found; can\'t choose."
1750-msgstr ""
1751-
1752-#. module: account_banking
1753-#: field:account.bank.statement.line,partner_bank_id:0
1754-#: field:account.banking.account.settings,partner_bank_id:0
1755-msgid "Bank Account"
1756-msgstr ""
1757-
1758-#. module: account_banking
1759-#: code:addons/account_banking/wizard/bank_import.py:0
1760-#, python-format
1761-msgid "Number of transactions loaded"
1762-msgstr ""
1763-
1764-#. module: account_banking
1765-#: code:addons/account_banking/wizard/banktools.py:0
1766-#, python-format
1767-msgid "Multiple overlapping fiscal years found for date %(date)s"
1768-msgstr ""
1769-
1770-#. module: account_banking
1771-#: model:ir.model,name:account_banking.model_account_banking_imported_file
1772-msgid "Imported Bank Statements File"
1773-msgstr ""
1774-
1775
1776=== removed file 'account_banking/i18n/en_US.po'
1777--- account_banking/i18n/en_US.po 2010-01-13 20:15:24 +0000
1778+++ account_banking/i18n/en_US.po 1970-01-01 00:00:00 +0000
1779@@ -1,562 +0,0 @@
1780-# Translation of OpenERP Server.
1781-# This file contains the translation of the following modules:
1782-# * account_banking
1783-#
1784-msgid ""
1785-msgstr ""
1786-"Project-Id-Version: OpenERP Server 5.0.7\n"
1787-"Report-Msgid-Bugs-To: support@openerp.com\n"
1788-"POT-Creation-Date: 2010-01-08 15:30:50+0000\n"
1789-"PO-Revision-Date: 2010-01-08 15:30:50+0000\n"
1790-"Last-Translator: <>\n"
1791-"Language-Team: \n"
1792-"MIME-Version: 1.0\n"
1793-"Content-Type: text/plain; charset=UTF-8\n"
1794-"Content-Transfer-Encoding: \n"
1795-"Plural-Forms: \n"
1796-
1797-#. module: account_banking
1798-#: wizard_view:account_banking.banking_import,import:0
1799-msgid "Results:"
1800-msgstr ""
1801-
1802-#. module: account_banking
1803-#: code:addons/account_banking/wizard/bank_import.py:0
1804-#, python-format
1805-msgid "Number of errors found"
1806-msgstr ""
1807-
1808-#. module: account_banking
1809-#: wizard_view:account_banking.banking_import,init:0
1810-msgid "Select the processing details:"
1811-msgstr ""
1812-
1813-#. module: account_banking
1814-#: constraint:ir.actions.act_window:0
1815-msgid "Invalid model name in the action definition."
1816-msgstr ""
1817-
1818-#. module: account_banking
1819-#: wizard_button:account_banking.banking_import,import,open:0
1820-msgid "_Open Statement"
1821-msgstr ""
1822-
1823-#. module: account_banking
1824-#: field:payment.line,date_done:0
1825-msgid "Date Confirmed"
1826-msgstr ""
1827-
1828-#. module: account_banking
1829-#: wizard_button:account_banking.banking_import,import,end:0
1830-msgid "_Close"
1831-msgstr ""
1832-
1833-#. module: account_banking
1834-#: model:ir.model,name:account_banking.model_account_banking_account_settings
1835-msgid "Default Journal for Bank Account"
1836-msgstr ""
1837-
1838-#. module: account_banking
1839-#: wizard_field:account_banking.banking_import,init,file:0
1840-msgid "Statements File"
1841-msgstr ""
1842-
1843-#. module: account_banking
1844-#: code:addons/account_banking/wizard/banktools.py:0
1845-#, python-format
1846-msgid "More than one bank account was found with the same number %(account_no)s"
1847-msgstr ""
1848-
1849-#. module: account_banking
1850-#: code:addons/account_banking/wizard/bank_import.py:0
1851-#, python-format
1852-msgid "Total number of transactions"
1853-msgstr ""
1854-
1855-#. module: account_banking
1856-#: code:addons/account_banking/account_banking.py:0
1857-#, python-format
1858-msgid "Account move line \"%s\" is not valid"
1859-msgstr ""
1860-
1861-#. module: account_banking
1862-#: help:account.banking.account.settings,default_debit_account_id:0
1863-msgid "The account to use when an unexpected payment is received. This can be needed when a customer pays in advance or when no matching invoice can be found. Mind that you can correct movements before confirming them."
1864-msgstr ""
1865-
1866-#. module: account_banking
1867-#: code:addons/account_banking/wizard/banktools.py:0
1868-#, python-format
1869-msgid "Bank account %(account_no)s was not found in the database"
1870-msgstr ""
1871-
1872-#. module: account_banking
1873-#: code:addons/account_banking/wizard/bank_import.py:0
1874-#, python-format
1875-msgid "Number of transactions skipped due to errors"
1876-msgstr ""
1877-
1878-#. module: account_banking
1879-#: code:addons/account_banking/account_banking.py:0
1880-#, python-format
1881-msgid "The expected balance (%.2f) is different '\n"
1882-" 'than the computed one. (%.2f)"
1883-msgstr ""
1884-
1885-#. module: account_banking
1886-#: code:addons/account_banking/wizard/bank_import.py:0
1887-#, python-format
1888-msgid "Statement for account %(bank_account)s uses different '\n"
1889-" 'currency than the defined bank journal."
1890-msgstr ""
1891-
1892-#. module: account_banking
1893-#: code:addons/account_banking/wizard/bank_import.py:0
1894-#, python-format
1895-msgid "Number of statements skipped due to errors"
1896-msgstr ""
1897-
1898-#. module: account_banking
1899-#: view:account.banking.account.settings:0
1900-msgid "Default Import Settings for Bank Account"
1901-msgstr ""
1902-
1903-#. module: account_banking
1904-#: help:account.banking.account.settings,default_credit_account_id:0
1905-msgid "The account to use when an unexpected payment was signaled. This can happen when a direct debit payment is cancelled by a customer, or when no matching payment can be found. Mind that you can correct movements before confirming them."
1906-msgstr ""
1907-
1908-#. module: account_banking
1909-#: code:addons/account_banking/wizard/bank_import.py:0
1910-#, python-format
1911-msgid "Unable to import parser %(parser)s. Parser class not found."
1912-msgstr ""
1913-
1914-#. module: account_banking
1915-#: selection:payment.line,export_state:0
1916-msgid "Cancelled"
1917-msgstr ""
1918-
1919-#. module: account_banking
1920-#: view:account.banking.imported.file:0
1921-#: field:account.banking.imported.file,statement_ids:0
1922-msgid "Statements"
1923-msgstr ""
1924-
1925-#. module: account_banking
1926-#: field:account.banking.account.settings,default_debit_account_id:0
1927-msgid "Default debit account"
1928-msgstr ""
1929-
1930-#. module: account_banking
1931-#: wizard_button:account_banking.banking_import,init,end:0
1932-msgid "_Cancel"
1933-msgstr ""
1934-
1935-#. module: account_banking
1936-#: selection:payment.line,export_state:0
1937-msgid "Draft"
1938-msgstr ""
1939-
1940-#. module: account_banking
1941-#: field:account.banking.imported.file,date:0
1942-msgid "Import Date"
1943-msgstr ""
1944-
1945-#. module: account_banking
1946-#: selection:payment.line,export_state:0
1947-msgid "Confirmed"
1948-msgstr ""
1949-
1950-#. module: account_banking
1951-#: view:account.banking.account.settings:0
1952-msgid "Default Accounts for Unknown Movements"
1953-msgstr ""
1954-
1955-#. module: account_banking
1956-#: view:account.bank.statement:0
1957-msgid "Confirm"
1958-msgstr ""
1959-
1960-#. module: account_banking
1961-#: field:account.banking.account.settings,default_credit_account_id:0
1962-msgid "Default credit account"
1963-msgstr ""
1964-
1965-#. module: account_banking
1966-#: code:addons/account_banking/wizard/bank_import.py:0
1967-#, python-format
1968-msgid "Statements found for account %(bank_account)s, '\n"
1969-" 'but no default journal was defined."
1970-msgstr ""
1971-
1972-#. module: account_banking
1973-#: field:account.bank.statement.line,international:0
1974-msgid "International Transaction"
1975-msgstr ""
1976-
1977-#. module: account_banking
1978-#: code:addons/account_banking/account_banking.py:0
1979-#, python-format
1980-msgid "Please verify that an account is defined in the journal."
1981-msgstr ""
1982-
1983-#. module: account_banking
1984-#: field:account.bank.statement.line,trans:0
1985-msgid "Bank Transaction ID"
1986-msgstr ""
1987-
1988-#. module: account_banking
1989-#: code:addons/account_banking/wizard/bank_import.py:0
1990-#, python-format
1991-msgid "Statement %(id)s known - skipped"
1992-msgstr ""
1993-
1994-#. module: account_banking
1995-#: selection:payment.line,export_state:0
1996-msgid "Sent"
1997-msgstr ""
1998-
1999-#. module: account_banking
2000-#: code:addons/account_banking/account_banking.py:0
2001-#, python-format
2002-msgid "Error !"
2003-msgstr ""
2004-
2005-#. module: account_banking
2006-#: code:addons/account_banking/account_banking.py:0
2007-#, python-format
2008-msgid "The account entries lines are not in valid state."
2009-msgstr ""
2010-
2011-#. module: account_banking
2012-#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
2013-#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals
2014-msgid "Default Import Settings for Bank Accounts"
2015-msgstr ""
2016-
2017-#. module: account_banking
2018-#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file
2019-#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard
2020-msgid "Import Bank Statements File"
2021-msgstr ""
2022-
2023-#. module: account_banking
2024-#: help:account_banking.banking_import,init,file:0
2025-msgid "The Transactions File to import. Please note that while it is perfectly safe to reload the same file multiple times or to load in timeframe overlapping statements files, there are formats that may introduce different sequencing, which may create double entries.\n"
2026-"\n"
2027-"To stay on the safe side, always load bank statements files using the same format."
2028-msgstr ""
2029-
2030-#. module: account_banking
2031-#: constraint:ir.ui.view:0
2032-msgid "Invalid XML for View Architecture!"
2033-msgstr ""
2034-
2035-#. module: account_banking
2036-#: view:account.banking.imported.file:0
2037-msgid "Imported Bank Statements"
2038-msgstr ""
2039-
2040-#. module: account_banking
2041-#: wizard_view:account_banking.banking_import,import:0
2042-#: wizard_view:account_banking.banking_import,init:0
2043-msgid "Import Bank Transactions File"
2044-msgstr ""
2045-
2046-#. module: account_banking
2047-#: code:addons/account_banking/wizard/banktools.py:0
2048-#, python-format
2049-msgid "Account %(account_no)s is not owned by %(partner)s"
2050-msgstr ""
2051-
2052-#. module: account_banking
2053-#: wizard_button:account_banking.banking_import,init,import:0
2054-msgid "_Ok"
2055-msgstr ""
2056-
2057-#. module: account_banking
2058-#: code:addons/account_banking/wizard/banktools.py:0
2059-#, python-format
2060-msgid "More then one possible match found for partner with name %(name)s"
2061-msgstr ""
2062-
2063-#. module: account_banking
2064-#: field:account.banking.imported.file,state:0
2065-#: field:payment.line,export_state:0
2066-msgid "State"
2067-msgstr ""
2068-
2069-#. module: account_banking
2070-#: code:addons/account_banking/wizard/bank_import.py:0
2071-#, python-format
2072-msgid "ERROR!"
2073-msgstr ""
2074-
2075-#. module: account_banking
2076-#: code:addons/account_banking/wizard/banktools.py:0
2077-#, python-format
2078-msgid "No suitable period found for date %(date)s"
2079-msgstr ""
2080-
2081-#. module: account_banking
2082-#: code:addons/account_banking/wizard/banktools.py:0
2083-#, python-format
2084-msgid "Multiple overlapping periods for date %(date)s"
2085-msgstr ""
2086-
2087-#. module: account_banking
2088-#: field:account.banking.account.settings,company_id:0
2089-#: field:account.banking.imported.file,company_id:0
2090-#: wizard_field:account_banking.banking_import,init,company:0
2091-msgid "Company"
2092-msgstr ""
2093-
2094-#. module: account_banking
2095-#: wizard_field:account_banking.banking_import,import,log:0
2096-msgid "Log"
2097-msgstr ""
2098-
2099-#. module: account_banking
2100-#: field:account.banking.imported.file,file:0
2101-msgid "Raw Data"
2102-msgstr ""
2103-
2104-#. module: account_banking
2105-#: code:addons/account_banking/account_banking.py:0
2106-#, python-format
2107-msgid "Configration Error !"
2108-msgstr ""
2109-
2110-#. module: account_banking
2111-#: model:ir.module.module,description:account_banking.module_meta_information
2112-msgid "\n"
2113-" Module to do banking.\n"
2114-"\n"
2115-" This modules tries to combine all current banking import and export\n"
2116-" schemes. Rationale for this is that it is quite common to have foreign\n"
2117-" bank account numbers next to national bank account numbers. The current\n"
2118-" approach, which hides the national banking interface schemes in the\n"
2119-" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
2120-" A more banking oriented approach seems more logical and cleaner.\n"
2121-"\n"
2122-" Changes to default OpenERP:\n"
2123-"\n"
2124-" * Puts focus on the real life messaging with banks:\n"
2125-" + Bank statement lines upgraded to independent bank transactions.\n"
2126-" + Banking statements have no special accountancy meaning, they're just\n"
2127-" message envelopes for a number of bank transactions.\n"
2128-" + Bank statements can be either encoded by hand to reflect the document\n"
2129-" version of Bank Statements, or created as an optional side effect of\n"
2130-" importing Bank Transactions.\n"
2131-"\n"
2132-" * Preparations for SEPA:\n"
2133-" + IBAN accounts are the standard in the SEPA countries\n"
2134-" + local accounts are derived from SEPA (excluding Turkey) but are\n"
2135-" considered to be identical to the corresponding SEPA account.\n"
2136-" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
2137-" + Each bank can have its own pace in introducing SEPA into their\n"
2138-" communication with their customers.\n"
2139-" + National online databases can be used to convert BBAN's to IBAN's.\n"
2140-"\n"
2141-" * Adds dropin extensible import facility for bank communication in:\n"
2142-" + MultiBank (NL) format transaction files,\n"
2143-" - (todo) MT940 (Swift) format transaction files,\n"
2144-" - (todo) CODA (BE) format transaction files,\n"
2145-" - (wish) SEPA Credits (ISO 200022) messages,\n"
2146-"\n"
2147-" * Extends payments for digital banking:\n"
2148-" + Adapted workflow in payments to reflect banking operations\n"
2149-" + Relies on account_payment mechanics to extend with export generators.\n"
2150-" - ClieOp3 (NL) payment and direct debit orders files available as\n"
2151-" account_banking_nl_clieop\n"
2152-" - (wish) BTL91 (NL) payment orders files (no format description available),\n"
2153-" - (wish) SEPA Direct Debits (ISO 200022) messages\n"
2154-"\n"
2155-" * Additional features for the import/export mechanism:\n"
2156-" + Automatic matching and creation of bank accounts, banks and partners,\n"
2157-" during import of statements.\n"
2158-" + Automatic matching with invoices and payments.\n"
2159-" + Sound import mechanism, allowing multiple imports of the same\n"
2160-" transactions repeated over multiple files.\n"
2161-" + Journal configuration per bank account.\n"
2162-" + Business logic and format parsing strictly separated to ease the\n"
2163-" development of new parsers.\n"
2164-" + No special configuration needed for the parsers, new parsers are\n"
2165-" recognized and made available at server (re)start.\n"
2166-" "
2167-msgstr ""
2168-
2169-#. module: account_banking
2170-#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
2171-msgid "Bank Statements File"
2172-msgstr ""
2173-
2174-#. module: account_banking
2175-#: code:addons/account_banking/parsers/models.py:0
2176-#, python-format
2177-msgid "This is a stub. Please implement your own."
2178-msgstr ""
2179-
2180-#. module: account_banking
2181-#: view:account.banking.imported.file:0
2182-#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
2183-#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files
2184-msgid "Imported Bank Statements Files"
2185-msgstr ""
2186-
2187-#. module: account_banking
2188-#: field:account.bank.statement,banking_id:0
2189-msgid "Imported File"
2190-msgstr ""
2191-
2192-#. module: account_banking
2193-#: view:account.banking.imported.file:0
2194-#: field:account.banking.imported.file,log:0
2195-msgid "Import Log"
2196-msgstr ""
2197-
2198-#. module: account_banking
2199-#: code:addons/account_banking/wizard/bank_import.py:0
2200-#, python-format
2201-msgid "The imported statements appear to be invalid! Check your file."
2202-msgstr ""
2203-
2204-#. module: account_banking
2205-#: code:addons/account_banking/wizard/bank_import.py:0
2206-#, python-format
2207-msgid "Number of statements loaded"
2208-msgstr ""
2209-
2210-#. module: account_banking
2211-#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions
2212-#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings
2213-msgid "Banking"
2214-msgstr ""
2215-
2216-#. module: account_banking
2217-#: selection:account.banking.imported.file,state:0
2218-msgid "Error"
2219-msgstr ""
2220-
2221-#. module: account_banking
2222-#: code:addons/account_banking/account_banking.py:0
2223-#, python-format
2224-msgid "Unable to reconcile entry \"%s\": %.2f"
2225-msgstr ""
2226-
2227-#. module: account_banking
2228-#: view:account.banking.imported.file:0
2229-msgid "Import Details"
2230-msgstr ""
2231-
2232-#. module: account_banking
2233-#: field:account.bank.statement.line,period_id:0
2234-msgid "Period"
2235-msgstr ""
2236-
2237-#. module: account_banking
2238-#: selection:payment.line,export_state:0
2239-msgid "Done"
2240-msgstr ""
2241-
2242-#. module: account_banking
2243-#: view:payment.order:0
2244-msgid "Select Invoices to Pay"
2245-msgstr ""
2246-
2247-#. module: account_banking
2248-#: field:account.banking.imported.file,user_id:0
2249-msgid "Responsible User"
2250-msgstr ""
2251-
2252-#. module: account_banking
2253-#: code:addons/account_banking/account_banking.py:0
2254-#, python-format
2255-msgid "The statement balance is incorrect !\n"
2256-msgstr ""
2257-
2258-#. module: account_banking
2259-#: constraint:ir.model:0
2260-msgid "The Object name must start with x_ and not contain any special character !"
2261-msgstr ""
2262-
2263-#. module: account_banking
2264-#: selection:account.banking.imported.file,state:0
2265-msgid "Unfinished"
2266-msgstr ""
2267-
2268-#. module: account_banking
2269-#: code:addons/account_banking/wizard/bank_import.py:0
2270-#, python-format
2271-msgid "Statements found for unknown account %(bank_account)s"
2272-msgstr ""
2273-
2274-#. module: account_banking
2275-#: model:ir.module.module,shortdesc:account_banking.module_meta_information
2276-msgid "Account Banking"
2277-msgstr ""
2278-
2279-#. module: account_banking
2280-#: code:addons/account_banking/wizard/bank_import.py:0
2281-#, python-format
2282-msgid "Total number of statements"
2283-msgstr ""
2284-
2285-#. module: account_banking
2286-#: field:account.banking.imported.file,format:0
2287-#: wizard_field:account_banking.banking_import,init,parser:0
2288-msgid "File Format"
2289-msgstr ""
2290-
2291-#. module: account_banking
2292-#: field:account.banking.account.settings,journal_id:0
2293-msgid "Journal"
2294-msgstr ""
2295-
2296-#. module: account_banking
2297-#: selection:account.banking.imported.file,state:0
2298-msgid "Finished"
2299-msgstr ""
2300-
2301-#. module: account_banking
2302-#: code:addons/account_banking/wizard/banktools.py:0
2303-#, python-format
2304-msgid "No suitable fiscal year found for company %(company_name)s"
2305-msgstr ""
2306-
2307-#. module: account_banking
2308-#: view:account.banking.account.settings:0
2309-msgid "Bank Account Details"
2310-msgstr ""
2311-
2312-#. module: account_banking
2313-#: code:addons/account_banking/wizard/bank_import.py:0
2314-#, python-format
2315-msgid "Unable to link transaction %(trans)s to invoice: '\n"
2316-" '%(no_candidates)s candidates found; can\'t choose."
2317-msgstr ""
2318-
2319-#. module: account_banking
2320-#: field:account.bank.statement.line,partner_bank_id:0
2321-#: field:account.banking.account.settings,partner_bank_id:0
2322-msgid "Bank Account"
2323-msgstr ""
2324-
2325-#. module: account_banking
2326-#: code:addons/account_banking/wizard/bank_import.py:0
2327-#, python-format
2328-msgid "Number of transactions loaded"
2329-msgstr ""
2330-
2331-#. module: account_banking
2332-#: code:addons/account_banking/wizard/banktools.py:0
2333-#, python-format
2334-msgid "Multiple overlapping fiscal years found for date %(date)s"
2335-msgstr ""
2336-
2337-#. module: account_banking
2338-#: model:ir.model,name:account_banking.model_account_banking_imported_file
2339-msgid "Imported Bank Statements File"
2340-msgstr ""
2341-
2342
2343=== removed file 'account_banking/i18n/nl_NL.po'
2344--- account_banking/i18n/nl_NL.po 2010-01-13 20:15:24 +0000
2345+++ account_banking/i18n/nl_NL.po 1970-01-01 00:00:00 +0000
2346@@ -1,607 +0,0 @@
2347-# Translation of OpenERP Server.
2348-# This file contains the translation of the following modules:
2349-# * account_banking
2350-#
2351-msgid ""
2352-msgstr ""
2353-"Project-Id-Version: OpenERP Server 5.0.7\n"
2354-"Report-Msgid-Bugs-To: support@openerp.com\n"
2355-"POT-Creation-Date: 2010-01-08 15:18:44+0000\n"
2356-"PO-Revision-Date: 2010-01-08 15:18:44+0000\n"
2357-"Last-Translator: <>\n"
2358-"Language-Team: \n"
2359-"MIME-Version: 1.0\n"
2360-"Content-Type: text/plain; charset=UTF-8\n"
2361-"Content-Transfer-Encoding: \n"
2362-"Plural-Forms: \n"
2363-
2364-#. module: account_banking
2365-#: wizard_view:account_banking.banking_import,import:0
2366-msgid "Results:"
2367-msgstr "Resultaat:"
2368-
2369-#. module: account_banking
2370-#: code:addons/account_banking/wizard/bank_import.py:0
2371-#, python-format
2372-msgid "Number of errors found"
2373-msgstr "Aantal gevonden fouten"
2374-
2375-#. module: account_banking
2376-#: wizard_view:account_banking.banking_import,init:0
2377-msgid "Select the processing details:"
2378-msgstr "Kies de verwerkings-details:"
2379-
2380-#. module: account_banking
2381-#: constraint:ir.actions.act_window:0
2382-msgid "Invalid model name in the action definition."
2383-msgstr "Ongeldige naam in actie-definitie."
2384-
2385-#. module: account_banking
2386-#: wizard_button:account_banking.banking_import,import,open:0
2387-msgid "_Open Statement"
2388-msgstr "_Open bankafschriften"
2389-
2390-#. module: account_banking
2391-#: field:payment.line,date_done:0
2392-msgid "Date Confirmed"
2393-msgstr "Bevestigingsdatum"
2394-
2395-#. module: account_banking
2396-#: wizard_button:account_banking.banking_import,import,end:0
2397-msgid "_Close"
2398-msgstr "_Sluit"
2399-
2400-#. module: account_banking
2401-#: model:ir.model,name:account_banking.model_account_banking_account_settings
2402-msgid "Default Journal for Bank Account"
2403-msgstr "Standaard dagboek voor bankrekening"
2404-
2405-#. module: account_banking
2406-#: wizard_field:account_banking.banking_import,init,file:0
2407-msgid "Statements File"
2408-msgstr "Transactiebestand"
2409-
2410-#. module: account_banking
2411-#: code:addons/account_banking/wizard/banktools.py:0
2412-#, python-format
2413-msgid "More than one bank account was found with the same number %(account_no)s"
2414-msgstr "Meer dan één bankrekening gevonden met hetzelfde rekeningnummer %(account_no)s"
2415-
2416-#. module: account_banking
2417-#: code:addons/account_banking/wizard/bank_import.py:0
2418-#, python-format
2419-msgid "Total number of transactions"
2420-msgstr "Totaal aantal transacties"
2421-
2422-#. module: account_banking
2423-#: code:addons/account_banking/account_banking.py:0
2424-#, python-format
2425-msgid "Account move line \"%s\" is not valid"
2426-msgstr "Boekingsregel \"%s\" is onjuist."
2427-
2428-#. module: account_banking
2429-#: help:account.banking.account.settings,default_debit_account_id:0
2430-msgid "The account to use when an unexpected payment is received. This can be needed when a customer pays in advance or when no matching invoice can be found. Mind that you can correct movements before confirming them."
2431-msgstr "De rekening waarop geboekt moet worden bij onverwachte betalingen. Dit kan nodig zijn als een klant vooruit betaalt of wanneer er geen overeenkomende factuur gevonden kan worden. Merk op dat u altijd boekingen kunt corrigeren voordat u deze bevestigt."
2432-
2433-#. module: account_banking
2434-#: code:addons/account_banking/wizard/banktools.py:0
2435-#, python-format
2436-msgid "Bank account %(account_no)s was not found in the database"
2437-msgstr "Bankrekening %(account)s niet gevonden in de database"
2438-
2439-#. module: account_banking
2440-#: code:addons/account_banking/wizard/bank_import.py:0
2441-#, python-format
2442-msgid "Number of transactions skipped due to errors"
2443-msgstr "Aantal overgeslagen transacties als gevolg van fouten"
2444-
2445-#. module: account_banking
2446-#: code:addons/account_banking/account_banking.py:0
2447-#, python-format
2448-msgid "The expected balance (%.2f) is different '\n"
2449-" 'than the computed one. (%.2f)"
2450-msgstr "Het verwachte saldo (%.2f) wijkt af van het berekende- (%.2f)."
2451-
2452-#. module: account_banking
2453-#: code:addons/account_banking/wizard/bank_import.py:0
2454-#, python-format
2455-msgid "Statement for account %(bank_account)s uses different '\n"
2456-" 'currency than the defined bank journal."
2457-msgstr "Afschrift voor bankrekening %(account)s gebruik andere valuta dan opgegeven in het bankdagboek."
2458-
2459-#. module: account_banking
2460-#: code:addons/account_banking/wizard/bank_import.py:0
2461-#, python-format
2462-msgid "Number of statements skipped due to errors"
2463-msgstr "Aantal afschriften overgeslagen door fouten"
2464-
2465-#. module: account_banking
2466-#: view:account.banking.account.settings:0
2467-msgid "Default Import Settings for Bank Account"
2468-msgstr "Standaardinstellingen voor bankrekeningen"
2469-
2470-#. module: account_banking
2471-#: help:account.banking.account.settings,default_credit_account_id:0
2472-msgid "The account to use when an unexpected payment was signaled. This can happen when a direct debit payment is cancelled by a customer, or when no matching payment can be found. Mind that you can correct movements before confirming them."
2473-msgstr "De te gebruiken rekening bij onverwachte betalingen. Dit kan voorkomen indien een incasso-opdracht door een klant is geannuleerd, of wanneer er geen overeenkomende betaling kan worden gevonden. Merk op dat u altijd boekingen kunt corrigeren voordat u deze bevestigt."
2474-
2475-#. module: account_banking
2476-#: code:addons/account_banking/wizard/bank_import.py:0
2477-#, python-format
2478-msgid "Unable to import parser %(parser)s. Parser class not found."
2479-msgstr "Niet in staat parser %(parser)s te importeren. Parser class niet gevonden."
2480-
2481-#. module: account_banking
2482-#: selection:payment.line,export_state:0
2483-msgid "Cancelled"
2484-msgstr "Geannuleerd"
2485-
2486-#. module: account_banking
2487-#: view:account.banking.imported.file:0
2488-#: field:account.banking.imported.file,statement_ids:0
2489-msgid "Statements"
2490-msgstr "Afschriften"
2491-
2492-#. module: account_banking
2493-#: field:account.banking.account.settings,default_debit_account_id:0
2494-msgid "Default debit account"
2495-msgstr "Standaard debet-rekening"
2496-
2497-#. module: account_banking
2498-
2499-#. module: account_banking
2500-#: field:account.banking.imported.file,date:0
2501-msgid "Import Date"
2502-msgstr "Importdatum"
2503-
2504-#. module: account_banking
2505-#: selection:payment.line,export_state:0
2506-msgid "Confirmed"
2507-msgstr "Bevestigd"
2508-
2509-#. module: account_banking
2510-#: view:account.banking.account.settings:0
2511-msgid "Default Accounts for Unknown Movements"
2512-msgstr "Standaard rekeningen voor onverwachte mutaties"
2513-
2514-#. module: account_banking
2515-#: view:account.bank.statement:0
2516-msgid "Confirm"
2517-msgstr "Bevestig"
2518-
2519-#. module: account_banking
2520-#: field:account.banking.account.settings,default_credit_account_id:0
2521-msgid "Default credit account"
2522-msgstr "Standaard credit-rekening"
2523-
2524-#. module: account_banking
2525-#: code:addons/account_banking/wizard/bank_import.py:0
2526-#, python-format
2527-msgid "Statements found for account %(bank_account)s, '\n"
2528-" 'but no default journal was defined."
2529-msgstr "Afschriften gevonden voor bankrekening %(bank_account)s, maar geen gedefinieerd dagboek gevonden hiervoor."
2530-
2531-#. module: account_banking
2532-#: field:account.bank.statement.line,international:0
2533-msgid "International Transaction"
2534-msgstr "Internationale transactie"
2535-
2536-#. module: account_banking
2537-#: code:addons/account_banking/account_banking.py:0
2538-#, python-format
2539-msgid "Please verify that an account is defined in the journal."
2540-msgstr "Controleer alstublieft of een rekening is opgegeven in het journaal"
2541-
2542-#. module: account_banking
2543-#: field:account.bank.statement.line,trans:0
2544-msgid "Bank Transaction ID"
2545-msgstr "Transactie ID bank"
2546-
2547-#. module: account_banking
2548-#: code:addons/account_banking/wizard/bank_import.py:0
2549-#, python-format
2550-msgid "Statement %(id)s known - skipped"
2551-msgstr "Afschrift %(id)s al bekend - overgeslagen"
2552-
2553-#. module: account_banking
2554-#: selection:payment.line,export_state:0
2555-msgid "Sent"
2556-msgstr "Verzonden"
2557-
2558-#. module: account_banking
2559-#: code:addons/account_banking/account_banking.py:0
2560-#, python-format
2561-msgid "Error !"
2562-msgstr "Fout !"
2563-
2564-#. module: account_banking
2565-#: code:addons/account_banking/account_banking.py:0
2566-#, python-format
2567-msgid "The account entries lines are not in valid state."
2568-msgstr "De boekingsregels zijn niet geldig."
2569-
2570-#. module: account_banking
2571-#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
2572-#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals
2573-msgid "Default Import Settings for Bank Accounts"
2574-msgstr "Standaardinstellingen voor bankrekeningen"
2575-
2576-#. module: account_banking
2577-#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file
2578-#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard
2579-msgid "Import Bank Statements File"
2580-msgstr "Importeer bankafschrift bestand"
2581-
2582-#. module: account_banking
2583-#: help:account_banking.banking_import,init,file:0
2584-msgid "The Transactions File to import. Please note that while it is perfectly safe to reload the same file multiple times or to load in timeframe overlapping statements files, there are formats that may introduce different sequencing, which may create double entries.\n"
2585-"\n"
2586-"To stay on the safe side, always load bank statements files using the same format."
2587-msgstr "Het te importeren transactiebestand. Let alstublieft op: hoewel het zondermeer veilig is om hetzelfde bestand meerdere keren te importeren of om in tijd overlappende bestanden te importeren, zijn er formaten die een ander nummeringsschema introduceren, wat tot problemen kan leiden.\n"
2588-"\n"
2589-"Om aan de veilige kant te blijven, importeer altijd transactiebestanden in hetzelfde formaat."
2590-
2591-#. module: account_banking
2592-#: constraint:ir.ui.view:0
2593-msgid "Invalid XML for View Architecture!"
2594-msgstr "Ongeldige XML voor overzicht"
2595-
2596-#. module: account_banking
2597-#: view:account.banking.imported.file:0
2598-msgid "Imported Bank Statements"
2599-msgstr "Geïmporteerde bankafschriften"
2600-
2601-#. module: account_banking
2602-#: wizard_view:account_banking.banking_import,import:0
2603-#: wizard_view:account_banking.banking_import,init:0
2604-msgid "Import Bank Transactions File"
2605-msgstr "Importeer banktransacties-bestand"
2606-
2607-#. module: account_banking
2608-#: code:addons/account_banking/wizard/banktools.py:0
2609-#, python-format
2610-msgid "Account %(account_no)s is not owned by %(partner)s"
2611-msgstr "Rekening %(account_no)s is geen eigendom van %(partner)s"
2612-
2613-#. module: account_banking
2614-#: wizard_button:account_banking.banking_import,init,import:0
2615-msgid "_Ok"
2616-msgstr "_Ok"
2617-
2618-#. module: account_banking
2619-#: code:addons/account_banking/wizard/banktools.py:0
2620-#, python-format
2621-msgid "More then one possible match found for partner with name %(name)s"
2622-msgstr "Meer dan één mogelijke match gevonden voor partner met naam %(name)s"
2623-
2624-#. module: account_banking
2625-#: field:account.banking.imported.file,state:0
2626-#: field:payment.line,export_state:0
2627-msgid "State"
2628-msgstr "Status"
2629-
2630-
2631-#. module: account_banking
2632-#: code:addons/account_banking/wizard/banktools.py:0
2633-#, python-format
2634-msgid "No suitable period found for date %(date)s"
2635-msgstr "Geen geschikte periode gevonden voor datum %(date)s"
2636-
2637-#. module: account_banking
2638-#: code:addons/account_banking/wizard/banktools.py:0
2639-#, python-format
2640-msgid "Multiple overlapping periods for date %(date)s"
2641-msgstr "Meerdere overlappende periodes gevonden voor datum %(date)s"
2642-
2643-#. module: account_banking
2644-#: field:account.banking.account.settings,company_id:0
2645-#: field:account.banking.imported.file,company_id:0
2646-#: wizard_field:account_banking.banking_import,init,company:0
2647-msgid "Company"
2648-msgstr "Bedrijf"
2649-
2650-#. module: account_banking
2651-#: wizard_field:account_banking.banking_import,import,log:0
2652-msgid "Log"
2653-msgstr "Logboek"
2654-
2655-#. module: account_banking
2656-#: field:account.banking.imported.file,file:0
2657-msgid "Raw Data"
2658-msgstr "Ruwe data"
2659-
2660-#. module: account_banking
2661-#: code:addons/account_banking/account_banking.py:0
2662-#, python-format
2663-msgid "Configration Error !"
2664-msgstr "Instellingsfout!"
2665-
2666-#. module: account_banking
2667-#: model:ir.module.module,description:account_banking.module_meta_information
2668-msgid "\n"
2669-" Module to do banking.\n"
2670-"\n"
2671-" This modules tries to combine all current banking import and export\n"
2672-" schemes. Rationale for this is that it is quite common to have foreign\n"
2673-" bank account numbers next to national bank account numbers. The current\n"
2674-" approach, which hides the national banking interface schemes in the\n"
2675-" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
2676-" A more banking oriented approach seems more logical and cleaner.\n"
2677-"\n"
2678-" Changes to default OpenERP:\n"
2679-"\n"
2680-" * Puts focus on the real life messaging with banks:\n"
2681-" + Bank statement lines upgraded to independent bank transactions.\n"
2682-" + Banking statements have no special accountancy meaning, they're just\n"
2683-" message envelopes for a number of bank transactions.\n"
2684-" + Bank statements can be either encoded by hand to reflect the document\n"
2685-" version of Bank Statements, or created as an optional side effect of\n"
2686-" importing Bank Transactions.\n"
2687-"\n"
2688-" * Preparations for SEPA:\n"
2689-" + IBAN accounts are the standard in the SEPA countries\n"
2690-" + local accounts are derived from SEPA (excluding Turkey) but are\n"
2691-" considered to be identical to the corresponding SEPA account.\n"
2692-" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
2693-" + Each bank can have its own pace in introducing SEPA into their\n"
2694-" communication with their customers.\n"
2695-" + National online databases can be used to convert BBAN's to IBAN's.\n"
2696-"\n"
2697-" * Adds dropin extensible import facility for bank communication in:\n"
2698-" + MultiBank (NL) format transaction files,\n"
2699-" - (todo) MT940 (Swift) format transaction files,\n"
2700-" - (todo) CODA (BE) format transaction files,\n"
2701-" - (wish) SEPA Credits (ISO 200022) messages,\n"
2702-"\n"
2703-" * Extends payments for digital banking:\n"
2704-" + Adapted workflow in payments to reflect banking operations\n"
2705-" + Relies on account_payment mechanics to extend with export generators.\n"
2706-" - ClieOp3 (NL) payment and direct debit orders files available as\n"
2707-" account_banking_nl_clieop\n"
2708-" - (wish) BTL91 (NL) payment orders files (no format description available),\n"
2709-" - (wish) SEPA Direct Debits (ISO 200022) messages\n"
2710-"\n"
2711-" * Additional features for the import/export mechanism:\n"
2712-" + Automatic matching and creation of bank accounts, banks and partners,\n"
2713-" during import of statements.\n"
2714-" + Automatic matching with invoices and payments.\n"
2715-" + Sound import mechanism, allowing multiple imports of the same\n"
2716-" transactions repeated over multiple files.\n"
2717-" + Journal configuration per bank account.\n"
2718-" + Business logic and format parsing strictly separated to ease the\n"
2719-" development of new parsers.\n"
2720-" + No special configuration needed for the parsers, new parsers are\n"
2721-" recognized and made available at server (re)start.\n"
2722-" "
2723-msgstr " Module voor bankzaken.\n"
2724-"\n"
2725-" Deze module probeert alle bestaande bankimport- en -exportschema's\n"
2726-" te combineren. Ratio hierachter is dat het vrij gebruikelijk is om\n"
2727-" buitenlandse bankrekeningen te hebben naast nationale-. De huidige\n"
2728-" benadering waarbij nationale bankinterfaces ondergebracht worden in\n"
2729-" de l10n_xxx modules, maakt het zeer lastig om deze naast elkaar te\n"
2730-" gebruiken. Een meer bank-geöriënteerde benadering lijkt logischer en\n"
2731-" 'schoner'.\n"
2732-"\n"
2733-" Wijzigingen op standaard OpenERP:\n"
2734-"\n"
2735-" * Legt focus op berichtuitwisseling met banken:\n"
2736-" + Bankafschriftregels opgewaardeerd naar onafhankelijke banktransacties.\n"
2737-" + Bankafschriften hebben geen speciale accountancy-betekenis, ze zijn\n"
2738-" slechts enveloppen voor een reeks banktransacties.\n"
2739-" + Bankafschriften kunnen hetzij met de hand worden ingevoerd als projectie\n"
2740-" van de papieren versie, of gemaakt worden als neveneffect van het\n"
2741-" importeren van banktransacties.\n"
2742-"\n"
2743-" * Voorbereidingen voor SEPA:\n"
2744-" + IBAN bankrekeningen zijn de standaard in de SEPA-landen\n"
2745-" + lokale bankrekeningen worden afgeleid van SEPA (uitgezonderd Turkije)\n"
2746-" maar worden beschouwd als identiek aan de corresponderende IBAN-rekening.\n"
2747-" + Banken worden geïdentificeerd met hetzij land + bankcode + branchcode of BIC\n"
2748-" - Each bank can have its own pace in introducing SEPA into their\n"
2749-" communication with their customers.\n"
2750-" + Nationale online databases kunnen gebruikt worden om BBAN's naar IBAN's te\n"
2751-" converteren.\n"
2752-"\n"
2753-" * Geeft dropin uitbreidbare importvoorzieningen voor bankcommunicatie in:\n"
2754-" + MultiBank (NL) formaat transactiebestanden,\n"
2755-" - (todo) MT940 (Swift) formaat transactiebestanden,\n"
2756-" - (todo) CODA (BE) formaat transactiebestanden,\n"
2757-" - (wish) SEPA Credits (ISO 200022) berichten,\n"
2758-"\n"
2759-" * Breidt betalingen uit voor digitaal bankieren:\n"
2760-" + Werkstroom in betalingen aangepast voor bank-operaties\n"
2761-" + Bouwt op account_payment mechanieken voor uitbreidingen met export generatoren.\n"
2762-" - ClieOp3 (NL) betalings- en incasso-opdrachten beschikbaar in de\n"
2763-" account_banking_nl_clieop module\n"
2764-" - (wish) BTL91 (NL) batalingsopdrachten (geen formaatbeschrijving beschikbaar),\n"
2765-" - (wish) SEPA Direct Debits (ISO 200022) berichten\n"
2766-"\n"
2767-" * Toegevoegde mogelijkheden voor het import/export mechanisme:\n"
2768-" + Automatische koppeling en aanmaken van bankrekeningen, banken en relaties\n"
2769-" tijdens het importeren van transacties.\n"
2770-" + Automatisch koppelen met facturen en betalingen.\n"
2771-" + Solide importmechanisme dat meerdere imports van dezelfde transacties over\n"
2772-" over meerdere bestanden toestaat.\n"
2773-" + Dagboek-instellingen per bankrekening.\n"
2774-" + Business logica en bestands-parsing strikt gescheiden om de ontwikkeling\n"
2775-" van nieuwe parsers te vergemakkelijken\n"
2776-" + Geen speciale configuratie nodig voor de parsers, nieuwe parsers worden\n"
2777-" herkend en beschikbaar gemaakt voor gebuikers bij server(her)start.\n"
2778-" "
2779-
2780-#. module: account_banking
2781-#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
2782-msgid "Bank Statements File"
2783-msgstr "Bankafschrift bestand"
2784-
2785-#. module: account_banking
2786-#: code:addons/account_banking/parsers/models.py:0
2787-#, python-format
2788-msgid "This is a stub. Please implement your own."
2789-msgstr "Dit is een stub. Maak alstublieft uw eigen versie."
2790-
2791-#. module: account_banking
2792-#: view:account.banking.imported.file:0
2793-#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
2794-#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files
2795-msgid "Imported Bank Statements Files"
2796-msgstr "Geïmporteerde bankafschrift bestanden"
2797-
2798-#. module: account_banking
2799-#: field:account.bank.statement,banking_id:0
2800-msgid "Imported File"
2801-msgstr "Geïmporteerd bestand"
2802-
2803-#. module: account_banking
2804-#: view:account.banking.imported.file:0
2805-#: field:account.banking.imported.file,log:0
2806-msgid "Import Log"
2807-msgstr "Import log"
2808-
2809-#. module: account_banking
2810-#: code:addons/account_banking/wizard/bank_import.py:0
2811-#, python-format
2812-msgid "The imported statements appear to be invalid! Check your file."
2813-msgstr "De geïmporteerde afschriften lijken onjuist! Controleer uw bestand."
2814-
2815-#. module: account_banking
2816-#: code:addons/account_banking/wizard/bank_import.py:0
2817-#, python-format
2818-msgid "Number of statements loaded"
2819-msgstr "Aantal geladen afschriften"
2820-
2821-#. module: account_banking
2822-#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions
2823-#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings
2824-msgid "Banking"
2825-msgstr "Bankzaken"
2826-
2827-#. module: account_banking
2828-#: selection:account.banking.imported.file,state:0
2829-msgid "Error"
2830-msgstr "Fout"
2831-
2832-#. module: account_banking
2833-#: code:addons/account_banking/account_banking.py:0
2834-#, python-format
2835-msgid "Unable to reconcile entry \"%s\": %.2f"
2836-msgstr "Niet in staat boeking af te letteren \"%s\": %.2f"
2837-
2838-#. module: account_banking
2839-#: view:account.banking.imported.file:0
2840-msgid "Import Details"
2841-msgstr "Details import"
2842-
2843-#. module: account_banking
2844-#: field:account.bank.statement.line,period_id:0
2845-msgid "Period"
2846-msgstr "Periode"
2847-
2848-#. module: account_banking
2849-#: selection:payment.line,export_state:0
2850-msgid "Done"
2851-msgstr "Verwerkt"
2852-
2853-#. module: account_banking
2854-#: view:payment.order:0
2855-msgid "Select Invoices to Pay"
2856-msgstr "Kies te betalen facturen"
2857-
2858-#. module: account_banking
2859-#: field:account.banking.imported.file,user_id:0
2860-msgid "Responsible User"
2861-msgstr "Verantwoordelijke gebruiker"
2862-
2863-#. module: account_banking
2864-#: code:addons/account_banking/account_banking.py:0
2865-#, python-format
2866-msgid "The statement balance is incorrect !\n"
2867-msgstr "Het saldo op het afschrift is onjuist!\n"
2868-
2869-#. module: account_banking
2870-#: constraint:ir.model:0
2871-msgid "The Object name must start with x_ and not contain any special character !"
2872-msgstr "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !"
2873-
2874-#. module: account_banking
2875-#: selection:account.banking.imported.file,state:0
2876-msgid "Unfinished"
2877-msgstr "Onvoltooid"
2878-
2879-#. module: account_banking
2880-#: code:addons/account_banking/wizard/bank_import.py:0
2881-#, python-format
2882-msgid "Statements found for unknown account %(bank_account)s"
2883-msgstr "Afschriften gevonden voor onbekende bankrekening %(bank_account)s"
2884-
2885-#. module: account_banking
2886-#: model:ir.module.module,shortdesc:account_banking.module_meta_information
2887-msgid "Account Banking"
2888-msgstr "Account Banking"
2889-
2890-#. module: account_banking
2891-#: code:addons/account_banking/wizard/bank_import.py:0
2892-#, python-format
2893-msgid "Total number of statements"
2894-msgstr "Totaal aantal afschriften"
2895-
2896-#. module: account_banking
2897-#: field:account.banking.imported.file,format:0
2898-#: wizard_field:account_banking.banking_import,init,parser:0
2899-msgid "File Format"
2900-msgstr "Bestandsformaat"
2901-
2902-#. module: account_banking
2903-#: field:account.banking.account.settings,journal_id:0
2904-msgid "Journal"
2905-msgstr "Dagboek"
2906-
2907-#. module: account_banking
2908-#: selection:account.banking.imported.file,state:0
2909-msgid "Finished"
2910-msgstr "Gereed"
2911-
2912-#. module: account_banking
2913-#: code:addons/account_banking/wizard/banktools.py:0
2914-#, python-format
2915-msgid "No suitable fiscal year found for company %(company_name)s"
2916-msgstr "Geen geschikt boekjaar gevonden voor bedrijf %(company_name)s"
2917-
2918-#. module: account_banking
2919-#: view:account.banking.account.settings:0
2920-msgid "Bank Account Details"
2921-msgstr "Details bankrekening"
2922-
2923-#. module: account_banking
2924-#: code:addons/account_banking/wizard/bank_import.py:0
2925-#, python-format
2926-msgid "Unable to link transaction %(trans)s to invoice: '\n"
2927-" '%(no_candidates)s candidates found; can\'t choose."
2928-msgstr "Niet in staat transactie %(trans)s aan factuur te koppelen: '\n"
2929-" '%(no_candidates)s kandidaten gevonden; kan niet kiezen."
2930-
2931-#. module: account_banking
2932-#: field:account.bank.statement.line,partner_bank_id:0
2933-#: field:account.banking.account.settings,partner_bank_id:0
2934-msgid "Bank Account"
2935-msgstr "Bankrekening"
2936-
2937-#. module: account_banking
2938-#: code:addons/account_banking/wizard/bank_import.py:0
2939-#, python-format
2940-msgid "Number of transactions loaded"
2941-msgstr "Aantal geladen transacties"
2942-
2943-#. module: account_banking
2944-#: code:addons/account_banking/wizard/banktools.py:0
2945-#, python-format
2946-msgid "Multiple overlapping fiscal years found for date %(date)s"
2947-msgstr "Meerdere overlappende boekjaren gevonden voor datum %(date)s"
2948-
2949-#. module: account_banking
2950-#: model:ir.model,name:account_banking.model_account_banking_imported_file
2951-msgid "Imported Bank Statements File"
2952-msgstr "Geïmporteerde bankafschrift bestand"
2953-
2954
2955=== removed directory 'account_banking/parsers'
2956=== removed file 'account_banking/parsers/__init__.py'
2957--- account_banking/parsers/__init__.py 2010-01-13 20:15:24 +0000
2958+++ account_banking/parsers/__init__.py 1970-01-01 00:00:00 +0000
2959@@ -1,24 +0,0 @@
2960-# -*- encoding: utf-8 -*-
2961-##############################################################################
2962-#
2963-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
2964-# All Rights Reserved
2965-#
2966-# This program is free software: you can redistribute it and/or modify
2967-# it under the terms of the GNU General Public License as published by
2968-# the Free Software Foundation, either version 3 of the License, or
2969-# (at your option) any later version.
2970-#
2971-# This program is distributed in the hope that it will be useful,
2972-# but WITHOUT ANY WARRANTY; without even the implied warranty of
2973-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2974-# GNU General Public License for more details.
2975-#
2976-# You should have received a copy of the GNU General Public License
2977-# along with this program. If not, see <http://www.gnu.org/licenses/>.
2978-#
2979-##############################################################################
2980-
2981-import models
2982-
2983-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
2984
2985=== removed file 'account_banking/parsers/convert.py'
2986--- account_banking/parsers/convert.py 2010-01-13 20:15:24 +0000
2987+++ account_banking/parsers/convert.py 1970-01-01 00:00:00 +0000
2988@@ -1,41 +0,0 @@
2989-# -*- encoding: utf-8 -*-
2990-##############################################################################
2991-#
2992-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
2993-# All Rights Reserved
2994-#
2995-# This program is free software: you can redistribute it and/or modify
2996-# it under the terms of the GNU General Public License as published by
2997-# the Free Software Foundation, either version 3 of the License, or
2998-# (at your option) any later version.
2999-#
3000-# This program is distributed in the hope that it will be useful,
3001-# but WITHOUT ANY WARRANTY; without even the implied warranty of
3002-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3003-# GNU General Public License for more details.
3004-#
3005-# You should have received a copy of the GNU General Public License
3006-# along with this program. If not, see <http://www.gnu.org/licenses/>.
3007-#
3008-##############################################################################
3009-
3010-__all__ = ['str2date', 'date2str', 'date2date']
3011-
3012-import datetime
3013-
3014-def str2date(datestr, format='%d/%m/%y'):
3015- '''Convert a string to a datatime object'''
3016- return datetime.datetime.strptime(datestr, format)
3017-
3018-def date2str(date, format='%Y-%m-%d'):
3019- '''Convert a datetime object to a string'''
3020- return date.strftime(format)
3021-
3022-def date2date(datestr, fromfmt='%d/%m/%y', tofmt='%Y-%m-%d'):
3023- '''
3024- Convert a date in a string to another string, in a different
3025- format
3026- '''
3027- return date2str(str2date(datestr, fromfmt), tofmt)
3028-
3029-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
3030
3031=== removed file 'account_banking/parsers/models.py'
3032--- account_banking/parsers/models.py 2010-01-13 20:15:24 +0000
3033+++ account_banking/parsers/models.py 1970-01-01 00:00:00 +0000
3034@@ -1,161 +0,0 @@
3035-# -*- encoding: utf-8 -*-
3036-##############################################################################
3037-#
3038-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
3039-# All Rights Reserved
3040-#
3041-# This program is free software: you can redistribute it and/or modify
3042-# it under the terms of the GNU General Public License as published by
3043-# the Free Software Foundation, either version 3 of the License, or
3044-# (at your option) any later version.
3045-#
3046-# This program is distributed in the hope that it will be useful,
3047-# but WITHOUT ANY WARRANTY; without even the implied warranty of
3048-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3049-# GNU General Public License for more details.
3050-#
3051-# You should have received a copy of the GNU General Public License
3052-# along with this program. If not, see <http://www.gnu.org/licenses/>.
3053-#
3054-##############################################################################
3055-
3056-class mem_bank_statement(object):
3057- '''
3058- A mem_bank_statement is a real life projection of a bank statement paper
3059- containing a report of one or more transactions done. As these reports can
3060- contain payments that originate in several accounting periods, period is an
3061- attribute of mem_bank_transaction, not of mem_bank_statement.
3062- Also note that the statement_id is copied from the bank statement, and not
3063- generated from any sequence. This enables us to skip old data in new
3064- statement files.
3065- '''
3066- # Lock attributes to enable parsers to trigger non-conformity faults
3067- __slots__ = [
3068- 'start_balance','end_balance', 'date', 'local_account',
3069- 'local_currency', 'id', 'statements'
3070- ]
3071- def __init__(self, *args, **kwargs):
3072- super(mem_bank_statement, self).__init__(*args, **kwargs)
3073- self.id = ''
3074- self.local_account = ''
3075- self.local_currency = ''
3076- self.start_balance = 0.0
3077- self.end_balance = 0.0
3078- self.date = ''
3079- self.transactions = []
3080-
3081- def is_valid(self):
3082- '''
3083- Final check: ok if calculated end_balance and parsed end_balance are
3084- identical and perform a heuristic check on the transactions.
3085- '''
3086- if any([x for x in self.transactions if not x.is_valid()]):
3087- return False
3088- check = float(self.start_balance)
3089- for transaction in self.transactions:
3090- check += float(transaction.transferred_amount)
3091- return abs(check - float(self.end_balance)) < 0.0001
3092-
3093-class mem_bank_transaction(object):
3094- '''
3095- A mem_bank_transaction is a real life copy of a bank transfer. Mapping to
3096- OpenERP moves and linking to invoices and the like is done afterwards.
3097- '''
3098- # Lock attributes to enable parsers to trigger non-conformity faults
3099- __slots__ = [
3100- 'id', 'local_account', 'local_currency', 'execution_date',
3101- 'effective_date', 'remote_owner', 'remote_account',
3102- 'remote_currency', 'transferred_amount', 'transfer_type',
3103- 'reference', 'message', 'statement_id',
3104- ]
3105-
3106- def __init__(self, *args, **kwargs):
3107- super(mem_bank_transaction, self).__init__(*args, **kwargs)
3108- self.id = ''
3109- self.local_account = ''
3110- self.local_currency = ''
3111- self.execution_date = ''
3112- self.effective_date = ''
3113- self.remote_account = ''
3114- self.remote_owner = ''
3115- self.remote_currency = ''
3116- self.transferred_amount = ''
3117- self.transfer_type = ''
3118- self.reference = ''
3119- self.message = ''
3120- self.statement_id = ''
3121-
3122- def is_valid(self):
3123- '''
3124- Heuristic check: at least id, execution_date, remote_account and
3125- transferred_amount should be filled to create a valid transfer.
3126- '''
3127- return (self.execution_date and self.remote_account
3128- and self.transferred_amount and True) or False
3129-
3130-class parser_type(type):
3131- parsers = []
3132- parser_by_name = {}
3133- parser_by_code = {}
3134- parser_by_classname = {}
3135-
3136- def __new__(metacls, clsname, bases, clsdict):
3137- newcls = type.__new__(metacls, clsname, bases, clsdict)
3138- if 'name' in clsdict and newcls.name:
3139- metacls.parsers.append(newcls)
3140- metacls.parser_by_name[newcls.name] = newcls
3141- metacls.parser_by_code[newcls.code] = newcls
3142- metacls.parser_by_classname[clsname] = newcls
3143- return newcls
3144-
3145- @classmethod
3146- def get_parser_types(cls, sort='name'):
3147- if sort == 'name':
3148- keys = cls.parser_by_name.keys()
3149- parsers = cls.parser_by_name
3150- else:
3151- keys = cls.parser_by_code.itervalues()
3152- parsers = cls.parser_by_code
3153- keys.sort()
3154- return [(parsers[x].code, parsers[x].name) for x in keys]
3155-
3156-def create_parser(code):
3157- if code in parser_type.parser_by_code:
3158- return parser_type.parser_by_code[code]()
3159- return None
3160-
3161-class parser(object):
3162- '''
3163- A parser delivers the interface for any parser object. Inherit from
3164- it to implement your own.
3165- You should at least implement the following at the class level:
3166- name -> the name of the parser, shown to the user and
3167- translatable.
3168- code -> the identifier you care to give it. Not translatable
3169- doc -> the description of the identifier. Shown to the user.
3170- Translatable.
3171-
3172- parse -> the method for the actual parsing.
3173- '''
3174- __metaclass__ = parser_type
3175- name = None
3176- code = None
3177- doc = __doc__
3178-
3179- def parse(self, data):
3180- '''
3181- Parse data.
3182-
3183- data is a raw in memory file object. You have to split it in
3184- whatever chunks you see fit for parsing. It should return a list
3185- of mem_bank_statement objects. Every mem_bank_statement object
3186- should contain a list of mem_bank_transaction objects.
3187-
3188- For identification purposes, don't invent numbering of the transaction
3189- numbers or bank statements ids on your own - stick with those provided
3190- by your bank. Doing so enables the users to re-load old transaction
3191- files without creating multiple identical bank statements.
3192- '''
3193- raise NotImplementedError(_('This is a stub. Please implement your own.'))
3194-
3195-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
3196
3197=== removed file 'account_banking/record.py'
3198--- account_banking/record.py 2010-01-13 20:15:24 +0000
3199+++ account_banking/record.py 1970-01-01 00:00:00 +0000
3200@@ -1,182 +0,0 @@
3201-# -*- encoding: utf-8 -*-
3202-##############################################################################
3203-#
3204-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
3205-# All Rights Reserved
3206-#
3207-# This program is free software: you can redistribute it and/or modify
3208-# it under the terms of the GNU General Public License as published by
3209-# the Free Software Foundation, either version 3 of the License, or
3210-# (at your option) any later version.
3211-#
3212-# This program is distributed in the hope that it will be useful,
3213-# but WITHOUT ANY WARRANTY; without even the implied warranty of
3214-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3215-# GNU General Public License for more details.
3216-#
3217-# You should have received a copy of the GNU General Public License
3218-# along with this program. If not, see <http://www.gnu.org/licenses/>.
3219-#
3220-##############################################################################
3221-
3222-__all__ = [
3223- 'Field', 'Filler', 'DateField', 'NumberField', 'RightAlignedField',
3224- 'RecordType', 'Record', 'asciify'
3225-]
3226-
3227-__doc__ = '''Ease working with fixed length records in files'''
3228-
3229-from datetime import datetime, date
3230-import unicodedata
3231-
3232-class Field(object):
3233- '''Base Field class - fixed length left aligned string field in a record'''
3234- def __init__(self, name, length=1, fillchar=' '):
3235- self.name = name.replace(' ', '_')
3236- self.length = length
3237- self.fillchar = fillchar
3238-
3239- def format(self, value):
3240- value = str(value)
3241- if len(value) > self.length:
3242- return value[len(value) - self.length:]
3243- return value.ljust(self.length, self.fillchar)
3244-
3245- def take(self, buffer):
3246- offset = hasattr(self, 'offset') and self.offset or 0
3247- return buffer[offset:offset + self.length].rstrip(self.fillchar)
3248-
3249- def __repr__(self):
3250- return '%s "%s"' % (self.__class__.__name__, self.name)
3251-
3252-class Filler(Field):
3253- '''Constant value field'''
3254- def __init__(self, name, length=1, value=' '):
3255- super(Filler, self).__init__(name, length)
3256- self.value = str(value)
3257-
3258- def take(self, buffer):
3259- return self.format(buffer)
3260-
3261- def format(self, value):
3262- return super(Filler, self).format(
3263- self.value * (self.length / len(self.value) +1)
3264- )
3265-
3266-class DateField(Field):
3267- '''Variable date field'''
3268- def __init__(self, name, format='%Y-%m-%d', auto=False):
3269- length = len(date.today().strftime(format))
3270- super(DateField, self).__init__(name, length)
3271- self.dateformat = format
3272- self.auto = auto
3273-
3274- def format(self, value):
3275- if isinstance(value, (str, unicode)) and \
3276- len(value.strip()) == self.length:
3277- value = datetime.strptime(value, self.dateformat).date()
3278- elif not isinstance(value, (datetime, date)):
3279- value = date.today()
3280- return value.strftime(self.dateformat)
3281-
3282- def take(self, buffer):
3283- value = super(DateField, self).take(buffer)
3284- if value:
3285- return datetime.strptime(value, self.dateformat).date()
3286- return self.auto and date.today() or None
3287-
3288-class RightAlignedField(Field):
3289- '''Deviation of Field: right aligned'''
3290- def format(self, value):
3291- if len(value) > self.length:
3292- return value[:self.length]
3293- return value.rjust(self.length, self.fillchar)
3294-
3295- def take(self, buffer):
3296- offset = hasattr(self, 'offset') and self.offset or 0
3297- return buffer[offset:offset + self.length].lstrip(self.fillchar)
3298-
3299-class NumberField(RightAlignedField):
3300- '''Deviation of Field: left zero filled'''
3301- def __init__(self, *args, **kwargs):
3302- kwargs['fillchar'] = '0'
3303- super(NumberField, self).__init__(*args, **kwargs)
3304-
3305- def format(self, value):
3306- return super(NumberField, self).format(value and str(value) or '')
3307-
3308-class RecordType(object):
3309- fields = []
3310-
3311- def __init__(self, fields=[]):
3312- if fields:
3313- self.fields = fields
3314- offset = 0
3315- for field in self.fields:
3316- field.offset = offset
3317- offset += field.length
3318-
3319- def __len__(self):
3320- return reduce(lambda x,y: x+y.length, self.fields, 0)
3321-
3322- def __contains__(self, key):
3323- return any(lambda x, y=key: x.name == y, self.fields)
3324-
3325- def __getitem__(self, key):
3326- for field in self.fields:
3327- if field.name == key:
3328- return field
3329- raise KeyError, 'No such field: %s' % key
3330-
3331- def format(self, buffer):
3332- result = []
3333- for field in self.fields:
3334- result.append(field.format(field.take(buffer)))
3335- return ''.join(result)
3336-
3337- def take(self, buffer):
3338- return dict(zip([x.name for x in self.fields],
3339- [x.take(buffer) for x in self.fields]
3340- ))
3341-
3342-class Record(object):
3343- _recordtype = None
3344-
3345- def __init__(self, recordtype=None, value=''):
3346- if hasattr(self, '_fields') and self._fields:
3347- self._recordtype = RecordType(self._fields)
3348- if not self._recordtype and not recordtype:
3349- raise ValueError, 'No recordtype specified'
3350- if not self._recordtype:
3351- self._recordtype = recordtype()
3352- self._length = len(self._recordtype)
3353- self._value = value.ljust(self._length)[:self._length]
3354-
3355- def __len__(self):
3356- return self._length
3357-
3358- def __setattr__(self, attr, value):
3359- if attr.startswith('_'):
3360- super(Record, self).__setattr__(attr, value)
3361- else:
3362- field = self._recordtype[attr]
3363- self._value = self._value[:field.offset] + \
3364- field.format(value) + \
3365- self._value[field.offset + field.length:]
3366-
3367- def __getattr__(self, attr):
3368- if attr.startswith('_'):
3369- return super(Record, self).__getattr__(attr)
3370- field = self._recordtype[attr]
3371- return field.take(self._value)
3372-
3373- def __str__(self):
3374- return self._recordtype.format(self._value)
3375-
3376- def __unicode__(self):
3377- return unicode(str(self))
3378-
3379-def asciify(str):
3380- return unicodedata.normalize('NFKD', str).encode('ascii', 'ignore')
3381-
3382-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
3383
3384=== removed file 'account_banking/sepa.py'
3385--- account_banking/sepa.py 2010-01-13 20:15:24 +0000
3386+++ account_banking/sepa.py 1970-01-01 00:00:00 +0000
3387@@ -1,421 +0,0 @@
3388-# -*- encoding: utf-8 -*-
3389-##############################################################################
3390-#
3391-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
3392-# All Rights Reserved
3393-#
3394-# This program is free software: you can redistribute it and/or modify
3395-# it under the terms of the GNU General Public License as published by
3396-# the Free Software Foundation, either version 3 of the License, or
3397-# (at your option) any later version.
3398-#
3399-# This program is distributed in the hope that it will be useful,
3400-# but WITHOUT ANY WARRANTY; without even the implied warranty of
3401-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3402-# GNU General Public License for more details.
3403-#
3404-# You should have received a copy of the GNU General Public License
3405-# along with this program. If not, see <http://www.gnu.org/licenses/>.
3406-#
3407-##############################################################################
3408-
3409-# The information about SEPA account numbers in this module are collected
3410-# from ISO 13616-1, which can be found at SWIFT's website:
3411-# http://www.swift.com/solutions/messaging/information_products/bic_downloads_documents/pdfs/IBAN_Registry.pdf
3412-#
3413-# This module uses both SEPA and IBAN as seemingly interchangeble terms.
3414-# However, a SEPA account is a bank account in the SEPA zone, which is
3415-# represented by a IBAN number, which is build up from a ISO-693-1 two letter
3416-# country code, two check digits and a BBAN number, representing the
3417-# local/national accounting scheme.
3418-#
3419-# With the exception of Turkey, all countries use the full local adressing
3420-# scheme in the IBAN numbers, making it possible to deduce the BBAN from the
3421-# IBAN. As Turkey uses an additional code in the local scheme which is not
3422-# part of the BBAN, for accounts located in Turkeys banks it is not possible
3423-# to use the BBAN to reconstruct the local account.
3424-#
3425-# WARNING:
3426-# This module contains seemingly enough info to create IBAN's from BBAN's.
3427-# Although many BBAN/IBAN conversions seem algorithmic, there is enough
3428-# deviation to take the warning from SEPA seriously: this is the domain of the
3429-# account owning banks. Don't use it, unless you are prepared to loose your
3430-# money. It is for heuristic validation purposes only.
3431-
3432-__all__ = ['IBAN']
3433-
3434-def modulo_97_base10(buffer):
3435- '''
3436- Calculate the modulo 97 value of a string in base10
3437- '''
3438- checksum = int(buffer[0])
3439- for digit in buffer[1:]:
3440- checksum *= 10;
3441- checksum += int(digit)
3442- checksum %= 97
3443- return checksum
3444-
3445-def base36_to_base10str(buffer):
3446- '''
3447- Convert a base36 string value to a string of base10 digits.
3448- '''
3449- result = ''
3450- for digit in buffer:
3451- if digit.isalpha():
3452- result += str(ord(digit) - 55)
3453- else:
3454- result += digit
3455- return result
3456-
3457-class BBANFormat(object):
3458- '''
3459- A BBANFormat is an auxilliary class for IBAN. It represents the composition
3460- of a BBAN number from the different elements in order to translate a
3461- IBAN number to a localized number. The reverse route, transforming a local
3462- account to a SEPA account, is the sole responsibility of the banks.
3463- '''
3464-
3465- def __init__(self, ibanfmt, bbanfmt='%A', nolz=False):
3466- '''
3467- Specify the structure of the SEPA account in relation to the local
3468- account. The XXZZ prefix that all SEPA accounts have is not part of
3469- the structure in BBANFormat.
3470-
3471- ibanfmt: string of identifiers from position 5 (start = 1):
3472- A = Account position
3473- N = Account digit
3474- B = Bank code digit
3475- C = Branch code digit
3476- V = Account check digit
3477- W = Bank code check digit
3478- X = Additional check digit (some countries check everything)
3479- P = Account prefix digit
3480-
3481- The combination of N and A can be used to encode minimum length
3482- leading-zero-stripped account numbers.
3483-
3484- Example: (NL) 'CCCCAAAAAAAAAA'
3485- will convert 'INGB0001234567' into
3486- bankcode 'INGB' and account '0001234567'
3487-
3488- bbanfmt: string of placeholders for the local bank account
3489- %C: bank code
3490- %B: branch code
3491- %I: IBAN number (complete)
3492- %T: account type
3493- %P: account prefix
3494- %A: account number. This will include the 'N' placeholder
3495- positions in the ibanfmt.
3496- %V, %W, %X: check digits (separate meanings)
3497- %Z: IBAN check digits (only Poland uses these)
3498- %%: %
3499- anything else: literal copy
3500-
3501- Example: (AT): '%A BLZ %C'
3502-
3503- nolz: boolean indicating stripping of leading zeroes in the account
3504- number. Defaults to False
3505- '''
3506- self._iban = ibanfmt
3507- self._bban = bbanfmt
3508- self._nolz = nolz
3509-
3510- def __extract__(self, spec, value):
3511- i = self._iban.find(spec)
3512- if i < 0:
3513- return ''
3514- result = ''
3515- j = len(self._iban)
3516- while i < j and self._iban[i] == spec:
3517- result += value[i+4]
3518- i += 1
3519- return self._nolz and result.lstrip('0') or result
3520-
3521- def bankcode(self, iban):
3522- return self.__extract__('B', iban)
3523-
3524- def branchcode(self, iban):
3525- return self.__extract__('C', iban)
3526-
3527- def account(self, iban):
3528- if self._iban.find('N') >= 0:
3529- prefix = self.__extract__('N', iban).lstrip('0')
3530- else:
3531- prefix = ''
3532- return prefix + self.__extract__('A', iban)
3533-
3534- def BBAN(self, iban):
3535- '''
3536- Format the BBAN part of the IBAN in iban following the local
3537- addressing scheme. We need the full IBAN in order to be able to use
3538- the IBAN check digits in it, as Poland needs.
3539- '''
3540- res = ''
3541- i = 0
3542- while i < len(self._bban):
3543- if self._bban[i] == '%':
3544- i += 1
3545- parm = self._bban[i]
3546- if parm in 'BCDPTVWX':
3547- res += self.__extract__(parm, iban)
3548- elif parm == 'A':
3549- res += self.account(iban)
3550- elif parm == 'S':
3551- res += iban
3552- elif parm == 'Z':
3553- # IBAN check digits (Poland)
3554- res += iban[2:4]
3555- elif parm == '%':
3556- res += '%'
3557- else:
3558- res += self._bban[i]
3559- i += 1
3560- return res
3561-
3562-class IBAN(str):
3563- '''
3564- A IBAN string represents a SEPA bank account number. This class provides
3565- the interpretation and some validation of such strings.
3566-
3567- Mind that, although there is sufficient reason to comment on the chosen
3568- approach, we are talking about a transition period of at max. 1 year. Good
3569- is good enough.
3570- '''
3571- BBAN_formats = {
3572- 'AL': BBANFormat('CCBBBBVAAAAAAAAAAAAAAAAAA', '%B%A'),
3573- 'AD': BBANFormat('CCCCBBBBAAAAAAAAAAAA', '%A'),
3574- 'AT': BBANFormat('BBBBBAAAAAAAAAAA', '%A BLZ %C'),
3575- 'BE': BBANFormat('CCCAAAAAAAVV', '%C-%A-%V'),
3576- 'BA': BBANFormat('BBBCCCAAAAAAAA', '%I'),
3577- 'BG': BBANFormat('BBBBCCCCAAAAAAAAAA', '%I'),
3578- 'CH': BBANFormat('CCCCCAAAAAAAAAAAAV', '%C %A', nolz=True),
3579- 'CS': BBANFormat('BBBAAAAAAAAAAAAAVV', '%B-%A-%V'),
3580- 'CY': BBANFormat('BBBCCCCCAAAAAAAAAAAAAAAA', '%B%C%A'),
3581- 'CZ': BBANFormat('BBBBPPPPPPAAAAAAAAAA', '%B-%P/%A'),
3582- 'DE': BBANFormat('BBBBBBBBAAAAAAAAAAV', '%A%V BLZ %B'),
3583- 'DK': BBANFormat('CCCCAAAAAAAAAV', '%C %A%V'),
3584- 'EE': BBANFormat('BBCCAAAAAAAAAAAV', '%A%V'),
3585- 'ES': BBANFormat('BBBBCCCCWVAAAAAAAAAA', '%B%C%W%V%A'),
3586- 'FI': BBANFormat('CCCCTTAAAAAAAV', '%C-%A%V', nolz=True),
3587- 'FR': BBANFormat('BBBBBCCCCCAAAAAAAAAAAVV', '%B %C %A %V'),
3588- 'FO': BBANFormat('BBBBAAAAAAAAAV', '%B %A%V'),
3589- # Great Brittain uses a special display for the branch code, which we
3590- # can't honor using the current system. If this appears to be a
3591- # problem, we can come up with something later.
3592- 'GB': BBANFormat('BBBBCCCCCCAAAAAAAAV', '%C %A'),
3593- 'GI': BBANFormat('BBBBAAAAAAAAAAAAAAA', '%A'),
3594- 'GL': BBANFormat('CCCCAAAAAAAAAV', '%C %A%V'),
3595- 'GR': BBANFormat('BBBCCCCAAAAAAAAAAAAAAAA', '%B-%C-%A', nolz=True),
3596- 'HR': BBANFormat('BBBBBBBAAAAAAAAAA', '%B-%A'),
3597- 'HU': BBANFormat('BBBCCCCXAAAAAAAAAAAAAAAV', '%B%C%X %A%V'),
3598- 'IE': BBANFormat('BBBBCCCCCCAAAAAAAAV', '%C %A%V'),
3599- 'IL': BBANFormat('BBBCCCAAAAAAAAAAAAA', '%C%A'),
3600- # Iceland uses an extra identification number, split in two on
3601- # display. Coded here as %P%V.
3602- 'IS': BBANFormat('CCCCTTAAAAAAPPPPPPVVVV', '%C-%T-%A-%P-%V'),
3603- 'IT': BBANFormat('WBBBBBCCCCCCAAAAAAAAAAAAV', '%W/%B/%C/%A%V'),
3604- 'LV': BBANFormat('BBBBAAAAAAAAAAAAA', '%I'),
3605- 'LI': BBANFormat('CCCCCAAAAAAAAAAAA', '%C %A', nolz=True),
3606- 'LT': BBANFormat('BBBBBAAAAAAAAAAA', '%I'),
3607- 'LU': BBANFormat('BBBAAAAAAAAAAAAA', '%I'),
3608- 'MC': BBANFormat('BBBBBCCCCCAAAAAAAAAAAVV', '%B %C %A %V'),
3609- 'ME': BBANFormat('CCCAAAAAAAAAAAAAVV', '%C-%A-%V'),
3610- 'MK': BBANFormat('BBBAAAAAAAAAAVV', '%B-%A-%V', nolz=True),
3611- 'MT': BBANFormat('BBBBCCCCCAAAAAAAAAAAAAAAAAA', '%A', nolz=True),
3612- # Mauritius has an aditional bank identifier, a reserved part and the
3613- # currency as part of the IBAN encoding. As there is no representation
3614- # given for the local account in ISO 13616-1 we assume IBAN, which
3615- # circumvents the BBAN display problem.
3616- 'MU': BBANFormat('BBBBBBCCAAAAAAAAAAAAVVVWWW', '%I'),
3617- # Netherlands has two different local account schemes: one with and
3618- # one without check digit (9-scheme and 7-scheme). Luckily most Dutch
3619- # financial services can keep the two apart without telling, so leave
3620- # that. Also leave the leading zero issue, as most banks are already
3621- # converting their local account numbers to BBAN format.
3622- 'NL': BBANFormat('BBBBAAAAAAAAAA', '%A'),
3623- # Norway seems to split the account number in two on display. For now
3624- # we leave that. If this appears to be a problem, we can fix it later.
3625- 'NO': BBANFormat('CCCCAAAAAV', '%C.%A%V'),
3626- 'PL': BBANFormat('CCCCCCCCAAAAAAAAAAAAAAAA', '%Z%C %A'),
3627- 'PT': BBANFormat('BBBBCCCCAAAAAAAAAAAVV', '%B.%C.%A.%V'),
3628- 'RO': BBANFormat('BBBBAAAAAAAAAAAAAAAA', '%A'),
3629- 'SA': BBANFormat('BBAAAAAAAAAAAAAAAA', '%B%A'),
3630- 'SE': BBANFormat('CCCAAAAAAAAAAAAAAAAV', '%A'),
3631- 'SI': BBANFormat('CCCCCAAAAAAAAVV', '%C-%A%V', ),
3632- # Slovakia uses two different format for local display. We stick with
3633- # their formal BBAN specs
3634- 'SK': BBANFormat('BBBBPPPPPPAAAAAAAAAAAA', '%B%P%A'),
3635- # San Marino: No information for display of BBAN, so stick with IBAN
3636- 'SM': BBANFormat('WBBBBBCCCCCCAAAAAAAAAAAAV', '%I'),
3637- 'TN': BBANFormat('BBCCCAAAAAAAAAAAAAVV', '%B %C %A %V'),
3638- # Turkey has insufficient information in the IBAN number to regenerate
3639- # the BBAN: the branch code for local addressing is missing (5n).
3640- 'TR': BBANFormat('BBBBBWAAAAAAAAAAAAAAAA', '%B%C%A'),
3641- }
3642- countries = BBAN_formats.keys()
3643- unknown_BBAN_format = BBANFormat('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', '%I')
3644-
3645- def __new__(cls, arg, **kwargs):
3646- '''
3647- All letters should be uppercase and acceptable. As str is an
3648- in 'C' implemented class, this can't be done in __init__.
3649- '''
3650- init = ''
3651- for item in arg.upper():
3652- if item.isalnum():
3653- init += item
3654- elif item not in ' \t.-':
3655- raise ValueError, 'Invalid chars found in IBAN number'
3656- return str.__new__(cls, init)
3657-
3658- def __init__(self, *args, **kwargs):
3659- '''
3660- Sanity check: don't offer extensions unless the base is sound.
3661- '''
3662- super(IBAN, self).__init__()
3663- # Rearrange position of country code and check digits
3664- if self.countrycode not in self.countries:
3665- self.BBAN_format = self.unknown_BBAN_format
3666- raise Warning, \
3667- 'Don\'t know how to format BBAN for country %s' % \
3668- self.countrycode
3669- else:
3670- self.BBAN_format = self.BBAN_formats[self.countrycode]
3671-
3672- @classmethod
3673- def create(cls, BIC=None, countrycode=None, BBAN=None, bankcode=None, branchcode=None,
3674- account=None
3675- ):
3676- '''
3677- Create a IBAN number from a BBAN and a country code. Optionaly create
3678- a BBAN from BBAN components before generation.
3679-
3680- Incomplete: can only work with valid BBAN now.
3681- '''
3682- if BIC:
3683- if not bankcode:
3684- bankcode = BIC[:4]
3685- if not countrycode:
3686- countrycode = BIC[4:6]
3687- else:
3688- if countrycode:
3689- countrycode = countrycode.upper()
3690- else:
3691- raise ValueError, \
3692- 'Either BIC or countrycode is required'
3693-
3694- if countrycode not in cls.countries:
3695- raise ValueError, \
3696- '%s is not a SEPA country' % countrycode
3697- format = cls.BBAN_formats[countrycode]
3698-
3699- if BBAN:
3700- if len(BBAN) == len(formats._iban):
3701- iban = cls(countrycode + '00' + BBAN)
3702- return cls(countrycode + iban.checksum + BBAN)
3703- raise ValueError, \
3704- 'Insufficient data to generate IBAN'
3705-
3706- @property
3707- def valid(self):
3708- '''
3709- Check if the string + check digits deliver a valid checksum
3710- '''
3711- buffer = self[4:] + self[:4]
3712- return int(base36_to_base10str(buffer)) % 97 == 1
3713-
3714- def __repr__(self):
3715- '''
3716- Formal representation is in chops of four characters, devided by a
3717- space.
3718- '''
3719- parts = []
3720- for i in range(0, len(self), 4):
3721- parts.append(self[i:i+4])
3722- return ' '.join(parts)
3723-
3724- def __unicode__(self):
3725- '''
3726- Return unicode representation of self
3727- '''
3728- return u'%r' % self
3729-
3730- @property
3731- def checksum(self):
3732- '''
3733- Generate a new checksum for an otherwise correct layed out BBAN in a
3734- IBAN string.
3735- NOTE: This is the responsability of the banks. No guaranties whatsoever
3736- that this delivers usable IBAN accounts. Mind your money!
3737- '''
3738- buffer = self[4:] + self[:2] + '00'
3739- buffer = base36_to_base10str(buffer)
3740- return '%.2d' % (98 - modulo_97_base10(buffer))
3741-
3742- @property
3743- def checkdigits(self):
3744- '''
3745- Return the digits which form the checksum in the IBAN string
3746- '''
3747- return self[2:4]
3748-
3749- @property
3750- def countrycode(self):
3751- return self[:2]
3752-
3753- @property
3754- def bankcode(self):
3755- return self.BBAN_format.bankcode(self)
3756-
3757- @property
3758- def BIC_searchkey(self):
3759- '''
3760- BIC's, or Bank Identification Numbers, are composed of the bank
3761- code, followed by the country code, followed by the localization
3762- code, followed by an optional department number.
3763-
3764- The bank code seems to be world wide unique. Knowing this,
3765- one can use the country + bankcode info from BIC to narrow a
3766- search for the bank itself.
3767-
3768- Note that some countries use one single localization code for
3769- all bank transactions in that country, while others do not. This
3770- makes it impossible to use an algorithmic approach for generating
3771- the full BIC.
3772- '''
3773- return self.bankcode[:4] + self.countrycode
3774-
3775- @property
3776- def branchcode(self):
3777- return self.BBAN_format.branchcode(self)
3778-
3779- @property
3780- def localized_BBAN(self):
3781- '''
3782- Localized format of local or Basic Bank Account Number, aka BBAN
3783- '''
3784- if self.countrycode == 'TR':
3785- raise NotImplementedError, \
3786- 'The Turkish BBAN requires information that is not in the IBAN number.'
3787- return self.BBAN_format.BBAN(self)
3788-
3789- @property
3790- def BBAN(self):
3791- '''
3792- Return full encoded BBAN, which is for all countries the IBAN string
3793- after the ISO-639 code and the two check digits.
3794- '''
3795- return self[4:]
3796-
3797-if __name__ == '__main__':
3798- import sys
3799- for arg in sys.argv[1:]:
3800- iban = IBAN(arg)
3801- print 'IBAN:', iban
3802- print 'country code:', iban.countrycode
3803- print 'bank code:', iban.bankcode
3804- print 'branch code:', iban.branchcode
3805- print 'BBAN:', iban.BBAN
3806- print 'localized BBAN:', iban.localized_BBAN
3807- print 'check digits:', iban.checkdigits
3808- print 'checksum:', iban.checksum
3809
3810=== removed directory 'account_banking/wizard'
3811=== removed file 'account_banking/wizard/__init__.py'
3812--- account_banking/wizard/__init__.py 2010-01-13 20:15:24 +0000
3813+++ account_banking/wizard/__init__.py 1970-01-01 00:00:00 +0000
3814@@ -1,23 +0,0 @@
3815-# -*- encoding: utf-8 -*-
3816-##############################################################################
3817-#
3818-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
3819-# All Rights Reserved
3820-#
3821-# This program is free software: you can redistribute it and/or modify
3822-# it under the terms of the GNU General Public License as published by
3823-# the Free Software Foundation, either version 3 of the License, or
3824-# (at your option) any later version.
3825-#
3826-# This program is distributed in the hope that it will be useful,
3827-# but WITHOUT ANY WARRANTY; without even the implied warranty of
3828-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3829-# GNU General Public License for more details.
3830-#
3831-# You should have received a copy of the GNU General Public License
3832-# along with this program. If not, see <http://www.gnu.org/licenses/>.
3833-#
3834-##############################################################################
3835-import bank_import
3836-
3837-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
3838
3839=== removed file 'account_banking/wizard/bank_import.py'
3840--- account_banking/wizard/bank_import.py 2010-01-13 20:15:24 +0000
3841+++ account_banking/wizard/bank_import.py 1970-01-01 00:00:00 +0000
3842@@ -1,583 +0,0 @@
3843-# -*- encoding: utf-8 -*-
3844-##############################################################################
3845-#
3846-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
3847-# All Rights Reserved
3848-#
3849-# This program is free software: you can redistribute it and/or modify
3850-# it under the terms of the GNU General Public License as published by
3851-# the Free Software Foundation, either version 3 of the License, or
3852-# (at your option) any later version.
3853-#
3854-# This program is distributed in the hope that it will be useful,
3855-# but WITHOUT ANY WARRANTY; without even the implied warranty of
3856-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3857-# GNU General Public License for more details.
3858-#
3859-# You should have received a copy of the GNU General Public License
3860-# along with this program. If not, see <http://www.gnu.org/licenses/>.
3861-#
3862-##############################################################################
3863-'''
3864-This module contains the business logic of the wizard account_banking_import.
3865-The parsing is done in the parser modules. Every parser module is required to
3866-use parser.models as a mean of communication with the business logic.
3867-'''
3868-import pooler
3869-import time
3870-import wizard
3871-import base64
3872-from osv import osv
3873-from tools import config
3874-from tools.translate import _
3875-from account_banking.parsers import models
3876-from account_banking.parsers.convert import *
3877-from banktools import *
3878-
3879-def _get_move_info(pool, cursor, uid, move_line):
3880- reconcile_obj = pool.get('account.bank.statement.reconcile')
3881- type_map = {
3882- 'out_invoice': 'customer',
3883- 'in_invoice': 'supplier',
3884- 'out_refund': 'customer',
3885- 'in_refund': 'supplier',
3886- }
3887- retval = struct(move_line=move_line)
3888- retval.reference = move_line.ref
3889- if move_line.invoice:
3890- retval.invoice = move_line.invoice
3891- retval.type = type_map[move_line.invoice.type]
3892- else:
3893- retval.type = 'general'
3894- move_line.reconcile_id = reconcile_obj.create(
3895- cursor, uid, {'line_ids': [(6, 0, [move_line.id])]}
3896- )
3897- return retval
3898-
3899-def _link_payment(pool, cursor, uid, trans, payment_lines,
3900- partner_id, bank_account_id, log):
3901- '''
3902- Find the payment order belonging to this reference - if there is one
3903- This is the easiest part: when sending payments, the returned bank info
3904- should be identical to ours.
3905- '''
3906- # TODO: Not sure what side effects are created when payments are done
3907- # for credited customer invoices, which will be matched later on too.
3908- digits = int(config['price_accuracy'])
3909- candidates = [x for x in payment_lines
3910- if x.communication == trans.reference
3911- and round(x.amount, digits) == -round(trans.transferred_amount, digits)
3912- and trans.remote_account in (x.bank_id.acc_number,
3913- x.bank_id.iban)
3914- ]
3915- if len(candidates) == 1:
3916- candidate = candidates[0]
3917- payment_line_obj = pool.get('payment.line')
3918- payment_line_obj.write(cursor, uid, [candidate.id], {
3919- 'export_state': 'done',
3920- 'date_done': trans.effective_date.strftime('%Y-%m-%d')}
3921- )
3922-
3923- return _get_move_info(pool, cursor, uid, candidate.move_line_id)
3924-
3925- return False
3926-
3927-def _link_invoice(pool, cursor, uid, trans, move_lines,
3928- partner_id, bank_account_id, log):
3929- '''
3930- Find the invoice belonging to this reference - if there is one
3931- Use the sales journal to check.
3932-
3933- Challenges we're facing:
3934- 1. The sending or receiving party is not necessarily the same as the
3935- partner the payment relates to.
3936- 2. References can be messed up during manual encoding and inexact
3937- matching can link the wrong invoices.
3938- 3. Amounts can or can not match the expected amount.
3939- 4. Multiple invoices can be paid in one transaction.
3940- .. There are countless more, but these we'll try to address.
3941-
3942- Assumptions for matching:
3943- 1. There are no payments for invoices not sent. These are dealt with
3944- later on.
3945- 1. Debit amounts are either customer invoices or credited supplier
3946- invoices.
3947- 2. Credit amounts are either supplier invoices or credited customer
3948- invoices.
3949- 3. Payments are either below expected amount or only slightly above
3950- (abs).
3951- 4. Payments from partners that are matched, pay their own invoices.
3952-
3953- Worst case scenario:
3954- 1. No match was made.
3955- No harm done. Proceed with manual matching as usual.
3956- 2. The wrong match was made.
3957- Statements are encoded in draft. You will have the opportunity to
3958- manually correct the wrong assumptions.
3959- '''
3960- # First on partner
3961- candidates = filter(lambda x, y=partner_id: x.partner_id.id == y, move_lines)
3962-
3963- # Next on reference/invoice number. Mind that this uses the invoice
3964- # itself, as the move_line references have been fiddled with on invoice
3965- # creation. This also enables us to search for the invoice number in the
3966- # reference instead of the other way around, as most human interventions
3967- # *add* text.
3968- if not candidates:
3969- candidates = filter(lambda x, y=trans.reference.upper(),
3970- z=trans.message.upper():
3971- x.invoice and (
3972- x.invoice.number.upper() in y or
3973- x.invoice.number.upper() in z
3974- ),
3975- move_lines
3976- )
3977-
3978- if len(candidates) > 1:
3979- # TODO: currency coercing
3980- digits = int(config['price_accuracy'])
3981- if trans.transferred_amount < 0:
3982- func = lambda x, y=abs(trans.transferred_amount), z=digits:\
3983- round(x.debit, z) == round(y, z)
3984- else:
3985- func = lambda x, y=abs(trans.transferred_amount), z=digits:\
3986- round(x.credit, z) == round(y, z)
3987- best = filter(func, move_lines)
3988- if len(best) != 1:
3989- log.append(
3990- _('Unable to link transaction %(trans)s to invoice: '
3991- '%(no_candidates)s candidates found; can\'t choose.') % {
3992- 'trans': trans.id,
3993- 'no_candidates': len(best)
3994- })
3995- return False
3996-
3997- if len(candidates) == 1:
3998- return _get_move_info(pool, cursor, uid, candidates[0])
3999-
4000- return False
4001-
4002-def _link_canceled_debit(pool, cursor, uid, trans, payment_lines,
4003- partner_id, bank_account_id, log):
4004- '''
4005- Direct debit transfers can be canceled by the remote owner within a
4006- legaly defined time period. These 'payments' are most likely
4007- already marked 'done', which makes them harder to match. Also the
4008- reconciliation has to be reversed.
4009- '''
4010- # TODO: code _link_canceled_debit
4011- return False
4012-
4013-def _banking_import_statements_file(self, cursor, uid, data, context):
4014- '''
4015- Import bank statements / bank transactions file.
4016- This module/function represents the business logic, the parser modules
4017- represent the decoding logic.
4018- '''
4019- form = data['form']
4020- statements_file = form['file']
4021- data = base64.decodestring(statements_file)
4022-
4023- pool = pooler.get_pool(cursor.dbname)
4024- company_obj = pool.get('res.company')
4025- user_obj = pool.get('res.user')
4026- journal_obj = pool.get('account.journal')
4027- move_line_obj = pool.get('account.move.line')
4028- payment_line_obj = pool.get('payment.line')
4029- statement_obj = pool.get('account.bank.statement')
4030- statement_line_obj = pool.get('account.bank.statement.line')
4031- statement_file_obj = pool.get('account.banking.imported.file')
4032- #account_obj = pool.get('account.account')
4033- #payment_order_obj = pool.get('payment.order')
4034- #currency_obj = pool.get('res.currency')
4035-
4036- # get the parser to parse the file
4037- parser_code = form['parser']
4038- parser = models.create_parser(parser_code)
4039- if not parser:
4040- raise wizard.except_wizard(
4041- _('ERROR!'),
4042- _('Unable to import parser %(parser)s. Parser class not found.') %
4043- {'parser':parser_code}
4044- )
4045-
4046- # Get the company
4047- company = form['company']
4048- if not company:
4049- user_data = user_obj.browse(cursor, uid, uid, context)
4050- company = company_obj.browse(cursor, uid, company or user_data.company_id.id, context)
4051-
4052- # Parse the file
4053- statements = parser.parse(data)
4054-
4055- if any([x for x in statements if not x.is_valid()]):
4056- raise wizard.except_wizard(
4057- _('ERROR!'),
4058- _('The imported statements appear to be invalid! Check your file.')
4059- )
4060-
4061- # Create the file now, as the statements need to be linked to it
4062- import_id = statement_file_obj.create(cursor, uid, dict(
4063- company_id = company.id,
4064- file = statements_file,
4065- date = time.strftime('%Y-%m-%d'),
4066- user_id = uid,
4067- state = 'unfinished'
4068- ))
4069-
4070- # Results
4071- no_stat_loaded = 0
4072- no_trans_loaded = 0
4073- no_stat_skipped = 0
4074- no_trans_skipped = 0
4075- no_trans_matched = 0
4076- no_errors = 0
4077- log = []
4078-
4079- # Caching
4080- error_accounts = {}
4081- info = {}
4082- imported_statement_ids = []
4083-
4084- if statements:
4085- # Get interesting journals once
4086- if company:
4087- journal_ids = journal_obj.search(cursor, uid, [
4088- ('type', 'in', ('sale','purchase')),
4089- ('company_id', '=', company.id),
4090- ])
4091- else:
4092- journal_ids = None
4093- if not journal_ids:
4094- journal_ids = journal_obj.search(cursor, uid, [
4095- ('type', 'in', ('sale','purchase')),
4096- ('active', '=', True),
4097- ('company_id', '=', False),
4098- ])
4099- # Get all unreconciled moves predating the last statement in one big swoop
4100- # Assumption: the statements in the file are sorted in ascending order of
4101- # date.
4102- move_line_ids = move_line_obj.search(cursor, uid, [
4103- ('reconcile_id', '=', False),
4104- ('journal_id', 'in', journal_ids),
4105- ('account_id.reconcile', '=', True),
4106- ('date', '<=', date2str(statements[-1].date)),
4107- ])
4108- move_lines = move_line_obj.browse(cursor, uid, move_line_ids)
4109-
4110- # Get all unreconciled sent payment lines in one big swoop.
4111- # No filtering can be done, as empty dates carry value for C2B
4112- # communication. Most likely there are much less sent payments
4113- # than reconciled and open/draft payments.
4114- cursor.execute("SELECT l.id FROM payment_order o, payment_line l "
4115- "WHERE l.order_id = o.id AND "
4116- "o.state = 'sent' AND "
4117- "l.date_done IS NULL"
4118- )
4119- payment_line_ids = [x[0] for x in cursor.fetchall()]
4120- if payment_line_ids:
4121- payment_lines = payment_line_obj.browse(cursor, uid, payment_line_ids)
4122- else:
4123- payment_lines = []
4124-
4125- for statement in statements:
4126- if statement.local_account in error_accounts:
4127- # Don't repeat messages
4128- no_stat_skipped += 1
4129- no_trans_skipped += len(statement.transactions)
4130- continue
4131-
4132- if not statement.local_account in info:
4133- account_info = get_company_bank_account(
4134- pool, cursor, uid, statement.local_account, company, log
4135- )
4136- if not account_info:
4137- log.append(
4138- _('Statements found for unknown account %(bank_account)s') %
4139- {'bank_account': statement.local_account}
4140- )
4141- error_accounts[statement.local_account] = True
4142- no_errors += 1
4143- continue
4144- if 'journal_id' not in account_info:
4145- log.append(
4146- _('Statements found for account %(bank_account)s, '
4147- 'but no default journal was defined.'
4148- ) % {'bank_account': statement.local_account}
4149- )
4150- error_accounts[statement.local_account] = True
4151- no_errors += 1
4152- continue
4153- info[statement.local_account] = account_info
4154- else:
4155- account_info = info[statement.local_account]
4156-
4157- if statement.local_currency \
4158- and account_info.journal_id.code != statement.local_currency:
4159- # TODO: convert currencies?
4160- log.append(
4161- _('Statement for account %(bank_account)s uses different '
4162- 'currency than the defined bank journal.') %
4163- {'bank_account': statement.local_account}
4164- )
4165- error_accounts[statement.local_account] = True
4166- no_errors += 1
4167- continue
4168-
4169- # Check existence of previous statement
4170- statement_ids = statement_obj.search(cursor, uid, [
4171- ('name', '=', statement.id),
4172- ('date', '=', date2str(statement.date)),
4173- ])
4174- if statement_ids:
4175- log.append(
4176- _('Statement %(id)s known - skipped') % {
4177- 'id': statement.id
4178- }
4179- )
4180- continue
4181-
4182- statement_id = statement_obj.create(cursor, uid, dict(
4183- name = statement.id,
4184- journal_id = account_info.journal_id.id,
4185- date = date2str(statement.date),
4186- balance_start = statement.start_balance,
4187- balance_end_real = statement.end_balance,
4188- balance_end = statement.end_balance,
4189- state = 'draft',
4190- currency = account_info.journal_id.currency.id,
4191- user_id = uid,
4192- banking_id = import_id,
4193- ))
4194- imported_statement_ids.append(statement_id)
4195-
4196- # move each line to the right period and try to match it with an
4197- # invoice or payment
4198- subno = 0
4199- for transaction in statement.transactions:
4200- move_info = False
4201-
4202- # Keep a tracer for identification of order in a statement in case
4203- # of missing transaction ids.
4204- subno += 1
4205-
4206- # Link remote partner, import account when needed
4207- partner_bank = get_bank_account(
4208- pool, cursor, uid, transaction.remote_account, log, fail=True
4209- )
4210- if partner_bank:
4211- partner_id = partner_bank.partner_id.id
4212- partner_bank_id = partner_bank.id
4213- elif transaction.remote_owner:
4214- partner_id = get_or_create_partner(
4215- pool, cursor, uid, transaction.remote_owner
4216- )
4217- if transaction.remote_account:
4218- partner_bank_id = create_bank_account(
4219- pool, cursor, uid, partner_id,
4220- transaction.remote_account, transaction.remote_owner,
4221- log
4222- )
4223- else:
4224- partner_id = False
4225-
4226- # Link accounting period
4227- period_id = get_period(pool, cursor, uid,
4228- transaction.effective_date, company,
4229- log)
4230-
4231- # Credit means payment... isn't it?
4232- if transaction.transferred_amount < 0 and payment_lines:
4233- # Link open payment - if any
4234- move_info = _link_payment(pool, cursor, uid, transaction,
4235- payment_lines, partner_id,
4236- partner_bank_id, log
4237- )
4238-
4239- # Second guess, invoice
4240- if not move_info:
4241- # Link invoice - if any
4242- move_info = _link_invoice(pool, cursor, uid, transaction,
4243- move_lines, partner_id, partner_bank_id,
4244- log
4245- )
4246- if not move_info:
4247- if transaction.transferred_amount < 0:
4248- account_id = account_info.default_credit_account_id
4249- else:
4250- account_id = account_info.default_debit_account_id
4251- else:
4252- account_id = move_info.move_line.account_id
4253- no_trans_matched += 1
4254-
4255- values = struct(
4256- name = '%s.%s' % (statement.id, transaction.id or subno),
4257- date = transaction.effective_date,
4258- amount = transaction.transferred_amount,
4259- account_id = account_id.id,
4260- statement_id = statement_id,
4261- note = transaction.message,
4262- ref = transaction.reference,
4263- period_id = period_id,
4264- )
4265- if partner_id:
4266- values.partner_id = partner_id
4267- if partner_bank_id:
4268- values.partner_bank_id = partner_bank_id
4269- if move_info:
4270- values.type = move_info.type
4271- values.reconcile_id = move_info.move_line.reconcile_id
4272-
4273- statement_line_id = statement_line_obj.create(cursor, uid, values)
4274- no_trans_loaded += 1
4275-
4276- no_stat_loaded += 1
4277-
4278- if payment_lines:
4279- # As payments lines are treated as individual transactions, the
4280- # batch as a whole is only marked as 'done' when all payment lines
4281- # have been reconciled.
4282- cursor.execute(
4283- "UPDATE payment_order o "
4284- "SET state = 'done', "
4285- "date_done = '%s' "
4286- "FROM payment_line l "
4287- "WHERE o.state = 'sent' "
4288- "AND o.id = l.order_id "
4289- "AND o.id NOT IN ("
4290- "SELECT DISTINCT id FROM payment_line "
4291- "WHERE date_done IS NULL "
4292- "AND id IN (%s)"
4293- ")" % (
4294- time.strftime('%Y-%m-%d'),
4295- ','.join(map(str, payment_line_ids))
4296- )
4297- )
4298- report = [
4299- '%s: %s' % (_('Total number of statements'), no_stat_skipped + no_stat_loaded),
4300- '%s: %s' % (_('Total number of transactions'), no_trans_skipped + no_trans_loaded),
4301- '%s: %s' % (_('Number of errors found'), no_errors),
4302- '%s: %s' % (_('Number of statements skipped due to errors'), no_stat_skipped),
4303- '%s: %s' % (_('Number of transactions skipped due to errors'), no_trans_skipped),
4304- '%s: %s' % (_('Number of statements loaded'), no_stat_loaded),
4305- '%s: %s' % (_('Number of transactions loaded'), no_trans_loaded),
4306- '',
4307- '%s:' % ('Error report'),
4308- '',
4309- ]
4310- text_log = '\n'.join(report + log)
4311- state = no_errors and 'error' or 'ready'
4312- statement_file_obj.write(cursor, uid, import_id, dict(
4313- state = state, log = text_log,
4314- ))
4315- return dict(
4316- log = text_log,
4317- statement_ids = imported_statement_ids
4318- )
4319-
4320-banking_import_form = '''<?xml version="1.0"?>
4321-<form string="Import Bank Transactions File">
4322-<separator colspan="4" string="Select the processing details:" />
4323- <field name="company" colspan="1" />
4324- <field name="file"/>
4325- <newline />
4326- <field name="parser"/>
4327-</form>
4328-'''
4329-
4330-def parser_types(*args, **kwargs):
4331- '''Delay evaluation of parser types until start of wizard, to allow
4332- depending modules to initialize and add their parsers to the list
4333- '''
4334- return models.parser_type.get_parser_types()
4335-
4336-banking_import_fields = dict(
4337- company = dict(
4338- string = 'Company',
4339- type = 'many2one',
4340- relation = 'res.company',
4341- required = True,
4342- ),
4343- file = dict(
4344- string = 'Statements File',
4345- type = 'binary',
4346- required = True,
4347- help = ('The Transactions File to import. Please note that while it is '
4348- 'perfectly safe to reload the same file multiple times or to load in '
4349- 'timeframe overlapping statements files, there are formats that may '
4350- 'introduce different sequencing, which may create double entries.\n\n'
4351- 'To stay on the safe side, always load bank statements files using the '
4352- 'same format.')
4353- ),
4354- parser = dict(
4355- string = 'File Format',
4356- type = 'selection',
4357- selection = parser_types,
4358- required = True,
4359- ),
4360-)
4361-
4362-result_form = '''<?xml version="1.0"?>
4363-<form string="Import Bank Transactions File">
4364- <separator colspan="4" string="Results:" />
4365- <field name="log" colspan="4" nolabel="1" width="500"/>
4366-</form>
4367-'''
4368-
4369-result_fields = dict(
4370- log = dict(string='Log', type='text')
4371-)
4372-
4373-class banking_import(wizard.interface):
4374-
4375- def _action_open_window(self, cursor, uid, data, context):
4376- # TODO: this needs fiddling. The resulting window is informative,
4377- # but not very usefull...
4378- form = data['form']
4379- return dict(
4380- domain = "[('id','in',(%s,))]" % (','.join(map(str, form['statement_ids']))),
4381- name = 'Statement',
4382- view_type = 'tree',
4383- view_mode = 'form,tree',
4384- res_model = 'account.bank.statement',
4385- view_id = False,
4386- type = 'ir.actions.act_window',
4387- res_id = form['statement_ids'],
4388- )
4389-
4390- states = {
4391- 'init' : {
4392- 'actions' : [],
4393- 'result' : {
4394- 'type' : 'form',
4395- 'arch' : banking_import_form,
4396- 'fields': banking_import_fields,
4397- 'state': [('end', '_Cancel', 'gtk-cancel'),
4398- ('import', '_Ok', 'gtk-ok'),
4399- ]
4400- }
4401- },
4402- 'import' : {
4403- 'actions': [_banking_import_statements_file],
4404- 'result': {
4405- 'type': 'form',
4406- 'arch': result_form,
4407- 'fields': result_fields,
4408- 'state': [('end', '_Close', 'gtk-close'),
4409- ('open', '_Open Statement', 'gtk-ok'),
4410- ]
4411- }
4412- },
4413- 'open': {
4414- 'actions': [],
4415- 'result': {
4416- 'type': 'action',
4417- 'action': _action_open_window,
4418- 'state': 'end'
4419- }
4420- },
4421- }
4422-
4423-banking_import('account_banking.banking_import')
4424-
4425-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
4426
4427=== removed file 'account_banking/wizard/banktools.py'
4428--- account_banking/wizard/banktools.py 2010-01-13 20:15:24 +0000
4429+++ account_banking/wizard/banktools.py 1970-01-01 00:00:00 +0000
4430@@ -1,292 +0,0 @@
4431-# -*- encoding: utf-8 -*-
4432-##############################################################################
4433-#
4434-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
4435-# All Rights Reserved
4436-#
4437-# This program is free software: you can redistribute it and/or modify
4438-# it under the terms of the GNU General Public License as published by
4439-# the Free Software Foundation, either version 3 of the License, or
4440-# (at your option) any later version.
4441-#
4442-# This program is distributed in the hope that it will be useful,
4443-# but WITHOUT ANY WARRANTY; without even the implied warranty of
4444-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4445-# GNU General Public License for more details.
4446-#
4447-# You should have received a copy of the GNU General Public License
4448-# along with this program. If not, see <http://www.gnu.org/licenses/>.
4449-#
4450-##############################################################################
4451-
4452-__all__ = [
4453- 'get_period',
4454- 'get_bank_account',
4455- 'get_or_create_partner',
4456- 'get_company_bank_account',
4457- 'create_bank_account',
4458- 'struct',
4459-]
4460-
4461-class struct(dict):
4462- '''
4463- Ease working with dicts. Allow dict.key alongside dict['key']
4464- '''
4465- def __setattr__(self, item, value):
4466- self.__setitem__(item, value)
4467-
4468- def __getattr__(self, item):
4469- return self.__getitem__(item)
4470-
4471- def show(self, indent=0, align=False, ralign=False):
4472- '''
4473- PrettyPrint method. Aligns keys right (ralign) or left (align).
4474- '''
4475- if align or ralign:
4476- width = 0
4477- for key in self.iterkeys():
4478- width = max(width, len(key))
4479- alignment = ''
4480- if not ralign:
4481- alignment = '-'
4482- fmt = '%*.*s%%%s%d.%ds: %%s' % (
4483- indent, indent, '', alignment, width, width
4484- )
4485- else:
4486- fmt = '%*.*s%%s: %%s' % (indent, indent, '')
4487- for item in self.iteritems():
4488- print fmt % item
4489-
4490-import datetime
4491-from account_banking import sepa
4492-from account_banking.parsers.convert import *
4493-
4494-def get_period(pool, cursor, uid, date, company, log):
4495- '''
4496- Get a suitable period for the given date range and the given company.
4497- '''
4498- fiscalyear_obj = pool.get('account.fiscalyear')
4499- period_obj = pool.get('account.period')
4500- if not date:
4501- date = date2str(datetime.datetime.today())
4502-
4503- search_date = date2str(date)
4504- fiscalyear_ids = fiscalyear_obj.search(cursor, uid, [
4505- ('date_start','<=', search_date), ('date_stop','>=', search_date),
4506- ('state','=','draft'), ('company_id','=',company.id)
4507- ])
4508- if not fiscalyear_ids:
4509- fiscalyear_ids = fiscalyear_obj.search(cursor, uid, [
4510- ('date_start','<=',search_date), ('date_stop','>=',search_date),
4511- ('state','=','draft'), ('company_id','=',None)
4512- ])
4513- if not fiscalyear_ids:
4514- log.append(
4515- _('No suitable fiscal year found for company %(company_name)s')
4516- % dict(company_name=company.name)
4517- )
4518- return False
4519- elif len(fiscalyear_ids) > 1:
4520- log.append(
4521- _('Multiple overlapping fiscal years found for date %(date)s')
4522- % dict(date=date)
4523- )
4524- return False
4525-
4526- fiscalyear_id = fiscalyear_ids[0]
4527- period_ids = period_obj.search(cursor, uid, [
4528- ('date_start','<=',search_date), ('date_stop','>=',search_date),
4529- ('fiscalyear_id','=',fiscalyear_id), ('state','=','draft')
4530- ])
4531- if not period_ids:
4532- log.append(_('No suitable period found for date %(date)s')
4533- % dict(date=date)
4534- )
4535- return False
4536- if len(period_ids) != 1:
4537- log.append(_('Multiple overlapping periods for date %(date)s')
4538- % dict(date=date)
4539- )
4540- return False
4541- return period_ids[0]
4542-
4543-def get_bank_account(pool, cursor, uid, account_number, log, fail=False):
4544- '''
4545- Get the bank account with account number account_number
4546- '''
4547- # No need to search for nothing
4548- if not account_number:
4549- return False
4550-
4551- partner_bank_obj = pool.get('res.partner.bank')
4552- bank_account_ids = partner_bank_obj.search(cursor, uid, [
4553- ('acc_number', '=', account_number)
4554- ])
4555- if not bank_account_ids:
4556- bank_account_ids = partner_bank_obj.search(cursor, uid, [
4557- ('iban', '=', account_number)
4558- ])
4559- if not bank_account_ids:
4560- if not fail:
4561- log.append(
4562- _('Bank account %(account_no)s was not found in the database')
4563- % dict(account_no=account_number)
4564- )
4565- return False
4566- elif len(bank_account_ids) != 1:
4567- log.append(
4568- _('More than one bank account was found with the same number %(account_no)s')
4569- % dict(account_no=account_number)
4570- )
4571- return False
4572- return partner_bank_obj.browse(cursor, uid, bank_account_ids)[0]
4573-
4574-def get_or_create_partner(pool, cursor, uid, name, log):
4575- '''
4576- Get or create the partner belonging to the account holders name <name>
4577- '''
4578- partner_obj = pool.get('res.partner')
4579- partner_ids = partner_obj.search(cursor, uid, [('name', 'ilike', name)])
4580- if not partner_ids:
4581- partner_id = partner_obj.create(cursor, uid, dict(
4582- name=name, active=True, comment='Generated by Import Bank Statements File',
4583- ))
4584- elif len(partner_ids) > 1:
4585- log.append(
4586- _('More then one possible match found for partner with name %(name)s')
4587- % {'name': name}
4588- )
4589- return False
4590- else:
4591- partner_id = partner_ids[0]
4592- return partner_obj.browse(cursor, uid, partner_id)[0]
4593-
4594-def get_company_bank_account(pool, cursor, uid, account_number,
4595- company, log):
4596- '''
4597- Get the matching bank account for this company.
4598- '''
4599- results = struct()
4600- bank_account = get_bank_account(pool, cursor, uid, account_number, log,
4601- fail=True)
4602- if not bank_account:
4603- return False
4604- if bank_account.partner_id.id != company.partner_id.id:
4605- log.append(
4606- _('Account %(account_no)s is not owned by %(partner)s')
4607- % dict(account_no = account_number,
4608- partner = company.partner_id.name,
4609- ))
4610- return False
4611- results.account = bank_account
4612- bank_settings_obj = pool.get('account.banking.account.settings')
4613- bank_settings_ids = bank_settings_obj.search(cursor, uid, [
4614- ('partner_bank_id', '=', bank_account.id)
4615- ])
4616- if bank_settings_ids:
4617- settings = bank_settings_obj.browse( cursor, uid, bank_settings_ids)[0]
4618- results.journal_id = settings.journal_id
4619- results.default_debit_account_id = settings.default_debit_account_id
4620- results.default_credit_account_id = settings.default_credit_account_id
4621- return results
4622-
4623-import urllib, urllib2
4624-from BeautifulSoup import BeautifulSoup
4625-
4626-def get_iban_bic_NL(bank_acc):
4627- '''
4628- Consult the Dutch online banking database to check both the account number
4629- and the bank to which it belongs. Will not work offline, is limited to
4630- banks operating in the Netherlands and will only convert Dutch local
4631- account numbers.
4632- '''
4633- IBANlink = 'http://www.ibannl.org/iban_check.php'
4634- data = urllib.urlencode(dict(number=bank_acc, method='POST'))
4635- request = urllib2.Request(IBANlink, data)
4636- response = urllib2.urlopen(request)
4637- soup = BeautifulSoup(response)
4638- result = struct()
4639- for _pass, td in enumerate(soup.findAll('td')):
4640- if _pass % 2 == 1:
4641- result[attr] = td.find('font').contents[0]
4642- else:
4643- attr = td.find('strong').contents[0][:4].strip().lower()
4644- if result:
4645- result.account = bank_acc
4646- result.country_id = result.bic[4:6]
4647- # Nationalized bank code
4648- result.code = result.bic[:6]
4649- # All Dutch banks use generic channels
4650- result.bic += 'XXX'
4651- return result
4652- return None
4653-
4654-online_account_info = {
4655- # TODO: Add more online data banks
4656- 'NL': get_iban_bic_NL,
4657-}
4658-
4659-def create_bank_account(pool, cursor, uid, partner_id,
4660- account_number, holder_name, log
4661- ):
4662- '''
4663- Create a matching bank account with this holder for this partner.
4664- '''
4665- values = struct(
4666- partner_id = partner_id,
4667- owner_name = holder_name,
4668- )
4669- # Are we dealing with IBAN?
4670- iban = sepa.IBAN(account_number)
4671- if iban.valid:
4672- values.state = 'iban'
4673- values.acc_number = iban.BBAN
4674- bankcode = iban.bankcode + iban.countrycode
4675- else:
4676- # No, try to convert to IBAN
4677- country = pool.get('res.partner').browse(
4678- cursor, uid, partner_id).country_id
4679- values.state = 'bank'
4680- values.acc_number = account_number
4681- if country.code in sepa.IBAN.countries \
4682- and country.code in online_account_info \
4683- :
4684- account_info = online_account_info[country.code](acc_number)
4685- if account_info and iban in account_info:
4686- values.iban = iban = account_info.iban
4687- values.state = 'iban'
4688- bankcode = account_info.code
4689- bic = account_info.bic
4690- else:
4691- bankcode = None
4692- bic = None
4693-
4694- if bankcode:
4695- # Try to link bank
4696- bank_obj = pool.get('res.bank')
4697- bank_ids = bank_obj.search(cursor, uid, [
4698- ('code', 'ilike', bankcode)
4699- ])
4700- if not bank_ids and bic:
4701- bank_ids = bank_obj.search(cursor, uid, [
4702- ('bic', 'ilike', bic)
4703- ])
4704- if bank_ids:
4705- # Check BIC on existing banks
4706- values.bank_id = bank_ids[0]
4707- bank = bank_obj.browse(cursor, uid, values.bank_id)
4708- if not bank.bic:
4709- bank_obj.write(cursor, uid, values.bank_id, dict(bic=bic))
4710- else:
4711- # New bank - create
4712- values.bank_id = bank_obj.create(cursor, uid, dict(
4713- code = account_info.code,
4714- bic = account_info.bic,
4715- name = account_info.bank,
4716- country_id = country.id,
4717- ))
4718-
4719- # Create bank account and return
4720- return pool.get('res.partner.bank').create(cursor, uid, values)
4721-
4722-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
4723
4724=== removed directory 'account_banking_nl_clieop'
4725=== removed file 'account_banking_nl_clieop/__init__.py'
4726--- account_banking_nl_clieop/__init__.py 2010-01-13 20:15:24 +0000
4727+++ account_banking_nl_clieop/__init__.py 1970-01-01 00:00:00 +0000
4728@@ -1,30 +0,0 @@
4729-# -*- encoding: utf-8 -*-
4730-##############################################################################
4731-#
4732-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
4733-# All Rights Reserved
4734-#
4735-# WARNING: This program as such is intended to be used by professional
4736-# programmers who take the whole responsability of assessing all potential
4737-# consequences resulting from its eventual inadequacies and bugs
4738-# End users who are looking for a ready-to-use solution with commercial
4739-# garantees and support are strongly adviced to contract EduSense BV
4740-#
4741-# This program is free software: you can redistribute it and/or modify
4742-# it under the terms of the GNU General Public License as published by
4743-# the Free Software Foundation, either version 3 of the License, or
4744-# (at your option) any later version.
4745-#
4746-# This program is distributed in the hope that it will be useful,
4747-# but WITHOUT ANY WARRANTY; without even the implied warranty of
4748-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4749-# GNU General Public License for more details.
4750-#
4751-# You should have received a copy of the GNU General Public License
4752-# along with this program. If not, see <http://www.gnu.org/licenses/>.
4753-#
4754-##############################################################################
4755-import wizard
4756-import account_banking_clieop
4757-
4758-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
4759
4760=== removed file 'account_banking_nl_clieop/__openerp__.py'
4761--- account_banking_nl_clieop/__openerp__.py 2012-10-15 09:31:37 +0000
4762+++ account_banking_nl_clieop/__openerp__.py 1970-01-01 00:00:00 +0000
4763@@ -1,48 +0,0 @@
4764-##############################################################################
4765-#
4766-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
4767-# All Rights Reserved
4768-#
4769-# WARNING: This program as such is intended to be used by professional
4770-# programmers who take the whole responsability of assessing all potential
4771-# consequences resulting from its eventual inadequacies and bugs
4772-# End users who are looking for a ready-to-use solution with commercial
4773-# garantees and support are strongly adviced to contract EduSense BV
4774-#
4775-# This program is free software: you can redistribute it and/or modify
4776-# it under the terms of the GNU General Public License as published by
4777-# the Free Software Foundation, either version 3 of the License, or
4778-# (at your option) any later version.
4779-#
4780-# This program is distributed in the hope that it will be useful,
4781-# but WITHOUT ANY WARRANTY; without even the implied warranty of
4782-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4783-# GNU General Public License for more details.
4784-#
4785-# You should have received a copy of the GNU General Public License
4786-# along with this program. If not, see <http://www.gnu.org/licenses/>.
4787-#
4788-##############################################################################
4789-{
4790- 'name': 'Account Banking NL ClieOp',
4791- 'version': '0.1',
4792- 'license': 'GPL-3',
4793- 'author': 'EduSense BV',
4794- 'category': 'Account Banking',
4795- 'depends': ['account_banking'],
4796- 'init_xml': [],
4797- 'update_xml': [
4798- #'security/ir.model.access.csv',
4799- 'account_banking_clieop.xml',
4800- 'account_banking_export_wizard.xml',
4801- 'data/banking_export_clieop.xml',
4802- ],
4803- 'description': '''
4804- Module to export payment orders in ClieOp format.
4805-
4806- ClieOp format is used by Dutch banks to batch national bank transfers.
4807- This module uses the account_banking logic.
4808- ''',
4809- 'active': False,
4810- 'installable': True,
4811-}
4812
4813=== removed file 'account_banking_nl_clieop/account_banking_clieop.py'
4814--- account_banking_nl_clieop/account_banking_clieop.py 2010-01-13 20:15:24 +0000
4815+++ account_banking_nl_clieop/account_banking_clieop.py 1970-01-01 00:00:00 +0000
4816@@ -1,96 +0,0 @@
4817-##############################################################################
4818-#
4819-# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
4820-# All Rights Reserved
4821-#
4822-# This program is free software: you can redistribute it and/or modify
4823-# it under the terms of the GNU General Public License as published by
4824-# the Free Software Foundation, either version 3 of the License, or
4825-# (at your option) any later version.
4826-#
4827-# This program is distributed in the hope that it will be useful,
4828-# but WITHOUT ANY WARRANTY; without even the implied warranty of
4829-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4830-# GNU General Public License for more details.
4831-#
4832-# You should have received a copy of the GNU General Public License
4833-# along with this program. If not, see <http://www.gnu.org/licenses/>.
4834-#
4835-##############################################################################
4836-
4837-from osv import osv, fields
4838-from datetime import date
4839-from tools.translate import _
4840-
4841-class payment_order(osv.osv):
4842- '''
4843- Attach export_clieop wizard to payment order and allow traceability
4844- '''
4845- _inherit = 'payment.order'
4846- def get_wizard(self, type):
4847- if type in ['CLIEOPPAY', 'CLIEOPINC', 'CLIEOPSAL']:
4848- return self._module, 'wizard_account_banking_export_clieop'
4849- return super(payment_order, self).get_wizard(type)
4850-payment_order()
4851-
4852-class clieop_export(osv.osv):
4853- '''ClieOp3 Export'''
4854- _name = 'banking.export.clieop'
4855- _description = __doc__
4856-
4857- _columns = {
4858- 'payment_order_ids':
4859- fields.text('Payment Orders'),
4860- 'testcode':
4861- fields.selection([('T', _('Yes')), ('P', _('No'))],
4862- 'Test Run', readonly=True),
4863- 'daynumber':
4864- fields.integer('ClieOp Transaction nr of the Day', readonly=True),
4865- 'duplicates':
4866- fields.integer('Number of Duplicates', readonly=True),
4867- 'prefered_date':
4868- fields.date('Prefered Processing Date',readonly=True),
4869- 'no_transactions':
4870- fields.integer('Number of Transactions', readonly=True),
4871- 'check_no_accounts':
4872- fields.char('Check Number Accounts', size=5, readonly=True),
4873- 'total_amount':
4874- fields.float('Total Amount', readonly=True),
4875- 'identification':
4876- fields.char('Identification', size=6, readonly=True, select=True),
4877- 'filetype':
4878- fields.selection([
4879- ('CREDBET', 'Payment Batch'),
4880- ('SALARIS', 'Salary Payment Batch'),
4881- ('INCASSO', 'Direct Debit Batch'),
4882- ], 'File Type', size=7, readonly=True, select=True),
4883- 'date_generated':
4884- fields.datetime('Generation Date', readonly=True, select=True),
4885- 'file':
4886- fields.binary('ClieOp File', readonly=True),
4887- 'state':
4888- fields.selection([
4889- ('draft', 'Draft'),
4890- ('sent', 'Sent'),
4891- ('done', 'Reconciled'),
4892- ], 'State', readonly=True),
4893- }
4894- def _get_daynr(self, cursor, uid, ids, context):
4895- last = cursor.execute('SELECT max(daynumber) '
4896- 'FROM banking_export_clieop '
4897- 'WHERE date_generated = "%s"' %
4898- date.today().strftime('%Y-%m-%d')
4899- ).fetchone()
4900- if last:
4901- return int(last) +1
4902- return 1
4903-
4904- _defaults = {
4905- 'date_generated': lambda *a: date.today().strftime('%Y-%m-%d'),
4906- 'duplicates': lambda *a: 1,
4907- 'state': lambda *a: 'draft',
4908- 'daynumber': _get_daynr,
4909- }
4910-clieop_export()
4911-
4912-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
4913
4914=== removed file 'account_banking_nl_clieop/account_banking_clieop.xml'
4915--- account_banking_nl_clieop/account_banking_clieop.xml 2010-01-13 20:15:24 +0000
4916+++ account_banking_nl_clieop/account_banking_clieop.xml 1970-01-01 00:00:00 +0000
4917@@ -1,63 +0,0 @@
4918-<?xml version="1.0" encoding="utf-8"?>
4919-<!--
4920- Copyright (C) EduSense BV <http://www.edusense.nl>
4921- All rights reserved.
4922- The licence is in the file __terp__.py
4923--->
4924-<openerp>
4925- <data>
4926-
4927- <!-- Make new view on ClieOp3 Exports -->
4928- <record id="view_banking_export_clieop_form" model="ir.ui.view">
4929- <field name="name">account.banking.export.clieop.form</field>
4930- <field name="model">banking.export.clieop</field>
4931- <field name="type">form</field>
4932- <field name="arch" type="xml">
4933- <form string="Client Opdrachten Export">
4934- <separator string="General Information" colspan="4" />
4935- <field name="filetype" />
4936- <field name="identification" />
4937- <separator string="ClieOp Information" colspan="4" />
4938- <field name="total_amount" />
4939- <field name="check_no_accounts" />
4940- <field name="no_transactions" />
4941- <separator string="Processing Information" colspan="4" />
4942- <field name="prefered_date" />
4943- <field name="date_generated" />
4944- <field name="testcode" />
4945- <newline />
4946- <field name="file" colspan="4" />
4947- </form>
4948- </field>
4949- </record>
4950- <record id="view_banking_export_clieop_tree" model="ir.ui.view">
4951- <field name="name">account.banking.export.clieop.tree</field>
4952- <field name="model">banking.export.clieop</field>
4953- <field name="type">tree</field>
4954- <field name="arch" type="xml">
4955- <tree string="Client Opdrachten Export">
4956- <field name="filetype" />
4957- <field name="identification" search="2"/>
4958- <field name="prefered_date" search="2"/>
4959- <field name="date_generated" />
4960- </tree>
4961- </field>
4962- </record>
4963- <record model="ir.actions.act_window" id="action_account_banking_clieops">
4964- <field name="name">Generated ClieOp3 Files</field>
4965- <field name="type">ir.actions.act_window</field>
4966- <field name="res_model">banking.export.clieop</field>
4967- <field name="view_type">form</field>
4968- <field name="view_mode">tree,form</field>
4969- </record>
4970-
4971- <!-- Add a menu item for it -->
4972- <menuitem name="Generated ClieOp3 Files"
4973- id="menu_action_account_banking_exported_clieop_files"
4974- parent="account_banking.menu_finance_banking_actions"
4975- action="action_account_banking_clieops"
4976- sequence="12"
4977- />
4978-
4979- </data>
4980-</openerp>
4981
4982=== removed file 'account_banking_nl_clieop/account_banking_export_wizard.xml'
4983--- account_banking_nl_clieop/account_banking_export_wizard.xml 2010-01-13 20:15:24 +0000
4984+++ account_banking_nl_clieop/account_banking_export_wizard.xml 1970-01-01 00:00:00 +0000
4985@@ -1,15 +0,0 @@
4986-<?xml version="1.0" encoding="utf-8"?>
4987-<!--
4988- Copyright (C) EduSense BV <http://www.edusense.nl>
4989- All rights reserved.
4990- The licence is in the file __terp__.py
4991--->
4992-<openerp>
4993- <data>
4994- <wizard id="wizard_account_banking_export_clieop"
4995- string="Export ClieOp File"
4996- model="payment.order"
4997- name="account_banking_nl_clieop.banking_export_clieop"
4998- />
4999- </data>
5000-</openerp>
The diff has been truncated for viewing.