Merge lp:~therp-nl/banking-addons/6.0-interactive-matching-and-debit-orders into lp:banking-addons/6.0
- 6.0-interactive-matching-and-debit-orders
- Merge into 6.0
Status: | Rejected |
---|---|
Rejected by: | Stefan Rijnhart (Opener) |
Proposed branch: | lp:~therp-nl/banking-addons/6.0-interactive-matching-and-debit-orders |
Merge into: | lp:banking-addons/6.0 |
Diff against target: |
8467 lines (+6473/-1265) (has conflicts) 52 files modified
account_banking/__init__.py (+1/-0) account_banking/__openerp__.py (+11/-4) account_banking/account_banking.py (+127/-13) account_banking/account_banking_view.xml (+126/-4) account_banking/account_banking_workflow.xml (+1/-2) account_banking/banking_import_transaction.py (+1868/-0) account_banking/i18n/nl.po (+1773/-0) account_banking/i18n/nl_NL.po (+0/-905) account_banking/migrations/0.1.81/post-set-statement-line-state.py (+33/-0) account_banking/parsers/models.py (+24/-2) account_banking/security/ir.model.access.csv (+2/-0) account_banking/wizard/__init__.py (+1/-0) account_banking/wizard/account_payment_order.py (+7/-1) account_banking/wizard/bank_import.py (+96/-290) account_banking/wizard/bank_import_view.xml (+41/-14) account_banking/wizard/banking_transaction_wizard.py (+337/-0) account_banking/wizard/banking_transaction_wizard.xml (+133/-0) account_banking/wizard/banktools.py (+4/-5) account_banking/workflow/account_invoice.xml (+18/-0) account_banking_fi_patu/patu.py (+1/-1) account_banking_nl_abnamro/abnamro.py (+9/-8) account_banking_nl_clieop/__terp__.py (+1/-1) account_banking_nl_clieop/data/banking_export_clieop.xml (+3/-0) account_banking_nl_clieop/migrations/0.64/post-set-payment-order-type.py (+33/-0) account_banking_nl_clieop/wizard/export_clieop.py (+4/-2) account_banking_nl_girotel/girotel.py (+1/-1) account_banking_nl_ing/__init__.py (+4/-0) account_banking_nl_ing/__openerp__.py (+62/-0) account_banking_nl_ing/__terp__.py (+58/-0) account_banking_nl_ing/i18n/nl.po (+37/-0) account_banking_nl_ing/ing.py (+230/-0) account_banking_nl_multibank/multibank.py (+1/-1) account_banking_nl_triodos/__openerp__.py (+1/-1) account_banking_nl_triodos/triodos.py (+12/-10) account_direct_debit/__init__.py (+1/-0) account_direct_debit/__openerp__.py (+62/-0) account_direct_debit/data/account_payment_term.xml (+16/-0) account_direct_debit/i18n/nl.po (+210/-0) account_direct_debit/model/__init__.py (+3/-0) account_direct_debit/model/account_invoice.py (+143/-0) account_direct_debit/model/account_move_line.py (+155/-0) account_direct_debit/model/account_payment.py (+478/-0) account_direct_debit/view/account_invoice.xml (+46/-0) account_direct_debit/view/account_payment.xml (+84/-0) account_direct_debit/workflow/account_invoice.xml (+27/-0) account_direct_debit/workflow/account_payment.xml (+25/-0) account_iban_preserve_domestic/__init__.py (+1/-0) account_iban_preserve_domestic/__openerp__.py (+57/-0) account_iban_preserve_domestic/res_partner_bank.py (+29/-0) account_payment_shortcut/__init__.py (+1/-0) account_payment_shortcut/__openerp__.py (+44/-0) account_payment_shortcut/payment_order.py (+31/-0) Text conflict in account_banking/wizard/bank_import.py |
To merge this branch: | bzr merge lp:~therp-nl/banking-addons/6.0-interactive-matching-and-debit-orders |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Banking Addons Core Editors | Pending | ||
Review via email: mp+88832@code.launchpad.net |
Commit message
Description of the change
Hi,
this merge request is for review and commenting. I suggest not to merge the branch with 6.0, but to use it as a starting point for the 6.1 branch of banking-addons.
Cheers,
Stefan.
- 104. By Stefan Rijnhart (Opener)
-
[FIX] bug: attempt at manual match is ignored
[RFR] rearrange match wizard layout using tabs - 105. By Stefan Rijnhart (Opener)
-
[ADD] Comment about the specific CSV format that can be downloaded from ING
- 106. By Stefan Rijnhart (Opener)
-
[FIX] splitting of transactions was not actually disabled yet
- 107. By Credativ (Dmitrijs Ledkovs, James Jesudason, Tristan Hill)
-
[ADD] UK HSBC module
[FIX] Period_id on vouchers
[FIX] Recompute statement end balance at the end of the import
[FIX] disable call to SWIFT lookup page that no longer exists
[FIX] Allow manual statement entry - 108. By Stefan Rijnhart (Opener)
-
[FIX] Reconciling raises error when partial reconciliation is present
[FIX] Wrong sign in residual write-off in some cases - 109. By Stefan Rijnhart (Opener)
-
[ADD] Module that allows preservation of the domestic account number
for IBAN accounts in preparation of the upgrade to OpenERP 6.1 - 110. By Stefan Rijnhart (Opener)
-
[FIX] Partial unreconcile exception and logical error
- 111. By Stefan Rijnhart (Opener)
-
[FIX] Typo preventing wizard to show up in the gtk client
- 112. By Stefan Rijnhart (Opener)
-
[FIX] Typo prevents match wizard to start in GTK-client
Unmerged revisions
- 113. By Stefan Rijnhart (Opener)
-
[IMP] Support migration of V5.0 payment types and statement lines
- 112. By Stefan Rijnhart (Opener)
-
[FIX] Typo prevents match wizard to start in GTK-client
- 111. By Stefan Rijnhart (Opener)
-
[FIX] Typo preventing wizard to show up in the gtk client
- 110. By Stefan Rijnhart (Opener)
-
[FIX] Partial unreconcile exception and logical error
- 109. By Stefan Rijnhart (Opener)
-
[ADD] Module that allows preservation of the domestic account number
for IBAN accounts in preparation of the upgrade to OpenERP 6.1 - 108. By Stefan Rijnhart (Opener)
-
[FIX] Reconciling raises error when partial reconciliation is present
[FIX] Wrong sign in residual write-off in some cases - 107. By Credativ (Dmitrijs Ledkovs, James Jesudason, Tristan Hill)
-
[ADD] UK HSBC module
[FIX] Period_id on vouchers
[FIX] Recompute statement end balance at the end of the import
[FIX] disable call to SWIFT lookup page that no longer exists
[FIX] Allow manual statement entry - 106. By Stefan Rijnhart (Opener)
-
[FIX] splitting of transactions was not actually disabled yet
- 105. By Stefan Rijnhart (Opener)
-
[ADD] Comment about the specific CSV format that can be downloaded from ING
- 104. By Stefan Rijnhart (Opener)
-
[FIX] bug: attempt at manual match is ignored
[RFR] rearrange match wizard layout using tabs
Preview Diff
1 | === modified file 'account_banking/__init__.py' |
2 | --- account_banking/__init__.py 2012-02-29 11:09:43 +0000 |
3 | +++ account_banking/__init__.py 2012-04-17 10:52:20 +0000 |
4 | @@ -27,6 +27,7 @@ |
5 | import browse_record |
6 | import sepa |
7 | import record |
8 | +import banking_import_transaction |
9 | import account_banking |
10 | import parsers |
11 | import wizard |
12 | |
13 | === renamed file 'account_banking/__terp__.py' => 'account_banking/__openerp__.py' |
14 | --- account_banking/__terp__.py 2011-07-21 11:30:59 +0000 |
15 | +++ account_banking/__openerp__.py 2012-04-17 10:52:20 +0000 |
16 | @@ -1,6 +1,11 @@ |
17 | ############################################################################## |
18 | # |
19 | # Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>). |
20 | +# (C) 2011 Therp BV (<http://therp.nl>). |
21 | +# (C) 2011 Smile (<http://smile.fr>). |
22 | +# |
23 | +# All other contributions are (C) by their respective contributors |
24 | +# |
25 | # All Rights Reserved |
26 | # |
27 | # WARNING: This program as such is intended to be used by professional |
28 | @@ -25,11 +30,11 @@ |
29 | ############################################################################## |
30 | { |
31 | 'name': 'Account Banking', |
32 | - 'version': '0.1.62', |
33 | + 'version': '0.1.106', |
34 | 'license': 'GPL-3', |
35 | - 'author': 'EduSense BV', |
36 | - 'website': 'http://www.edusense.nl', |
37 | - 'category': 'Account Banking', |
38 | + 'author': 'Banking addons community', |
39 | + 'website': 'https://launchpad.net/banking-addons', |
40 | + 'category': 'Banking addons', |
41 | 'depends': ['base', 'account', 'base_iban', 'account_payment'], |
42 | 'init_xml': [], |
43 | 'update_xml': [ |
44 | @@ -38,6 +43,8 @@ |
45 | 'wizard/bank_import_view.xml', |
46 | 'account_banking_view.xml', |
47 | 'account_banking_workflow.xml', |
48 | + 'wizard/banking_transaction_wizard.xml', |
49 | + 'workflow/account_invoice.xml', |
50 | ], |
51 | 'demo_xml': [], |
52 | 'description': ''' |
53 | |
54 | === modified file 'account_banking/account_banking.py' |
55 | --- account_banking/account_banking.py 2012-02-10 13:33:01 +0000 |
56 | +++ account_banking/account_banking.py 2012-04-17 10:52:20 +0000 |
57 | @@ -170,6 +170,7 @@ |
58 | 'state': fields.selection( |
59 | [('unfinished', 'Unfinished'), |
60 | ('error', 'Error'), |
61 | + ('review', 'Review'), |
62 | ('ready', 'Finished'), |
63 | ], 'State', select=True, readonly=True |
64 | ), |
65 | @@ -209,8 +210,16 @@ |
66 | 'Leave empty for manual processing'), |
67 | domain=[('osv_memory', '=', True)], |
68 | ), |
69 | + 'payment_order_type': fields.selection( |
70 | + [('payment', 'Payment'),('debit', 'Direct debit')], |
71 | + 'Payment order type', required=True, |
72 | + ), |
73 | } |
74 | |
75 | + _defaults = { |
76 | + 'payment_order_type': lambda *a: 'payment', |
77 | + } |
78 | + |
79 | payment_mode_type() |
80 | |
81 | class payment_mode(osv.osv): |
82 | @@ -445,7 +454,9 @@ |
83 | """ |
84 | if st_line.reconcile_id: |
85 | account_move_line_obj.write(cr, uid, [torec], { |
86 | - 'reconcile_id': st_line.reconcile_id.id }, context=context) |
87 | + (st_line.reconcile_id.line_partial_ids and |
88 | + 'reconcile_partial_id' or 'reconcile_id'): |
89 | + st_line.reconcile_id.id }, context=context) |
90 | for move_line in (st_line.reconcile_id.line_id or []) + ( |
91 | st_line.reconcile_id.line_partial_ids or []): |
92 | netsvc.LocalService("workflow").trg_trigger( |
93 | @@ -565,10 +576,13 @@ |
94 | res = {} |
95 | for st_line in self.browse(cr, uid, ids, context): |
96 | res[st_line.id] = False |
97 | - for move_line in (st_line.reconcile_id and |
98 | - (st_line.reconcile_id.line_id or []) + |
99 | - (st_line.reconcile_id.line_partial_ids or []) or |
100 | - []): |
101 | + for move_line in ( |
102 | + st_line.reconcile_id and |
103 | + (st_line.reconcile_id.line_id or |
104 | + st_line.reconcile_id.line_partial_ids) or |
105 | + st_line.import_transaction_id and |
106 | + st_line.import_transaction_id.move_line_id and |
107 | + [st_line.import_transaction_id.move_line_id] or []): |
108 | if move_line.invoice: |
109 | res[st_line.id] = move_line.invoice.id |
110 | continue |
111 | @@ -598,14 +612,14 @@ |
112 | states={'draft':[('readonly', False)]}, |
113 | ), |
114 | 'period_id': fields.many2one('account.period', 'Period', required=True, |
115 | - states={'confirm': [('readonly', True)]}), |
116 | + states={'confirmed': [('readonly', True)]}), |
117 | 'currency': fields.many2one('res.currency', 'Currency', required=True, |
118 | - states={'confirm': [('readonly', True)]}), |
119 | + states={'confirmed': [('readonly', True)]}), |
120 | |
121 | # Not used yet, but usefull in the future. |
122 | 'international': fields.boolean('International Transaction', |
123 | required=False, |
124 | - states={'confirm': [('readonly', True)]}, |
125 | + states={'confirmed': [('readonly', True)]}, |
126 | ), |
127 | 'reconcile_id': fields.many2one( |
128 | 'account.move.reconcile', 'Reconciliation', readonly=True |
129 | @@ -775,6 +789,45 @@ |
130 | |
131 | return res |
132 | |
133 | + """ |
134 | + Hooks for processing direct debit orders, such as implemented in |
135 | + account_direct_debit module. |
136 | + """ |
137 | + def get_storno_account_id(self, cr, uid, payment_line_id, amount, |
138 | + currency_id, context=None): |
139 | + """ |
140 | + Hook for verifying a match of the payment line with the amount. |
141 | + Return the account associated with the storno. |
142 | + Used in account_banking interactive mode |
143 | + :param payment_line_id: the single payment line id |
144 | + :param amount: the (signed) amount debited from the bank account |
145 | + :param currency: the bank account's currency *browse object* |
146 | + :return: an account if there is a full match, False otherwise |
147 | + :rtype: database id of an account.account resource. |
148 | + """ |
149 | + |
150 | + return False |
151 | + |
152 | + def debit_storno(self, cr, uid, payment_line_id, amount, |
153 | + currency_id, storno_retry=True, context=None): |
154 | + """ |
155 | + Hook for handling a canceled item of a direct debit order. |
156 | + Presumably called from a bank statement import routine. |
157 | + |
158 | + Decide on the direction that the invoice's workflow needs to take. |
159 | + You may optionally return an incomplete reconcile for the caller |
160 | + to reconcile the now void payment. |
161 | + |
162 | + :param payment_line_id: the single payment line id |
163 | + :param amount: the (negative) amount debited from the bank account |
164 | + :param currency: the bank account's currency *browse object* |
165 | + :param boolean storno_retry: whether the storno is considered fatal \ |
166 | + or not. |
167 | + :return: an incomplete reconcile for the caller to fill |
168 | + :rtype: database id of an account.move.reconcile resource. |
169 | + """ |
170 | + |
171 | + return False |
172 | |
173 | payment_line() |
174 | |
175 | @@ -809,7 +862,7 @@ |
176 | 'rejected': [('readonly', True)], |
177 | 'done': [('readonly', True)] |
178 | }, |
179 | - help='Select the Payment Mode to be applied.' |
180 | + help='Select the Payment Mode to be applied.', |
181 | ), |
182 | 'state': fields.selection([ |
183 | ('draft', 'Draft'), |
184 | @@ -852,8 +905,17 @@ |
185 | "execution." |
186 | ) |
187 | ), |
188 | + 'payment_order_type': fields.selection( |
189 | + [('payment', 'Payment'),('debit', 'Direct debit')], |
190 | + 'Payment order type', required=True, |
191 | + ), |
192 | + 'date_sent': fields.date('Send date', readonly=True), |
193 | } |
194 | |
195 | + _defaults = { |
196 | + 'payment_order_type': lambda *a: 'payment', |
197 | + } |
198 | + |
199 | def launch_wizard(self, cr, uid, ids, context=None): |
200 | """ |
201 | Search for a wizard to launch according to the type. |
202 | @@ -892,7 +954,9 @@ |
203 | _('You can only combine payment orders of the same type') |
204 | ) |
205 | # process manual payments |
206 | - self.action_sent(cr, uid, ids, context) |
207 | + wf_service = netsvc.LocalService('workflow') |
208 | + for order_id in ids: |
209 | + wf_service.trg_validate(uid, 'payment.order', order_id, 'sent', cr) |
210 | return result |
211 | |
212 | def _write_payment_lines(self, cursor, uid, ids, **kwargs): |
213 | @@ -925,9 +989,8 @@ |
214 | Set both self and payment lines to state 'sent'. |
215 | ''' |
216 | self._write_payment_lines(cursor, uid, ids, export_state='sent') |
217 | - wf_service = netsvc.LocalService('workflow') |
218 | - for id in ids: |
219 | - wf_service.trg_validate(uid, 'payment.order', id, 'sent', cursor) |
220 | + self.write(cursor, uid, ids, {'state':'sent', |
221 | + 'date_sent': time.strftime('%Y-%m-%d')}) |
222 | return True |
223 | |
224 | def action_rejected(self, cursor, uid, ids, *args): |
225 | @@ -963,6 +1026,30 @@ |
226 | return 'account_banking', 'wizard_account_banking_payment_manual' |
227 | return super(payment_order, self).get_wizard(type) |
228 | |
229 | + """ |
230 | + Hooks for processing direct debit orders, such as implemented in |
231 | + account_direct_debit module. |
232 | + """ |
233 | + def debit_reconcile_transfer( |
234 | + self, cr, uid, payment_order_id, amount, currency, context=None): |
235 | + """ |
236 | + Reconcile the payment order if the amount is correct. Return the |
237 | + id of the reconciliation. |
238 | + """ |
239 | + raise osv.except_osv( |
240 | + _("Cannot reconcile"), |
241 | + _("Cannot reconcile debit order: "+ |
242 | + "Not implemented.")) |
243 | + |
244 | + def debit_unreconcile_transfer( |
245 | + self, cr, uid, payment_order_id, reconcile_id, amount, currency, |
246 | + context=None): |
247 | + """ Unreconcile the payment_order if at all possible """ |
248 | + raise osv.except_osv( |
249 | + _("Cannot unreconcile"), |
250 | + _("Cannot unreconcile debit order: "+ |
251 | + "Not implemented.")) |
252 | + |
253 | payment_order() |
254 | |
255 | class res_partner_bank(osv.osv): |
256 | @@ -1363,6 +1450,16 @@ |
257 | ''' |
258 | _inherit = 'account.invoice' |
259 | |
260 | + def test_undo_paid(self, cr, uid, ids, context=None): |
261 | + """ |
262 | + Called from the workflow. Used to unset paid state on |
263 | + invoices that were paid with bank transfers which are being cancelled |
264 | + """ |
265 | + for invoice in self.read(cr, uid, ids, ['reconciled'], context): |
266 | + if invoice['reconciled']: |
267 | + return False |
268 | + return True |
269 | + |
270 | def _get_reference_type(self, cr, uid, context=None): |
271 | ''' |
272 | Return the list of reference types |
273 | @@ -1379,4 +1476,21 @@ |
274 | |
275 | invoice() |
276 | |
277 | +class account_move_line(osv.osv): |
278 | + _inherit = "account.move.line" |
279 | + |
280 | + def get_balance(self, cr, uid, ids, context=None): |
281 | + """ |
282 | + Return the balance of any set of move lines. |
283 | + Surely this exists somewhere in account base, but I missed it. |
284 | + """ |
285 | + total = 0.0 |
286 | + if not ids: |
287 | + total |
288 | + for line in self.read( |
289 | + cr, uid, ids, ['debit', 'credit'], context=context): |
290 | + total += (line['debit'] or 0.0) - (line['credit'] or 0.0) |
291 | + return total |
292 | +account_move_line() |
293 | + |
294 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
295 | |
296 | === modified file 'account_banking/account_banking_view.xml' |
297 | --- account_banking/account_banking_view.xml 2012-02-10 14:05:09 +0000 |
298 | +++ account_banking/account_banking_view.xml 2012-04-17 10:52:20 +0000 |
299 | @@ -176,10 +176,14 @@ |
300 | <field name="name">account.bank.statement.form.banking-1</field> |
301 | <field name="inherit_id" ref="account.view_bank_statement_form" /> |
302 | <field name="model">account.bank.statement</field> |
303 | + <field name="sequence" eval="60"/> |
304 | <field name="type">form</field> |
305 | <field name="arch" type="xml"> |
306 | <data> |
307 | <field name="period_id" position="replace"/> |
308 | + <xpath expr="/form/notebook/page[@string='Transaction']/field/tree" position="attributes"> |
309 | + <attribute name="colors">black:state == 'confirmed';darkmagenta:match_multi == True;grey:state=='draft';crimson:duplicate == True;</attribute> |
310 | + </xpath> |
311 | <xpath expr="/form/notebook/page[@string='Transaction']/field/tree/field[@name='name']" position="replace"> |
312 | <field name="name" required="1"/> |
313 | </xpath> |
314 | @@ -206,9 +210,14 @@ |
315 | <field name="model">account.bank.statement</field> |
316 | <field name="type">form</field> |
317 | <field name="arch" type="xml"> |
318 | - <xpath expr="/form/notebook/page[@string='Transaction']/field/form/field[@name='ref']" position="after"> |
319 | - <field name="period_id"/> |
320 | - </xpath> |
321 | + <data> |
322 | + <xpath expr="/form/notebook/page[@string='Transaction']/field/form/field[@name='ref']" position="after"> |
323 | + <field name="period_id"/> |
324 | + <field name="match_type"/> |
325 | + <field name="match_multi"/> |
326 | + <field name="duplicate"/> |
327 | + </xpath> |
328 | + </data> |
329 | </field> |
330 | </record> |
331 | |
332 | @@ -253,9 +262,27 @@ |
333 | <field name="arch" type="xml"> |
334 | <data> |
335 | <xpath expr="/form/notebook/page/field[@name='line_ids']/tree/field[@name='partner_id']" position="after"> |
336 | + <!-- TODO set partner_id when partner_bank_id changes --> |
337 | <field name="partner_bank_id"/> |
338 | </xpath> |
339 | <xpath expr="/form/notebook/page/field[@name='line_ids']/tree/field[@name='amount']" position="after"> |
340 | + <field name="match_type"/> |
341 | + <field name="residual"/> |
342 | + <button name="match_wizard" states="draft" |
343 | + string="Match" |
344 | + icon="terp-gtk-jump-to-ltr" |
345 | + type="object"/> |
346 | + <field name="match_multi" invisible="1"/> |
347 | + <field name="duplicate" invisible="1"/> |
348 | + <field name="state"/> |
349 | + <button name="confirm" states="draft" |
350 | + string="Confirm transaction" |
351 | + icon="gtk-ok" |
352 | + type="object"/> |
353 | + <button name="cancel" states="confirmed" |
354 | + string="Cancel transaction" |
355 | + icon="gtk-cancel" |
356 | + type="object"/> |
357 | <field name="invoice_id"/> |
358 | <field name="reconcile_id"/> |
359 | </xpath> |
360 | @@ -423,9 +450,104 @@ |
361 | <field name="name" /> |
362 | <field name="code" /> |
363 | <field name="suitable_bank_types"/> |
364 | + <field name="payment_order_type"/> |
365 | <field name="ir_model_id"/> |
366 | </form> |
367 | </field> |
368 | </record> |
369 | - </data> |
370 | + |
371 | + <!-- fixes https://bugs.launchpad.net/openobject-addons/+bug/903156 for 6.0 |
372 | + Note that 6.1 does not suffer from the problem |
373 | + --> |
374 | + <record id="account_payment.action_create_payment_order" model="ir.actions.act_window"> |
375 | + <field name="view_id" ref="account_payment.view_create_payment_order"/> |
376 | + </record> |
377 | + |
378 | + |
379 | + <record model="ir.ui.view" id="view_bank_statement_line_tree"> |
380 | + <field name="name">Bank statement line tree view</field> |
381 | + <field name="model">account.bank.statement.line</field> |
382 | + <field name="type">tree</field> |
383 | + <field name="arch" type="xml"> |
384 | + <tree string="Statement lines" colors="black:state == 'confirmed';darkmagenta:match_multi == True;crimson:duplicate == True;grey:state=='draft';"> |
385 | + <field name="sequence" readonly="1" invisible="1"/> |
386 | + <field name="date" groups="base.group_extended"/> |
387 | + <field name="name"/> |
388 | + <field name="ref"/> |
389 | + <field name="partner_id" on_change="onchange_partner_id(partner_id)"/> |
390 | + <!-- TODO set partner_id when partner_bank_id changes --> |
391 | + <field name="partner_bank_id"/> |
392 | + <field name="type" on_change="onchange_type(partner_id, type)"/> |
393 | + <!-- TODO note the references to parent from the statement form view --> |
394 | + <field domain="[('journal_id','=',parent.journal_id)]" name="account_id"/> |
395 | + <field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '<>', 'view')]"/> |
396 | + <field name="amount"/> |
397 | + <field name="match_type"/> |
398 | + <field name="residual"/> |
399 | + <button name="match_wizard" states="draft" |
400 | + string="Match" |
401 | + icon="terp-gtk-jump-to-ltr" |
402 | + type="object"/> |
403 | + <field name="match_multi" invisible="1"/> |
404 | + <field name="duplicate" invisible="1"/> |
405 | + <field name="state"/> |
406 | + <button name="confirm" states="draft" |
407 | + string="Confirm transaction" |
408 | + icon="gtk-ok" |
409 | + type="object"/> |
410 | + <button name="cancel" states="confirmed" |
411 | + string="Cancel transaction" |
412 | + icon="gtk-cancel" |
413 | + type="object"/> |
414 | + <field name="invoice_id"/> |
415 | + <field name="reconcile_id"/> |
416 | + </tree> |
417 | + </field> |
418 | + </record> |
419 | + |
420 | + <!-- search view for bank statement lines --> |
421 | + <record id="view_account_bank_statement_line_search" model="ir.ui.view"> |
422 | + <field name="name">account.bank.statement.line.search</field> |
423 | + <field name="model">account.bank.statement.line</field> |
424 | + <field name="type">search</field> |
425 | + <field name="arch" type="xml"> |
426 | + <search string="Search Bank Transactions "> |
427 | + <group> |
428 | + <filter string="Draft" domain="[('state','=','draft')]" icon="terp-camera_test"/> |
429 | + <filter string="Confirmed" domain="[('state','=','confirmed')]" icon="terp-dialog-close"/> |
430 | + <separator orientation="vertical"/> |
431 | + <field name="ref"/> |
432 | + <field name="type"/> |
433 | + <field name="period_id"/> |
434 | + </group> |
435 | + <newline/> |
436 | + <group> |
437 | + <field name="date"/> |
438 | + <field name="partner_id"/> |
439 | + <field name="partner_bank_id"/> |
440 | + <field name="account_id"/> |
441 | + </group> |
442 | + <newline/> |
443 | + <group expand="0" string="Group By..."> |
444 | + <filter string="State" context="{'group_by': 'state'}" icon="terp-stock_effects-object-colorize"/> |
445 | + </group> |
446 | + </search> |
447 | + </field> |
448 | + </record> |
449 | + |
450 | + |
451 | + <!-- Add a shortcut menu for bank accounts --> |
452 | + <record model="ir.actions.act_window" id="action_bank_statement_line_tree"> |
453 | + <field name="name">Bank Transactions</field> |
454 | + <field name="type">ir.actions.act_window</field> |
455 | + <field name="res_model">account.bank.statement.line</field> |
456 | + <field name="view_type">form</field> |
457 | + <field name="view_mode">tree,form</field> |
458 | + <field name="search_view_id" ref="view_account_bank_statement_line_search"/> |
459 | + </record> |
460 | + <menuitem string="Bank Transactions" |
461 | + action="action_bank_statement_line_tree" |
462 | + id="menu_bank_statement_line_tree" |
463 | + parent="account.menu_finance_bank_and_cash" sequence="8"/> |
464 | + </data> |
465 | </openerp> |
466 | |
467 | === modified file 'account_banking/account_banking_workflow.xml' |
468 | --- account_banking/account_banking_workflow.xml 2010-06-29 14:58:52 +0000 |
469 | +++ account_banking/account_banking_workflow.xml 2012-04-17 10:52:20 +0000 |
470 | @@ -10,8 +10,7 @@ |
471 | <record id="act_sent" model="workflow.activity"> |
472 | <field name="name">sent</field> |
473 | <field name="wkf_id" ref="account_payment.wkf_payment_order"/> |
474 | - <field name="action">action_sent() |
475 | -write({'state':'sent'})</field> |
476 | + <field name="action">action_sent()</field> |
477 | <field name="kind">function</field> |
478 | </record> |
479 | <!-- New activity for workflow payment order: rejected --> |
480 | |
481 | === added file 'account_banking/banking_import_transaction.py' |
482 | --- account_banking/banking_import_transaction.py 1970-01-01 00:00:00 +0000 |
483 | +++ account_banking/banking_import_transaction.py 2012-04-17 10:52:20 +0000 |
484 | @@ -0,0 +1,1868 @@ |
485 | +# -*- encoding: utf-8 -*- |
486 | +############################################################################## |
487 | +# |
488 | +# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>). |
489 | +# Contributions by Kaspars Vilkens (KNdati): |
490 | +# lenghty discussions, bugreports and bugfixes |
491 | +# Refractoring (C) 2011 Therp BV (<http://therp.nl>). |
492 | +# (C) 2011 Smile (<http://smile.fr>). |
493 | +# |
494 | +# All Rights Reserved |
495 | +# |
496 | +# This program is free software: you can redistribute it and/or modify |
497 | +# it under the terms of the GNU General Public License as published by |
498 | +# the Free Software Foundation, either version 3 of the License, or |
499 | +# (at your option) any later version. |
500 | +# |
501 | +# This program is distributed in the hope that it will be useful, |
502 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
503 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
504 | +# GNU General Public License for more details. |
505 | +# |
506 | +# You should have received a copy of the GNU General Public License |
507 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
508 | +# |
509 | +############################################################################## |
510 | + |
511 | +from osv import osv, fields |
512 | +import time |
513 | +import netsvc |
514 | +import base64 |
515 | +import datetime |
516 | +from tools import config |
517 | +from tools.translate import _ |
518 | +from parsers import models |
519 | +from parsers.convert import * |
520 | +# from account_banking.struct import struct |
521 | +from account_banking import sepa |
522 | +from wizard.banktools import * |
523 | +import decimal_precision as dp |
524 | + |
525 | +bt = models.mem_bank_transaction |
526 | + |
527 | +class banking_import_transaction(osv.osv): |
528 | + """ orm representation of mem_bank_transaction() for interactive and posthoc |
529 | + configuration of reconciliation in the bank statement view. |
530 | + |
531 | + Possible refractoring in OpenERP 6.1: |
532 | + merge with bank_statement_line, using sparse fields |
533 | + |
534 | + """ |
535 | + _name = 'banking.import.transaction' |
536 | + _description = 'Bank import transaction' |
537 | + _rec_name = 'transaction' |
538 | + |
539 | + # This variable is used to match supplier invoices with an invoice date after |
540 | + # the real payment date. This can occur with online transactions (web shops). |
541 | + # TODO: Convert this to a proper configuration variable |
542 | + payment_window = datetime.timedelta(days=10) |
543 | + |
544 | + def _match_costs(self, cr, uid, trans, period_id, account_info, log): |
545 | + ''' |
546 | + Get or create a costs invoice for the bank and return it with |
547 | + the payment as seen in the transaction (when not already done). |
548 | + ''' |
549 | + if not account_info.costs_account_id: |
550 | + return [] |
551 | + |
552 | + digits = dp.get_precision('Account')(cr)[1] |
553 | + amount = round(abs(trans.transferred_amount), digits) |
554 | + # Make sure to be able to pinpoint our costs invoice for later |
555 | + # matching |
556 | + reference = '%s.%s: %s' % (trans.statement, trans.transaction, trans.reference) |
557 | + |
558 | + # search supplier invoice |
559 | + invoice_obj = self.pool.get('account.invoice') |
560 | + invoice_ids = invoice_obj.search(cr, uid, [ |
561 | + '&', |
562 | + ('type', '=', 'in_invoice'), |
563 | + ('partner_id', '=', account_info.bank_partner_id.id), |
564 | + ('company_id', '=', account_info.company_id.id), |
565 | + ('date_invoice', '=', trans.effective_date), |
566 | + ('reference', '=', reference), |
567 | + ('amount_total', '=', amount), |
568 | + ] |
569 | + ) |
570 | + if invoice_ids and len(invoice_ids) == 1: |
571 | + invoice = invoice_obj.browse(cr, uid, invoice_ids)[0] |
572 | + elif not invoice_ids: |
573 | + # create supplier invoice |
574 | + partner_obj = self.pool.get('res.partner') |
575 | + invoice_lines = [(0,0,dict( |
576 | + amount = 1, |
577 | + price_unit = amount, |
578 | + name = trans.message or trans.reference, |
579 | + account_id = account_info.costs_account_id.id |
580 | + ))] |
581 | + invoice_address_id = partner_obj.address_get( |
582 | + cr, uid, [account_info.bank_partner_id.id], ['invoice'] |
583 | + ) |
584 | + invoice_id = invoice_obj.create(cr, uid, dict( |
585 | + type = 'in_invoice', |
586 | + company_id = account_info.company_id.id, |
587 | + partner_id = account_info.bank_partner_id.id, |
588 | + address_invoice_id = invoice_address_id['invoice'], |
589 | + period_id = period_id, |
590 | + journal_id = account_info.invoice_journal_id.id, |
591 | + account_id = account_info.bank_partner_id.property_account_payable.id, |
592 | + date_invoice = trans.effective_date, |
593 | + reference_type = 'none', |
594 | + reference = reference, |
595 | + name = trans.reference or trans.message, |
596 | + check_total = amount, |
597 | + invoice_line = invoice_lines, |
598 | + )) |
599 | + invoice = invoice_obj.browse(cr, uid, invoice_id) |
600 | + # Create workflow |
601 | + invoice_obj.button_compute(cr, uid, [invoice_id], |
602 | + {'type': 'in_invoice'}, set_total=True) |
603 | + wf_service = netsvc.LocalService('workflow') |
604 | + # Move to state 'open' |
605 | + wf_service.trg_validate(uid, 'account.invoice', invoice.id, |
606 | + 'invoice_open', cr) |
607 | + |
608 | + # return move_lines to mix with the rest |
609 | + return [x for x in invoice.move_id.line_id if x.account_id.reconcile] |
610 | + |
611 | + def _match_debit_order( |
612 | + self, cr, uid, trans, log, context=None): |
613 | + |
614 | + def is_zero(total): |
615 | + return self.pool.get('res.currency').is_zero( |
616 | + cr, uid, trans.statement_id.currency, total) |
617 | + |
618 | + payment_order_obj = self.pool.get('payment.order') |
619 | + order_ids = payment_order_obj.search( |
620 | + cr, uid, [('payment_order_type', '=', 'debit'), |
621 | + ('state', '=', 'sent'), |
622 | + ('date_sent', '<=', str2date(trans.execution_date, |
623 | + '%Y-%m-%d')) |
624 | + ], |
625 | + limit=0, context=context) |
626 | + orders = payment_order_obj.browse(cr, uid, order_ids, context) |
627 | + candidates = [x for x in orders if |
628 | + is_zero(x.total - trans.transferred_amount)] |
629 | + if len(candidates) > 0: |
630 | + # retrieve the common account_id, if any |
631 | + account_id = False |
632 | + for line in candidates[0].line_ids[0].debit_move_line_id.move_id.line_id: |
633 | + if line.account_id.type == 'other': |
634 | + account_id = line.account_id.id |
635 | + break |
636 | + return dict( |
637 | + move_line_ids = False, |
638 | + match_type = 'payment_order', |
639 | + payment_order_ids = [x.id for x in candidates], |
640 | + account_id = account_id, |
641 | + partner_id = False, |
642 | + partner_bank_id = False, |
643 | + reference = False, |
644 | + type='general', |
645 | + ) |
646 | + return False |
647 | + |
648 | + def _match_invoice(self, cr, uid, trans, move_lines, |
649 | + partner_ids, bank_account_ids, |
650 | + log, linked_invoices, |
651 | + context=None): |
652 | + ''' |
653 | + Find the invoice belonging to this reference - if there is one |
654 | + Use the sales journal to check. |
655 | + |
656 | + Challenges we're facing: |
657 | + 1. The sending or receiving party is not necessarily the same as the |
658 | + partner the payment relates to. |
659 | + 2. References can be messed up during manual encoding and inexact |
660 | + matching can link the wrong invoices. |
661 | + 3. Amounts can or can not match the expected amount. |
662 | + 4. Multiple invoices can be paid in one transaction. |
663 | + .. There are countless more, but these we'll try to address. |
664 | + |
665 | + Assumptions for matching: |
666 | + 1. There are no payments for invoices not sent. These are dealt with |
667 | + later on. |
668 | + 2. Debit amounts are either customer invoices or credited supplier |
669 | + invoices. |
670 | + 3. Credit amounts are either supplier invoices or credited customer |
671 | + invoices. |
672 | + 4. Payments are either below expected amount or only slightly above |
673 | + (abs). |
674 | + 5. Payments from partners that are matched, pay their own invoices. |
675 | + |
676 | + Worst case scenario: |
677 | + 1. No match was made. |
678 | + No harm done. Proceed with manual matching as usual. |
679 | + 2. The wrong match was made. |
680 | + Statements are encoded in draft. You will have the opportunity to |
681 | + manually correct the wrong assumptions. |
682 | + |
683 | + TODO: REVISE THIS DOC |
684 | + #Return values: |
685 | + # old_trans: this function can modify and rebrowse the modified |
686 | + # transaction. |
687 | + # move_info: the move_line information belonging to the matched |
688 | + # invoice |
689 | + # new_trans: the new transaction when the current one was split. |
690 | + # This can happen when multiple invoices were paid with a single |
691 | + # bank transaction. |
692 | + ''' |
693 | + |
694 | + def eyecatcher(invoice): |
695 | + ''' |
696 | + Return the eyecatcher for an invoice |
697 | + ''' |
698 | + return invoice.type.startswith('in_') and invoice.name or \ |
699 | + invoice.number |
700 | + |
701 | + def has_id_match(invoice, ref, msg): |
702 | + ''' |
703 | + Aid for debugging - way more comprehensible than complex |
704 | + comprehension filters ;-) |
705 | + |
706 | + Match on ID of invoice (reference, name or number, whatever |
707 | + available and sensible) |
708 | + ''' |
709 | + if invoice.reference: |
710 | + # Reference always comes first, as it is manually set for a |
711 | + # reason. |
712 | + iref = invoice.reference.upper() |
713 | + if iref in ref or iref in msg: |
714 | + return True |
715 | + if invoice.type.startswith('in_'): |
716 | + # Internal numbering, no likely match on number |
717 | + if invoice.name: |
718 | + iname = invoice.name.upper() |
719 | + if iname in ref or iname in msg: |
720 | + return True |
721 | + elif invoice.type.startswith('out_'): |
722 | + # External id's possible and likely |
723 | + inum = invoice.number.upper() |
724 | + if inum in ref or inum in msg: |
725 | + return True |
726 | + |
727 | + return False |
728 | + |
729 | + def _cached(move_line): |
730 | + # Disabled, we allow for multiple matches in |
731 | + # the interactive wizard |
732 | + return False |
733 | + |
734 | + '''Check if the move_line has been cached''' |
735 | + return move_line.id in linked_invoices |
736 | + |
737 | + def _cache(move_line, remaining=0.0): |
738 | + '''Cache the move_line''' |
739 | + linked_invoices[move_line.id] = remaining |
740 | + |
741 | + def _remaining(move_line): |
742 | + '''Return the remaining amount for a previously matched move_line |
743 | + ''' |
744 | + return linked_invoices[move_line.id] |
745 | + |
746 | + def _sign(invoice): |
747 | + '''Return the direction of an invoice''' |
748 | + return {'in_invoice': -1, |
749 | + 'in_refund': 1, |
750 | + 'out_invoice': 1, |
751 | + 'out_refund': -1 |
752 | + }[invoice.type] |
753 | + |
754 | + def is_zero(move_line, total): |
755 | + return self.pool.get('res.currency').is_zero( |
756 | + cr, uid, trans.statement_id.currency, total) |
757 | + |
758 | + digits = dp.get_precision('Account')(cr)[1] |
759 | + partial = False |
760 | + |
761 | + # Disabled splitting transactions for now |
762 | + # TODO allow splitting in the interactive wizard |
763 | + allow_splitting = False |
764 | + |
765 | + # Search invoice on partner |
766 | + if partner_ids: |
767 | + candidates = [ |
768 | + x for x in move_lines |
769 | + if x.partner_id.id in partner_ids and |
770 | + (str2date(x.date, '%Y-%m-%d') <= |
771 | + (str2date(trans.execution_date, '%Y-%m-%d') + |
772 | + self.payment_window)) |
773 | + and (not _cached(x) or _remaining(x)) |
774 | + ] |
775 | + else: |
776 | + candidates = [] |
777 | + |
778 | + # Next on reference/invoice number. Mind that this uses the invoice |
779 | + # itself, as the move_line references have been fiddled with on invoice |
780 | + # creation. This also enables us to search for the invoice number in the |
781 | + # reference instead of the other way around, as most human interventions |
782 | + # *add* text. |
783 | + if len(candidates) > 1 or not candidates: |
784 | + ref = trans.reference.upper() |
785 | + msg = trans.message.upper() |
786 | + # The manual usage of the sales journal creates moves that |
787 | + # are not tied to invoices. Thanks to Stefan Rijnhart for |
788 | + # reporting this. |
789 | + candidates = [ |
790 | + x for x in candidates or move_lines |
791 | + if (x.invoice and has_id_match(x.invoice, ref, msg) and |
792 | + str2date(x.invoice.date_invoice, '%Y-%m-%d') <= |
793 | + (str2date(trans.execution_date, '%Y-%m-%d') + |
794 | + self.payment_window) |
795 | + and (not _cached(x) or _remaining(x))) |
796 | + ] |
797 | + |
798 | + # Match on amount expected. Limit this kind of search to known |
799 | + # partners. |
800 | + if not candidates and partner_ids: |
801 | + candidates = [ |
802 | + x for x in move_lines |
803 | + if (is_zero(x.move_id, ((x.debit or 0.0) - (x.credit or 0.0)) - |
804 | + trans.transferred_amount) |
805 | + and str2date(x.date, '%Y-%m-%d') <= |
806 | + (str2date(trans.execution_date, '%Y-%m-%d') + |
807 | + self.payment_window) |
808 | + and (not _cached(x) or _remaining(x))) |
809 | + ] |
810 | + |
811 | + move_line = False |
812 | + |
813 | + if candidates and len(candidates) > 0: |
814 | + # Now a possible selection of invoices has been found, check the |
815 | + # amounts expected and received. |
816 | + # |
817 | + # TODO: currency coercing |
818 | + best = [x for x in candidates |
819 | + if (is_zero(x.move_id, ((x.debit or 0.0) - (x.credit or 0.0)) - |
820 | + trans.transferred_amount) |
821 | + and str2date(x.date, '%Y-%m-%d') <= |
822 | + (str2date(trans.execution_date, '%Y-%m-%d') + |
823 | + self.payment_window)) |
824 | + ] |
825 | + if len(best) == 1: |
826 | + # Exact match |
827 | + move_line = best[0] |
828 | + invoice = move_line.invoice |
829 | + if _cached(move_line): |
830 | + partial = True |
831 | + expected = _remaining(move_line) |
832 | + else: |
833 | + _cache(move_line) |
834 | + |
835 | + elif len(candidates) > 1: |
836 | + # Before giving up, check cache for catching duplicate |
837 | + # transfers first |
838 | + paid = [x for x in move_lines |
839 | + if x.invoice and has_id_match(x.invoice, ref, msg) |
840 | + and str2date(x.invoice.date_invoice, '%Y-%m-%d') |
841 | + <= str2date(trans.execution_date, '%Y-%m-%d') |
842 | + and (_cached(x) and not _remaining(x)) |
843 | + ] |
844 | + if paid: |
845 | + log.append( |
846 | + _('Unable to link transaction id %(trans)s ' |
847 | + '(ref: %(ref)s) to invoice: ' |
848 | + 'invoice %(invoice)s was already paid') % { |
849 | + 'trans': '%s.%s' % (trans.statement, trans.transaction), |
850 | + 'ref': trans.reference, |
851 | + 'invoice': eyecatcher(paid[0].invoice) |
852 | + }) |
853 | + else: |
854 | + # Multiple matches |
855 | + # TODO select best bank account in this case |
856 | + return (trans, self._get_move_info( |
857 | + cr, uid, [x.id for x in candidates]), |
858 | + False) |
859 | + move_line = False |
860 | + partial = False |
861 | + |
862 | + elif len(candidates) == 1: |
863 | + # Mismatch in amounts |
864 | + move_line = candidates[0] |
865 | + invoice = move_line.invoice |
866 | + expected = round(_sign(invoice) * invoice.residual, digits) |
867 | + partial = True |
868 | + |
869 | + trans2 = None |
870 | + if move_line and partial: |
871 | + found = round(trans.transferred_amount, digits) |
872 | + if abs(expected) == abs(found): |
873 | + partial = False |
874 | + # Last partial payment will not flag invoice paid without |
875 | + # manual assistence |
876 | + # Stefan: disabled this here for the interactive method |
877 | + # Handled this with proper handling of partial reconciliation |
878 | + # and the workflow service |
879 | + # invoice_obj = self.pool.get('account.invoice') |
880 | + # invoice_obj.write(cr, uid, [invoice.id], { |
881 | + # 'state': 'paid' |
882 | + # }) |
883 | + elif abs(expected) > abs(found): |
884 | + # Partial payment, reuse invoice |
885 | + _cache(move_line, expected - found) |
886 | + elif abs(expected) < abs(found) and allow_splitting: |
887 | + # Possible combined payments, need to split transaction to |
888 | + # verify |
889 | + _cache(move_line) |
890 | + trans2 = self.copy( |
891 | + cr, uid, trans.id, |
892 | + dict( |
893 | + transferred_amount = trans.transferred_amount - expected, |
894 | + transaction = trans.transaction + 'b', |
895 | + parent_id = trans.id, |
896 | + ), context=context) |
897 | + # update the current record |
898 | + self.write(cr, uid, trans.id, dict( |
899 | + transferred_amount = expected, |
900 | + transaction = trans.transaction + 'a', |
901 | + ), context) |
902 | + # rebrowse the current record after writing |
903 | + trans = self.browse(cr, uid, trans.id, context=context) |
904 | + if move_line: |
905 | + account_ids = [ |
906 | + x.id for x in bank_account_ids |
907 | + if x.partner_id.id == move_line.partner_id.id |
908 | + ] |
909 | + |
910 | + return (trans, self._get_move_info( |
911 | + cr, uid, [move_line.id], |
912 | + account_ids and account_ids[0] or False), |
913 | + trans2) |
914 | + |
915 | + return trans, False, False |
916 | + |
917 | + def _do_move_reconcile( |
918 | + self, cr, uid, move_line_ids, currency, amount, context=None): |
919 | + """ |
920 | + Prepare a reconciliation for a bank transaction of the given |
921 | + amount. The caller MUST add the move line associated with the |
922 | + bank transaction to the returned reconciliation resource. |
923 | + |
924 | + If adding the amount does not make the total add up, |
925 | + prepare a partial reconciliation. An existing reconciliation on |
926 | + the move lines will be taken into account. |
927 | + |
928 | + :param move_line_ids: List of ids. This will usually be the move |
929 | + line of an associated invoice or payment, plus optionally the |
930 | + move line of a writeoff. |
931 | + :param currency: A res.currency *browse* object to perform math |
932 | + operations on the amounts. |
933 | + :param amount: the amount of the bank transaction. Amount < 0 in |
934 | + case of a credit move on the bank account. |
935 | + """ |
936 | + move_line_obj = self.pool.get('account.move.line') |
937 | + reconcile_obj = self.pool.get('account.move.reconcile') |
938 | + is_zero = lambda amount: self.pool.get('res.currency').is_zero( |
939 | + cr, uid, currency, amount) |
940 | + move_lines = move_line_obj.browse(cr, uid, move_line_ids, context=context) |
941 | + reconcile = False |
942 | + for move_line in move_lines: |
943 | + if move_line.reconcile_id: |
944 | + raise osv.except_osv( |
945 | + _('Entry is already reconciled'), |
946 | + _("You cannot reconcile the bank transaction with this entry, " + |
947 | + "it is already reconciled") |
948 | + ) |
949 | + if move_line.reconcile_partial_id: |
950 | + if reconcile and reconcile.id != move_line.reconcile_partial_id.id: |
951 | + raise osv.except_osv( |
952 | + _('Cannot reconcile'), |
953 | + _('Move lines are already partially reconciled, ' + |
954 | + 'but not with each other.')) |
955 | + reconcile = move_line.reconcile_partial_id |
956 | + line_ids = list(set(move_line_ids + ( |
957 | + [x.id for x in reconcile and ( # reconcile.line_id or |
958 | + reconcile.line_partial_ids) or []]))) |
959 | + if not reconcile: |
960 | + reconcile_id = reconcile_obj.create( |
961 | + cr, uid, {'type': 'auto' }, context=context) |
962 | + reconcile = reconcile_obj.browse(cr, uid, reconcile_id, context=context) |
963 | + full = is_zero( |
964 | + move_line_obj.get_balance(cr, uid, line_ids) - amount) |
965 | + # we should not have to check whether there is a surplus writeoff |
966 | + # as any surplus amount *should* have been split off in the matching routine |
967 | + if full: |
968 | + line_partial_ids = [] |
969 | + else: |
970 | + line_partial_ids = line_ids[:] |
971 | + line_ids = [] |
972 | + reconcile_obj.write( |
973 | + cr, uid, reconcile.id, |
974 | + { 'line_id': [(6, 0, line_ids)], |
975 | + 'line_partial_ids': [(6, 0, line_partial_ids)], |
976 | + }, context=context) |
977 | + return reconcile.id |
978 | + |
979 | + def _do_move_unreconcile(self, cr, uid, move_line_ids, currency, context=None): |
980 | + """ |
981 | + Undo a reconciliation, removing the given move line ids. If no |
982 | + meaningful (partial) reconciliation remains, delete it. |
983 | + |
984 | + :param move_line_ids: List of ids. This will usually be the move |
985 | + line of an associated invoice or payment, plus optionally the |
986 | + move line of a writeoff. |
987 | + :param currency: A res.currency *browse* object to perform math |
988 | + operations on the amounts. |
989 | + """ |
990 | + |
991 | + move_line_obj = self.pool.get('account.move.line') |
992 | + reconcile_obj = self.pool.get('account.move.reconcile') |
993 | + is_zero = lambda amount: self.pool.get('res.currency').is_zero( |
994 | + cr, uid, currency, amount) |
995 | + move_lines = move_line_obj.browse(cr, uid, move_line_ids, context=context) |
996 | + reconcile = move_lines[0].reconcile_id or move_lines[0].reconcile_partial_id |
997 | + line_ids = [x.id for x in reconcile.line_id or reconcile.line_partial_ids] |
998 | + for move_line_id in move_line_ids: |
999 | + line_ids.remove(move_line_id) |
1000 | + if len(line_ids) > 1: |
1001 | + full = is_zero(move_line_obj.get_balance(cr, uid, line_ids)) |
1002 | + if full: |
1003 | + line_partial_ids = [] |
1004 | + else: |
1005 | + line_partial_ids = list(line_ids) |
1006 | + line_ids = [] |
1007 | + reconcile_obj.write( |
1008 | + cr, uid, reconcile.id, |
1009 | + { 'line_partial_ids': [(6, 0, line_partial_ids)], |
1010 | + 'line_id': [(6, 0, line_ids)], |
1011 | + }, context=context) |
1012 | + else: |
1013 | + reconcile_obj.unlink(cr, uid, reconcile.id, context=context) |
1014 | + for move_line in move_lines: |
1015 | + if move_line.invoice: |
1016 | + # reopening the invoice |
1017 | + netsvc.LocalService('workflow').trg_validate( |
1018 | + uid, 'account.invoice', move_line.invoice.id, 'undo_paid', cr) |
1019 | + return True |
1020 | + |
1021 | + def _reconcile_move( |
1022 | + self, cr, uid, transaction_id, context=None): |
1023 | + transaction = self.browse(cr, uid, transaction_id, context=context) |
1024 | + if not transaction.move_line_id: |
1025 | + if transaction.match_type == 'invoice': |
1026 | + raise osv.except_osv( |
1027 | + _("Cannot link transaction %s with invoice") % |
1028 | + transaction.statement_line_id.name, |
1029 | + (transaction.invoice_ids and |
1030 | + (_("Please select one of the matches in transaction %s.%s") or |
1031 | + _("No match found for transaction %s.%s")) % ( |
1032 | + transaction.statement_line_id.statement_id.name, |
1033 | + transaction.statement_line_id.name |
1034 | + ))) |
1035 | + else: |
1036 | + raise osv.except_osv( |
1037 | + _("Cannot link transaction %s with accounting entry") % |
1038 | + transaction.statement_line_id.name, |
1039 | + (transaction.move_line_ids and |
1040 | + (_("Please select one of the matches in transaction %s.%s") or |
1041 | + _("No match found for transaction %s.%s")) % ( |
1042 | + transaction.statement_line_id.statement_id.name, |
1043 | + transaction.statement_line_id.name |
1044 | + ))) |
1045 | + currency = transaction.statement_line_id.statement_id.currency |
1046 | + line_ids = [transaction.move_line_id.id] |
1047 | + if transaction.writeoff_move_line_id: |
1048 | + line_ids.append(transaction.writeoff_move_line_id.id) |
1049 | + reconcile_id = self._do_move_reconcile( |
1050 | + cr, uid, line_ids, currency, |
1051 | + transaction.transferred_amount, context=context) |
1052 | + return reconcile_id |
1053 | + |
1054 | + def _reconcile_storno( |
1055 | + self, cr, uid, transaction_id, context=None): |
1056 | + """ |
1057 | + Creation of the reconciliation has been delegated to |
1058 | + *a* direct debit module, to allow for various direct debit styles |
1059 | + """ |
1060 | + payment_line_obj = self.pool.get('payment.line') |
1061 | + transaction = self.browse(cr, uid, transaction_id, context=context) |
1062 | + if not transaction.payment_line_id: |
1063 | + raise osv.except_osv( |
1064 | + _("Cannot link with storno"), |
1065 | + _("No direct debit order item")) |
1066 | + return payment_line_obj.debit_storno( |
1067 | + cr, uid, |
1068 | + transaction.payment_line_id.id, |
1069 | + transaction.statement_line_id.amount, |
1070 | + transaction.statement_line_id.currency, |
1071 | + transaction.storno_retry, |
1072 | + context=context) |
1073 | + |
1074 | + def _reconcile_payment_order( |
1075 | + self, cr, uid, transaction_id, context=None): |
1076 | + """ |
1077 | + Creation of the reconciliation has been delegated to |
1078 | + *a* direct debit module, to allow for various direct debit styles |
1079 | + """ |
1080 | + payment_order_obj = self.pool.get('payment.order') |
1081 | + transaction = self.browse(cr, uid, transaction_id, context=context) |
1082 | + if not transaction.payment_order_id: |
1083 | + raise osv.except_osv( |
1084 | + _("Cannot reconcile"), |
1085 | + _("Cannot reconcile: no direct debit order")) |
1086 | + if transaction.payment_order_id.payment_order_type != 'debit': |
1087 | + raise osv.except_osv( |
1088 | + _("Cannot reconcile"), |
1089 | + _("Reconcile payment order not implemented")) |
1090 | + return payment_order_obj.debit_reconcile_transfer( |
1091 | + cr, uid, |
1092 | + transaction.payment_order_id.id, |
1093 | + transaction.statement_line_id.amount, |
1094 | + transaction.statement_line_id.currency, |
1095 | + context=context) |
1096 | + |
1097 | + def _reconcile_payment( |
1098 | + self, cr, uid, transaction_id, context=None): |
1099 | + """ |
1100 | + Do some housekeeping on the payment line |
1101 | + then pass on to _reconcile_move |
1102 | + """ |
1103 | + transaction = self.browse(cr, uid, transaction_id, context=context) |
1104 | + payment_line_obj = self.pool.get('payment.line') |
1105 | + payment_line_obj.write( |
1106 | + cr, uid, transaction.payment_line_id.id, { |
1107 | + 'export_state': 'done', |
1108 | + 'date_done': transaction.effective_date, |
1109 | + } |
1110 | + ) |
1111 | + return self._reconcile_move(cr, uid, transaction_id, context=context) |
1112 | + |
1113 | + def _cancel_payment( |
1114 | + self, cr, uid, transaction_id, context=None): |
1115 | + raise osv.except_osv( |
1116 | + _("Cannot unreconcile"), |
1117 | + _("Cannot unreconcile: this operation is not yet supported for " |
1118 | + "match type 'payment'")) |
1119 | + |
1120 | + def _cancel_payment_order( |
1121 | + self, cr, uid, transaction_id, context=None): |
1122 | + """ |
1123 | + """ |
1124 | + payment_order_obj = self.pool.get('payment.order') |
1125 | + transaction = self.browse(cr, uid, transaction_id, context=context) |
1126 | + if not transaction.payment_order_id: |
1127 | + raise osv.except_osv( |
1128 | + _("Cannot unreconcile"), |
1129 | + _("Cannot unreconcile: no direct debit order")) |
1130 | + if transaction.payment_order_id.payment_order_type != 'debit': |
1131 | + raise osv.except_osv( |
1132 | + _("Cannot unreconcile"), |
1133 | + _("Unreconcile payment order not implemented")) |
1134 | + return payment_order_obj.debit_unreconcile_transfer( |
1135 | + cr, uid, transaction.payment_order_id.id, |
1136 | + transaction.statement_line_id.reconcile_id.id, |
1137 | + transaction.statement_line_id.amount, |
1138 | + transaction.statement_line_id.currency) |
1139 | + |
1140 | + def _cancel_move( |
1141 | + self, cr, uid, transaction_id, context=None): |
1142 | + """ |
1143 | + Undo the reconciliation of a transaction with a move line |
1144 | + in the system: Retrieve the move line from the bank statement line's |
1145 | + move that is reconciled with the matching move line recorded |
1146 | + on the transaction. Do not actually remove the latter from the |
1147 | + reconciliation, as it may be further reconciled. |
1148 | + Unreconcile the bank statement move line and the optional |
1149 | + write-off move line |
1150 | + """ |
1151 | + statement_line_obj = self.pool.get('account.bank.statement.line') |
1152 | + transaction = self.browse(cr, uid, transaction_id, context=context) |
1153 | + currency = transaction.statement_line_id.statement_id.currency |
1154 | + reconcile_id = ( |
1155 | + transaction.move_line_id.reconcile_id and |
1156 | + transaction.move_line_id.reconcile_id.id or |
1157 | + transaction.move_line_id.reconcile_partial_id and |
1158 | + transaction.move_line_id.reconcile_partial_id.id |
1159 | + ) |
1160 | + for line in transaction.statement_line_id.move_id.line_id: |
1161 | + line_reconcile = line.reconcile_id or line.reconcile_partial_id |
1162 | + if line_reconcile and line_reconcile.id == reconcile_id: |
1163 | + st_line_line = line |
1164 | + break |
1165 | + line_ids = [st_line_line.id] |
1166 | + # Add the write off line |
1167 | + if transaction.writeoff_move_line_id: |
1168 | + line_ids.append(transaction.writeoff_move_line_id.id) |
1169 | + self._do_move_unreconcile( |
1170 | + cr, uid, line_ids, currency, context=context) |
1171 | + statement_line_obj.write( |
1172 | + cr, uid, transaction.statement_line_id.id, |
1173 | + {'reconcile_id': False}, context=context) |
1174 | + return True |
1175 | + |
1176 | + def _cancel_storno( |
1177 | + self, cr, uid, transaction_id, context=None): |
1178 | + """ |
1179 | + TODO: delegate unreconciliation to the direct debit module, |
1180 | + to allow for various direct debit styles |
1181 | + """ |
1182 | + payment_line_obj = self.pool.get('payment.line') |
1183 | + reconcile_obj = self.pool.get('account.move.reconcile') |
1184 | + transaction = self.browse(cr, uid, transaction_id, context=context) |
1185 | + |
1186 | + if not transaction.payment_line_id: |
1187 | + raise osv.except_osv( |
1188 | + _("Cannot cancel link with storno"), |
1189 | + _("No direct debit order item")) |
1190 | + if not transaction.payment_line_id.storno: |
1191 | + raise osv.except_osv( |
1192 | + _("Cannot cancel link with storno"), |
1193 | + _("The direct debit order item is not marked for storno")) |
1194 | + |
1195 | + journal = transaction.statement_line_id.statement_id.journal_id |
1196 | + if transaction.statement_line_id.amount >= 0: |
1197 | + account_id = journal.default_credit_account_id.id |
1198 | + else: |
1199 | + account_id = journal.default_debit_account_id.id |
1200 | + cancel_line = False |
1201 | + for line in transaction.statement_line_id.move_id.line_id: |
1202 | + if line.account_id.id != account_id: |
1203 | + cancel_line = line |
1204 | + break |
1205 | + if not cancel_line: # debug |
1206 | + raise osv.except_osv( |
1207 | + _("Cannot cancel link with storno"), |
1208 | + _("Line id not found")) |
1209 | + reconcile = cancel_line.reconcile_id or cancel_line.reconcile_partial_id |
1210 | + lines_reconcile = reconcile.line_id or reconcile.line_partial_ids |
1211 | + if len(lines_reconcile) < 3: |
1212 | + # delete the full reconciliation |
1213 | + reconcile_obj.unlink(cr, uid, reconcile.id, context) |
1214 | + else: |
1215 | + # we are left with a partial reconciliation |
1216 | + reconcile_obj.write( |
1217 | + cr, uid, reconcile.id, |
1218 | + {'line_partial_ids': |
1219 | + [(6, 0, [x.id for x in lines_reconcile if x.id != cancel_line.id])], |
1220 | + 'line_id': [(6, 0, [])], |
1221 | + }, context) |
1222 | + # redo the original payment line reconciliation with the invoice |
1223 | + payment_line_obj.write( |
1224 | + cr, uid, transaction.payment_line_id.id, |
1225 | + {'storno': False}, context) |
1226 | + payment_line_obj.debit_reconcile( |
1227 | + cr, uid, transaction.payment_line_id.id, context) |
1228 | + |
1229 | + cancel_map = { |
1230 | + 'storno': _cancel_storno, |
1231 | + 'invoice': _cancel_move, |
1232 | + 'manual': _cancel_move, |
1233 | + 'move': _cancel_move, |
1234 | + 'payment_order': _cancel_payment_order, |
1235 | + 'payment': _cancel_payment, |
1236 | + } |
1237 | + def cancel(self, cr, uid, ids, context=None): |
1238 | + if ids and isinstance(ids, (int, float)): |
1239 | + ids = [ids] |
1240 | + move_obj = self.pool.get('account.move') |
1241 | + for transaction in self.browse(cr, uid, ids, context): |
1242 | + if not transaction.match_type: |
1243 | + continue |
1244 | + if transaction.match_type not in self.cancel_map: |
1245 | + raise osv.except_osv( |
1246 | + _("Cannot cancel type %s" % transaction.match_type), |
1247 | + _("No method found to cancel this type")) |
1248 | + self.cancel_map[transaction.match_type]( |
1249 | + self, cr, uid, transaction.id, context) |
1250 | + # clear up the writeoff move |
1251 | + if transaction.writeoff_move_line_id: |
1252 | + move_obj.button_cancel( |
1253 | + cr, uid, [transaction.writeoff_move_line_id.move_id.id], |
1254 | + context=context) |
1255 | + move_obj.unlink( |
1256 | + cr, uid, [transaction.writeoff_move_line_id.move_id.id], |
1257 | + context=context) |
1258 | + return True |
1259 | + |
1260 | + reconcile_map = { |
1261 | + 'storno': _reconcile_storno, |
1262 | + 'invoice': _reconcile_move, |
1263 | + 'manual': _reconcile_move, |
1264 | + 'payment_order': _reconcile_payment_order, |
1265 | + 'payment': _reconcile_payment, |
1266 | + 'move': _reconcile_move, |
1267 | + } |
1268 | + def reconcile(self, cr, uid, ids, context=None): |
1269 | + if ids and isinstance(ids, (int, float)): |
1270 | + ids = [ids] |
1271 | + for transaction in self.browse(cr, uid, ids, context): |
1272 | + if not transaction.match_type: |
1273 | + continue |
1274 | + if transaction.match_type not in self.reconcile_map: |
1275 | + raise osv.except_osv( |
1276 | + _("Cannot reconcile"), |
1277 | + _("Cannot reconcile type %s. No method found to " + |
1278 | + "reconcile this type") % |
1279 | + transaction.match_type |
1280 | + ) |
1281 | + if (transaction.residual and transaction.writeoff_account_id): |
1282 | + if transaction.match_type not in ('invoice', 'move', 'manual'): |
1283 | + raise osv.except_osv( |
1284 | + _("Cannot reconcile"), |
1285 | + _("Bank transaction %s: write off not implemented for " + |
1286 | + "this match type.") % |
1287 | + transaction.statement_line_id.name |
1288 | + ) |
1289 | + self._generate_writeoff_move( |
1290 | + cr, uid, transaction.id, context=context) |
1291 | + # run the method that is appropriate for this match type |
1292 | + reconcile_id = self.reconcile_map[transaction.match_type]( |
1293 | + self, cr, uid, transaction.id, context) |
1294 | + self.pool.get('account.bank.statement.line').write( |
1295 | + cr, uid, transaction.statement_line_id.id, |
1296 | + {'reconcile_id': reconcile_id}, context=context) |
1297 | + |
1298 | + # TODO |
1299 | + # update the statement line bank account reference |
1300 | + # as follows (from _match_invoice) |
1301 | + |
1302 | + """ |
1303 | + account_ids = [ |
1304 | + x.id for x in bank_account_ids |
1305 | + if x.partner_id.id == move_line.partner_id.id |
1306 | + ][0] |
1307 | + """ |
1308 | + return True |
1309 | + |
1310 | + |
1311 | + def _generate_writeoff_move(self, cr, uid, ids, context): |
1312 | + if ids and isinstance(ids, (int, float)): |
1313 | + ids = [ids] |
1314 | + move_line_obj = self.pool.get('account.move.line') |
1315 | + move_obj = self.pool.get('account.move') |
1316 | + for trans in self.browse(cr, uid, ids, context=context): |
1317 | + periods = self.pool.get('account.period').find( |
1318 | + cr, uid, trans.statement_line_id.date) |
1319 | + period_id = periods and periods[0] or False |
1320 | + move_id = move_obj.create(cr, uid, { |
1321 | + 'journal_id': trans.writeoff_journal_id.id, |
1322 | + 'period_id': period_id, |
1323 | + 'date': trans.statement_line_id.date, |
1324 | + 'name': '(write-off) %s' % ( |
1325 | + trans.move_line_id.move_id.name or '') |
1326 | + }, context=context) |
1327 | + if trans.residual > 0: |
1328 | + writeoff_debit = trans.residual |
1329 | + writeoff_credit = False |
1330 | + else: |
1331 | + writeoff_debit = False |
1332 | + writeoff_credit = - trans.residual |
1333 | + vals = { |
1334 | + 'name': trans.statement_line_id.name, |
1335 | + 'date': trans.statement_line_id.date, |
1336 | + 'ref': trans.statement_line_id.ref, |
1337 | + 'move_id': move_id, |
1338 | + 'partner_id': (trans.statement_line_id.partner_id and |
1339 | + trans.statement_line_id.partner_id.id or False), |
1340 | + 'account_id': trans.statement_line_id.account_id.id, |
1341 | + 'credit': writeoff_debit, |
1342 | + 'debit': writeoff_credit, |
1343 | + 'journal_id': trans.writeoff_journal_id.id, |
1344 | + 'period_id': period_id, |
1345 | + 'currency_id': trans.statement_line_id.statement_id.currency.id, |
1346 | + } |
1347 | + move_line_id = move_line_obj.create( |
1348 | + cr, uid, vals, context=context) |
1349 | + self.write( |
1350 | + cr, uid, trans.id, |
1351 | + {'writeoff_move_line_id': move_line_id}, context=context) |
1352 | + vals.update({ |
1353 | + 'account_id': trans.writeoff_account_id.id, |
1354 | + 'credit': writeoff_credit, |
1355 | + 'debit': writeoff_debit, |
1356 | + }) |
1357 | + move_line_obj.create( |
1358 | + cr, uid, vals, context=context) |
1359 | + move_obj.post( |
1360 | + cr, uid, [move_id], context=context) |
1361 | + |
1362 | + def _match_storno( |
1363 | + self, cr, uid, trans, log, context=None): |
1364 | + payment_line_obj = self.pool.get('payment.line') |
1365 | + line_ids = payment_line_obj.search( |
1366 | + cr, uid, [ |
1367 | + ('order_id.payment_order_type', '=', 'debit'), |
1368 | + ('order_id.state', 'in', ['sent', 'done']), |
1369 | + ('communication', '=', trans.reference) |
1370 | + ], context=context) |
1371 | + # stornos MUST have an exact match |
1372 | + if len(line_ids) == 1: |
1373 | + account_id = payment_line_obj.get_storno_account_id( |
1374 | + cr, uid, line_ids[0], trans.transferred_amount, |
1375 | + trans.statement_id.currency, context=None) |
1376 | + if account_id: |
1377 | + return dict( |
1378 | + account_id = account_id, |
1379 | + match_type = 'storno', |
1380 | + payment_line_id = line_ids[0], |
1381 | + move_line_ids=False, |
1382 | + partner_id=False, |
1383 | + partner_bank_id=False, |
1384 | + reference=False, |
1385 | + type='customer', |
1386 | + ) |
1387 | + # TODO log the reason why there is no result for transfers marked |
1388 | + # as storno |
1389 | + return False |
1390 | + |
1391 | + def _match_payment(self, cr, uid, trans, payment_lines, |
1392 | + partner_ids, bank_account_ids, log, linked_payments): |
1393 | + ''' |
1394 | + Find the payment order belonging to this reference - if there is one |
1395 | + This is the easiest part: when sending payments, the returned bank info |
1396 | + should be identical to ours. |
1397 | + This also means that we do not allow for multiple candidates. |
1398 | + ''' |
1399 | + # TODO: Not sure what side effects are created when payments are done |
1400 | + # for credited customer invoices, which will be matched later on too. |
1401 | + digits = dp.get_precision('Account')(cr)[1] |
1402 | + candidates = [x for x in payment_lines |
1403 | + if x.communication == trans.reference |
1404 | + and round(x.amount, digits) == -round(trans.transferred_amount, digits) |
1405 | + and trans.remote_account in (x.bank_id.acc_number, |
1406 | + x.bank_id.iban) |
1407 | + ] |
1408 | + if len(candidates) == 1: |
1409 | + candidate = candidates[0] |
1410 | + # Check cache to prevent multiple matching of a single payment |
1411 | + if candidate.id not in linked_payments: |
1412 | + linked_payments[candidate.id] = True |
1413 | + move_info = self._get_move_info(cr, uid, [candidate.move_line_id.id]) |
1414 | + move_info.update({ |
1415 | + 'match_type': 'payment', |
1416 | + 'payment_line_id': candidate.id, |
1417 | + }) |
1418 | + return move_info |
1419 | + |
1420 | + return False |
1421 | + |
1422 | + signal_duplicate_keys = [ |
1423 | + # does not include float values |
1424 | + # such as transferred_amount |
1425 | + 'execution_date', 'local_account', 'remote_account', |
1426 | + 'remote_owner', 'reference', 'message', |
1427 | + ] |
1428 | + |
1429 | + def create(self, cr, uid, vals, context=None): |
1430 | + res = super(banking_import_transaction, self).create( |
1431 | + cr, uid, vals, context) |
1432 | + if res: |
1433 | + me = self.browse(cr, uid, res, context) |
1434 | + search_vals = [(key, '=', me[key]) |
1435 | + for key in self.signal_duplicate_keys] |
1436 | + ids = self.search(cr, uid, search_vals, context=context) |
1437 | + dupes = [] |
1438 | + # Test for transferred_amount seperately |
1439 | + # due to float representation and rounding difficulties |
1440 | + for trans in self.browse(cr, uid, ids, context=context): |
1441 | + if self.pool.get('res.currency').is_zero( |
1442 | + cr, uid, |
1443 | + trans.statement_id.currency, |
1444 | + me['transferred_amount'] - trans.transferred_amount): |
1445 | + dupes.append(trans.id) |
1446 | + if len(dupes) < 1: |
1447 | + raise osv.except_osv(_('Cannot check for duplicate'), |
1448 | + _("Cannot check for duplicate. " |
1449 | + "I can't find myself.")) |
1450 | + if len(dupes) > 1: |
1451 | + self.write( |
1452 | + cr, uid, res, {'duplicate': True}, context=context) |
1453 | + return res |
1454 | + |
1455 | + def split_off(self, cr, uid, res_id, amount, context=None): |
1456 | + # todo. Inherit the duplicate marker from res_id |
1457 | + pass |
1458 | + |
1459 | + def combine(self, cr, uid, ids, context=None): |
1460 | + # todo. Check equivalence of primary key |
1461 | + pass |
1462 | + |
1463 | + def _get_move_info(self, cr, uid, move_line_ids, partner_bank_id=False, |
1464 | + partial=False, match_type = False): |
1465 | + type_map = { |
1466 | + 'out_invoice': 'customer', |
1467 | + 'in_invoice': 'supplier', |
1468 | + 'out_refund': 'customer', |
1469 | + 'in_refund': 'supplier', |
1470 | + } |
1471 | + retval = {'partner_id': False, |
1472 | + 'partner_bank_id': partner_bank_id, |
1473 | + 'reference': False, |
1474 | + 'type': 'general', |
1475 | + 'move_line_ids': move_line_ids, |
1476 | + 'match_type': match_type, |
1477 | + 'account_id': False, |
1478 | + } |
1479 | + move_lines = self.pool.get('account.move.line').browse(cr, uid, move_line_ids) |
1480 | + for move_line in move_lines: |
1481 | + if move_line.partner_id: |
1482 | + if retval['partner_id']: |
1483 | + if retval['partner_id'] != move_line.partner_id.id: |
1484 | + retval['partner_id'] = False |
1485 | + break |
1486 | + else: |
1487 | + retval['partner_id'] = move_line.partner_id.id |
1488 | + else: |
1489 | + if retval['partner_id']: |
1490 | + retval['partner_id'] = False |
1491 | + break |
1492 | + for move_line in move_lines: |
1493 | + if move_line.account_id: |
1494 | + if retval['account_id']: |
1495 | + if retval['account_id'] != move_line.account_id.id: |
1496 | + retval['account_id'] = False |
1497 | + break |
1498 | + else: |
1499 | + retval['account_id'] = move_line.account_id.id |
1500 | + else: |
1501 | + if retval['account_id']: |
1502 | + retval['account_id'] = False |
1503 | + break |
1504 | + for move_line in move_lines: |
1505 | + if move_line.invoice: |
1506 | + if retval['match_type']: |
1507 | + if retval['match_type'] != 'invoice': |
1508 | + retval['match_type'] = False |
1509 | + break |
1510 | + else: |
1511 | + retval['match_type'] = 'invoice' |
1512 | + else: |
1513 | + if retval['match_type']: |
1514 | + retval['match_type'] = False |
1515 | + break |
1516 | + if move_lines and not retval['match_type']: |
1517 | + retval['match_type'] = 'move' |
1518 | + if move_lines and len(move_lines) == 1: |
1519 | + retval['reference'] = move_lines[0].ref |
1520 | + if retval['match_type'] == 'invoice': |
1521 | + retval['invoice_ids'] = [x.invoice.id for x in move_lines] |
1522 | + retval['type'] = type_map[move_lines[0].invoice.type] |
1523 | + return retval |
1524 | + |
1525 | + def match(self, cr, uid, ids, results=None, context=None): |
1526 | + if not ids: |
1527 | + return True |
1528 | + |
1529 | + company_obj = self.pool.get('res.company') |
1530 | + partner_bank_obj = self.pool.get('res.partner.bank') |
1531 | + journal_obj = self.pool.get('account.journal') |
1532 | + move_line_obj = self.pool.get('account.move.line') |
1533 | + payment_line_obj = self.pool.get('payment.line') |
1534 | + statement_line_obj = self.pool.get('account.bank.statement.line') |
1535 | + statement_obj = self.pool.get('account.bank.statement') |
1536 | + payment_order_obj = self.pool.get('payment.order') |
1537 | + imported_statement_ids = [] |
1538 | + |
1539 | + # Results |
1540 | + if results is None: |
1541 | + results = dict( |
1542 | + trans_loaded_cnt = 0, |
1543 | + trans_skipped_cnt = 0, |
1544 | + trans_matched_cnt = 0, |
1545 | + bank_costs_invoice_cnt = 0, |
1546 | + error_cnt = 0, |
1547 | + log = [], |
1548 | + ) |
1549 | + |
1550 | + # Caching |
1551 | + error_accounts = {} |
1552 | + info = {} |
1553 | + linked_payments = {} |
1554 | + # TODO: harvest linked invoices from draft statement lines? |
1555 | + linked_invoices = {} |
1556 | + payment_lines = [] |
1557 | + |
1558 | + # Get all unreconciled sent payment lines in one big swoop. |
1559 | + # No filtering can be done, as empty dates carry value for C2B |
1560 | + # communication. Most likely there are much less sent payments |
1561 | + # than reconciled and open/draft payments. |
1562 | + # Strangely, payment_orders still do not have company_id |
1563 | + cr.execute("SELECT l.id FROM payment_order o, payment_line l " |
1564 | + "WHERE l.order_id = o.id AND " |
1565 | + "o.state = 'sent' AND " |
1566 | + "l.date_done IS NULL" |
1567 | + ) |
1568 | + payment_line_ids = [x[0] for x in cr.fetchall()] |
1569 | + if payment_line_ids: |
1570 | + payment_lines = payment_line_obj.browse(cr, uid, payment_line_ids) |
1571 | + |
1572 | + # Start the loop over the transactions requested to match |
1573 | + transactions = self.browse(cr, uid, ids, context) |
1574 | + # TODO: do we do injected transactions here? |
1575 | + injected = [] |
1576 | + i = 0 |
1577 | + max_trans = len(transactions) |
1578 | + while i < max_trans: |
1579 | + move_info = False |
1580 | + if injected: |
1581 | + # Force FIFO behavior |
1582 | + transaction = injected.pop(0) |
1583 | + else: |
1584 | + transaction = transactions[i] |
1585 | + |
1586 | + if (transaction.statement_line_id and |
1587 | + transaction.statement_line_id.state == 'confirmed'): |
1588 | + raise osv.except_osv( |
1589 | + _("Cannot perform match"), |
1590 | + _("Cannot perform match on a confirmed transction")) |
1591 | + |
1592 | + if transaction.local_account in error_accounts: |
1593 | + results['trans_skipped_cnt'] += 1 |
1594 | + if not injected: |
1595 | + i += 1 |
1596 | + continue |
1597 | + |
1598 | + # TODO: optimize by ordering transactions per company, |
1599 | + # and perform the stanza below only once per company. |
1600 | + # In that case, take newest transaction date into account |
1601 | + # when retrieving move_line_ids below. |
1602 | + company = company_obj.browse( |
1603 | + cr, uid, transaction.company_id.id, context) |
1604 | + # Get default defaults |
1605 | + def_pay_account_id = company.partner_id.property_account_payable.id |
1606 | + def_rec_account_id = company.partner_id.property_account_receivable.id |
1607 | + |
1608 | + # Get interesting journals once |
1609 | + # Added type 'general' to capture fund transfers |
1610 | + journal_ids = journal_obj.search(cr, uid, [ |
1611 | + ('type', 'in', ('general', 'sale','purchase', |
1612 | + 'purchase_refund','sale_refund')), |
1613 | + ('company_id', '=', company.id), |
1614 | + ]) |
1615 | + # Get all unreconciled moves |
1616 | + move_line_ids = move_line_obj.search(cr, uid, [ |
1617 | + ('reconcile_id', '=', False), |
1618 | + ('journal_id', 'in', journal_ids), |
1619 | + ('account_id.reconcile', '=', True), |
1620 | + ('date', '<=', transaction.execution_date), |
1621 | + ]) |
1622 | + if move_line_ids: |
1623 | + move_lines = move_line_obj.browse(cr, uid, move_line_ids) |
1624 | + else: |
1625 | + move_lines = [] |
1626 | + |
1627 | + # Create fallback currency code |
1628 | + currency_code = transaction.local_currency or company.currency_id.name |
1629 | + |
1630 | + # Check cache for account info/currency |
1631 | + if transaction.local_account in info and \ |
1632 | + currency_code in info[transaction.local_account]: |
1633 | + account_info = info[transaction.local_account][currency_code] |
1634 | + else: |
1635 | + # Pull account info/currency |
1636 | + account_info = get_company_bank_account( |
1637 | + self.pool, cr, uid, transaction.local_account, |
1638 | + transaction.local_currency, company, results['log'] |
1639 | + ) |
1640 | + if not account_info: |
1641 | + results['log'].append( |
1642 | + _('Transaction found for unknown account %(bank_account)s') % |
1643 | + {'bank_account': transaction.local_account} |
1644 | + ) |
1645 | + error_accounts[transaction.local_account] = True |
1646 | + results['error_cnt'] += 1 |
1647 | + if not injected: |
1648 | + i += 1 |
1649 | + continue |
1650 | + if 'journal_id' not in account_info: |
1651 | + results['log'].append( |
1652 | + _('Transaction found for account %(bank_account)s, ' |
1653 | + 'but no default journal was defined.' |
1654 | + ) % {'bank_account': transaction.local_account} |
1655 | + ) |
1656 | + error_accounts[transaction.local_account] = True |
1657 | + results['error_cnt'] += 1 |
1658 | + if not injected: |
1659 | + i += 1 |
1660 | + continue |
1661 | + |
1662 | + # Get required currency code |
1663 | + currency_code = account_info.currency_id.name |
1664 | + |
1665 | + # Cache results |
1666 | + if not transaction.local_account in info: |
1667 | + info[transaction.local_account] = { |
1668 | + currency_code: account_info |
1669 | + } |
1670 | + else: |
1671 | + info[transaction.local_account][currency_code] = account_info |
1672 | + |
1673 | + # Final check: no coercion of currencies! |
1674 | + if transaction.local_currency \ |
1675 | + and account_info.currency_id.name != transaction.local_currency: |
1676 | + # TODO: convert currencies? |
1677 | + results['log'].append( |
1678 | + _('transaction %(statement_id)s.%(transaction_id)s for account %(bank_account)s' |
1679 | + ' uses different currency than the defined bank journal.' |
1680 | + ) % { |
1681 | + 'bank_account': transactions.local_account, |
1682 | + 'transaction_id': transaction.statement, |
1683 | + 'statement_id': transaction.transaction, |
1684 | + } |
1685 | + ) |
1686 | + error_accounts[transaction.local_account] = True |
1687 | + results['error_cnt'] += 1 |
1688 | + if not injected: |
1689 | + i += 1 |
1690 | + continue |
1691 | + |
1692 | + # Link accounting period |
1693 | + period_id = get_period( |
1694 | + self.pool, cr, uid, |
1695 | + str2date(transaction.effective_date,'%Y-%m-%d'), company, |
1696 | + results['log']) |
1697 | + if not period_id: |
1698 | + results['trans_skipped_cnt'] += 1 |
1699 | + if not injected: |
1700 | + i += 1 |
1701 | + continue |
1702 | + |
1703 | + # When bank costs are part of transaction itself, split it. |
1704 | + if transaction.type != bt.BANK_COSTS and transaction.provision_costs: |
1705 | + # Create new transaction for bank costs |
1706 | + cost_id = self.copy( |
1707 | + cr, uid, transaction.id, |
1708 | + dict( |
1709 | + type = bt.BANK_COSTS, |
1710 | + transaction = '%s-prov' % transaction.transaction, |
1711 | + transferred_amount = transaction.provision_costs, |
1712 | + remote_currency = transaction.provision_costs_currency, |
1713 | + message = transaction.provision_costs_description, |
1714 | + parent_id = transaction.id, |
1715 | + ), context) |
1716 | + |
1717 | + injected.append(self.browse(cr, uid, cost_id, context)) |
1718 | + |
1719 | + # Remove bank costs from current transaction |
1720 | + # Note that this requires that the transferred_amount |
1721 | + # includes the bank costs and that the costs itself are |
1722 | + # signed correctly. |
1723 | + self.write( |
1724 | + cr, uid, transaction.id, |
1725 | + dict( |
1726 | + transferred_amount = |
1727 | + transaction.transferred_amount - transaction.provision_costs, |
1728 | + provision_costs = False, |
1729 | + provision_costs_currency = False, |
1730 | + provision_costs_description = False, |
1731 | + ), context=context) |
1732 | + # rebrowse the current record after writing |
1733 | + transaction=self.browse(cr, uid, transaction.id, context=context) |
1734 | + # Match full direct debit orders |
1735 | + if transaction.type == bt.DIRECT_DEBIT: |
1736 | + move_info = self._match_debit_order( |
1737 | + cr, uid, transaction, results['log'], context) |
1738 | + if transaction.type == bt.STORNO: |
1739 | + move_info = self._match_storno( |
1740 | + cr, uid, transaction, results['log'], context) |
1741 | + # Allow inclusion of generated bank invoices |
1742 | + if transaction.type == bt.BANK_COSTS: |
1743 | + lines = self._match_costs( |
1744 | + cr, uid, transaction, period_id, account_info, |
1745 | + results['log'] |
1746 | + ) |
1747 | + results['bank_costs_invoice_cnt'] += bool(lines) |
1748 | + for line in lines: |
1749 | + if not [x for x in move_lines if x.id == line.id]: |
1750 | + move_lines.append(line) |
1751 | + partner_ids = [account_info.bank_partner_id.id] |
1752 | + partner_banks = [] |
1753 | + else: |
1754 | + # Link remote partner, import account when needed |
1755 | + partner_banks = get_bank_accounts( |
1756 | + self.pool, cr, uid, transaction.remote_account, |
1757 | + results['log'], fail=True |
1758 | + ) |
1759 | + if partner_banks: |
1760 | + partner_ids = [x.partner_id.id for x in partner_banks] |
1761 | + elif transaction.remote_owner: |
1762 | + iban = sepa.IBAN(transaction.remote_account) |
1763 | + if iban.valid: |
1764 | + country_code = iban.countrycode |
1765 | + elif transaction.remote_owner_country_code: |
1766 | + country_code = transaction.remote_owner_country_code |
1767 | + # fallback on the import parsers country code |
1768 | + elif transaction.bank_country_code: |
1769 | + country_code = transaction.bank_country_code |
1770 | + elif company.partner_id and company.partner_id.country: |
1771 | + country_code = company.partner_id.country.code |
1772 | + else: |
1773 | + country_code = None |
1774 | + partner_id = get_or_create_partner( |
1775 | + self.pool, cr, uid, transaction.remote_owner, |
1776 | + transaction.remote_owner_address, |
1777 | + transaction.remote_owner_postalcode, |
1778 | + transaction.remote_owner_city, |
1779 | + country_code, results['log'] |
1780 | + ) |
1781 | + if transaction.remote_account: |
1782 | + partner_bank_id = create_bank_account( |
1783 | + self.pool, cr, uid, partner_id, |
1784 | + transaction.remote_account, |
1785 | + transaction.remote_owner, |
1786 | + transaction.remote_owner_address, |
1787 | + transaction.remote_owner_city, |
1788 | + country_code, results['log'] |
1789 | + ) |
1790 | + partner_banks = partner_bank_obj.browse( |
1791 | + cr, uid, [partner_bank_id] |
1792 | + ) |
1793 | + else: |
1794 | + partner_bank_id = None |
1795 | + partner_banks = [] |
1796 | + partner_ids = [partner_id] |
1797 | + else: |
1798 | + partner_ids = [] |
1799 | + partner_banks = [] |
1800 | + |
1801 | + # Credit means payment... isn't it? |
1802 | + if (not move_info |
1803 | + and transaction.transferred_amount < 0 and payment_lines): |
1804 | + # Link open payment - if any |
1805 | + move_info = self._match_payment( |
1806 | + cr, uid, transaction, |
1807 | + payment_lines, partner_ids, |
1808 | + partner_banks, results['log'], linked_payments, |
1809 | + ) |
1810 | + |
1811 | + # Second guess, invoice -> may split transaction, so beware |
1812 | + if not move_info: |
1813 | + # Link invoice - if any. Although bank costs are not an |
1814 | + # invoice, automatic invoicing on bank costs will create |
1815 | + # these, and invoice matching still has to be done. |
1816 | + |
1817 | + transaction, move_info, remainder = self._match_invoice( |
1818 | + cr, uid, transaction, move_lines, partner_ids, |
1819 | + partner_banks, results['log'], linked_invoices, |
1820 | + context=context) |
1821 | + if remainder: |
1822 | + injected.append(self.browse(cr, uid, remainder, context)) |
1823 | + |
1824 | + account_id = move_info and move_info.get('account_id', False) |
1825 | + if not account_id: |
1826 | + # Use the default settings, but allow individual partner |
1827 | + # settings to overrule this. Note that you need to change |
1828 | + # the internal type of these accounts to either 'payable' |
1829 | + # or 'receivable' to enable usage like this. |
1830 | + if transaction.transferred_amount < 0: |
1831 | + if len(partner_banks) == 1: |
1832 | + account_id = ( |
1833 | + partner_banks[0].partner_id.property_account_payable and |
1834 | + partner_banks[0].partner_id.property_account_payable.id) |
1835 | + if len(partner_banks) != 1 or not account_id or account_id == def_pay_account_id: |
1836 | + account_id = (account_info.default_credit_account_id and |
1837 | + account_info.default_credit_account_id.id) |
1838 | + else: |
1839 | + if len(partner_banks) == 1: |
1840 | + account_id = ( |
1841 | + partner_banks[0].partner_id.property_account_receivable and |
1842 | + partner_banks[0].partner_id.property_account_receivable.id) |
1843 | + if len(partner_banks) != 1 or not account_id or account_id == def_rec_account_id: |
1844 | + account_id = (account_info.default_debit_account_id and |
1845 | + account_info.default_debit_account_id.id) |
1846 | + values = {} |
1847 | + self_values = {} |
1848 | + if move_info: |
1849 | + results['trans_matched_cnt'] += 1 |
1850 | + self_values['match_type'] = move_info['match_type'] |
1851 | + self_values['payment_line_id'] = move_info.get('payment_line_id', False) |
1852 | + self_values['move_line_ids'] = [(6, 0, move_info.get('move_line_ids') or [])] |
1853 | + self_values['invoice_ids'] = [(6, 0, move_info.get('invoice_ids') or [])] |
1854 | + self_values['payment_order_ids'] = [(6, 0, move_info.get('payment_order_ids') or [])] |
1855 | + self_values['payment_order_id'] = (move_info.get('payment_order_ids', False) and |
1856 | + len(move_info['payment_order_ids']) == 1 and |
1857 | + move_info['payment_order_ids'][0] |
1858 | + ) |
1859 | + self_values['move_line_id'] = (move_info.get('move_line_ids', False) and |
1860 | + len(move_info['move_line_ids']) == 1 and |
1861 | + move_info['move_line_ids'][0] |
1862 | + ) |
1863 | + if move_info['match_type'] == 'invoice': |
1864 | + self_values['invoice_id'] = (move_info.get('invoice_ids', False) and |
1865 | + len(move_info['invoice_ids']) == 1 and |
1866 | + move_info['invoice_ids'][0] |
1867 | + ) |
1868 | + values['partner_id'] = move_info['partner_id'] |
1869 | + values['partner_bank_id'] = move_info['partner_bank_id'] |
1870 | + values['type'] = move_info['type'] |
1871 | + # values['match_type'] = move_info['match_type'] |
1872 | + else: |
1873 | + values['partner_id'] = values['partner_bank_id'] = False |
1874 | + if not values['partner_id'] and partner_ids and len(partner_ids) == 1: |
1875 | + values['partner_id'] = partner_ids[0] |
1876 | + if (not values['partner_bank_id'] and partner_banks and |
1877 | + len(partner_banks) == 1): |
1878 | + values['partner_bank_id'] = partner_banks[0].id |
1879 | + if not transaction.statement_line_id: |
1880 | + values.update(dict( |
1881 | + name = '%s.%s' % (transaction.statement, transaction.transaction), |
1882 | + date = transaction.effective_date, |
1883 | + amount = transaction.transferred_amount, |
1884 | + statement_id = transaction.statement_id.id, |
1885 | + note = transaction.message, |
1886 | + ref = transaction.reference, |
1887 | + period_id = period_id, |
1888 | + currency = account_info.currency_id.id, |
1889 | + account_id = account_id, |
1890 | + import_transaction_id = transaction.id, |
1891 | + )) |
1892 | + statement_line_id = statement_line_obj.create(cr, uid, values, context) |
1893 | + results['trans_loaded_cnt'] += 1 |
1894 | + self_values['statement_line_id'] = statement_line_id |
1895 | + if transaction.statement_id.id not in imported_statement_ids: |
1896 | + imported_statement_ids.append(transaction.statement_id.id) |
1897 | + else: |
1898 | + statement_line_obj.write( |
1899 | + cr, uid, transaction.statement_line_id.id, values, context) |
1900 | + self.write(cr, uid, transaction.id, self_values, context) |
1901 | + if not injected: |
1902 | + i += 1 |
1903 | + |
1904 | + #recompute statement end_balance for validation |
1905 | + if imported_statement_ids: |
1906 | + statement_obj.button_dummy( |
1907 | + cr, uid, imported_statement_ids, context=context) |
1908 | + |
1909 | + if payment_lines: |
1910 | + # As payments lines are treated as individual transactions, the |
1911 | + # batch as a whole is only marked as 'done' when all payment lines |
1912 | + # have been reconciled. |
1913 | + cr.execute( |
1914 | + "SELECT DISTINCT o.id " |
1915 | + "FROM payment_order o, payment_line l " |
1916 | + "WHERE o.state = 'sent' " |
1917 | + "AND o.id = l.order_id " |
1918 | + "AND o.id NOT IN (" |
1919 | + "SELECT DISTINCT order_id AS id " |
1920 | + "FROM payment_line " |
1921 | + "WHERE date_done IS NULL " |
1922 | + "AND id IN (%s)" |
1923 | + ")" % (','.join([str(x) for x in payment_line_ids])) |
1924 | + ) |
1925 | + order_ids = [x[0] for x in cr.fetchall()] |
1926 | + if order_ids: |
1927 | + # Use workflow logics for the orders. Recode logic from |
1928 | + # account_payment, in order to increase efficiency. |
1929 | + payment_order_obj.set_done(cr, uid, order_ids, |
1930 | + {'state': 'done'} |
1931 | + ) |
1932 | + wf_service = netsvc.LocalService('workflow') |
1933 | + for id in order_ids: |
1934 | + wf_service.trg_validate( |
1935 | + uid, 'payment.order', id, 'done', cr) |
1936 | + |
1937 | + def _get_residual(self, cr, uid, ids, name, args, context=None): |
1938 | + """ |
1939 | + Calculate the residual against the candidate reconciliation. |
1940 | + When |
1941 | + |
1942 | + 55 debiteuren, 50 binnen: amount > 0, residual > 0 |
1943 | + -55 crediteuren, -50 binnen: amount = -60 residual -55 - -50 |
1944 | + |
1945 | + - residual > 0 and transferred amount > 0, or |
1946 | + - residual < 0 and transferred amount < 0 |
1947 | + |
1948 | + the result is a partial reconciliation. In the other cases, |
1949 | + a new statement line can be split off. |
1950 | + |
1951 | + We should give users the option to reconcile with writeoff |
1952 | + or partial reconciliation / new statement line |
1953 | + """ |
1954 | + |
1955 | + if not ids: |
1956 | + return {} |
1957 | + res = dict([(x, False) for x in ids]) |
1958 | + move_line_obj = self.pool.get('account.move.line') |
1959 | + for transaction in self.browse(cr, uid, ids, context): |
1960 | + if (transaction.statement_line_id.state == 'draft' |
1961 | + and transaction.match_type in |
1962 | + [('invoice'), ('move'), ('manual')] |
1963 | + and transaction.move_line_id): |
1964 | + rec_moves = ( |
1965 | + transaction.move_line_id.reconcile_id and |
1966 | + transaction.move_line_id.reconcile_id.line_id or |
1967 | + transaction.move_line_id.reconcile_partial_id and |
1968 | + transaction.move_line_id.reconcile_partial_id.line_partial_ids or |
1969 | + [transaction.move_line_id]) |
1970 | + res[transaction.id] = ( |
1971 | + move_line_obj.get_balance(cr, uid, [x.id for x in rec_moves]) |
1972 | + - transaction.transferred_amount) |
1973 | + return res |
1974 | + |
1975 | + def _get_match_multi(self, cr, uid, ids, name, args, context=None): |
1976 | + """ |
1977 | + Indicate in the wizard that multiple matches have been found |
1978 | + and that the user has not yet made a choice between them. |
1979 | + """ |
1980 | + if not ids: |
1981 | + return {} |
1982 | + res = dict([(x, False) for x in ids]) |
1983 | + for transaction in self.browse(cr, uid, ids, context): |
1984 | + if transaction.match_type == 'move': |
1985 | + if transaction.move_line_ids and not transaction.move_line_id: |
1986 | + res[transaction.id] = True |
1987 | + elif transaction.match_type == 'invoice': |
1988 | + if transaction.invoice_ids and not transaction.invoice_id: |
1989 | + res[transaction.id] = True |
1990 | + elif transaction.match_type == 'payment_order': |
1991 | + if (transaction.payment_order_ids and not |
1992 | + transaction.payment_order_id): |
1993 | + res[transaction.id] = True |
1994 | + return res |
1995 | + |
1996 | + def clear_and_write(self, cr, uid, ids, vals=None, context=None): |
1997 | + """ |
1998 | + Write values in argument 'vals', but clear all match |
1999 | + related values first |
2000 | + """ |
2001 | + write_vals = (dict([(x, False) for x in [ |
2002 | + 'match_type', |
2003 | + 'move_line_id', |
2004 | + 'invoice_id', |
2005 | + 'manual_invoice_id', |
2006 | + 'manual_move_line_id', |
2007 | + 'payment_line_id', |
2008 | + ]] + |
2009 | + [(x, [(6, 0, [])]) for x in [ |
2010 | + 'move_line_ids', |
2011 | + 'invoice_ids', |
2012 | + 'payment_order_ids', |
2013 | + ]])) |
2014 | + write_vals.update(vals or {}) |
2015 | + return self.write(cr, uid, ids, write_vals, context=context) |
2016 | + |
2017 | + column_map = { |
2018 | + # used in bank_import.py, converting non-osv transactions |
2019 | + 'statement_id': 'statement', |
2020 | + 'id': 'transaction' |
2021 | + } |
2022 | + |
2023 | + _columns = { |
2024 | + # start mem_bank_transaction atributes |
2025 | + # see parsers/models.py |
2026 | + 'transaction': fields.char('transaction', size=16), # id |
2027 | + 'statement': fields.char('statement', size=16), # statement_id |
2028 | + 'type': fields.char('type', size=16), |
2029 | + 'reference': fields.char('reference', size=1024), |
2030 | + 'local_account': fields.char('local_account', size=24), |
2031 | + 'local_currency': fields.char('local_currency', size=16), |
2032 | + 'execution_date': fields.date('execution_date'), |
2033 | + 'effective_date': fields.date('effective_date'), |
2034 | + 'remote_account': fields.char('remote_account', size=24), |
2035 | + 'remote_currency': fields.char('remote_currency', size=16), |
2036 | + 'exchange_rate': fields.float('exchange_rate'), |
2037 | + 'transferred_amount': fields.float('transferred_amount'), |
2038 | + 'message': fields.char('message', size=1024), |
2039 | + 'remote_owner': fields.char('remote_owner', size=24), |
2040 | + 'remote_owner_address': fields.char('remote_owner_address', size=24), |
2041 | + 'remote_owner_city': fields.char('remote_owner_city', size=24), |
2042 | + 'remote_owner_postalcode': fields.char('remote_owner_postalcode', size=24), |
2043 | + 'remote_owner_country_code': fields.char('remote_owner_country_code', size=24), |
2044 | + 'remote_owner_custno': fields.char('remote_owner_custno', size=24), |
2045 | + 'remote_bank_bic': fields.char('remote_bank_bic', size=24), |
2046 | + 'remote_bank_bei': fields.char('remote_bank_bei', size=24), |
2047 | + 'remote_bank_ibei': fields.char('remote_bank_ibei', size=24), |
2048 | + 'remote_bank_eangl': fields.char('remote_bank_eangln', size=24), |
2049 | + 'remote_bank_chips_uid': fields.char('remote_bank_chips_uid', size=24), |
2050 | + 'remote_bank_duns': fields.char('remote_bank_duns', size=24), |
2051 | + 'remote_bank_tax_id': fields.char('remote_bank_tax_id', size=24), |
2052 | + 'provision_costs': fields.float('provision_costs', size=24), |
2053 | + 'provision_costs_currency': fields.char('provision_costs_currency', size=64), |
2054 | + 'provision_costs_description': fields.char('provision_costs_description', size=24), |
2055 | + 'error_message': fields.char('error_message', size=1024), |
2056 | + 'storno_retry': fields.boolean('storno_retry'), |
2057 | + # end of mem_bank_transaction_fields |
2058 | + 'bank_country_code': fields.char( |
2059 | + 'Bank country code', size=2, |
2060 | + help=("Fallback default country for new partner records, " |
2061 | + "as defined by the import parser"), |
2062 | + readonly=True,), |
2063 | + 'company_id': fields.many2one( |
2064 | + 'res.company', 'Company', required=True), |
2065 | + 'duplicate': fields.boolean('duplicate'), |
2066 | + 'statement_line_id': fields.many2one( |
2067 | + 'account.bank.statement.line', 'Statement line', |
2068 | + ondelete='CASCADE'), |
2069 | + 'statement_id': fields.many2one( |
2070 | + 'account.bank.statement', 'Statement'), |
2071 | + 'parent_id': fields.many2one( |
2072 | + 'banking.import.transaction', 'Split off from this transaction'), |
2073 | + # match fields |
2074 | + 'match_type': fields.selection( |
2075 | + [('manual', 'Manual'), ('move','Move'), ('invoice', 'Invoice'), |
2076 | + ('payment', 'Payment'), ('payment_order', 'Payment order'), |
2077 | + ('storno', 'Storno')], |
2078 | + 'Match type'), |
2079 | + 'match_multi': fields.function( |
2080 | + _get_match_multi, method=True, string='Multi match', |
2081 | + type='boolean'), |
2082 | + 'payment_order_ids': fields.many2many( |
2083 | + 'payment.order', 'banking_transaction_payment_order_rel', |
2084 | + 'order_id', 'transaction_id', 'Payment orders'), |
2085 | + 'payment_order_id': fields.many2one( |
2086 | + 'payment.order', 'Payment order to reconcile'), |
2087 | + 'move_line_ids': fields.many2many( |
2088 | + 'account.move.line', 'banking_transaction_move_line_rel', |
2089 | + 'move_line_id', 'transaction_id', 'Matching entries'), |
2090 | + 'move_line_id': fields.many2one( |
2091 | + 'account.move.line', 'Entry to reconcile'), |
2092 | + 'payment_line_id': fields.many2one('payment.line', 'Payment line'), |
2093 | + 'invoice_ids': fields.many2many( |
2094 | + 'account.invoice', 'banking_transaction_invoice_rel', |
2095 | + 'invoice_id', 'transaction_id', 'Matching invoices'), |
2096 | + 'invoice_id': fields.many2one( |
2097 | + 'account.invoice', 'Invoice to reconcile'), |
2098 | + 'payment_line_id': fields.many2one('payment.line', 'Payment line'), |
2099 | + 'residual': fields.function( |
2100 | + _get_residual, method=True, string='Residual', type='float'), |
2101 | + 'writeoff_account_id': fields.many2one( |
2102 | + 'account.account', 'Write-off account', |
2103 | + domain=[('type', '!=', 'view')]), |
2104 | + 'writeoff_journal_id': fields.many2one( |
2105 | + 'account.journal', 'Write-off journal'), |
2106 | + 'writeoff_move_line_id': fields.many2one( |
2107 | + 'account.move.line', 'Write off move line'), |
2108 | + } |
2109 | + _defaults = { |
2110 | + 'company_id': lambda s,cr,uid,c: |
2111 | + s.pool.get('res.company')._company_default_get( |
2112 | + cr, uid, 'bank.import.transaction', context=c), |
2113 | + } |
2114 | +banking_import_transaction() |
2115 | + |
2116 | +class account_bank_statement_line(osv.osv): |
2117 | + _inherit = 'account.bank.statement.line' |
2118 | + _columns = { |
2119 | + 'import_transaction_id': fields.many2one( |
2120 | + 'banking.import.transaction', |
2121 | + 'Import transaction', readonly=True), |
2122 | + 'match_multi': fields.related( |
2123 | + 'import_transaction_id', 'match_multi', type='boolean', |
2124 | + string='Multi match', readonly=True), |
2125 | + 'residual': fields.related( |
2126 | + 'import_transaction_id', 'residual', type='float', |
2127 | + string='Residual'), |
2128 | + 'duplicate': fields.related( |
2129 | + 'import_transaction_id', 'duplicate', type='boolean', |
2130 | + string='Possible duplicate import', readonly=True), |
2131 | + 'match_type': fields.related( |
2132 | + 'import_transaction_id', 'match_type', type='selection', |
2133 | + selection=[('manual', 'Manual'), ('move','Move'), |
2134 | + ('invoice', 'Invoice'), ('payment', 'Payment'), |
2135 | + ('payment_order', 'Payment order'), |
2136 | + ('storno', 'Storno')], |
2137 | + string='Match type', readonly=True,), |
2138 | + 'residual': fields.related( |
2139 | + 'import_transaction_id', 'residual', type='float', |
2140 | + string='Residual', readonly=True, |
2141 | + ), |
2142 | + 'state': fields.selection( |
2143 | + [('draft', 'Draft'), ('confirmed', 'Confirmed')], 'State', |
2144 | + readonly=True, required=True), |
2145 | + 'move_id': fields.many2one( |
2146 | + 'account.move', 'Move', readonly=True, |
2147 | + help="The accounting move associated with this line"), |
2148 | + } |
2149 | + |
2150 | + _defaults = { |
2151 | + 'state': 'draft', |
2152 | + } |
2153 | + |
2154 | + def match_wizard(self, cr, uid, ids, context=None): |
2155 | + res = False |
2156 | + if ids: |
2157 | + if isinstance(ids, (int, float)): |
2158 | + ids = [ids] |
2159 | + if context is None: |
2160 | + context = {} |
2161 | + context['statement_line_id'] = ids[0] |
2162 | + wizard_obj = self.pool.get('banking.transaction.wizard') |
2163 | + res_id = wizard_obj.create( |
2164 | + cr, uid, {'statement_line_id': ids[0]}, context=context) |
2165 | + res = wizard_obj.create_act_window(cr, uid, res_id, context=context) |
2166 | + return res |
2167 | + |
2168 | + def confirm(self, cr, uid, ids, context=None): |
2169 | + # TODO: a confirmed transaction should remove its reconciliation target |
2170 | + # from other transactions where it is one of multiple candidates or |
2171 | + # even the proposed reconciliation target. |
2172 | + statement_obj = self.pool.get('account.bank.statement') |
2173 | + obj_seq = self.pool.get('ir.sequence') |
2174 | + import_transaction_obj = self.pool.get('banking.import.transaction') |
2175 | + |
2176 | + for st_line in self.browse(cr, uid, ids, context): |
2177 | + if st_line.state != 'draft': |
2178 | + continue |
2179 | + if st_line.duplicate: |
2180 | + raise osv.except_osv( |
2181 | + _('Bank transfer flagged as duplicate'), |
2182 | + _("You cannot confirm a bank transfer marked as a " |
2183 | + "duplicate (%s.%s)") % |
2184 | + (st_line.statement_id.name, st_line.name,)) |
2185 | + if st_line.analytic_account_id: |
2186 | + if not st_line.statement_id.journal_id.analytic_journal_id: |
2187 | + raise osv.except_osv( |
2188 | + _('No Analytic Journal !'), |
2189 | + _("You have to define an analytic journal on the '%s' " |
2190 | + "journal!") % (st_line.statement_id.journal_id.name,)) |
2191 | + if not st_line.amount: |
2192 | + continue |
2193 | + if st_line.import_transaction_id: |
2194 | + import_transaction_obj.reconcile( |
2195 | + cr, uid, st_line.import_transaction_id.id, context) |
2196 | + |
2197 | + if not st_line.statement_id.name == '/': |
2198 | + st_number = st_line.statement_id.name |
2199 | + else: |
2200 | + if st_line.statement_id.journal_id.sequence_id: |
2201 | + c = {'fiscalyear_id': |
2202 | + st_line.statement_id.period_id.fiscalyear_id.id} |
2203 | + st_number = obj_seq.get_id( |
2204 | + cr, uid, |
2205 | + st_line.statement_id.journal_id.sequence_id.id, |
2206 | + context=c) |
2207 | + else: |
2208 | + st_number = obj_seq.get(cr, uid, 'account.bank.statement') |
2209 | + statement_obj.write( |
2210 | + cr, uid, [st_line.statement_id.id], |
2211 | + {'name': st_number}, context=context) |
2212 | + |
2213 | + st_line_number = statement_obj.get_next_st_line_number( |
2214 | + cr, uid, st_number, st_line, context) |
2215 | + company_currency_id = st_line.statement_id.journal_id.company_id.currency_id.id |
2216 | + move_id = statement_obj.create_move_from_st_line( |
2217 | + cr, uid, st_line.id, company_currency_id, |
2218 | + st_line_number, context) |
2219 | + self.write( |
2220 | + cr, uid, st_line.id, |
2221 | + {'state': 'confirmed', 'move_id': move_id}, context) |
2222 | + return True |
2223 | + |
2224 | + def cancel(self, cr, uid, ids, context=None): |
2225 | + if ids and isinstance(ids, (int, float)): |
2226 | + ids = [ids] |
2227 | + account_move_obj = self.pool.get('account.move') |
2228 | + import_transaction_obj = self.pool.get('banking.import.transaction') |
2229 | + transaction_cancel_ids = [] |
2230 | + move_unlink_ids = [] |
2231 | + set_draft_ids = [] |
2232 | + # harvest ids for various actions |
2233 | + for st_line in self.browse(cr, uid, ids, context): |
2234 | + if st_line.state != 'confirmed': |
2235 | + continue |
2236 | + if st_line.statement_id.state != 'draft': |
2237 | + raise osv.except_osv( |
2238 | + _("Cannot cancel bank transaction"), |
2239 | + _("The bank statement that this transaction belongs to has " |
2240 | + "already been confirmed")) |
2241 | + if st_line.import_transaction_id: |
2242 | + transaction_cancel_ids.append(st_line.import_transaction_id.id) |
2243 | + if st_line.move_id: |
2244 | + move_unlink_ids.append(st_line.move_id.id) |
2245 | + else: |
2246 | + raise osv.except_osv( |
2247 | + _("Cannot cancel bank transaction"), |
2248 | + _("Cannot cancel this bank transaction. The information " |
2249 | + "needed to undo the accounting entries has not been " |
2250 | + "recorded")) |
2251 | + set_draft_ids.append(st_line.id) |
2252 | + # perform actions |
2253 | + import_transaction_obj.cancel( |
2254 | + cr, uid, transaction_cancel_ids, context=context) |
2255 | + account_move_obj.button_cancel(cr, uid, move_unlink_ids, context) |
2256 | + account_move_obj.unlink(cr, uid, move_unlink_ids, context) |
2257 | + self.write( |
2258 | + cr, uid, set_draft_ids, {'state': 'draft'}, context=context) |
2259 | + return True |
2260 | +account_bank_statement_line() |
2261 | + |
2262 | +class account_bank_statement(osv.osv): |
2263 | + _inherit = 'account.bank.statement' |
2264 | + |
2265 | + def _end_balance(self, cursor, user, ids, name, attr, context=None): |
2266 | + """ |
2267 | + This method taken from account/account_bank_statement.py and |
2268 | + altered to take the statement line subflow into account |
2269 | + """ |
2270 | + |
2271 | + res_currency_obj = self.pool.get('res.currency') |
2272 | + res_users_obj = self.pool.get('res.users') |
2273 | + res = {} |
2274 | + |
2275 | + company_currency_id = res_users_obj.browse(cursor, user, user, |
2276 | + context=context).company_id.currency_id.id |
2277 | + |
2278 | + statements = self.browse(cursor, user, ids, context=context) |
2279 | + for statement in statements: |
2280 | + res[statement.id] = statement.balance_start |
2281 | + currency_id = statement.currency.id |
2282 | + for line in statement.move_line_ids: |
2283 | + if line.debit > 0: |
2284 | + if line.account_id.id == \ |
2285 | + statement.journal_id.default_debit_account_id.id: |
2286 | + res[statement.id] += res_currency_obj.compute(cursor, |
2287 | + user, company_currency_id, currency_id, |
2288 | + line.debit, context=context) |
2289 | + else: |
2290 | + if line.account_id.id == \ |
2291 | + statement.journal_id.default_credit_account_id.id: |
2292 | + res[statement.id] -= res_currency_obj.compute(cursor, |
2293 | + user, company_currency_id, currency_id, |
2294 | + line.credit, context=context) |
2295 | + if statement.state == 'draft': |
2296 | + for line in statement.line_ids: |
2297 | + ### start modifications banking-addons ### |
2298 | + # res[statement.id] += line.amount |
2299 | + if line.state == 'draft': |
2300 | + res[statement.id] += line.amount |
2301 | + ### end modifications banking-addons ### |
2302 | + |
2303 | + for r in res: |
2304 | + res[r] = round(res[r], 2) |
2305 | + return res |
2306 | + |
2307 | + def button_confirm_bank(self, cr, uid, ids, context=None): |
2308 | + """ Inject the statement line workflow here """ |
2309 | + if context is None: |
2310 | + context = {} |
2311 | + line_obj = self.pool.get('account.bank.statement.line') |
2312 | + for st in self.browse(cr, uid, ids, context=context): |
2313 | + j_type = st.journal_id.type |
2314 | + if not self.check_status_condition(cr, uid, st.state, journal_type=j_type): |
2315 | + continue |
2316 | + |
2317 | + self.balance_check(cr, uid, st.id, journal_type=j_type, context=context) |
2318 | + if (not st.journal_id.default_credit_account_id) \ |
2319 | + or (not st.journal_id.default_debit_account_id): |
2320 | + raise osv.except_osv(_('Configuration Error !'), |
2321 | + _('Please verify that an account is defined in the journal.')) |
2322 | + |
2323 | + # protect against misguided manual changes |
2324 | + for line in st.move_line_ids: |
2325 | + if line.state <> 'valid': |
2326 | + raise osv.except_osv(_('Error !'), |
2327 | + _('The account entries lines are not in valid state.')) |
2328 | + |
2329 | + line_obj.confirm(cr, uid, [line.id for line in st.line_ids], context) |
2330 | + self.log(cr, uid, st.id, _('Statement %s is confirmed, journal ' |
2331 | + 'items are created.') % (st.name,)) |
2332 | + return self.write(cr, uid, ids, {'state':'confirm'}, context=context) |
2333 | + |
2334 | + def button_cancel(self, cr, uid, ids, context=None): |
2335 | + """ |
2336 | + Do nothing but write the state. Delegate all actions to the statement |
2337 | + line workflow instead. |
2338 | + """ |
2339 | + self.write(cr, uid, ids, {'state':'draft'}, context=context) |
2340 | + |
2341 | + _columns = { |
2342 | + # override this field *only* to replace the |
2343 | + # function method with the one from this module. |
2344 | + # Note that it is defined twice, both in |
2345 | + # account/account_bank_statement.py (without 'store') and |
2346 | + # account/account_cash_statement.py (with store=True) |
2347 | + |
2348 | + 'balance_end': fields.function( |
2349 | + _end_balance, method=True, store=True, string='Balance'), |
2350 | + } |
2351 | + |
2352 | +account_bank_statement() |
2353 | |
2354 | === added file 'account_banking/i18n/nl.po' |
2355 | --- account_banking/i18n/nl.po 1970-01-01 00:00:00 +0000 |
2356 | +++ account_banking/i18n/nl.po 2012-04-17 10:52:20 +0000 |
2357 | @@ -0,0 +1,1773 @@ |
2358 | +# Translation of OpenERP Server. |
2359 | +# This file contains the translation of the following modules: |
2360 | +# * account_banking |
2361 | +# |
2362 | +msgid "" |
2363 | +msgstr "" |
2364 | +"Project-Id-Version: OpenERP Server 6.0.3\n" |
2365 | +"Report-Msgid-Bugs-To: stefan@therp.nl\n" |
2366 | +"POT-Creation-Date: 2011-12-26 08:06+0000\n" |
2367 | +"PO-Revision-Date: 2011-12-26 08:06+0000\n" |
2368 | +"Last-Translator: <stefan@therp.nl>\n" |
2369 | +"Language-Team: \n" |
2370 | +"MIME-Version: 1.0\n" |
2371 | +"Content-Type: text/plain; charset=UTF-8\n" |
2372 | +"Content-Transfer-Encoding: \n" |
2373 | +"Plural-Forms: \n" |
2374 | + |
2375 | +#. module: account_banking |
2376 | +#: field:account.bank.statement.line,reconcile_id:0 |
2377 | +msgid "Reconciliation" |
2378 | +msgstr "Aflettering" |
2379 | + |
2380 | +#. module: account_banking |
2381 | +#: view:banking.transaction.wizard:0 |
2382 | +msgid "Remove duplicate flag" |
2383 | +msgstr "Verwijder kenmerk 'duplicaat'" |
2384 | + |
2385 | +#. module: account_banking |
2386 | +#: field:banking.import.transaction,remote_bank_eangl:0 |
2387 | +msgid "remote_bank_eangln" |
2388 | +msgstr "remote_bank_eangln" |
2389 | + |
2390 | +#. module: account_banking |
2391 | +#: field:banking.transaction.wizard,move_line_ids:0 |
2392 | +msgid "Entry lines" |
2393 | +msgstr "Boekingsregels" |
2394 | + |
2395 | +#. module: account_banking |
2396 | +#: code:addons/account_banking/wizard/bank_import.py:310 |
2397 | +#, python-format |
2398 | +msgid "Number of bank costs invoices created" |
2399 | +msgstr "Aantal bankkosten-facturen aangemaakt" |
2400 | + |
2401 | +#. module: account_banking |
2402 | +#: code:addons/account_banking/account_banking.py:1017 |
2403 | +#: code:addons/account_banking/banking_import_transaction.py:632 |
2404 | +#: code:addons/account_banking/banking_import_transaction.py:644 |
2405 | +#: code:addons/account_banking/banking_import_transaction.py:648 |
2406 | +#, python-format |
2407 | +msgid "Cannot unreconcile" |
2408 | +msgstr "Kan niet afletteren" |
2409 | + |
2410 | +#. module: account_banking |
2411 | +#: selection:banking.import.line,transaction_type:0 |
2412 | +msgid "Unknown" |
2413 | +msgstr "Onbekend" |
2414 | + |
2415 | +#. module: account_banking |
2416 | +#: code:addons/account_banking/banking_import_transaction.py:950 |
2417 | +#, python-format |
2418 | +msgid "Cannot check for duplicate. I can't find myself." |
2419 | +msgstr "Kan niet controleren op duplicaten, ik kan de eigen mutatie niet terugvinden." |
2420 | + |
2421 | +#. module: account_banking |
2422 | +#: code:addons/account_banking/wizard/bank_import.py:298 |
2423 | +#, python-format |
2424 | +msgid "Number of errors found" |
2425 | +msgstr "Aantal gevonden fouten" |
2426 | + |
2427 | +#. module: account_banking |
2428 | +#: code:addons/account_banking/wizard/bank_import.py:229 |
2429 | +#, python-format |
2430 | +msgid "Statement %(statement_id)s for account %(bank_account)s uses different currency than the defined bank journal." |
2431 | +msgstr "Afschrift %(statement_id)s voor rekening %(bank_account)s gebruikt een andere valuta dan het ingestelde bankboek." |
2432 | + |
2433 | +#. module: account_banking |
2434 | +#: view:account.bank.statement:0 |
2435 | +#: view:account.bank.statement.line:0 |
2436 | +msgid "Cancel transaction" |
2437 | +msgstr "Transactie annuleren" |
2438 | + |
2439 | +#. module: account_banking |
2440 | +#: view:account.banking.bank.import:0 |
2441 | +msgid "Select the processing details:" |
2442 | +msgstr "Selecteer de verwerkingsdetails:" |
2443 | + |
2444 | +#. module: account_banking |
2445 | +#: view:account.bank.statement.line:0 |
2446 | +msgid "Group By..." |
2447 | +msgstr "Groepeer op..." |
2448 | + |
2449 | +#. module: account_banking |
2450 | +#: code:addons/account_banking/wizard/bank_import.py:198 |
2451 | +#, python-format |
2452 | +msgid "Statements found for unknown account %(bank_account)s" |
2453 | +msgstr "Afschriften gevonden voor onbekende bankrekening %(bank_account)s" |
2454 | + |
2455 | +#. module: account_banking |
2456 | +#: code:addons/account_banking/account_banking.py:1320 |
2457 | +#, python-format |
2458 | +msgid "Invalid format" |
2459 | +msgstr "Ongeldig formaat" |
2460 | + |
2461 | +#. module: account_banking |
2462 | +#: field:banking.import.line,banking_import_id:0 |
2463 | +msgid "Bank import" |
2464 | +msgstr "Bankimport" |
2465 | + |
2466 | +#. module: account_banking |
2467 | +#: field:banking.import.line,statement_id:0 |
2468 | +#: field:banking.import.transaction,statement_id:0 |
2469 | +msgid "Statement" |
2470 | +msgstr "Afschrift" |
2471 | + |
2472 | +#. module: account_banking |
2473 | +#: view:account.bank.statement.line:0 |
2474 | +msgid "Statement lines" |
2475 | +msgstr "Afschriftregels" |
2476 | + |
2477 | +#. module: account_banking |
2478 | +#: code:addons/account_banking/banking_import_transaction.py:605 |
2479 | +#, python-format |
2480 | +msgid "Reconcile payment order not implemented" |
2481 | +msgstr "Afletteren betaalopdracht nog niet geïmplementeerd" |
2482 | + |
2483 | +#. module: account_banking |
2484 | +#: selection:banking.import.line,type:0 |
2485 | +msgid "Supplier" |
2486 | +msgstr "Leverancier" |
2487 | + |
2488 | +#. module: account_banking |
2489 | +#: field:payment.line,date_done:0 |
2490 | +msgid "Date Confirmed" |
2491 | +msgstr "Datum bevestigd" |
2492 | + |
2493 | +#. module: account_banking |
2494 | +#: field:banking.import.transaction,remote_bank_bic:0 |
2495 | +msgid "remote_bank_bic" |
2496 | +msgstr "remote_bank_bic" |
2497 | + |
2498 | +#. module: account_banking |
2499 | +#: field:banking.transaction.wizard,manual_invoice_id:0 |
2500 | +msgid "Match this invoice" |
2501 | +msgstr "Match deze factuur" |
2502 | + |
2503 | +#. module: account_banking |
2504 | +#: field:banking.import.transaction,remote_bank_ibei:0 |
2505 | +msgid "remote_bank_ibei" |
2506 | +msgstr "remote_bank_ibei" |
2507 | + |
2508 | +#. module: account_banking |
2509 | +#: field:account.banking.account.settings,bank_partner_id:0 |
2510 | +msgid "Bank Partner" |
2511 | +msgstr "Relatie bank" |
2512 | + |
2513 | +#. module: account_banking |
2514 | +#: model:ir.model,name:account_banking.model_account_banking_account_settings |
2515 | +msgid "Default Journal for Bank Account" |
2516 | +msgstr "Standaard dagboek voor bankrekening" |
2517 | + |
2518 | +#. module: account_banking |
2519 | +#: field:account.banking.bank.import,file:0 |
2520 | +msgid "Statements File" |
2521 | +msgstr "Bankafschriftbestand" |
2522 | + |
2523 | +#. module: account_banking |
2524 | +#: code:addons/account_banking/banking_import_transaction.py:601 |
2525 | +#, python-format |
2526 | +msgid "Cannot reconcile: no direct debit order" |
2527 | +msgstr "Kan niet afletteren: geen incasso-opdracht" |
2528 | + |
2529 | +#. module: account_banking |
2530 | +#: code:addons/account_banking/account_banking.py:1321 |
2531 | +#, python-format |
2532 | +msgid "The account number has the wrong format for %(country)s" |
2533 | +msgstr "Het rekeningnummer heeft het verkeerde formaat voor %(country)s" |
2534 | + |
2535 | +#. module: account_banking |
2536 | +#: field:account.banking.bank.import,import_id:0 |
2537 | +msgid "Import File" |
2538 | +msgstr "Importbestand" |
2539 | + |
2540 | +#. module: account_banking |
2541 | +#: field:banking.import.transaction,move_line_id:0 |
2542 | +msgid "Entry to reconcile" |
2543 | +msgstr "Boeking voor afletteren" |
2544 | + |
2545 | +#. module: account_banking |
2546 | +#: field:account.banking.account.settings,company_id:0 |
2547 | +#: field:account.banking.bank.import,company:0 |
2548 | +#: field:account.banking.imported.file,company_id:0 |
2549 | +#: field:banking.import.transaction,company_id:0 |
2550 | +msgid "Company" |
2551 | +msgstr "Bedrijf" |
2552 | + |
2553 | +#. module: account_banking |
2554 | +#: selection:account.bank.statement.line,match_type:0 |
2555 | +#: field:banking.import.line,payment_order_id:0 |
2556 | +#: selection:banking.import.transaction,match_type:0 |
2557 | +msgid "Payment order" |
2558 | +msgstr "Betaalopdracht" |
2559 | + |
2560 | +#. module: account_banking |
2561 | +#: field:banking.import.transaction,parent_id:0 |
2562 | +msgid "Split off from this transaction" |
2563 | +msgstr "Afsplitsen" |
2564 | + |
2565 | +#. module: account_banking |
2566 | +#: field:account.bank.statement.line,residual:0 |
2567 | +#: field:banking.import.transaction,residual:0 |
2568 | +#: field:banking.transaction.wizard,residual:0 |
2569 | +msgid "Residual" |
2570 | +msgstr "Restbedrag" |
2571 | + |
2572 | +#. module: account_banking |
2573 | +#: field:account.bank.statement.line,invoice_id:0 |
2574 | +msgid "Linked Invoice" |
2575 | +msgstr "Gerelateerde factuur" |
2576 | + |
2577 | +#. module: account_banking |
2578 | +#: code:addons/account_banking/wizard/banktools.py:107 |
2579 | +#, python-format |
2580 | +msgid "Bank account %(account_no)s was not found in the database" |
2581 | +msgstr "Bankrekening %(account_no)s niet gevonden in de database" |
2582 | + |
2583 | +#. module: account_banking |
2584 | +#: selection:account.banking.bank.import,state:0 |
2585 | +msgid "init" |
2586 | +msgstr "init" |
2587 | + |
2588 | +#. module: account_banking |
2589 | +#: field:banking.import.transaction,transferred_amount:0 |
2590 | +msgid "transferred_amount" |
2591 | +msgstr "transferred_amount" |
2592 | + |
2593 | +#. module: account_banking |
2594 | +#: model:ir.actions.act_window,name:account_banking.action_bank_statement_line_tree |
2595 | +#: model:ir.ui.menu,name:account_banking.menu_bank_statement_line_tree |
2596 | +msgid "Bank Transactions" |
2597 | +msgstr "Bankmutaties" |
2598 | + |
2599 | +#. module: account_banking |
2600 | +#: code:addons/account_banking/banking_import_transaction.py:1676 |
2601 | +#, python-format |
2602 | +msgid "You cannot confirm a bank transfer marked as a duplicate (%s.%s)" |
2603 | +msgstr "Een bankmutatie gemarkeerd als duplicaat kan niet worden bevestigd (%s.%s)" |
2604 | + |
2605 | +#. module: account_banking |
2606 | +#: field:banking.import.line,statement_line_id:0 |
2607 | +msgid "Resulting statement line" |
2608 | +msgstr "Bankafschriftregel" |
2609 | + |
2610 | +#. module: account_banking |
2611 | +#: field:banking.import.transaction,invoice_ids:0 |
2612 | +#: field:banking.transaction.wizard,invoice_ids:0 |
2613 | +msgid "Matching invoices" |
2614 | +msgstr "Gematchte facturen" |
2615 | + |
2616 | +#. module: account_banking |
2617 | +#: code:addons/account_banking/account_banking.py:1435 |
2618 | +#, python-format |
2619 | +msgid "Free Reference" |
2620 | +msgstr "Vrije referentie" |
2621 | + |
2622 | +#. module: account_banking |
2623 | +#: field:banking.import.line,reconcile_id:0 |
2624 | +msgid "Reconciliaton" |
2625 | +msgstr "Aflettering" |
2626 | + |
2627 | +#. module: account_banking |
2628 | +#: field:banking.import.transaction,execution_date:0 |
2629 | +msgid "execution_date" |
2630 | +msgstr "execution_date" |
2631 | + |
2632 | +#. module: account_banking |
2633 | +#: field:banking.import.line,account_id:0 |
2634 | +msgid "Account" |
2635 | +msgstr "Grootboekrekening" |
2636 | + |
2637 | +#. module: account_banking |
2638 | +#: view:banking.transaction.wizard:0 |
2639 | +msgid "Current match" |
2640 | +msgstr "Huidige match" |
2641 | + |
2642 | +#. module: account_banking |
2643 | +#: field:account.banking.account.settings,invoice_journal_id:0 |
2644 | +msgid "Costs Journal" |
2645 | +msgstr "Kostendagboek" |
2646 | + |
2647 | +#. module: account_banking |
2648 | +#: field:banking.import.transaction,remote_currency:0 |
2649 | +msgid "remote_currency" |
2650 | +msgstr "remote_currency" |
2651 | + |
2652 | +#. module: account_banking |
2653 | +#: code:addons/account_banking/wizard/bank_import.py:300 |
2654 | +#, python-format |
2655 | +msgid "Number of statements skipped due to errors" |
2656 | +msgstr "Aantal afschriften overgeslagen door fouten" |
2657 | + |
2658 | +#. module: account_banking |
2659 | +#: code:addons/account_banking/banking_import_transaction.py:949 |
2660 | +#, python-format |
2661 | +msgid "Cannot check for duplicate" |
2662 | +msgstr "Kan niet controleren op duplicaten" |
2663 | + |
2664 | +#. module: account_banking |
2665 | +#: code:addons/account_banking/account_banking.py:1351 |
2666 | +#, python-format |
2667 | +msgid "Invalid IBAN account number!" |
2668 | +msgstr "Ongeldig IBAN-rekeningnummer" |
2669 | + |
2670 | +#. module: account_banking |
2671 | +#: constraint:account.move.line:0 |
2672 | +msgid "You can not create move line on closed account." |
2673 | +msgstr "U kunt geen boekingsregel creëren op een gesloten rekening" |
2674 | + |
2675 | +#. module: account_banking |
2676 | +#: field:banking.import.line,note:0 |
2677 | +msgid "Notes" |
2678 | +msgstr "Notities" |
2679 | + |
2680 | +#. module: account_banking |
2681 | +#: selection:banking.import.line,transaction_type:0 |
2682 | +msgid "Canceled debit order" |
2683 | +msgstr "Geannuleerde incasso-opdracht" |
2684 | + |
2685 | +#. module: account_banking |
2686 | +#: field:banking.import.transaction,writeoff_journal_id:0 |
2687 | +#: field:banking.transaction.wizard,writeoff_journal_id:0 |
2688 | +msgid "Write-off journal" |
2689 | +msgstr "Dagboek afschrijvingen" |
2690 | + |
2691 | +#. module: account_banking |
2692 | +#: view:account.banking.account.settings:0 |
2693 | +msgid "Default Import Settings for Bank Account" |
2694 | +msgstr "Standaardinstellingen bankrekening voor import" |
2695 | + |
2696 | +#. module: account_banking |
2697 | +#: field:banking.import.line,amount:0 |
2698 | +#: field:banking.transaction.wizard,amount:0 |
2699 | +msgid "Amount" |
2700 | +msgstr "Bedrag" |
2701 | + |
2702 | +#. module: account_banking |
2703 | +#: code:addons/account_banking/banking_import_transaction.py:704 |
2704 | +#, python-format |
2705 | +msgid "Line id not found" |
2706 | +msgstr "Regel id niet gevonden" |
2707 | + |
2708 | +#. module: account_banking |
2709 | +#: field:account.bank.statement.line,match_type:0 |
2710 | +#: field:banking.import.transaction,match_type:0 |
2711 | +#: field:banking.transaction.wizard,match_type:0 |
2712 | +msgid "Match type" |
2713 | +msgstr "Matchtype" |
2714 | + |
2715 | +#. module: account_banking |
2716 | +#: help:banking.import.transaction,bank_country_code:0 |
2717 | +msgid "Fallback default country for new partner records, as defined by the import parser" |
2718 | +msgstr "Achtervang-standaardland voor nieuwe relaties, zoals ingegeven door de invoerparser" |
2719 | + |
2720 | +#. module: account_banking |
2721 | +#: sql_constraint:account.move.line:0 |
2722 | +msgid "Wrong credit or debit value in accounting entry !" |
2723 | +msgstr "Verkeerde debet of credit waarde in boekingsregel!" |
2724 | + |
2725 | +#. module: account_banking |
2726 | +#: field:banking.import.transaction,remote_bank_chips_uid:0 |
2727 | +msgid "remote_bank_chips_uid" |
2728 | +msgstr "remote_bank_chips_uid" |
2729 | + |
2730 | +#. module: account_banking |
2731 | +#: field:banking.import.transaction,writeoff_account_id:0 |
2732 | +#: field:banking.transaction.wizard,writeoff_account_id:0 |
2733 | +msgid "Write-off account" |
2734 | +msgstr "Grootboekrekening afschrijven" |
2735 | + |
2736 | +#. module: account_banking |
2737 | +#: selection:payment.line,export_state:0 |
2738 | +msgid "Cancelled" |
2739 | +msgstr "Geannuleerd" |
2740 | + |
2741 | +#. module: account_banking |
2742 | +#: view:account.banking.bank.import:0 |
2743 | +#: view:account.banking.imported.file:0 |
2744 | +#: field:account.banking.imported.file,statement_ids:0 |
2745 | +msgid "Statements" |
2746 | +msgstr "Afschriften" |
2747 | + |
2748 | +#. module: account_banking |
2749 | +#: field:banking.transaction.wizard,payment_line_id:0 |
2750 | +msgid "Matching payment or storno" |
2751 | +msgstr "Gevonden betaling of storno" |
2752 | + |
2753 | +#. module: account_banking |
2754 | +#: code:addons/account_banking/wizard/bank_import.py:128 |
2755 | +#, python-format |
2756 | +msgid "Unable to import parser %(parser)s. Parser class not found." |
2757 | +msgstr "Niet in staat parser %(parser)s te importeren. Parser class niet gevonden." |
2758 | + |
2759 | +#. module: account_banking |
2760 | +#: model:ir.model,name:account_banking.model_account_bank_statement_line |
2761 | +msgid "Bank Statement Line" |
2762 | +msgstr "Bankafschriftregel" |
2763 | + |
2764 | +#. module: account_banking |
2765 | +#: field:account.bank.statement.line,duplicate:0 |
2766 | +msgid "Possible duplicate import" |
2767 | +msgstr "Mogelijke dubbele import" |
2768 | + |
2769 | +#. module: account_banking |
2770 | +#: field:banking.import.line,ref:0 |
2771 | +msgid "Reference" |
2772 | +msgstr "Referentie" |
2773 | + |
2774 | +#. module: account_banking |
2775 | +#: code:addons/account_banking/account_banking.py:444 |
2776 | +#, python-format |
2777 | +msgid "Journal Item \"%s\" is not valid" |
2778 | +msgstr "Journaalpost \"%s\" is niet geldig" |
2779 | + |
2780 | +#. module: account_banking |
2781 | +#: field:account.banking.account.settings,default_debit_account_id:0 |
2782 | +msgid "Default debit account" |
2783 | +msgstr "Standaard debetrekening" |
2784 | + |
2785 | +#. module: account_banking |
2786 | +#: selection:account.bank.statement.line,match_type:0 |
2787 | +#: field:account.bank.statement.line,move_id:0 |
2788 | +#: selection:banking.import.transaction,match_type:0 |
2789 | +msgid "Move" |
2790 | +msgstr "Boeking" |
2791 | + |
2792 | +#. module: account_banking |
2793 | +#: code:addons/account_banking/wizard/banktools.py:307 |
2794 | +#: code:addons/account_banking/wizard/banktools.py:397 |
2795 | +#, python-format |
2796 | +msgid "Unknown Bank" |
2797 | +msgstr "Onbekende bank" |
2798 | + |
2799 | +#. module: account_banking |
2800 | +#: selection:banking.import.line,transaction_type:0 |
2801 | +msgid "Invoice payment" |
2802 | +msgstr "Factuurbetaling" |
2803 | + |
2804 | +#. module: account_banking |
2805 | +#: code:addons/account_banking/banking_import_transaction.py:1673 |
2806 | +#, python-format |
2807 | +msgid "Bank transfer flagged as duplicate" |
2808 | +msgstr "Bankmutatie is gemarkeerd als duplicaat" |
2809 | + |
2810 | +#. module: account_banking |
2811 | +#: field:banking.import.transaction,writeoff_move_line_id:0 |
2812 | +msgid "Write off move line" |
2813 | +msgstr "Boekingsregel afschrijving" |
2814 | + |
2815 | +#. module: account_banking |
2816 | +#: field:banking.transaction.wizard,duplicate:0 |
2817 | +msgid "Flagged as duplicate" |
2818 | +msgstr "Duplicaat gesignaleerd" |
2819 | + |
2820 | +#. module: account_banking |
2821 | +#: view:banking.transaction.wizard:0 |
2822 | +#: model:ir.model,name:account_banking.model_banking_transaction_wizard |
2823 | +msgid "Match transaction" |
2824 | +msgstr "Match deze mutatie" |
2825 | + |
2826 | +#. module: account_banking |
2827 | +#: sql_constraint:payment.line:0 |
2828 | +msgid "The payment line name must be unique!" |
2829 | +msgstr "De betaalregelnaam moet uniek zijn!" |
2830 | + |
2831 | +#. module: account_banking |
2832 | +#: code:addons/account_banking/account_banking.py:1309 |
2833 | +#, python-format |
2834 | +msgid "The account number appears to be invalid for %(country)s" |
2835 | +msgstr "Het bankrekeningnummer lijkt ongeldig te zijn voor %(country)s" |
2836 | + |
2837 | +#. module: account_banking |
2838 | +#: code:addons/account_banking/banking_import_transaction.py:633 |
2839 | +#, python-format |
2840 | +msgid "Cannot unreconcile: this operation is not yet supported for match type 'payment'" |
2841 | +msgstr "Kan niet afletteren: deze bewerking wordt noge niet ondersteund voor matches van het type 'betaling'" |
2842 | + |
2843 | +#. module: account_banking |
2844 | +#: field:banking.import.line,partner_id:0 |
2845 | +msgid "Partner" |
2846 | +msgstr "Relatie" |
2847 | + |
2848 | +#. module: account_banking |
2849 | +#: field:account.banking.imported.file,date:0 |
2850 | +msgid "Import Date" |
2851 | +msgstr "Importdatum" |
2852 | + |
2853 | +#. module: account_banking |
2854 | +#: field:payment.mode.type,suitable_bank_types:0 |
2855 | +msgid "Suitable bank types" |
2856 | +msgstr "Geschikte banktypen" |
2857 | + |
2858 | +#. module: account_banking |
2859 | +#: view:banking.transaction.wizard:0 |
2860 | +msgid "Select" |
2861 | +msgstr "Selecteer" |
2862 | + |
2863 | +#. module: account_banking |
2864 | +#: model:ir.model,name:account_banking.model_account_banking_bank_import |
2865 | +msgid "account.banking.bank.import" |
2866 | +msgstr "account.banking.bank.import" |
2867 | + |
2868 | +#. module: account_banking |
2869 | +#: field:banking.import.transaction,remote_bank_bei:0 |
2870 | +msgid "remote_bank_bei" |
2871 | +msgstr "remote_bank_bei" |
2872 | + |
2873 | +#. module: account_banking |
2874 | +#: selection:account.bank.statement.line,state:0 |
2875 | +#: selection:payment.line,export_state:0 |
2876 | +msgid "Confirmed" |
2877 | +msgstr "Bevestigd" |
2878 | + |
2879 | +#. module: account_banking |
2880 | +#: model:ir.actions.act_window,name:account_banking.action_account_banking_res_partner_banks |
2881 | +#: model:ir.model,name:account_banking.model_res_partner_bank |
2882 | +#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_accounts |
2883 | +msgid "Bank Accounts" |
2884 | +msgstr "Bankrekeningen" |
2885 | + |
2886 | +#. module: account_banking |
2887 | +#: help:account.bank.statement.line,move_id:0 |
2888 | +msgid "The accounting move associated with this line" |
2889 | +msgstr "Boeking nav. deze regel" |
2890 | + |
2891 | +#. module: account_banking |
2892 | +#: view:account.banking.account.settings:0 |
2893 | +msgid "Default Accounts for Unknown Movements" |
2894 | +msgstr "Standaard grootboekrekening voor onbekende boekingen" |
2895 | + |
2896 | +#. module: account_banking |
2897 | +#: view:account.banking.bank.import:0 |
2898 | +msgid "Confirm" |
2899 | +msgstr "Bevestig" |
2900 | + |
2901 | +#. module: account_banking |
2902 | +#: field:account.banking.account.settings,default_credit_account_id:0 |
2903 | +msgid "Default credit account" |
2904 | +msgstr "Standaard creditrekening" |
2905 | + |
2906 | +#. module: account_banking |
2907 | +#: field:account.bank.statement.line,period_id:0 |
2908 | +#: field:banking.import.line,period_id:0 |
2909 | +msgid "Period" |
2910 | +msgstr "Periode" |
2911 | + |
2912 | +#. module: account_banking |
2913 | +#: field:banking.import.line,transaction_type:0 |
2914 | +msgid "Transaction type" |
2915 | +msgstr "Mutatietype" |
2916 | + |
2917 | +#. module: account_banking |
2918 | +#: field:account.bank.statement.line,state:0 |
2919 | +#: field:account.banking.bank.import,state:0 |
2920 | +#: field:account.banking.imported.file,state:0 |
2921 | +#: field:payment.line,export_state:0 |
2922 | +msgid "State" |
2923 | +msgstr "Status" |
2924 | + |
2925 | +#. module: account_banking |
2926 | +#: field:account.bank.statement.line,trans:0 |
2927 | +msgid "Bank Transaction ID" |
2928 | +msgstr "Bankmutatie ID" |
2929 | + |
2930 | +#. module: account_banking |
2931 | +#: model:ir.model,name:account_banking.model_payment_mode |
2932 | +msgid "Payment Mode" |
2933 | +msgstr "Betaalmodus" |
2934 | + |
2935 | +#. module: account_banking |
2936 | +#: view:banking.transaction.wizard:0 |
2937 | +msgid "Match again" |
2938 | +msgstr "Match nogmaals" |
2939 | + |
2940 | +#. module: account_banking |
2941 | +#: help:account.banking.account.settings,invoice_journal_id:0 |
2942 | +msgid "This is the journal used to create invoices for bank costs." |
2943 | +msgstr "Het dagboek om facturen aan te maken voor bankkosten." |
2944 | + |
2945 | +#. module: account_banking |
2946 | +#: selection:banking.import.line,type:0 |
2947 | +msgid "General" |
2948 | +msgstr "Algemeen" |
2949 | + |
2950 | +#. module: account_banking |
2951 | +#: field:banking.import.line,type:0 |
2952 | +msgid "Type" |
2953 | +msgstr "Type" |
2954 | + |
2955 | +#. module: account_banking |
2956 | +#: code:addons/account_banking/wizard/bank_import.py:251 |
2957 | +#, python-format |
2958 | +msgid "Statement %(id)s known - skipped" |
2959 | +msgstr "Afschrift %(id)s al bekend - overgeslagen" |
2960 | + |
2961 | +#. module: account_banking |
2962 | +#: view:banking.transaction.wizard:0 |
2963 | +msgid "If the amount exceeds the match, you must set a write-off account and journal for the residual of this reconciliation. If the amount is smaller than the match, this is optional. If you do not set a write-off account in this case, the result will be a partial reconciliation." |
2964 | +msgstr "Als het bedrag van de mutatie de gevonden match overschrijdt, moet er een grootboekrekening en een dagboek worden opgegeven om het restbedrag van de aflettering af te schrijven. Dit is optioneel als het bedrag van de mutatie kleiner is dan de gevonden match. Als u in dit geval geen afschrijving mogelijk maakt, zal het systeem een gedeeltelijke aflettering aanmaken." |
2965 | + |
2966 | +#. module: account_banking |
2967 | +#: field:banking.transaction.wizard,move_line_id:0 |
2968 | +msgid "Entry line" |
2969 | +msgstr "Boekingsregel" |
2970 | + |
2971 | +#. module: account_banking |
2972 | +#: selection:banking.import.line,transaction_type:0 |
2973 | +msgid "Payment from a payment order" |
2974 | +msgstr "Betaling uit een betaalopdracht" |
2975 | + |
2976 | +#. module: account_banking |
2977 | +#: code:addons/account_banking/banking_import_transaction.py:1732 |
2978 | +#: code:addons/account_banking/banking_import_transaction.py:1741 |
2979 | +#, python-format |
2980 | +msgid "Cannot cancel bank transaction" |
2981 | +msgstr "Kan de bankmutatie niet annuleren" |
2982 | + |
2983 | +#. module: account_banking |
2984 | +#: code:addons/account_banking/account_banking.py:443 |
2985 | +#: code:addons/account_banking/banking_import_transaction.py:1818 |
2986 | +#, python-format |
2987 | +msgid "Error !" |
2988 | +msgstr "Fout !" |
2989 | + |
2990 | +#. module: account_banking |
2991 | +#: code:addons/account_banking/account_banking.py:1308 |
2992 | +#, python-format |
2993 | +msgid "Invalid data" |
2994 | +msgstr "Ongeldige gegevens" |
2995 | + |
2996 | +#. module: account_banking |
2997 | +#: code:addons/account_banking/banking_import_transaction.py:684 |
2998 | +#: code:addons/account_banking/banking_import_transaction.py:688 |
2999 | +#: code:addons/account_banking/banking_import_transaction.py:703 |
3000 | +#, python-format |
3001 | +msgid "Cannot cancel link with storno" |
3002 | +msgstr "Kan de relatie met de storno niet annuleren" |
3003 | + |
3004 | +#. module: account_banking |
3005 | +#: selection:account.banking.bank.import,state:0 |
3006 | +msgid "review" |
3007 | +msgstr "review" |
3008 | + |
3009 | +#. module: account_banking |
3010 | +#: selection:payment.line,export_state:0 |
3011 | +msgid "Rejected" |
3012 | +msgstr "Verworpen" |
3013 | + |
3014 | +#. module: account_banking |
3015 | +#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals |
3016 | +#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals |
3017 | +msgid "Default Import Settings for Bank Accounts" |
3018 | +msgstr "Standaardinstellingen bankrekeningen voor import" |
3019 | + |
3020 | +#. module: account_banking |
3021 | +#: model:ir.actions.act_window,name:account_banking.act_account_banking_import_wizard |
3022 | +#: model:ir.actions.act_window,name:account_banking.wizard_account_banking_import_file |
3023 | +#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard |
3024 | +msgid "Import Bank Statements File" |
3025 | +msgstr "Importeer bankafschriftbestand" |
3026 | + |
3027 | +#. module: account_banking |
3028 | +#: help:account.banking.bank.import,file:0 |
3029 | +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" |
3030 | +"\n" |
3031 | +"To stay on the safe side, always load bank statements files using the same format." |
3032 | +msgstr "Het bankafschriftbestand dat geïmporteerd dient te worden. De verschillende bankformaten gaan verschillend om met de situatie waarin hetzelfde bestand meerdere keren wordt geïmporteerd.\n" |
3033 | +"\n" |
3034 | +"Het is daarom in ieder geval aan te raden om de bankafschriften altijd in hetzelfde formaat te importeren." |
3035 | + |
3036 | +#. module: account_banking |
3037 | +#: view:account.bank.statement:0 |
3038 | +#: view:account.bank.statement.line:0 |
3039 | +#: view:banking.transaction.wizard:0 |
3040 | +msgid "Match" |
3041 | +msgstr "Match" |
3042 | + |
3043 | +#. module: account_banking |
3044 | +#: field:banking.import.transaction,payment_line_id:0 |
3045 | +msgid "Payment line" |
3046 | +msgstr "Betaling" |
3047 | + |
3048 | +#. module: account_banking |
3049 | +#: field:banking.import.transaction,payment_order_id:0 |
3050 | +#: field:banking.transaction.wizard,payment_order_id:0 |
3051 | +msgid "Payment order to reconcile" |
3052 | +msgstr "Betaalopdracht ter aflettering" |
3053 | + |
3054 | +#. module: account_banking |
3055 | +#: code:addons/account_banking/banking_import_transaction.py:1742 |
3056 | +#, python-format |
3057 | +msgid "Cannot cancel this bank transaction. The information needed to undo the accounting entries has not been recorded" |
3058 | +msgstr "Kan de bankmutatie niet annuleren. De benodigde informatie om de boekingen teniet te doen is niet beschikbaar" |
3059 | + |
3060 | +#. module: account_banking |
3061 | +#: view:banking.transaction.wizard:0 |
3062 | +msgid "Duplicate flag" |
3063 | +msgstr "Duplicaatkenmerk" |
3064 | + |
3065 | +#. module: account_banking |
3066 | +#: code:addons/account_banking/banking_import_transaction.py:461 |
3067 | +#, python-format |
3068 | +msgid "Entry is already reconciled" |
3069 | +msgstr "Boeking is al afgeletterd" |
3070 | + |
3071 | +#. module: account_banking |
3072 | +#: view:account.banking.bank.import:0 |
3073 | +msgid "Transaction" |
3074 | +msgstr "Mutatie" |
3075 | + |
3076 | +#. module: account_banking |
3077 | +#: code:addons/account_banking/account_banking.py:1282 |
3078 | +#, python-format |
3079 | +msgid "Insufficient data to select online conversion database" |
3080 | +msgstr "Onvoldoende gegevens om een online conversiebestand te selecteren" |
3081 | + |
3082 | +#. module: account_banking |
3083 | +#: field:account.banking.bank.import,statement_ids:0 |
3084 | +#: view:account.banking.imported.file:0 |
3085 | +msgid "Imported Bank Statements" |
3086 | +msgstr "Geïmporteerde bankafschriften" |
3087 | + |
3088 | +#. module: account_banking |
3089 | +#: selection:payment.mode.type,payment_order_type:0 |
3090 | +#: selection:payment.order,payment_order_type:0 |
3091 | +msgid "Direct debit" |
3092 | +msgstr "Incasso-opdracht" |
3093 | + |
3094 | +#. module: account_banking |
3095 | +#: model:ir.model,name:account_banking.model_banking_import_transaction |
3096 | +msgid "Bank import transaction" |
3097 | +msgstr "Geïmporteerde bankmutatie" |
3098 | + |
3099 | +#. module: account_banking |
3100 | +#: model:ir.module.module,description:account_banking.module_meta_information |
3101 | +msgid "\n" |
3102 | +" Module to do banking.\n" |
3103 | +"\n" |
3104 | +" Note: This module is depending on BeautifulSoup.\n" |
3105 | +"\n" |
3106 | +" This modules tries to combine all current banking import and export\n" |
3107 | +" schemes. Rationale for this is that it is quite common to have foreign\n" |
3108 | +" bank account numbers next to national bank account numbers. The current\n" |
3109 | +" approach, which hides the national banking interface schemes in the\n" |
3110 | +" l10n_xxx modules, makes it very difficult to use these simultanious.\n" |
3111 | +" A more banking oriented approach seems more logical and cleaner.\n" |
3112 | +"\n" |
3113 | +" Changes to default OpenERP:\n" |
3114 | +"\n" |
3115 | +" * Puts focus on the real life messaging with banks:\n" |
3116 | +" + Bank statement lines upgraded to independent bank transactions.\n" |
3117 | +" + Banking statements have no special accountancy meaning, they're just\n" |
3118 | +" message envelopes for a number of bank transactions.\n" |
3119 | +" + Bank statements can be either encoded by hand to reflect the document\n" |
3120 | +" version of Bank Statements, or created as an optional side effect of\n" |
3121 | +" importing Bank Transactions.\n" |
3122 | +"\n" |
3123 | +" * Preparations for SEPA:\n" |
3124 | +" + IBAN accounts are the standard in the SEPA countries\n" |
3125 | +" + local accounts are derived from SEPA (excluding Turkey) but are\n" |
3126 | +" considered to be identical to the corresponding SEPA account.\n" |
3127 | +" + Banks are identified with either Country + Bank code + Branch code or BIC\n" |
3128 | +" + Each bank can have its own pace in introducing SEPA into their\n" |
3129 | +" communication with their customers.\n" |
3130 | +" + National online databases can be used to convert BBAN's to IBAN's.\n" |
3131 | +" + The SWIFT database is consulted for bank information.\n" |
3132 | +"\n" |
3133 | +" * Adds dropin extensible import facility for bank communication in:\n" |
3134 | +" - Drop-in input parser development.\n" |
3135 | +" - MultiBank (NL) format transaction files available as\n" |
3136 | +" account_banking_nl_multibank,\n" |
3137 | +"\n" |
3138 | +" * Extends payments for digital banking:\n" |
3139 | +" + Adapted workflow in payments to reflect banking operations\n" |
3140 | +" + Relies on account_payment mechanics to extend with export generators.\n" |
3141 | +" - ClieOp3 (NL) payment and direct debit orders files available as\n" |
3142 | +" account_banking_nl_clieop\n" |
3143 | +"\n" |
3144 | +" * Additional features for the import/export mechanism:\n" |
3145 | +" + Automatic matching and creation of bank accounts, banks and partners,\n" |
3146 | +" during import of statements.\n" |
3147 | +" + Automatic matching with invoices and payments.\n" |
3148 | +" + Sound import mechanism, allowing multiple imports of the same\n" |
3149 | +" transactions repeated over multiple files.\n" |
3150 | +" + Journal configuration per bank account.\n" |
3151 | +" + Business logic and format parsing strictly separated to ease the\n" |
3152 | +" development of new parsers.\n" |
3153 | +" + No special configuration needed for the parsers, new parsers are\n" |
3154 | +" recognized and made available at server (re)start.\n" |
3155 | +" " |
3156 | +msgstr "\n" |
3157 | +" Module to do banking.\n" |
3158 | +"\n" |
3159 | +" Note: This module is depending on BeautifulSoup.\n" |
3160 | +"\n" |
3161 | +" This modules tries to combine all current banking import and export\n" |
3162 | +" schemes. Rationale for this is that it is quite common to have foreign\n" |
3163 | +" bank account numbers next to national bank account numbers. The current\n" |
3164 | +" approach, which hides the national banking interface schemes in the\n" |
3165 | +" l10n_xxx modules, makes it very difficult to use these simultanious.\n" |
3166 | +" A more banking oriented approach seems more logical and cleaner.\n" |
3167 | +"\n" |
3168 | +" Changes to default OpenERP:\n" |
3169 | +"\n" |
3170 | +" * Puts focus on the real life messaging with banks:\n" |
3171 | +" + Bank statement lines upgraded to independent bank transactions.\n" |
3172 | +" + Banking statements have no special accountancy meaning, they're just\n" |
3173 | +" message envelopes for a number of bank transactions.\n" |
3174 | +" + Bank statements can be either encoded by hand to reflect the document\n" |
3175 | +" version of Bank Statements, or created as an optional side effect of\n" |
3176 | +" importing Bank Transactions.\n" |
3177 | +"\n" |
3178 | +" * Preparations for SEPA:\n" |
3179 | +" + IBAN accounts are the standard in the SEPA countries\n" |
3180 | +" + local accounts are derived from SEPA (excluding Turkey) but are\n" |
3181 | +" considered to be identical to the corresponding SEPA account.\n" |
3182 | +" + Banks are identified with either Country + Bank code + Branch code or BIC\n" |
3183 | +" + Each bank can have its own pace in introducing SEPA into their\n" |
3184 | +" communication with their customers.\n" |
3185 | +" + National online databases can be used to convert BBAN's to IBAN's.\n" |
3186 | +" + The SWIFT database is consulted for bank information.\n" |
3187 | +"\n" |
3188 | +" * Adds dropin extensible import facility for bank communication in:\n" |
3189 | +" - Drop-in input parser development.\n" |
3190 | +" - MultiBank (NL) format transaction files available as\n" |
3191 | +" account_banking_nl_multibank,\n" |
3192 | +"\n" |
3193 | +" * Extends payments for digital banking:\n" |
3194 | +" + Adapted workflow in payments to reflect banking operations\n" |
3195 | +" + Relies on account_payment mechanics to extend with export generators.\n" |
3196 | +" - ClieOp3 (NL) payment and direct debit orders files available as\n" |
3197 | +" account_banking_nl_clieop\n" |
3198 | +"\n" |
3199 | +" * Additional features for the import/export mechanism:\n" |
3200 | +" + Automatic matching and creation of bank accounts, banks and partners,\n" |
3201 | +" during import of statements.\n" |
3202 | +" + Automatic matching with invoices and payments.\n" |
3203 | +" + Sound import mechanism, allowing multiple imports of the same\n" |
3204 | +" transactions repeated over multiple files.\n" |
3205 | +" + Journal configuration per bank account.\n" |
3206 | +" + Business logic and format parsing strictly separated to ease the\n" |
3207 | +" development of new parsers.\n" |
3208 | +" + No special configuration needed for the parsers, new parsers are\n" |
3209 | +" recognized and made available at server (re)start.\n" |
3210 | +" " |
3211 | + |
3212 | +#. module: account_banking |
3213 | +#: selection:account.banking.bank.import,state:0 |
3214 | +msgid "error" |
3215 | +msgstr "error" |
3216 | + |
3217 | +#. module: account_banking |
3218 | +#: selection:account.bank.statement.line,match_type:0 |
3219 | +#: selection:banking.import.transaction,match_type:0 |
3220 | +msgid "Manual" |
3221 | +msgstr "Handmatig" |
3222 | + |
3223 | +#. module: account_banking |
3224 | +#: code:addons/account_banking/banking_import_transaction.py:1733 |
3225 | +#, python-format |
3226 | +msgid "The bank statement that this transaction belongs to has already been confirmed" |
3227 | +msgstr "Het bankafschrift waar deze mutatie toe behoort is al bevestigd" |
3228 | + |
3229 | +#. module: account_banking |
3230 | +#: code:addons/account_banking/wizard/bank_import.py:127 |
3231 | +#: code:addons/account_banking/wizard/bank_import.py:141 |
3232 | +#, python-format |
3233 | +msgid "ERROR!" |
3234 | +msgstr "FOUT!" |
3235 | + |
3236 | +#. module: account_banking |
3237 | +#: view:account.bank.statement.line:0 |
3238 | +#: field:account.bank.statement.line,state:0 |
3239 | +#: field:account.banking.bank.import,state:0 |
3240 | +#: field:account.banking.imported.file,state:0 |
3241 | +#: field:payment.line,export_state:0 |
3242 | +msgid "State" |
3243 | +msgstr "Staat" |
3244 | + |
3245 | +#. module: account_banking |
3246 | +#: view:account.banking.bank.import:0 |
3247 | +msgid "Import Bank Transactions File" |
3248 | +msgstr "Bankmutatiebestand import" |
3249 | + |
3250 | +#. module: account_banking |
3251 | +#: view:payment.order:0 |
3252 | +msgid "Make Payments" |
3253 | +msgstr "Maak betalingen" |
3254 | + |
3255 | +#. module: account_banking |
3256 | +#: code:addons/account_banking/wizard/banktools.py:206 |
3257 | +#, python-format |
3258 | +msgid "Account %(account_no)s is not owned by %(partner)s" |
3259 | +msgstr "Rekening %(account_no)s is geen eigendom van %(partner)s" |
3260 | + |
3261 | +#. module: account_banking |
3262 | +#: code:addons/account_banking/account_banking.py:1414 |
3263 | +#, python-format |
3264 | +msgid "My reference" |
3265 | +msgstr "Mijn referentie" |
3266 | + |
3267 | +#. module: account_banking |
3268 | +#: field:banking.import.transaction,statement_line_id:0 |
3269 | +#: field:banking.transaction.wizard,statement_line_id:0 |
3270 | +msgid "Statement line" |
3271 | +msgstr "Bankafschriftregel" |
3272 | + |
3273 | +#. module: account_banking |
3274 | +#: field:banking.import.transaction,storno_retry:0 |
3275 | +msgid "storno_retry" |
3276 | +msgstr "storno_retry" |
3277 | + |
3278 | +#. module: account_banking |
3279 | +#: view:banking.transaction.wizard:0 |
3280 | +msgid "Residual write-off" |
3281 | +msgstr "Afschrijven restbedrag" |
3282 | + |
3283 | +#. module: account_banking |
3284 | +#: field:banking.import.transaction,effective_date:0 |
3285 | +msgid "effective_date" |
3286 | +msgstr "effective_date" |
3287 | + |
3288 | +#. module: account_banking |
3289 | +#: view:account.bank.statement.line:0 |
3290 | +msgid "Search Bank Transactions " |
3291 | +msgstr "Zoek bankmutaties" |
3292 | + |
3293 | +#. module: account_banking |
3294 | +#: code:addons/account_banking/wizard/banktools.py:179 |
3295 | +#, python-format |
3296 | +msgid "More then one possible match found for partner with name %(name)s" |
3297 | +msgstr "Meer dan één mogelijke match gevonden voor partner met naam %(name)s" |
3298 | + |
3299 | +#. module: account_banking |
3300 | +#: field:payment.order,date_sent:0 |
3301 | +msgid "Send date" |
3302 | +msgstr "Datum verstuurd" |
3303 | + |
3304 | +#. module: account_banking |
3305 | +#: model:ir.model,name:account_banking.model_payment_mode_type |
3306 | +msgid "Payment Mode Type" |
3307 | +msgstr "Type betaalmodus" |
3308 | + |
3309 | +#. module: account_banking |
3310 | +#: field:banking.import.transaction,remote_bank_tax_id:0 |
3311 | +msgid "remote_bank_tax_id" |
3312 | +msgstr "remote_bank_tax_id" |
3313 | + |
3314 | +#. module: account_banking |
3315 | +#: view:account.banking.bank.import:0 |
3316 | +#: field:account.banking.bank.import,line_ids:0 |
3317 | +msgid "Transactions" |
3318 | +msgstr "Mutaties" |
3319 | + |
3320 | +#. module: account_banking |
3321 | +#: field:account.bank.statement.line,currency:0 |
3322 | +#: field:banking.import.line,currency:0 |
3323 | +msgid "Currency" |
3324 | +msgstr "Valuta" |
3325 | + |
3326 | +#. module: account_banking |
3327 | +#: field:banking.import.transaction,bank_country_code:0 |
3328 | +msgid "Bank country code" |
3329 | +msgstr "Bank country code" |
3330 | + |
3331 | +#. module: account_banking |
3332 | +#: help:payment.mode.type,ir_model_id:0 |
3333 | +msgid "Select the Payment Wizard for payments of this type. Leave empty for manual processing" |
3334 | +msgstr "Selecteer de wizard voor het verwerken van betalingen van dit type. Laat leeg voor handmatige verwerking." |
3335 | + |
3336 | +#. module: account_banking |
3337 | +#: field:payment.line,msg:0 |
3338 | +msgid "Message" |
3339 | +msgstr "Boodschap" |
3340 | + |
3341 | +#. module: account_banking |
3342 | +#: field:banking.transaction.wizard,match_multi:0 |
3343 | +msgid "Multiple matches" |
3344 | +msgstr "Meerdere matches" |
3345 | + |
3346 | +#. module: account_banking |
3347 | +#: view:account.banking.bank.import:0 |
3348 | +#: field:account.banking.bank.import,log:0 |
3349 | +msgid "Log" |
3350 | +msgstr "Log" |
3351 | + |
3352 | +#. module: account_banking |
3353 | +#: code:addons/account_banking/banking_import_transaction.py:553 |
3354 | +#, python-format |
3355 | +msgid "Cannot link transaction %s with accounting entry" |
3356 | +msgstr "Kan mutatie %s niet koppelen aan een journaalboeking" |
3357 | + |
3358 | +#. module: account_banking |
3359 | +#: code:addons/account_banking/banking_import_transaction.py:1177 |
3360 | +#, python-format |
3361 | +msgid "transaction %(statement_id)s.%(transaction_id)s for account %(bank_account)s uses different currency than the defined bank journal." |
3362 | +msgstr "Mutatie %(statement_id)s.%(transaction_id)s van bankrekening %(bank_account)s gebruikt een andere valuta dan het ingestelde bankboek." |
3363 | + |
3364 | +#. module: account_banking |
3365 | +#: code:addons/account_banking/banking_import_transaction.py:580 |
3366 | +#, python-format |
3367 | +msgid "Cannot link with storno" |
3368 | +msgstr "Kan niet koppelen met een storno" |
3369 | + |
3370 | +#. module: account_banking |
3371 | +#: code:addons/account_banking/banking_import_transaction.py:543 |
3372 | +#, python-format |
3373 | +msgid "Cannot link transaction %s with invoice" |
3374 | +msgstr "Kan mutatie %s niet koppelen aan een factuur" |
3375 | + |
3376 | +#. module: account_banking |
3377 | +#: selection:account.banking.imported.file,state:0 |
3378 | +msgid "Review" |
3379 | +msgstr "Herzien" |
3380 | + |
3381 | +#. module: account_banking |
3382 | +#: field:banking.transaction.wizard,manual_move_line_id:0 |
3383 | +msgid "Or match this entry" |
3384 | +msgstr "Of koppel deze boekingsregel" |
3385 | + |
3386 | +#. module: account_banking |
3387 | +#: help:payment.mode.type,name:0 |
3388 | +msgid "Payment Type" |
3389 | +msgstr "Betaaltype" |
3390 | + |
3391 | +#. module: account_banking |
3392 | +#: code:addons/account_banking/account_banking.py:1281 |
3393 | +#, python-format |
3394 | +msgid "Insufficient data" |
3395 | +msgstr "Onvoldoende gegevens" |
3396 | + |
3397 | +#. module: account_banking |
3398 | +#: field:account.banking.imported.file,file:0 |
3399 | +msgid "Raw Data" |
3400 | +msgstr "Ruwe data" |
3401 | + |
3402 | +#. module: account_banking |
3403 | +#: code:addons/account_banking/banking_import_transaction.py:1813 |
3404 | +#, python-format |
3405 | +msgid "Please verify that an account is defined in the journal." |
3406 | +msgstr "Er is een standaardrekening niet ingesteld op het dagboek." |
3407 | + |
3408 | +#. module: account_banking |
3409 | +#: code:addons/account_banking/banking_import_transaction.py:649 |
3410 | +#, python-format |
3411 | +msgid "Unreconcile payment order not implemented" |
3412 | +msgstr "Unreconcile payment order not implemented" |
3413 | + |
3414 | +#. module: account_banking |
3415 | +#: help:account.banking.account.settings,default_debit_account_id:0 |
3416 | +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." |
3417 | +msgstr "De grootboekrekening waarop een onverwachte betaling kan worden geboekt, bijvoorbeeld in het geval van eeen klant die vooruitbetaalt of als er geen overeenkomende factuur kan worden gevonden in het systeem. Merk op dat er voor het bevestigen van de boekingen nog wijzigingen kunnen worden aangebracht." |
3418 | + |
3419 | +#. module: account_banking |
3420 | +#: field:payment.mode.type,payment_order_type:0 |
3421 | +#: field:payment.order,payment_order_type:0 |
3422 | +msgid "Payment order type" |
3423 | +msgstr "Type betaalopdracht" |
3424 | + |
3425 | +#. module: account_banking |
3426 | +#: code:addons/account_banking/wizard/bank_import.py:296 |
3427 | +#, python-format |
3428 | +msgid "Total number of transactions" |
3429 | +msgstr "Totaal aantal transacties" |
3430 | + |
3431 | +#. module: account_banking |
3432 | +#: field:banking.import.transaction,exchange_rate:0 |
3433 | +msgid "exchange_rate" |
3434 | +msgstr "exchange_rate" |
3435 | + |
3436 | +#. module: account_banking |
3437 | +#: field:banking.import.line,duplicate:0 |
3438 | +msgid "Duplicate" |
3439 | +msgstr "Duplicaat" |
3440 | + |
3441 | +#. module: account_banking |
3442 | +#: code:addons/account_banking/banking_import_transaction.py:1683 |
3443 | +#, python-format |
3444 | +msgid "You have to define an analytic journal on the '%s' journal!" |
3445 | +msgstr "Er moet een analytisch journaal worden ingesteld op het '%s' journaal!" |
3446 | + |
3447 | +#. module: account_banking |
3448 | +#: code:addons/account_banking/banking_import_transaction.py:1812 |
3449 | +#, python-format |
3450 | +msgid "Configuration Error !" |
3451 | +msgstr "Configuratiefout !" |
3452 | + |
3453 | +#. module: account_banking |
3454 | +#: selection:account.bank.statement.line,state:0 |
3455 | +#: selection:payment.line,export_state:0 |
3456 | +msgid "Draft" |
3457 | +msgstr "Draft" |
3458 | + |
3459 | +#. module: account_banking |
3460 | +#: view:banking.transaction.wizard:0 |
3461 | +msgid "Disable reconciliation" |
3462 | +msgstr "Afletteren ongedaan maken" |
3463 | + |
3464 | +#. module: account_banking |
3465 | +#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement |
3466 | +msgid "Bank Statements File" |
3467 | +msgstr "Bankafschriftbestand" |
3468 | + |
3469 | +#. module: account_banking |
3470 | +#: code:addons/account_banking/parsers/models.py:368 |
3471 | +#, python-format |
3472 | +msgid "This is a stub. Please implement your own." |
3473 | +msgstr "Dit is een stub. Maak alstublieft uw eigen versie." |
3474 | + |
3475 | +#. module: account_banking |
3476 | +#: field:banking.import.transaction,type:0 |
3477 | +msgid "type" |
3478 | +msgstr "type" |
3479 | + |
3480 | +#. module: account_banking |
3481 | +#: view:account.banking.bank.import:0 |
3482 | +msgid "Import" |
3483 | +msgstr "Import" |
3484 | + |
3485 | +#. module: account_banking |
3486 | +#: field:banking.import.transaction,message:0 |
3487 | +msgid "message" |
3488 | +msgstr "message" |
3489 | + |
3490 | +#. module: account_banking |
3491 | +#: view:account.bank.statement:0 |
3492 | +#: view:account.bank.statement.line:0 |
3493 | +msgid "Confirm transaction" |
3494 | +msgstr "Bevestig mutatie" |
3495 | + |
3496 | +#. module: account_banking |
3497 | +#: field:banking.import.transaction,provision_costs_currency:0 |
3498 | +msgid "provision_costs_currency" |
3499 | +msgstr "provision_costs_currency" |
3500 | + |
3501 | +#. module: account_banking |
3502 | +#: constraint:account.bank.statement.line:0 |
3503 | +msgid "The amount of the voucher must be the same amount as the one on the statement line" |
3504 | +msgstr "Het bedrag van de bon moet hetzelfde zijn als die op de bankafschriftregel" |
3505 | + |
3506 | +#. module: account_banking |
3507 | +#: view:banking.transaction.wizard:0 |
3508 | +msgid "This bank transfer was marked as a duplicate. You can either confirm that this is not the case, or remove the bank transfer from the system." |
3509 | +msgstr "Deze bankatransactie is gemarkeerd als een duplicaat. U kunt de bankafschriftregel verwijderen uit het systeem als dit het geval is, anders kunt u het kenmerk 'duplicaat' hier verwijderen." |
3510 | + |
3511 | +#. module: account_banking |
3512 | +#: view:account.banking.imported.file:0 |
3513 | +#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files |
3514 | +#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files |
3515 | +msgid "Imported Bank Statements Files" |
3516 | +msgstr "Geïmporteerde bankafschriftbestanden" |
3517 | + |
3518 | +#. module: account_banking |
3519 | +#: field:banking.import.line,invoice_ids:0 |
3520 | +msgid "unknown" |
3521 | +msgstr "onbekend" |
3522 | + |
3523 | +#. module: account_banking |
3524 | +#: field:banking.import.transaction,remote_bank_duns:0 |
3525 | +msgid "remote_bank_duns" |
3526 | +msgstr "remote_bank_duns" |
3527 | + |
3528 | +#. module: account_banking |
3529 | +#: field:banking.import.transaction,duplicate:0 |
3530 | +msgid "duplicate" |
3531 | +msgstr "duplicaat" |
3532 | + |
3533 | +#. module: account_banking |
3534 | +#: field:account.bank.statement,banking_id:0 |
3535 | +msgid "Imported File" |
3536 | +msgstr "Geïmpoteerd bestand" |
3537 | + |
3538 | +#. module: account_banking |
3539 | +#: selection:banking.import.line,transaction_type:0 |
3540 | +msgid "Aggregate payment order" |
3541 | +msgstr "Verzamelde betaalopdracht" |
3542 | + |
3543 | +#. module: account_banking |
3544 | +#: field:banking.import.transaction,remote_owner_custno:0 |
3545 | +msgid "remote_owner_custno" |
3546 | +msgstr "remote_owner_custno" |
3547 | + |
3548 | +#. module: account_banking |
3549 | +#: view:account.banking.imported.file:0 |
3550 | +#: field:account.banking.imported.file,log:0 |
3551 | +msgid "Import Log" |
3552 | +msgstr "Impotlog" |
3553 | + |
3554 | +#. module: account_banking |
3555 | +#: field:banking.import.line,date:0 |
3556 | +msgid "Date" |
3557 | +msgstr "Datum" |
3558 | + |
3559 | +#. module: account_banking |
3560 | +#: view:account.banking.account.settings:0 |
3561 | +msgid "Generation of Bank Costs Invoices" |
3562 | +msgstr "Gegenereerde bankkostenfacturen" |
3563 | + |
3564 | +#. module: account_banking |
3565 | +#: constraint:account.move.line:0 |
3566 | +msgid "Company must be same for its related account and period." |
3567 | +msgstr "Bedrijf moet hetzelfde zijn voor de betreffende rekening en periode." |
3568 | + |
3569 | +#. module: account_banking |
3570 | +#: field:banking.import.transaction,provision_costs:0 |
3571 | +msgid "provision_costs" |
3572 | +msgstr "provision_costs" |
3573 | + |
3574 | +#. module: account_banking |
3575 | +#: view:banking.transaction.wizard:0 |
3576 | +msgid "You can disable the reconciliation of this bank transfer" |
3577 | +msgstr "U kunt het afletteren van de mutatie ongedaan maken" |
3578 | + |
3579 | +#. module: account_banking |
3580 | +#: field:account.bank.statement.line,import_transaction_id:0 |
3581 | +#: field:banking.transaction.wizard,import_transaction_id:0 |
3582 | +msgid "Import transaction" |
3583 | +msgstr "Geïmporteerde mutatie" |
3584 | + |
3585 | +#. module: account_banking |
3586 | +#: code:addons/account_banking/wizard/banktools.py:60 |
3587 | +#, python-format |
3588 | +msgid "No suitable fiscal year found for date %(date)s and company %(company_name)s" |
3589 | +msgstr "Geen geschikt boekjaar gevonden voor datum %(date)s en bedrijf %(company_name)s" |
3590 | + |
3591 | +#. module: account_banking |
3592 | +#: code:addons/account_banking/wizard/banking_transaction_wizard.py:153 |
3593 | +#, python-format |
3594 | +msgid "No entry found for the selected invoice. \" +\n" |
3595 | +" \"Try manual reconciliation." |
3596 | +msgstr "Geen boeking gevonden voor de geselecteerde factuur. \" +\n" |
3597 | +" \"Probeer handmatig af te letteren." |
3598 | + |
3599 | +#. module: account_banking |
3600 | +#: field:banking.import.transaction,error_message:0 |
3601 | +msgid "error_message" |
3602 | +msgstr "error_message" |
3603 | + |
3604 | +#. module: account_banking |
3605 | +#: code:addons/account_banking/wizard/banktools.py:82 |
3606 | +#, python-format |
3607 | +msgid "Multiple overlapping periods for date %(date)s and company %(company_name)s" |
3608 | +msgstr "Meerdere overlappende periodes gevonden voor datum %(date)s en bedrijf %(company_name)s" |
3609 | + |
3610 | +#. module: account_banking |
3611 | +#: code:addons/account_banking/wizard/bank_import.py:142 |
3612 | +#, python-format |
3613 | +msgid "The imported statements appear to be invalid! Check your file." |
3614 | +msgstr "De geïmporteerde afschriften lijken onjuist! Controleer uw bestand." |
3615 | + |
3616 | +#. module: account_banking |
3617 | +#: code:addons/account_banking/wizard/bank_import.py:304 |
3618 | +#, python-format |
3619 | +msgid "Number of statements loaded" |
3620 | +msgstr "Aantal geladen afschriften" |
3621 | + |
3622 | +#. module: account_banking |
3623 | +#: code:addons/account_banking/wizard/bank_import.py:302 |
3624 | +#, python-format |
3625 | +msgid "Number of transactions skipped due to errors" |
3626 | +msgstr "Aantal overgeslagen transacties als gevolg van fouten" |
3627 | + |
3628 | +#. module: account_banking |
3629 | +#: code:addons/account_banking/banking_import_transaction.py:1822 |
3630 | +#, python-format |
3631 | +msgid "Statement %s is confirmed, journal items are created." |
3632 | +msgstr "Afschrift %s is bevestigd, journaalposten worden aangemaakt." |
3633 | + |
3634 | +#. module: account_banking |
3635 | +#: field:banking.import.transaction,statement:0 |
3636 | +msgid "statement" |
3637 | +msgstr "statement" |
3638 | + |
3639 | +#. module: account_banking |
3640 | +#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions |
3641 | +#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings |
3642 | +msgid "Banking" |
3643 | +msgstr "Bankieren" |
3644 | + |
3645 | +#. module: account_banking |
3646 | +#: help:payment.mode,type:0 |
3647 | +msgid "Select the Payment Type for the Payment Mode." |
3648 | +msgstr "Selecteer het type van de betaalmodus." |
3649 | + |
3650 | +#. module: account_banking |
3651 | +#: view:banking.transaction.wizard:0 |
3652 | +msgid "You can let the system try to match this bank statement line again after you have made any changes in the database (for instance, add an invoice or a bank account)." |
3653 | +msgstr "Laat de mutatie opnieuw matchen met de boekingen in het systeem nadat u de nodige wijzigingen in het systeem hebt aangebracht (bijvoorbeeld na het aanmaken van een factuur of het koppelen van een relatie aan een bepaalde bankrekening." |
3654 | + |
3655 | +#. module: account_banking |
3656 | +#: help:payment.mode.type,code:0 |
3657 | +msgid "Specify the Code for Payment Type" |
3658 | +msgstr "Geef de code op voor het betaaltype" |
3659 | + |
3660 | +#. module: account_banking |
3661 | +#: selection:account.banking.imported.file,state:0 |
3662 | +msgid "Error" |
3663 | +msgstr "Fout" |
3664 | + |
3665 | +#. module: account_banking |
3666 | +#: field:payment.mode.type,ir_model_id:0 |
3667 | +msgid "Payment wizard" |
3668 | +msgstr "Betaalwizard" |
3669 | + |
3670 | +#. module: account_banking |
3671 | +#: view:banking.transaction.wizard:0 |
3672 | +msgid "Set write-off account" |
3673 | +msgstr "Stel de grootboekrekening in ter afschrijving" |
3674 | + |
3675 | +#. module: account_banking |
3676 | +#: code:addons/account_banking/wizard/banking_transaction_wizard.py:152 |
3677 | +#, python-format |
3678 | +msgid "No entry found for the selected invoice" |
3679 | +msgstr "Geen boeking gevonden voor de geselecteerde factuur" |
3680 | + |
3681 | +#. module: account_banking |
3682 | +#: code:addons/account_banking/banking_import_transaction.py:358 |
3683 | +#, python-format |
3684 | +msgid "Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: invoice %(invoice)s was already paid" |
3685 | +msgstr "Kan de mutatie met id %(trans)s (referentie: %(ref)s) niet aan factuur %(invoice)s koppelen, deze is al betaald" |
3686 | + |
3687 | +#. module: account_banking |
3688 | +#: code:addons/account_banking/banking_import_transaction.py:1090 |
3689 | +#, python-format |
3690 | +msgid "Cannot perform match on a confirmed transction" |
3691 | +msgstr "Kan geen match uitvoeren op een bevestigde mutatie" |
3692 | + |
3693 | +#. module: account_banking |
3694 | +#: field:banking.import.transaction,invoice_id:0 |
3695 | +#: field:banking.transaction.wizard,invoice_id:0 |
3696 | +msgid "Invoice to reconcile" |
3697 | +msgstr "Factuur ter aflettering" |
3698 | + |
3699 | +#. module: account_banking |
3700 | +#: code:addons/account_banking/wizard/bank_import.py:294 |
3701 | +#, python-format |
3702 | +msgid "Total number of statements" |
3703 | +msgstr "Totaal aantal afschriften" |
3704 | + |
3705 | +#. module: account_banking |
3706 | +#: field:banking.import.transaction,provision_costs_description:0 |
3707 | +msgid "provision_costs_description" |
3708 | +msgstr "provision_costs_description" |
3709 | + |
3710 | +#. module: account_banking |
3711 | +#: field:payment.mode.type,code:0 |
3712 | +msgid "Code" |
3713 | +msgstr "Code" |
3714 | + |
3715 | +#. module: account_banking |
3716 | +#: view:banking.transaction.wizard:0 |
3717 | +msgid "Manual match" |
3718 | +msgstr "Handmatige match" |
3719 | + |
3720 | +#. module: account_banking |
3721 | +#: code:addons/account_banking/account_banking.py:1018 |
3722 | +#, python-format |
3723 | +msgid "Cannot unreconcile debit order: \"+\n" |
3724 | +" \"Not implemented." |
3725 | +msgstr "Kan aflettering van een incasso-opdracht niet ongedaa maken: \"+\n" |
3726 | +" \"Niet geïmplementeerd." |
3727 | + |
3728 | +#. module: account_banking |
3729 | +#: view:banking.transaction.wizard:0 |
3730 | +msgid "Multiple matches were found for this bank transfer. You must pick one of the matches or select a match manually below." |
3731 | +msgstr "Meerdere overeenkomende boekingen zijn gevonden voor deze mutatie. U moet één van deze boekingen uitkiezen, of de mutatie handmatig matchen verderop in dit formulier." |
3732 | + |
3733 | +#. module: account_banking |
3734 | +#: field:banking.transaction.wizard,payment_order_ids:0 |
3735 | +msgid "Matching payment orders" |
3736 | +msgstr "Gekoppelde betaalopdrachten" |
3737 | + |
3738 | +#. module: account_banking |
3739 | +#: view:account.banking.imported.file:0 |
3740 | +msgid "Import Details" |
3741 | +msgstr "Importdetails" |
3742 | + |
3743 | +#. module: account_banking |
3744 | +#: field:banking.import.transaction,local_account:0 |
3745 | +msgid "local_account" |
3746 | +msgstr "local_account" |
3747 | + |
3748 | +#. module: account_banking |
3749 | +#: field:account.bank.statement.line,international:0 |
3750 | +msgid "International Transaction" |
3751 | +msgstr "Internationale mutatie" |
3752 | + |
3753 | +#. module: account_banking |
3754 | +#: model:ir.model,name:account_banking.model_account_bank_statement |
3755 | +msgid "Bank Statement" |
3756 | +msgstr "Bankafschrift" |
3757 | + |
3758 | +#. module: account_banking |
3759 | +#: field:banking.import.transaction,remote_owner_postalcode:0 |
3760 | +msgid "remote_owner_postalcode" |
3761 | +msgstr "remote_owner_postalcode" |
3762 | + |
3763 | +#. module: account_banking |
3764 | +#: view:banking.transaction.wizard:0 |
3765 | +#: selection:payment.line,export_state:0 |
3766 | +msgid "Done" |
3767 | +msgstr "Gereed" |
3768 | + |
3769 | +#. module: account_banking |
3770 | +#: selection:account.bank.statement.line,match_type:0 |
3771 | +#: selection:banking.import.transaction,match_type:0 |
3772 | +#: model:ir.model,name:account_banking.model_account_invoice |
3773 | +msgid "Invoice" |
3774 | +msgstr "Factuur" |
3775 | + |
3776 | +#. module: account_banking |
3777 | +#: code:addons/account_banking/parsers/models.py:272 |
3778 | +#, python-format |
3779 | +msgid "Invalid value for transfer_type" |
3780 | +msgstr "Ongeldige waarde voor transfer_type" |
3781 | + |
3782 | +#. module: account_banking |
3783 | +#: view:payment.order:0 |
3784 | +msgid "Select Invoices to Pay" |
3785 | +msgstr "Kies te betalen facturen" |
3786 | + |
3787 | +#. module: account_banking |
3788 | +#: view:account.banking.bank.import:0 |
3789 | +msgid "Cancel" |
3790 | +msgstr "Annuleer" |
3791 | + |
3792 | +#. module: account_banking |
3793 | +#: view:account.banking.bank.import:0 |
3794 | +msgid "Close" |
3795 | +msgstr "Sluiten" |
3796 | + |
3797 | +#. module: account_banking |
3798 | +#: field:banking.import.transaction,remote_owner_address:0 |
3799 | +msgid "remote_owner_address" |
3800 | +msgstr "remote_owner_address" |
3801 | + |
3802 | +#. module: account_banking |
3803 | +#: model:ir.model,name:account_banking.model_account_move_line |
3804 | +msgid "Journal Items" |
3805 | +msgstr "Boekingen" |
3806 | + |
3807 | +#. module: account_banking |
3808 | +#: field:account.banking.imported.file,user_id:0 |
3809 | +msgid "Responsible User" |
3810 | +msgstr "Verantwoordelijk gebruiker" |
3811 | + |
3812 | +#. module: account_banking |
3813 | +#: code:addons/account_banking/banking_import_transaction.py:1680 |
3814 | +#, python-format |
3815 | +msgid "No Analytic Journal !" |
3816 | +msgstr "Geen analytisch dagboek !" |
3817 | + |
3818 | +#. module: account_banking |
3819 | +#: selection:account.banking.imported.file,state:0 |
3820 | +msgid "Unfinished" |
3821 | +msgstr "Niet gereed" |
3822 | + |
3823 | +#. module: account_banking |
3824 | +#: code:addons/account_banking/wizard/banking_transaction_wizard.py:176 |
3825 | +#, python-format |
3826 | +msgid "Cannot select for reconcilion" |
3827 | +msgstr "Kan niet selecteren voor afletteren" |
3828 | + |
3829 | +#. module: account_banking |
3830 | +#: code:addons/account_banking/banking_import_transaction.py:1089 |
3831 | +#, python-format |
3832 | +msgid "Cannot perform match" |
3833 | +msgstr "Kan de match niet uitvoeren" |
3834 | + |
3835 | +#. module: account_banking |
3836 | +#: model:ir.model,name:account_banking.model_payment_order |
3837 | +msgid "Payment Order" |
3838 | +msgstr "Betalingsopdracht" |
3839 | + |
3840 | +#. module: account_banking |
3841 | +#: model:ir.module.module,shortdesc:account_banking.module_meta_information |
3842 | +msgid "Account Banking" |
3843 | +msgstr "Account Banking" |
3844 | + |
3845 | +#. module: account_banking |
3846 | +#: code:addons/account_banking/banking_import_transaction.py:781 |
3847 | +#, python-format |
3848 | +msgid "Bank transaction %s: write off not implemented for \" +\n" |
3849 | +" \"this match type." |
3850 | +msgstr "Bankmutatie %s: afschrijven niet geïmplementeerd voor \" +\n" |
3851 | +" \"dit matchtype." |
3852 | + |
3853 | +#. module: account_banking |
3854 | +#: code:addons/account_banking/banking_import_transaction.py:645 |
3855 | +#, python-format |
3856 | +msgid "Cannot unreconcile: no direct debit order" |
3857 | +msgstr "Kan niet afletteren: geen incasso-opdracht" |
3858 | + |
3859 | +#. module: account_banking |
3860 | +#: code:addons/account_banking/account_banking.py:1352 |
3861 | +#: code:addons/account_banking/account_banking.py:1356 |
3862 | +#: constraint:res.partner.bank:0 |
3863 | +#, python-format |
3864 | +msgid "The IBAN number doesn't seem to be correct" |
3865 | +msgstr "Het IBAN-nummer lijkt niet correct te zijn" |
3866 | + |
3867 | +#. module: account_banking |
3868 | +#: selection:banking.import.line,transaction_type:0 |
3869 | +msgid "Bank costs" |
3870 | +msgstr "Bankkosten" |
3871 | + |
3872 | +#. module: account_banking |
3873 | +#: field:account.bank.statement.line,match_multi:0 |
3874 | +#: field:banking.import.transaction,match_multi:0 |
3875 | +msgid "Multi match" |
3876 | +msgstr "Multimatch" |
3877 | + |
3878 | +#. module: account_banking |
3879 | +#: field:banking.import.transaction,remote_owner_city:0 |
3880 | +msgid "remote_owner_city" |
3881 | +msgstr "remote_owner_city" |
3882 | + |
3883 | +#. module: account_banking |
3884 | +#: code:addons/account_banking/banking_import_transaction.py:1142 |
3885 | +#, python-format |
3886 | +msgid "Transaction found for unknown account %(bank_account)s" |
3887 | +msgstr "Mutatie gevonden voor onbekende bankrekening %(bank_account)s" |
3888 | + |
3889 | +#. module: account_banking |
3890 | +#: selection:account.banking.bank.import,state:0 |
3891 | +msgid "ready" |
3892 | +msgstr "ready" |
3893 | + |
3894 | +#. module: account_banking |
3895 | +#: field:banking.import.transaction,move_line_ids:0 |
3896 | +msgid "Matching entries" |
3897 | +msgstr "Overeenkomende boekingsregels" |
3898 | + |
3899 | +#. module: account_banking |
3900 | +#: field:account.banking.bank.import,parser:0 |
3901 | +#: field:account.banking.imported.file,format:0 |
3902 | +msgid "File Format" |
3903 | +msgstr "Bestandsformaat" |
3904 | + |
3905 | +#. module: account_banking |
3906 | +#: code:addons/account_banking/account_banking.py:922 |
3907 | +#, python-format |
3908 | +msgid "You can only combine payment orders of the same type" |
3909 | +msgstr "Alleen betaalopdrachten van hetzelfde type kunnen worden gecombineerd" |
3910 | + |
3911 | +#. module: account_banking |
3912 | +#: code:addons/account_banking/wizard/banktools.py:66 |
3913 | +#, python-format |
3914 | +msgid "Multiple overlapping fiscal years found for date %(date)s and company %(company_name)s" |
3915 | +msgstr "Meerdere overlappende boekjaren gevonden voor datum %(date)s en bedrijf %(company_name)s" |
3916 | + |
3917 | +#. module: account_banking |
3918 | +#: field:account.banking.account.settings,journal_id:0 |
3919 | +msgid "Journal" |
3920 | +msgstr "Dagboek" |
3921 | + |
3922 | +#. module: account_banking |
3923 | +#: field:account.banking.account.settings,costs_account_id:0 |
3924 | +msgid "Bank Costs Account" |
3925 | +msgstr "Grootboekrekening bankkosten" |
3926 | + |
3927 | +#. module: account_banking |
3928 | +#: selection:account.banking.imported.file,state:0 |
3929 | +msgid "Finished" |
3930 | +msgstr "Gereed" |
3931 | + |
3932 | +#. module: account_banking |
3933 | +#: selection:payment.line,export_state:0 |
3934 | +msgid "Sent" |
3935 | +msgstr "Verstuurd" |
3936 | + |
3937 | +#. module: account_banking |
3938 | +#: model:ir.model,name:account_banking.model_payment_line |
3939 | +msgid "Payment Line" |
3940 | +msgstr "Betaalregel" |
3941 | + |
3942 | +#. module: account_banking |
3943 | +#: view:account.banking.account.settings:0 |
3944 | +msgid "Bank Account Details" |
3945 | +msgstr "Details bankrekening" |
3946 | + |
3947 | +#. module: account_banking |
3948 | +#: field:banking.import.transaction,remote_owner_country_code:0 |
3949 | +msgid "remote_owner_country_code" |
3950 | +msgstr "remote_owner_country_code" |
3951 | + |
3952 | +#. module: account_banking |
3953 | +#: selection:account.bank.statement.line,match_type:0 |
3954 | +#: selection:banking.import.transaction,match_type:0 |
3955 | +#: selection:payment.mode.type,payment_order_type:0 |
3956 | +#: selection:payment.order,payment_order_type:0 |
3957 | +msgid "Payment" |
3958 | +msgstr "Betaling" |
3959 | + |
3960 | +#. module: account_banking |
3961 | +#: model:ir.model,name:account_banking.model_res_bank |
3962 | +msgid "Bank" |
3963 | +msgstr "Bank" |
3964 | + |
3965 | +#. module: account_banking |
3966 | +#: selection:banking.import.line,type:0 |
3967 | +msgid "Customer" |
3968 | +msgstr "Klant" |
3969 | + |
3970 | +#. module: account_banking |
3971 | +#: code:addons/account_banking/account_banking.py:1008 |
3972 | +#: code:addons/account_banking/banking_import_transaction.py:468 |
3973 | +#: code:addons/account_banking/banking_import_transaction.py:600 |
3974 | +#: code:addons/account_banking/banking_import_transaction.py:604 |
3975 | +#: code:addons/account_banking/banking_import_transaction.py:772 |
3976 | +#: code:addons/account_banking/banking_import_transaction.py:780 |
3977 | +#, python-format |
3978 | +msgid "Cannot reconcile" |
3979 | +msgstr "Kan niet afletteren" |
3980 | + |
3981 | +#. module: account_banking |
3982 | +#: field:banking.import.line,name:0 |
3983 | +#: field:banking.transaction.wizard,name:0 |
3984 | +#: field:payment.mode.type,name:0 |
3985 | +msgid "Name" |
3986 | +msgstr "Naam" |
3987 | + |
3988 | +#. module: account_banking |
3989 | +#: help:account.banking.account.settings,costs_account_id:0 |
3990 | +msgid "The account to use when the bank invoices its own costs. Leave it blank to disable automatic invoice generation on bank costs." |
3991 | +msgstr "De grootboekrekening waarop facturen met bankkosten kunnen worden geboekt. Laat leeg om het genereren van dergelijke facturen uit te schakelen." |
3992 | + |
3993 | +#. module: account_banking |
3994 | +#: code:addons/account_banking/wizard/bank_import.py:206 |
3995 | +#, python-format |
3996 | +msgid "Statements found for account %(bank_account)s, but no default journal was defined." |
3997 | +msgstr "Bankafschriften gevonden voor bankrekening %(bank_account)s, maar er is geen standaard dagboek ingesteld." |
3998 | + |
3999 | +#. module: account_banking |
4000 | +#: code:addons/account_banking/wizard/bank_import.py:329 |
4001 | +#, python-format |
4002 | +msgid "Review Bank Statements" |
4003 | +msgstr "Inzage bankafschriften" |
4004 | + |
4005 | +#. module: account_banking |
4006 | +#: field:account.bank.statement.line,partner_bank_id:0 |
4007 | +#: field:account.banking.account.settings,partner_bank_id:0 |
4008 | +#: field:banking.import.line,partner_bank_id:0 |
4009 | +msgid "Bank Account" |
4010 | +msgstr "Bankrekening" |
4011 | + |
4012 | +#. module: account_banking |
4013 | +#: code:addons/account_banking/wizard/bank_import.py:306 |
4014 | +#, python-format |
4015 | +msgid "Number of transactions loaded" |
4016 | +msgstr "Aantal geladen transacties" |
4017 | + |
4018 | +#. module: account_banking |
4019 | +#: field:banking.import.transaction,payment_order_ids:0 |
4020 | +msgid "Payment orders" |
4021 | +msgstr "Betaalopdrachten" |
4022 | + |
4023 | +#. module: account_banking |
4024 | +#: view:banking.transaction.wizard:0 |
4025 | +msgid "System match" |
4026 | +msgstr "Automatische match" |
4027 | + |
4028 | +#. module: account_banking |
4029 | +#: code:addons/account_banking/banking_import_transaction.py:581 |
4030 | +#: code:addons/account_banking/banking_import_transaction.py:685 |
4031 | +#, python-format |
4032 | +msgid "No direct debit order item" |
4033 | +msgstr "Geen onderdeel van een incasso-opdracht" |
4034 | + |
4035 | +#. module: account_banking |
4036 | +#: code:addons/account_banking/banking_import_transaction.py:689 |
4037 | +#, python-format |
4038 | +msgid "The direct debit order item is not marked for storno" |
4039 | +msgstr "Dit item uit de incasso-opdracht is niet gemarkeerd als storno" |
4040 | + |
4041 | +#. module: account_banking |
4042 | +#: model:ir.model,name:account_banking.model_payment_order_create |
4043 | +msgid "payment.order.create" |
4044 | +msgstr "payment.order.create" |
4045 | + |
4046 | +#. module: account_banking |
4047 | +#: code:addons/account_banking/account_banking.py:1009 |
4048 | +#, python-format |
4049 | +msgid "Cannot reconcile debit order: \"+\n" |
4050 | +" \"Not implemented." |
4051 | +msgstr "Kan een incasso-opdracht niet afletteren: \"+\n" |
4052 | +" \"Niet geïmplementeerd." |
4053 | + |
4054 | +#. module: account_banking |
4055 | +#: field:banking.import.transaction,local_currency:0 |
4056 | +msgid "local_currency" |
4057 | +msgstr "local_currency" |
4058 | + |
4059 | +#. module: account_banking |
4060 | +#: field:banking.import.transaction,reference:0 |
4061 | +msgid "reference" |
4062 | +msgstr "reference" |
4063 | + |
4064 | +#. module: account_banking |
4065 | +#: model:res.partner.bank.type.field,name:account_banking.bank_acc_number_field |
4066 | +msgid "acc_number" |
4067 | +msgstr "rekeningnummer" |
4068 | + |
4069 | +#. module: account_banking |
4070 | +#: field:payment.mode,type:0 |
4071 | +msgid "Payment type" |
4072 | +msgstr "Betaaltype" |
4073 | + |
4074 | +#. module: account_banking |
4075 | +#: code:addons/account_banking/wizard/bank_import.py:308 |
4076 | +#, python-format |
4077 | +msgid "Number of transactions matched" |
4078 | +msgstr "Aantal transacties herkend" |
4079 | + |
4080 | +#. module: account_banking |
4081 | +#: field:banking.import.transaction,transaction:0 |
4082 | +msgid "transaction" |
4083 | +msgstr "mutatie" |
4084 | + |
4085 | +#. module: account_banking |
4086 | +#: code:addons/account_banking/wizard/banktools.py:200 |
4087 | +#, python-format |
4088 | +msgid "More than one bank account was found with the same number %(account_no)s" |
4089 | +msgstr "Meer dan één bankrekening gevonden met hetzelfde rekeningnummer %(account_no)s" |
4090 | + |
4091 | +#. module: account_banking |
4092 | +#: field:banking.import.transaction,remote_account:0 |
4093 | +msgid "remote_account" |
4094 | +msgstr "remote_account" |
4095 | + |
4096 | +#. module: account_banking |
4097 | +#: model:ir.model,name:account_banking.model_banking_import_line |
4098 | +msgid "Bank import lines" |
4099 | +msgstr "Bankimportregels" |
4100 | + |
4101 | +#. module: account_banking |
4102 | +#: help:account.banking.account.settings,bank_partner_id:0 |
4103 | +msgid "The partner to use for bank costs. Banks are not partners by default. You will most likely have to create one." |
4104 | +msgstr "De relatie te gebruiken op facturen voor bankkosten. Waarschijnlijk moet u een nieuwe relatie aanmaken." |
4105 | + |
4106 | +#. module: account_banking |
4107 | +#: help:account.banking.account.settings,default_credit_account_id:0 |
4108 | +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." |
4109 | +msgstr "De grootboekrekening voor het boeken van een overwachte betaling. De rekening wordt gebruikt wanneer er geen bijbehorende boeking kan worden gevonden in het systeem. Merk op dat de boekingen nog kunnen worden aangepast vóór het bevestigen ervan." |
4110 | + |
4111 | +#. module: account_banking |
4112 | +#: model:ir.model,name:account_banking.model_account_banking_imported_file |
4113 | +msgid "Imported Bank Statements File" |
4114 | +msgstr "Geïmporteerd bankafschriftbestand" |
4115 | + |
4116 | +#. module: account_banking |
4117 | +#: field:banking.import.transaction,remote_owner:0 |
4118 | +msgid "remote_owner" |
4119 | +msgstr "remote_owner" |
4120 | + |
4121 | +#. module: account_banking |
4122 | +#: selection:account.bank.statement.line,match_type:0 |
4123 | +#: selection:banking.import.transaction,match_type:0 |
4124 | +msgid "Storno" |
4125 | +msgstr "Storno" |
4126 | + |
4127 | +#. module: account_banking |
4128 | +#: constraint:account.move.line:0 |
4129 | +msgid "You can not create move line on view account." |
4130 | +msgstr "U kunt geen boekingsregel creëren op een zichtrekening" |
4131 | |
4132 | === removed file 'account_banking/i18n/nl_NL.po' |
4133 | --- account_banking/i18n/nl_NL.po 2011-02-15 09:05:56 +0000 |
4134 | +++ account_banking/i18n/nl_NL.po 1970-01-01 00:00:00 +0000 |
4135 | @@ -1,905 +0,0 @@ |
4136 | -# Translation of OpenERP Server. |
4137 | -# This file contains the translation of the following modules: |
4138 | -# * account_banking |
4139 | -# |
4140 | -msgid "" |
4141 | -msgstr "" |
4142 | -"Project-Id-Version: OpenERP Server 5.0.12\n" |
4143 | -"Report-Msgid-Bugs-To: support@openerp.com\n" |
4144 | -"POT-Creation-Date: 2011-02-12 13:17:22+0000\n" |
4145 | -"PO-Revision-Date: 2010-07-16 14:58:26+0000\n" |
4146 | -"Last-Translator: Piueter J. Kersten <p.j.kersten@edusense.nl>\n" |
4147 | -"Language-Team: Dutch\n" |
4148 | -"Language: \n" |
4149 | -"MIME-Version: 1.0\n" |
4150 | -"Content-Type: text/plain; charset=UTF-8\n" |
4151 | -"Content-Transfer-Encoding: 8bit\n" |
4152 | -"Plural-Forms: \n" |
4153 | - |
4154 | -#. module: account_banking |
4155 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4156 | -#, python-format |
4157 | -msgid "Number of bank costs invoices created" |
4158 | -msgstr "Aantal bankkosten-facturen aangemaakt" |
4159 | - |
4160 | -#. module: account_banking |
4161 | -#: wizard_view:account_banking.banking_import,view_error:0 |
4162 | -#: wizard_view:account_banking.banking_import,view_statements:0 |
4163 | -msgid "Results:" |
4164 | -msgstr "Resultaat:" |
4165 | - |
4166 | -#. module: account_banking |
4167 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4168 | -#, python-format |
4169 | -msgid "Number of errors found" |
4170 | -msgstr "Aantal gevonden fouten" |
4171 | - |
4172 | -#. module: account_banking |
4173 | -#: wizard_view:account_banking.banking_import,init:0 |
4174 | -msgid "Select the processing details:" |
4175 | -msgstr "Kies de verwerkings-details:" |
4176 | - |
4177 | -#. module: account_banking |
4178 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4179 | -#, python-format |
4180 | -msgid "" |
4181 | -"Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n" |
4182 | -" '%(no_candidates)s candidates found; can\'t choose." |
4183 | -msgstr "" |
4184 | -"Niet in staat transactie id %(trans)s (ref: %(ref)s) aan factuur te " |
4185 | -"koppelen: '\n" |
4186 | -" '%(no_candidates)s kandidaten gevonden; kan niet " |
4187 | -"kiezen." |
4188 | - |
4189 | -#. module: account_banking |
4190 | -#: model:ir.model,name:account_banking.model_account_banking_settings |
4191 | -msgid "Settings for the account_banking module" |
4192 | -msgstr "Instellingen voor de account_banking module" |
4193 | - |
4194 | -#. module: account_banking |
4195 | -#: constraint:ir.actions.act_window:0 |
4196 | -msgid "Invalid model name in the action definition." |
4197 | -msgstr "Ongeldige naam in actie-definitie." |
4198 | - |
4199 | -#. module: account_banking |
4200 | -#: field:payment.line,date_done:0 |
4201 | -msgid "Date Confirmed" |
4202 | -msgstr "Bevestigingsdatum" |
4203 | - |
4204 | -#. module: account_banking |
4205 | -#: wizard_button:account_banking.banking_import,view_statements,open_statements:0 |
4206 | -msgid "_View Statements" |
4207 | -msgstr "_Bekijk bankafschriften" |
4208 | - |
4209 | -#. module: account_banking |
4210 | -#: wizard_button:account_banking.banking_import,view_error,end:0 |
4211 | -#: wizard_button:account_banking.banking_import,view_statements,end:0 |
4212 | -msgid "_Close" |
4213 | -msgstr "_Sluit" |
4214 | - |
4215 | -#. module: account_banking |
4216 | -#: field:account.banking.account.settings,bank_partner_id:0 |
4217 | -msgid "Bank Partner" |
4218 | -msgstr "Bank-relatie" |
4219 | - |
4220 | -#. module: account_banking |
4221 | -#: model:ir.model,name:account_banking.model_account_banking_account_settings |
4222 | -msgid "Default Journal for Bank Account" |
4223 | -msgstr "Standaard dagboek voor bankrekening" |
4224 | - |
4225 | -#. module: account_banking |
4226 | -#: wizard_field:account_banking.banking_import,init,file:0 |
4227 | -msgid "Statements File" |
4228 | -msgstr "Transactiebestand" |
4229 | - |
4230 | -#. module: account_banking |
4231 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4232 | -#, python-format |
4233 | -msgid "" |
4234 | -"More than one bank account was found with the same number %(account_no)s" |
4235 | -msgstr "" |
4236 | -"Meer dan één bankrekening gevonden met hetzelfde rekeningnummer " |
4237 | -"%(account_no)s" |
4238 | - |
4239 | -#. module: account_banking |
4240 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4241 | -#, python-format |
4242 | -msgid "Total number of transactions" |
4243 | -msgstr "Totaal aantal transacties" |
4244 | - |
4245 | -#. module: account_banking |
4246 | -#: code:addons/account_banking/account_banking.py:0 |
4247 | -#, python-format |
4248 | -msgid "Account move line \"%s\" is not valid" |
4249 | -msgstr "Boekingsregel \"%s\" is onjuist." |
4250 | - |
4251 | -#. module: account_banking |
4252 | -#: help:account.banking.account.settings,default_debit_account_id:0 |
4253 | -msgid "" |
4254 | -"The account to use when an unexpected payment is received. This can be " |
4255 | -"needed when a customer pays in advance or when no matching invoice can be " |
4256 | -"found. Mind that you can correct movements before confirming them." |
4257 | -msgstr "" |
4258 | -"De rekening waarop geboekt moet worden bij onverwachte betalingen. Dit kan " |
4259 | -"nodig zijn als een klant vooruit betaalt of wanneer er geen overeenkomende " |
4260 | -"factuur gevonden kan worden. Merk op dat u altijd boekingen kunt corrigeren " |
4261 | -"voordat u deze bevestigt." |
4262 | - |
4263 | -#. module: account_banking |
4264 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4265 | -#, python-format |
4266 | -msgid "Bank account %(account_no)s was not found in the database" |
4267 | -msgstr "Bankrekening %(account_no)s niet gevonden in de database" |
4268 | - |
4269 | -#. module: account_banking |
4270 | -#: view:account.banking.account.settings:0 |
4271 | -msgid "Generation of Bank Costs Invoices" |
4272 | -msgstr "Aanmaken van bankkosten-facturen" |
4273 | - |
4274 | -#. module: account_banking |
4275 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4276 | -#, python-format |
4277 | -msgid "Number of transactions skipped due to errors" |
4278 | -msgstr "Aantal overgeslagen transacties als gevolg van fouten" |
4279 | - |
4280 | -#. module: account_banking |
4281 | -#: code:addons/account_banking/account_banking.py:0 |
4282 | -#, python-format |
4283 | -msgid "Free Reference" |
4284 | -msgstr "Vrije referentie" |
4285 | - |
4286 | -#. module: account_banking |
4287 | -#: code:addons/account_banking/account_banking.py:0 |
4288 | -#, python-format |
4289 | -msgid "" |
4290 | -"The expected balance (%.2f) is different '\n" |
4291 | -" 'than the computed one. (%.2f)" |
4292 | -msgstr "Het verwachte saldo (%.2f) wijkt af van het berekende- (%.2f)." |
4293 | - |
4294 | -#. module: account_banking |
4295 | -#: code:addons/account_banking/account_banking.py:0 |
4296 | -#, python-format |
4297 | -msgid "Structured Reference" |
4298 | -msgstr "Acceptgiro" |
4299 | - |
4300 | -#. module: account_banking |
4301 | -#: field:account.banking.account.settings,invoice_journal_id:0 |
4302 | -msgid "Costs Journal" |
4303 | -msgstr "Dagboek bankkosten" |
4304 | - |
4305 | -#. module: account_banking |
4306 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4307 | -#, python-format |
4308 | -msgid "Number of statements skipped due to errors" |
4309 | -msgstr "Aantal afschriften overgeslagen door fouten" |
4310 | - |
4311 | -#. module: account_banking |
4312 | -#: code:addons/account_banking/account_banking.py:0 |
4313 | -#, python-format |
4314 | -msgid "Invalid IBAN account number!" |
4315 | -msgstr "Ongeldig IBAN-rekeningnummer" |
4316 | - |
4317 | -#. module: account_banking |
4318 | -#: view:account.banking.account.settings:0 |
4319 | -msgid "Default Import Settings for Bank Account" |
4320 | -msgstr "Standaardinstellingen voor bankrekeningen" |
4321 | - |
4322 | -#. module: account_banking |
4323 | -#: help:account.banking.account.settings,default_credit_account_id:0 |
4324 | -msgid "" |
4325 | -"The account to use when an unexpected payment was signaled. This can happen " |
4326 | -"when a direct debit payment is cancelled by a customer, or when no matching " |
4327 | -"payment can be found. Mind that you can correct movements before confirming " |
4328 | -"them." |
4329 | -msgstr "" |
4330 | -"De te gebruiken rekening bij onverwachte betalingen. Dit kan voorkomen " |
4331 | -"indien een incasso-opdracht door een klant is geannuleerd, of wanneer er " |
4332 | -"geen overeenkomende betaling kan worden gevonden. Merk op dat u altijd " |
4333 | -"boekingen kunt corrigeren voordat u deze bevestigt." |
4334 | - |
4335 | -#. module: account_banking |
4336 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4337 | -#, python-format |
4338 | -msgid "Unable to import parser %(parser)s. Parser class not found." |
4339 | -msgstr "" |
4340 | -"Niet in staat parser %(parser)s te importeren. Parser class niet gevonden." |
4341 | - |
4342 | -#. module: account_banking |
4343 | -#: field:account.banking.imported.file,file:0 |
4344 | -msgid "Raw Data" |
4345 | -msgstr "Ruwe data" |
4346 | - |
4347 | -#. module: account_banking |
4348 | -#: selection:payment.line,export_state:0 |
4349 | -msgid "Cancelled" |
4350 | -msgstr "Geannuleerd" |
4351 | - |
4352 | -#. module: account_banking |
4353 | -#: code:addons/account_banking/account_banking.py:0 |
4354 | -#, python-format |
4355 | -msgid "" |
4356 | -"Insufficient data to select online '\n" |
4357 | -" 'conversion database" |
4358 | -msgstr "" |
4359 | -"Onvoldoende gegevens om on-line'\n" |
4360 | -" 'conversie-database te kiezen" |
4361 | - |
4362 | -#. module: account_banking |
4363 | -#: view:account.banking.imported.file:0 |
4364 | -#: field:account.banking.imported.file,statement_ids:0 |
4365 | -msgid "Statements" |
4366 | -msgstr "Afschriften" |
4367 | - |
4368 | -#. module: account_banking |
4369 | -#: field:account.banking.account.settings,default_debit_account_id:0 |
4370 | -msgid "Default debit account" |
4371 | -msgstr "Standaard debet-rekening" |
4372 | - |
4373 | -#. module: account_banking |
4374 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4375 | -#, python-format |
4376 | -msgid "Unknown Bank" |
4377 | -msgstr "Onbekende bank" |
4378 | - |
4379 | -#. module: account_banking |
4380 | -#: wizard_button:account_banking.banking_import,init,end:0 |
4381 | -msgid "_Cancel" |
4382 | -msgstr "_Annuleer" |
4383 | - |
4384 | -#. module: account_banking |
4385 | -#: code:addons/account_banking/account_banking.py:0 |
4386 | -#, python-format |
4387 | -msgid "Invalid format" |
4388 | -msgstr "Ongeldig formaat" |
4389 | - |
4390 | -#. module: account_banking |
4391 | -#: field:account.banking.imported.file,date:0 |
4392 | -msgid "Import Date" |
4393 | -msgstr "Importdatum" |
4394 | - |
4395 | -#. module: account_banking |
4396 | -#: selection:payment.line,export_state:0 |
4397 | -msgid "Confirmed" |
4398 | -msgstr "Bevestigd" |
4399 | - |
4400 | -#. module: account_banking |
4401 | -#: model:ir.actions.act_window,name:account_banking.action_account_banking_res_partner_banks |
4402 | -#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_accounts |
4403 | -msgid "Bank Accounts" |
4404 | -msgstr "Bankrekeningen" |
4405 | - |
4406 | -#. module: account_banking |
4407 | -#: view:account.banking.account.settings:0 |
4408 | -msgid "Default Accounts for Unknown Movements" |
4409 | -msgstr "Standaard rekeningen voor onverwachte mutaties" |
4410 | - |
4411 | -#. module: account_banking |
4412 | -#: view:account.bank.statement:0 |
4413 | -msgid "Confirm" |
4414 | -msgstr "Bevestig" |
4415 | - |
4416 | -#. module: account_banking |
4417 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4418 | -#, python-format |
4419 | -msgid "" |
4420 | -"Statements found for account %(bank_account)s, '\n" |
4421 | -" 'but no default journal was defined." |
4422 | -msgstr "" |
4423 | -"Afschriften gevonden voor bankrekening %(bank_account)s, maar geen " |
4424 | -"gedefinieerd dagboek gevonden hiervoor." |
4425 | - |
4426 | -#. module: account_banking |
4427 | -#: field:account.banking.account.settings,default_credit_account_id:0 |
4428 | -msgid "Default credit account" |
4429 | -msgstr "Standaard credit-rekening" |
4430 | - |
4431 | -#. module: account_banking |
4432 | -#: field:account.bank.statement.line,international:0 |
4433 | -msgid "International Transaction" |
4434 | -msgstr "Internationale transactie" |
4435 | - |
4436 | -#. module: account_banking |
4437 | -#: code:addons/account_banking/account_banking.py:0 |
4438 | -#, python-format |
4439 | -msgid "Please verify that an account is defined in the journal." |
4440 | -msgstr "Controleer alstublieft of een rekening is opgegeven in het journaal" |
4441 | - |
4442 | -#. module: account_banking |
4443 | -#: field:account.bank.statement.line,trans:0 |
4444 | -msgid "Bank Transaction ID" |
4445 | -msgstr "Transactie ID bank" |
4446 | - |
4447 | -#. module: account_banking |
4448 | -#: help:account.banking.account.settings,invoice_journal_id:0 |
4449 | -msgid "This is the journal used to create invoices for bank costs." |
4450 | -msgstr "" |
4451 | -"Dit is het dagboek dat gebruikt wordt bij het aanmaken van bankkosten-" |
4452 | -"facturen." |
4453 | - |
4454 | -#. module: account_banking |
4455 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4456 | -#, python-format |
4457 | -msgid "Statement %(id)s known - skipped" |
4458 | -msgstr "Afschrift %(id)s al bekend - overgeslagen" |
4459 | - |
4460 | -#. module: account_banking |
4461 | -#: selection:payment.line,export_state:0 |
4462 | -msgid "Sent" |
4463 | -msgstr "Verzonden" |
4464 | - |
4465 | -#. module: account_banking |
4466 | -#: help:account.banking.account.settings,costs_account_id:0 |
4467 | -msgid "" |
4468 | -"The account to use when the bank invoices its own costs. Leave it blank to " |
4469 | -"disable automatic invoice generation on bank costs." |
4470 | -msgstr "" |
4471 | -"De te gebruiken grootboekrekening wanneer de bank zijn kosten incasseert. " |
4472 | -"Laat leeg om het automatisch aanmaken van facturen voor bankkosten uit te " |
4473 | -"zetten." |
4474 | - |
4475 | -#. module: account_banking |
4476 | -#: code:addons/account_banking/account_banking.py:0 |
4477 | -#, python-format |
4478 | -msgid "Error !" |
4479 | -msgstr "Fout !" |
4480 | - |
4481 | -#. module: account_banking |
4482 | -#: code:addons/account_banking/account_banking.py:0 |
4483 | -#, python-format |
4484 | -msgid "Invalid data" |
4485 | -msgstr "Ongeldige gegevens" |
4486 | - |
4487 | -#. module: account_banking |
4488 | -#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry |
4489 | -msgid "country_id" |
4490 | -msgstr "Landcode" |
4491 | - |
4492 | -#. module: account_banking |
4493 | -#: selection:payment.line,export_state:0 |
4494 | -msgid "Rejected" |
4495 | -msgstr "Geweigerd" |
4496 | - |
4497 | -#. module: account_banking |
4498 | -#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals |
4499 | -#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals |
4500 | -msgid "Default Import Settings for Bank Accounts" |
4501 | -msgstr "Standaardinstellingen voor bankrekeningen" |
4502 | - |
4503 | -#. module: account_banking |
4504 | -#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file |
4505 | -#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard |
4506 | -msgid "Import Bank Statements File" |
4507 | -msgstr "Importeer bankafschrift bestand" |
4508 | - |
4509 | -#. module: account_banking |
4510 | -#: help:account_banking.banking_import,init,file:0 |
4511 | -msgid "" |
4512 | -"The Transactions File to import. Please note that while it is perfectly safe " |
4513 | -"to reload the same file multiple times or to load in timeframe overlapping " |
4514 | -"statements files, there are formats that may introduce different sequencing, " |
4515 | -"which may create double entries.\n" |
4516 | -"\n" |
4517 | -"To stay on the safe side, always load bank statements files using the same " |
4518 | -"format." |
4519 | -msgstr "" |
4520 | -"Het te importeren transactiebestand. Let alstublieft op: hoewel het " |
4521 | -"zondermeer veilig is om hetzelfde bestand meerdere keren te importeren of om " |
4522 | -"in tijd overlappende bestanden te importeren, zijn er formaten die een ander " |
4523 | -"nummeringsschema introduceren, wat tot problemen kan leiden.\n" |
4524 | -"\n" |
4525 | -"Om aan de veilige kant te blijven, importeer altijd transactiebestanden in " |
4526 | -"hetzelfde formaat." |
4527 | - |
4528 | -#. module: account_banking |
4529 | -#: model:payment.type,name:account_banking.manual_bank_tranfer |
4530 | -msgid "Manual Bank Transfer" |
4531 | -msgstr "" |
4532 | - |
4533 | -#. module: account_banking |
4534 | -#: code:addons/account_banking/sepa/bbantoiban.py:0 |
4535 | -#, python-format |
4536 | -msgid "This is a stub. Please implement your own code" |
4537 | -msgstr "Dit is een stub. Maak alstublieft uw eigen versie." |
4538 | - |
4539 | -#. module: account_banking |
4540 | -#: constraint:ir.ui.view:0 |
4541 | -msgid "Invalid XML for View Architecture!" |
4542 | -msgstr "Ongeldige XML voor overzicht" |
4543 | - |
4544 | -#. module: account_banking |
4545 | -#: view:account.banking.imported.file:0 |
4546 | -msgid "Imported Bank Statements" |
4547 | -msgstr "Geïmporteerde bankafschriften" |
4548 | - |
4549 | -#. module: account_banking |
4550 | -#: model:ir.module.module,description:account_banking.module_meta_information |
4551 | -msgid "" |
4552 | -"\n" |
4553 | -" Module to do banking.\n" |
4554 | -"\n" |
4555 | -" Note: This module is depending on BeautifulSoup.\n" |
4556 | -"\n" |
4557 | -" This modules tries to combine all current banking import and export\n" |
4558 | -" schemes. Rationale for this is that it is quite common to have foreign\n" |
4559 | -" bank account numbers next to national bank account numbers. The current\n" |
4560 | -" approach, which hides the national banking interface schemes in the\n" |
4561 | -" l10n_xxx modules, makes it very difficult to use these simultanious.\n" |
4562 | -" A more banking oriented approach seems more logical and cleaner.\n" |
4563 | -"\n" |
4564 | -" Changes to default OpenERP:\n" |
4565 | -"\n" |
4566 | -" * Puts focus on the real life messaging with banks:\n" |
4567 | -" + Bank statement lines upgraded to independent bank transactions.\n" |
4568 | -" + Banking statements have no special accountancy meaning, they're " |
4569 | -"just\n" |
4570 | -" message envelopes for a number of bank transactions.\n" |
4571 | -" + Bank statements can be either encoded by hand to reflect the " |
4572 | -"document\n" |
4573 | -" version of Bank Statements, or created as an optional side effect " |
4574 | -"of\n" |
4575 | -" importing Bank Transactions.\n" |
4576 | -"\n" |
4577 | -" * Preparations for SEPA:\n" |
4578 | -" + IBAN accounts are the standard in the SEPA countries\n" |
4579 | -" + local accounts are derived from SEPA (excluding Turkey) but are\n" |
4580 | -" considered to be identical to the corresponding SEPA account.\n" |
4581 | -" + Banks are identified with either Country + Bank code + Branch code " |
4582 | -"or BIC\n" |
4583 | -" + Each bank can have its own pace in introducing SEPA into their\n" |
4584 | -" communication with their customers.\n" |
4585 | -" + National online databases can be used to convert BBAN's to IBAN's.\n" |
4586 | -" + The SWIFT database is consulted for bank information.\n" |
4587 | -"\n" |
4588 | -" * Adds dropin extensible import facility for bank communication in:\n" |
4589 | -" - Drop-in input parser development.\n" |
4590 | -" - MultiBank (NL) format transaction files available as\n" |
4591 | -" account_banking_nl_multibank,\n" |
4592 | -"\n" |
4593 | -" * Extends payments for digital banking:\n" |
4594 | -" + Adapted workflow in payments to reflect banking operations\n" |
4595 | -" + Relies on account_payment mechanics to extend with export " |
4596 | -"generators.\n" |
4597 | -" - ClieOp3 (NL) payment and direct debit orders files available as\n" |
4598 | -" account_banking_nl_clieop\n" |
4599 | -"\n" |
4600 | -" * Additional features for the import/export mechanism:\n" |
4601 | -" + Automatic matching and creation of bank accounts, banks and " |
4602 | -"partners,\n" |
4603 | -" during import of statements.\n" |
4604 | -" + Automatic matching with invoices and payments.\n" |
4605 | -" + Sound import mechanism, allowing multiple imports of the same\n" |
4606 | -" transactions repeated over multiple files.\n" |
4607 | -" + Journal configuration per bank account.\n" |
4608 | -" + Business logic and format parsing strictly separated to ease the\n" |
4609 | -" development of new parsers.\n" |
4610 | -" + No special configuration needed for the parsers, new parsers are\n" |
4611 | -" recognized and made available at server (re)start.\n" |
4612 | -" " |
4613 | -msgstr "" |
4614 | -" Module voor bankzaken.\n" |
4615 | -"\n" |
4616 | -" Waarschuwing: deze module is afhankelijk van BeautifulSoup.\n" |
4617 | -"\n" |
4618 | -" Deze module probeert alle bestaande bankimport- en -exportschema's\n" |
4619 | -" te combineren. Ratio hierachter is dat het vrij gebruikelijk is om\n" |
4620 | -" buitenlandse bankrekeningen te hebben naast nationale-. De huidige\n" |
4621 | -" benadering waarbij nationale bankinterfaces ondergebracht worden in\n" |
4622 | -" de l10n_xxx modules, maakt het zeer lastig om deze naast elkaar te\n" |
4623 | -" gebruiken. Een meer bank-geöriënteerde benadering lijkt logischer en\n" |
4624 | -" 'schoner'.\n" |
4625 | -"\n" |
4626 | -" Wijzigingen op standaard OpenERP:\n" |
4627 | -"\n" |
4628 | -" * Legt focus op berichtuitwisseling met banken:\n" |
4629 | -" + Bankafschriftregels opgewaardeerd naar onafhankelijke " |
4630 | -"banktransacties.\n" |
4631 | -" + Bankafschriften hebben geen speciale accountancy-betekenis, ze zijn\n" |
4632 | -" slechts enveloppen voor een reeks banktransacties.\n" |
4633 | -" + Bankafschriften kunnen hetzij met de hand worden ingevoerd als " |
4634 | -"projectie\n" |
4635 | -" van de papieren versie, of gemaakt worden als neveneffect van het\n" |
4636 | -" importeren van banktransacties.\n" |
4637 | -"\n" |
4638 | -" * Voorbereidingen voor SEPA:\n" |
4639 | -" + IBAN bankrekeningen zijn de standaard in de SEPA-landen\n" |
4640 | -" + lokale bankrekeningen worden afgeleid van SEPA (uitgezonderd " |
4641 | -"Turkije)\n" |
4642 | -" maar worden beschouwd als identiek aan de corresponderende IBAN-" |
4643 | -"rekening.\n" |
4644 | -" + Banken worden geïdentificeerd met hetzij land + bankcode + " |
4645 | -"branchcode of BIC\n" |
4646 | -" + Elke bank kan in zijn eigen tempo SEPA invoeren in diens \n" |
4647 | -" communicatie met de klant.\n" |
4648 | -" + Nationale online databases kunnen gebruikt worden om BBAN's naar\n" |
4649 | -" IBAN's te converteren.\n" |
4650 | -"\n" |
4651 | -" * Geeft dropin uitbreidbare importvoorzieningen voor bankcommunicatie " |
4652 | -"in:\n" |
4653 | -" + MultiBank (NL) formaat transactiebestanden,\n" |
4654 | -"\n" |
4655 | -" * Breidt betalingen uit voor digitaal bankieren:\n" |
4656 | -" + Werkstroom in betalingen aangepast voor bank-operaties\n" |
4657 | -" + Bouwt op account_payment mechanieken voor uitbreidingen met export " |
4658 | -"generatoren.\n" |
4659 | -" - ClieOp3 (NL) betalings- en incasso-opdrachten beschikbaar in de\n" |
4660 | -" account_banking_nl_clieop module\n" |
4661 | -"\n" |
4662 | -" * Toegevoegde mogelijkheden voor het import/export mechanisme:\n" |
4663 | -" + Automatische koppeling en aanmaken van bankrekeningen, banken en " |
4664 | -"relaties\n" |
4665 | -" tijdens het importeren van transacties.\n" |
4666 | -" + Automatisch koppelen met facturen en betalingen.\n" |
4667 | -" + Solide importmechanisme dat meerdere imports van dezelfde " |
4668 | -"transacties over\n" |
4669 | -" over meerdere bestanden toestaat.\n" |
4670 | -" + Dagboek-instellingen per bankrekening.\n" |
4671 | -" + Business logica en bestands-parsing strikt gescheiden om de " |
4672 | -"ontwikkeling\n" |
4673 | -" van nieuwe parsers te vergemakkelijken\n" |
4674 | -" + Geen speciale configuratie nodig voor de parsers, nieuwe parsers " |
4675 | -"worden\n" |
4676 | -" herkend en beschikbaar gemaakt voor gebuikers bij server(her)start.\n" |
4677 | -" " |
4678 | - |
4679 | -#. module: account_banking |
4680 | -#: wizard_view:account_banking.banking_import,init:0 |
4681 | -#: wizard_view:account_banking.banking_import,view_error:0 |
4682 | -#: wizard_view:account_banking.banking_import,view_statements:0 |
4683 | -msgid "Import Bank Transactions File" |
4684 | -msgstr "Importeer banktransacties-bestand" |
4685 | - |
4686 | -#. module: account_banking |
4687 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4688 | -#, python-format |
4689 | -msgid "Account %(account_no)s is not owned by %(partner)s" |
4690 | -msgstr "Rekening %(account_no)s is geen eigendom van %(partner)s" |
4691 | - |
4692 | -#. module: account_banking |
4693 | -#: wizard_button:account_banking.banking_import,init,import:0 |
4694 | -msgid "_Ok" |
4695 | -msgstr "_Ok" |
4696 | - |
4697 | -#. module: account_banking |
4698 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4699 | -#, python-format |
4700 | -msgid "Candidates: %(candidates)s" |
4701 | -msgstr "Kandidaten: %(candidate)s" |
4702 | - |
4703 | -#. module: account_banking |
4704 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4705 | -#, python-format |
4706 | -msgid "More then one possible match found for partner with name %(name)s" |
4707 | -msgstr "Meer dan één mogelijke match gevonden voor partner met naam %(name)s" |
4708 | - |
4709 | -#. module: account_banking |
4710 | -#: field:account.banking.imported.file,state:0 |
4711 | -#: field:payment.line,export_state:0 |
4712 | -msgid "State" |
4713 | -msgstr "Status" |
4714 | - |
4715 | -#. module: account_banking |
4716 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4717 | -#, python-format |
4718 | -msgid "ERROR!" |
4719 | -msgstr "FOUT!" |
4720 | - |
4721 | -#. module: account_banking |
4722 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4723 | -#, python-format |
4724 | -msgid "" |
4725 | -"Unable to link transaction id %(trans)s '\n" |
4726 | -" '(ref: %(ref)s) to invoice: '\n" |
4727 | -" 'invoice %(invoice)s was already paid" |
4728 | -msgstr "" |
4729 | -"Niet in staat transactie id %(trans)s '\n" |
4730 | -" '(ref: %(ref)s) met factuur te koppelen: '\n" |
4731 | -" 'factuur %(invoice)s was al betaald" |
4732 | - |
4733 | -#. module: account_banking |
4734 | -#: code:addons/account_banking/account_banking.py:0 |
4735 | -#, python-format |
4736 | -msgid "The account number has the wrong format for %(country)s" |
4737 | -msgstr "Het rekeningnummer heeft het verkeerde formaat voor %(country)s" |
4738 | - |
4739 | -#. module: account_banking |
4740 | -#: field:account.bank.statement.line,currency:0 |
4741 | -msgid "Currency" |
4742 | -msgstr "Valuta" |
4743 | - |
4744 | -#. module: account_banking |
4745 | -#: field:payment.line,msg:0 |
4746 | -msgid "Message" |
4747 | -msgstr "Bericht" |
4748 | - |
4749 | -#. module: account_banking |
4750 | -#: field:account.banking.account.settings,company_id:0 |
4751 | -#: field:account.banking.imported.file,company_id:0 |
4752 | -#: wizard_field:account_banking.banking_import,init,company:0 |
4753 | -msgid "Company" |
4754 | -msgstr "Bedrijf" |
4755 | - |
4756 | -#. module: account_banking |
4757 | -#: wizard_field:account_banking.banking_import,view_error,log:0 |
4758 | -#: wizard_field:account_banking.banking_import,view_statements,log:0 |
4759 | -msgid "Log" |
4760 | -msgstr "Logboek" |
4761 | - |
4762 | -#. module: account_banking |
4763 | -#: code:addons/account_banking/parsers/models.py:0 |
4764 | -#, python-format |
4765 | -msgid "Invalid value for transfer_type" |
4766 | -msgstr "Ongeldige waarde voor transfer_type" |
4767 | - |
4768 | -#. module: account_banking |
4769 | -#: code:addons/account_banking/account_banking.py:0 |
4770 | -#, python-format |
4771 | -msgid "Insufficient data" |
4772 | -msgstr "Onvoldoende gegevens" |
4773 | - |
4774 | -#. module: account_banking |
4775 | -#: code:addons/account_banking/account_banking.py:0 |
4776 | -#, python-format |
4777 | -msgid "Configration Error !" |
4778 | -msgstr "Instellingsfout!" |
4779 | - |
4780 | -#. module: account_banking |
4781 | -#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement |
4782 | -msgid "Bank Statements File" |
4783 | -msgstr "Bankafschrift bestand" |
4784 | - |
4785 | -#. module: account_banking |
4786 | -#: code:addons/account_banking/parsers/models.py:0 |
4787 | -#, python-format |
4788 | -msgid "This is a stub. Please implement your own." |
4789 | -msgstr "Dit is een stub. Maak alstublieft uw eigen versie." |
4790 | - |
4791 | -#. module: account_banking |
4792 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4793 | -#, python-format |
4794 | -msgid "No suitable period found for date %(date)s and company %(company_name)s" |
4795 | -msgstr "" |
4796 | -"Geen geschikt boekjaar gevonden voor datum %(date)s en bedrijf " |
4797 | -"%(company_name)s" |
4798 | - |
4799 | -#. module: account_banking |
4800 | -#: view:account.banking.imported.file:0 |
4801 | -#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files |
4802 | -#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files |
4803 | -msgid "Imported Bank Statements Files" |
4804 | -msgstr "Geïmporteerde bankafschrift bestanden" |
4805 | - |
4806 | -#. module: account_banking |
4807 | -#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_payment_manual |
4808 | -msgid "Manual Bank Payment" |
4809 | -msgstr "Handmatige betaling via bank" |
4810 | - |
4811 | -#. module: account_banking |
4812 | -#: field:account.bank.statement,banking_id:0 |
4813 | -msgid "Imported File" |
4814 | -msgstr "Geïmporteerd bestand" |
4815 | - |
4816 | -#. module: account_banking |
4817 | -#: view:account.banking.imported.file:0 |
4818 | -#: field:account.banking.imported.file,log:0 |
4819 | -msgid "Import Log" |
4820 | -msgstr "Import log" |
4821 | - |
4822 | -#. module: account_banking |
4823 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4824 | -#, python-format |
4825 | -msgid "" |
4826 | -"Multiple overlapping periods for date %(date)s and company %(company_name)s" |
4827 | -msgstr "" |
4828 | -"Meerdere overlappende periodes gevonden voor datum %(date)s en bedrijf " |
4829 | -"%(company_name)s" |
4830 | - |
4831 | -#. module: account_banking |
4832 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4833 | -#, python-format |
4834 | -msgid "The imported statements appear to be invalid! Check your file." |
4835 | -msgstr "De geïmporteerde afschriften lijken onjuist! Controleer uw bestand." |
4836 | - |
4837 | -#. module: account_banking |
4838 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4839 | -#, python-format |
4840 | -msgid "Number of statements loaded" |
4841 | -msgstr "Aantal geladen afschriften" |
4842 | - |
4843 | -#. module: account_banking |
4844 | -#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions |
4845 | -#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings |
4846 | -msgid "Banking" |
4847 | -msgstr "Bankzaken" |
4848 | - |
4849 | -#. module: account_banking |
4850 | -#: selection:account.banking.imported.file,state:0 |
4851 | -msgid "Error" |
4852 | -msgstr "Fout" |
4853 | - |
4854 | -#. module: account_banking |
4855 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4856 | -#, python-format |
4857 | -msgid "Total number of statements" |
4858 | -msgstr "Totaal aantal afschriften" |
4859 | - |
4860 | -#. module: account_banking |
4861 | -#: code:addons/account_banking/account_banking.py:0 |
4862 | -#, python-format |
4863 | -msgid "Unable to reconcile entry \"%s\": %.2f" |
4864 | -msgstr "Niet in staat boeking af te letteren \"%s\": %.2f" |
4865 | - |
4866 | -#. module: account_banking |
4867 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4868 | -#, python-format |
4869 | -msgid "" |
4870 | -"No suitable fiscal year found for date %(date)s and company %(company_name)s" |
4871 | -msgstr "" |
4872 | -"Geen geschikt boekjaar gevonden voor datum %(date)s en bedrijf " |
4873 | -"%(company_name)s" |
4874 | - |
4875 | -#. module: account_banking |
4876 | -#: view:account.banking.imported.file:0 |
4877 | -msgid "Import Details" |
4878 | -msgstr "Details import" |
4879 | - |
4880 | -#. module: account_banking |
4881 | -#: field:account.bank.statement.line,period_id:0 |
4882 | -msgid "Period" |
4883 | -msgstr "Periode" |
4884 | - |
4885 | -#. module: account_banking |
4886 | -#: selection:payment.line,export_state:0 |
4887 | -msgid "Done" |
4888 | -msgstr "Verwerkt" |
4889 | - |
4890 | -#. module: account_banking |
4891 | -#: view:payment.order:0 |
4892 | -msgid "Select Invoices to Pay" |
4893 | -msgstr "Kies te betalen facturen" |
4894 | - |
4895 | -#. module: account_banking |
4896 | -#: field:account.banking.imported.file,user_id:0 |
4897 | -msgid "Responsible User" |
4898 | -msgstr "Verantwoordelijke gebruiker" |
4899 | - |
4900 | -#. module: account_banking |
4901 | -#: code:addons/account_banking/account_banking.py:0 |
4902 | -#, python-format |
4903 | -msgid "The statement balance is incorrect !\n" |
4904 | -msgstr "Het saldo van het afschrift klopt niet !" |
4905 | - |
4906 | -#. module: account_banking |
4907 | -#: constraint:ir.model:0 |
4908 | -msgid "" |
4909 | -"The Object name must start with x_ and not contain any special character !" |
4910 | -msgstr "" |
4911 | -"De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !" |
4912 | - |
4913 | -#. module: account_banking |
4914 | -#: selection:account.banking.imported.file,state:0 |
4915 | -msgid "Unfinished" |
4916 | -msgstr "Onvoltooid" |
4917 | - |
4918 | -#. module: account_banking |
4919 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4920 | -#, python-format |
4921 | -msgid "Statements found for unknown account %(bank_account)s" |
4922 | -msgstr "Afschriften gevonden voor onbekende bankrekening %(bank_account)s" |
4923 | - |
4924 | -#. module: account_banking |
4925 | -#: model:ir.module.module,shortdesc:account_banking.module_meta_information |
4926 | -msgid "Account Banking" |
4927 | -msgstr "Account Banking" |
4928 | - |
4929 | -#. module: account_banking |
4930 | -#: wizard_button:account_banking.banking_import,view_error,open_import:0 |
4931 | -msgid "_View Imported File" |
4932 | -msgstr "_Bekijk geïmporteerd bestand" |
4933 | - |
4934 | -#. module: account_banking |
4935 | -#: code:addons/account_banking/account_banking.py:0 |
4936 | -#, python-format |
4937 | -msgid "The IBAN number doesn't seem to be correct" |
4938 | -msgstr "Het IBAN-nummer lijkt niet correct te zijn" |
4939 | - |
4940 | -#. module: account_banking |
4941 | -#: field:account.banking.imported.file,format:0 |
4942 | -#: wizard_field:account_banking.banking_import,init,parser:0 |
4943 | -msgid "File Format" |
4944 | -msgstr "Bestandsformaat" |
4945 | - |
4946 | -#. module: account_banking |
4947 | -#: code:addons/account_banking/wizard/banktools.py:0 |
4948 | -#, python-format |
4949 | -msgid "" |
4950 | -"Multiple overlapping fiscal years found for date %(date)s and company " |
4951 | -"%(company_name)s" |
4952 | -msgstr "" |
4953 | -"Meerdere overlappende boekjaren gevonden voor datum %(date)s en bedrijf " |
4954 | -"%(company_name)s" |
4955 | - |
4956 | -#. module: account_banking |
4957 | -#: field:account.banking.account.settings,journal_id:0 |
4958 | -msgid "Journal" |
4959 | -msgstr "Dagboek" |
4960 | - |
4961 | -#. module: account_banking |
4962 | -#: field:account.banking.account.settings,costs_account_id:0 |
4963 | -msgid "Bank Costs Account" |
4964 | -msgstr "Bankkosten-rekening" |
4965 | - |
4966 | -#. module: account_banking |
4967 | -#: selection:account.banking.imported.file,state:0 |
4968 | -msgid "Finished" |
4969 | -msgstr "Gereed" |
4970 | - |
4971 | -#. module: account_banking |
4972 | -#: selection:payment.line,export_state:0 |
4973 | -msgid "Draft" |
4974 | -msgstr "Concept" |
4975 | - |
4976 | -#. module: account_banking |
4977 | -#: view:account.banking.account.settings:0 |
4978 | -msgid "Bank Account Details" |
4979 | -msgstr "Details bankrekening" |
4980 | - |
4981 | -#. module: account_banking |
4982 | -#: field:account.bank.statement.line,partner_bank_id:0 |
4983 | -#: field:account.banking.account.settings,partner_bank_id:0 |
4984 | -msgid "Bank Account" |
4985 | -msgstr "Bankrekening" |
4986 | - |
4987 | -#. module: account_banking |
4988 | -#: code:addons/account_banking/wizard/bank_import.py:0 |
4989 | -#, python-format |
4990 | -msgid "Number of transactions loaded" |
4991 | -msgstr "Aantal geladen transacties" |
4992 | - |
4993 | -#. module: account_banking |
4994 | -#: code:addons/account_banking/account_banking.py:0 |
4995 | -#, python-format |
4996 | -msgid "The account number appears to be invalid for %(country)s" |
4997 | -msgstr "Het bankrekeningnummer blijkt ongeldig te zijn voor %(country)s" |
4998 | - |
4999 | -#. module: account_banking |
5000 | -#: model:res.partner.bank.type.field,name:account_banking.bank_acc_number_field |