[FIX] account_banking: fixed sloppy coding

[FIX] account_banking: fixed error handling for Belgian IBAN convertor
[FIX] account_banking: fixed straight copy for early IBAN adopters
[IMP] account_banking: improved matching algorithm, handles split and combined payments as well
[IMP] account_banking: better partner selection - now handles shared bank accounts
[FIX] account_banking: default accounts can be overruled now
[IMP] account_banking: extensions on memory model for bank transactions
[IMP] account_banking: optional automatic creation of invoices for bank accounts
[IMP] account_banking_xxx: translations update
[IMP] account_banking_nl_clieop: better coding style
[IMP] account_banking_nl_multibank: extended for memory model changes
This commit is contained in:
Pieter J. Kersten
2010-06-29 16:58:52 +02:00
parent 0424264dcf
commit b597176a96
21 changed files with 5078 additions and 981 deletions

View File

@@ -76,17 +76,12 @@
- Drop-in input parser development.
- MultiBank (NL) format transaction files available as
account_banking_nl_multibank,
- (todo) MT940 (Swift) format transaction files,
- (todo) CODA (BE) format transaction files,
- (wish) SEPA Credits (ISO 200022) messages,
* Extends payments for digital banking:
+ Adapted workflow in payments to reflect banking operations
+ Relies on account_payment mechanics to extend with export generators.
- ClieOp3 (NL) payment and direct debit orders files available as
account_banking_nl_clieop
- (wish) BTL91 (NL) payment orders files (no format description available),
- (wish) SEPA Direct Debits (ISO 200022) messages
* Additional features for the import/export mechanism:
+ Automatic matching and creation of bank accounts, banks and partners,

View File

@@ -55,6 +55,7 @@ Modifications are extensive:
The import of statements matches the payments and reconciles them when
needed, flagging them 'done'. When no export wizards are found, the
default behavior is to flag the orders as 'sent', not as 'done'.
Rejected payments from the bank receive on import the status 'rejected'.
'''
import time
import sys
@@ -64,6 +65,10 @@ from tools.translate import _
from wizard.banktools import get_or_create_bank
import pooler
def warning(title, message):
'''Convenience routine'''
return {'warning': {'title': title, 'message': message}}
class account_banking_account_settings(osv.osv):
'''Default Journal for Bank Account'''
_name = 'account.banking.account.settings'
@@ -93,6 +98,25 @@ class account_banking_account_settings(osv.osv):
'movements before confirming them.'
),
),
'costs_account_id': fields.many2one(
'account.account', 'Bank Costs Account', select=True,
help=('The account to use when the bank invoices its own costs. '
'Leave it blank to disable automatic invoice generation '
'on bank costs.'
),
),
'invoice_journal_id': fields.many2one(
'account.journal', 'Costs Journal',
help=('This is the journal used to create invoices for bank costs.'
),
),
'bank_partner_id': fields.many2one(
'res.partner', 'Bank Partner',
help=('The partner to use for bank costs. Banks are not partners '
'by default. You will most likely have to create one.'
),
),
#'multi_currency': fields.boolean(
# 'Multi Currency Bank Account', required=True,
# help=('Select this if your bank account is able to handle '
@@ -102,7 +126,7 @@ class account_banking_account_settings(osv.osv):
#),
}
def _default_company(self, cursor, uid, context={}):
def _default_company(self, cursor, uid, context=None):
user = self.pool.get('res.users').browse(cursor, uid, uid, context=context)
if user.company_id:
return user.company_id.id
@@ -125,12 +149,21 @@ class account_banking_imported_file(osv.osv):
'company_id': fields.many2one('res.company', 'Company',
select=True, readonly=True
),
'date': fields.datetime('Import Date', readonly=False, select=True),
'format': fields.char('File Format', size=20, readonly=False),
'file': fields.binary('Raw Data', readonly=False),
'log': fields.text('Import Log', readonly=False),
'date': fields.datetime('Import Date', readonly=True, select=True,
states={'draft': [('unfinished', False)]}
),
'format': fields.char('File Format', size=20, readonly=True,
states={'draft': [('unfinished', False)]}
),
'file': fields.binary('Raw Data', readonly=True,
states={'draft': [('unfinished', False)]}
),
'log': fields.text('Import Log', readonly=True,
states={'draft': [('unfinished', False)]}
),
'user_id': fields.many2one('res.users', 'Responsible User',
readonly=False, select=True
readonly=True, select=True,
states={'draft': [('unfinished', False)]}
),
'state': fields.selection(
[('unfinished', 'Unfinished'),
@@ -200,7 +233,7 @@ class account_bank_statement(osv.osv):
# 'currency': _currency,
}
def _get_period(self, cursor, uid, date, context={}):
def _get_period(self, cursor, uid, date, context=None):
'''
Find matching period for date, not meant for _defaults.
'''
@@ -414,12 +447,12 @@ class account_bank_statement_line(osv.osv):
_inherit = 'account.bank.statement.line'
_description = 'Bank Transaction'
def _get_period(self, cursor, uid, context={}):
def _get_period(self, cursor, user, context=None):
date = context.get('date', None)
periods = self.pool.get('account.period').find(cursor, uid, dt=date)
periods = self.pool.get('account.period').find(cursor, user, dt=date)
return periods and periods[0] or False
def _seems_international(self, cursor, uid, context={}):
def _seems_international(self, cursor, user, context=None):
'''
Some banks have seperate international banking modules which do not
translate correctly into the national formats. Instead, they
@@ -439,6 +472,17 @@ class account_bank_statement_line(osv.osv):
# company's, its local, else international.
# TODO: to be done
def _get_currency(self, cursor, user, context=None):
'''
Get the default currency (required to allow other modules to function,
which assume currency to be a calculated field and thus optional)
Remark: this is only a fallback as the real default is in the journal,
which is inaccessible from within this method.
'''
res_users_obj = self.pool.get('res.users')
return res_users_obj.browse(cursor, user, user,
context=context).company_id.currency_id.id
#def _reconcile_amount(self, cursor, user, ids, name, args, context=None):
# '''
# Redefinition from the original: don't use the statements currency, but
@@ -500,10 +544,11 @@ class account_bank_statement_line(osv.osv):
_defaults = {
'period_id': _get_period,
'international': _seems_international,
'currency': _get_currency,
}
def onchange_partner_id(self, cursor, uid, line_id, partner_id, type,
currency_id, context={}
currency_id, context=None
):
'''
Find default accounts when encoding statements by hand
@@ -532,70 +577,6 @@ class account_bank_statement_line(osv.osv):
return result and {'value': result} or {}
def write(self, cursor, uid, ids, values, context={}):
# TODO: Not sure what to do with this, as it seems that most of
# this code is related to res_partner_bank and not to this class.
account_numbers = []
bank_obj = self.pool.get('res.partner.bank')
statement_line_obj = self.pool.get('account.bank.statement.line')
if 'partner_id' in values:
bank_account_ids = bank_obj.search(cursor, uid,
[('partner_id','=', values['partner_id'])]
)
bank_accounts = bank_obj.browse(cursor, uid, bank_account_ids)
import_account_numbers = statement_line_obj.browse(cursor, uid, ids)
for accno in bank_accounts:
# Allow acc_number and iban to co-exist (SEPA will unite the
# two, but - as seen now - in an uneven pace per country)
if accno.acc_number:
account_numbers.append(accno.acc_number)
if accno.iban:
account_numbers.append(accno.iban)
if any([x for x in import_account_numbers if x.bank_accnumber in
account_numbers]):
for accno in import_account_numbers:
account_data = _get_account_data(accno.bank_accnumber)
if account_data:
bank_id = bank_obj.search(cursor, uid, [
('name', '=', account_data['bank_name'])
])
if not bank_id:
bank_id = bank_obj.create(cursor, uid, {
'name': account_data['bank_name'],
'bic': account_data['bic'],
'active': 1,
})
else:
bank_id = bank_id[0]
bank_acc = bank_obj.create(cursor, uid, {
'state': 'bank',
'partner_id': values['partner_id'],
'bank': bank_id,
'acc_number': accno.bank_accnumber,
})
bank_iban = bank_obj.create(cursor, uid, {
'state': 'iban',
'partner_id': values['partner_id'],
'bank': bank_id,
'iban': account_data['iban'],
})
else:
bank_acc = bank_obj.create(cursor, uid, {
'state': 'bank',
'partner_id': values['partner_id'],
'acc_number': accno.bank_accnumber,
})
return super(account_bank_statement_line, self).write(
cursor, uid, ids, values, context
)
account_bank_statement_line()
class payment_type(osv.osv):
@@ -621,22 +602,23 @@ class payment_line(osv.osv):
'''
Add extra export_state and date_done fields; make destination bank account
mandatory, as it makes no sense to send payments into thin air.
Edit: Payments can be by cash too, which is prohibited by mandatory bank
accounts.
'''
_inherit = 'payment.line'
_columns = {
# New fields
'bank_id': fields.many2one('res.partner.bank',
'Destination Bank account',
required=True
),
'export_state': fields.selection([
('draft', 'Draft'),
('open','Confirmed'),
('cancel','Cancelled'),
('sent', 'Sent'),
('rejected', 'Rejected'),
('done','Done'),
], 'State', select=True
),
'msg': fields.char('Message', size=255, required=False, readonly=True),
# Redefined fields: added states
'date_done': fields.datetime('Date Confirmed', select=True,
readonly=True),
@@ -644,6 +626,7 @@ class payment_line(osv.osv):
'Your Reference', size=64, required=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -655,6 +638,7 @@ class payment_line(osv.osv):
),
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -663,6 +647,7 @@ class payment_line(osv.osv):
help='The successor message of Communication.',
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -676,6 +661,7 @@ class payment_line(osv.osv):
),
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -685,6 +671,7 @@ class payment_line(osv.osv):
help='Payment amount in the partner currency',
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -692,6 +679,7 @@ class payment_line(osv.osv):
'res.currency', 'Partner Currency', required=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -699,6 +687,7 @@ class payment_line(osv.osv):
'res.partner.bank', 'Destination Bank account',
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -707,6 +696,7 @@ class payment_line(osv.osv):
ondelete='cascade', select=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -715,6 +705,7 @@ class payment_line(osv.osv):
help='The Ordering Customer',
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -725,6 +716,7 @@ class payment_line(osv.osv):
),
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -734,6 +726,7 @@ class payment_line(osv.osv):
], 'Communication Type', required=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -741,12 +734,13 @@ class payment_line(osv.osv):
_defaults = {
'export_state': lambda *a: 'draft',
'date_done': lambda *a: False,
'msg': lambda *a: '',
}
payment_line()
class payment_order(osv.osv):
'''
Enable extra state for payment exports
Enable extra states for payment exports
'''
_inherit = 'payment.order'
_columns = {
@@ -754,6 +748,7 @@ class payment_order(osv.osv):
'Scheduled date if fixed',
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
help='Select a date if you have chosen Preferred Date to be fixed.'
@@ -762,6 +757,7 @@ class payment_order(osv.osv):
'Reference', size=128, required=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -769,6 +765,7 @@ class payment_order(osv.osv):
'payment.mode', 'Payment mode', select=True, required=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
help='Select the Payment Mode to be applied.'
@@ -778,6 +775,7 @@ class payment_order(osv.osv):
('open','Confirmed'),
('cancel','Cancelled'),
('sent', 'Sent'),
('rejected', 'Rejected'),
('done','Done'),
], 'State', select=True
),
@@ -785,6 +783,7 @@ class payment_order(osv.osv):
'payment.line', 'order_id', 'Payment lines',
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -792,6 +791,7 @@ class payment_order(osv.osv):
'res.users','User', required=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
),
@@ -802,6 +802,7 @@ class payment_order(osv.osv):
], "Preferred date", change_default=True, required=True,
states={
'sent': [('readonly', True)],
'rejected': [('readonly', True)],
'done': [('readonly', True)]
},
help=("Choose an option for the Payment Order:'Fixed' stands for a "
@@ -812,33 +813,70 @@ class payment_order(osv.osv):
),
}
def set_to_draft(self, cr, uid, ids, *args):
def _write_payment_lines(self, cursor, uid, ids, **kwargs):
'''
ORM method for setting attributes of corresponding payment.line objects.
Note that while this is ORM compliant, it is also very ineffecient due
to the absence of filters on writes and hence the requirement to
filter on the client(=OpenERP server) side.
'''
payment_line_obj = self.pool.get('payment.line')
line_ids = payment_line_obj.search(
cursor, uid, [
('order_id', 'in', ids)
])
payment_line_obj.write(cursor, uid, line_ids, kwargs)
def set_to_draft(self, cursor, uid, ids, *args):
self._write_payment_lines(cursor, uid, ids, export_state='draft')
'''
cr.execute("UPDATE payment_line "
"SET export_state = 'draft' "
"WHERE order_id in (%s)" % (
','.join(map(str, ids))
))
'''
return super(payment_order, self).set_to_draft(
cr, uid, ids, *args
)
def action_sent(self, cr, uid, ids, *args):
self._write_payment_lines(cursor, uid, ids, export_state='sent')
'''
cr.execute("UPDATE payment_line "
"SET export_state = 'sent' "
"WHERE order_id in (%s)" % (
','.join(map(str, ids))
))
'''
return True
def action_rejected(self, cr, uid, ids, *args):
self._write_payment_lines(cursor, uid, ids, export_state='rejected')
'''
cr.execute("UPDATE payment_line "
"SET export_state = 'rejected' "
"WHERE order_id in (%s)" % (
','.join(map(str, ids))
))
'''
return True
def set_done(self, cr, uid, id, *args):
'''
Extend standard transition to update children as well.
'''
self._write_payment_lines(cursor, uid, ids,
export_state='done',
date_done=time.strftime('%Y-%m-%d')
)
'''
cr.execute("UPDATE payment_line "
"SET export_state = 'done', date_done = '%s' "
"WHERE order_id = %s" % (
time.strftime('%Y-%m-%d'), id
))
'''
return super(payment_order, self).set_done(
cr, uid, id, *args
)
@@ -859,6 +897,8 @@ class res_partner_bank(osv.osv):
4. Storage is uppercase, not lowercase
5. Presentation is formal IBAN
6. BBAN's are generated from IBAN when possible
7. In the absence of online databanks, BBAN's are checked on format
using IBAN specs.
'''
_inherit = 'res.partner.bank'
_columns = {
@@ -885,12 +925,14 @@ class res_partner_bank(osv.osv):
def init(self, cursor):
'''
Update existing iban accounts to comply to new regime
Note that usage of the ORM is not possible here, as the ORM cannot
search on values not provided by the client.
'''
cursor.execute('select id, acc_number, iban '
'from res_partner_bank '
'where '
'upper(iban) != iban or '
'acc_number is NULL'
cursor.execute('SELECT id, acc_number, iban '
'FROM res_partner_bank '
'WHERE '
'upper(iban) != iban OR '
'acc_number IS NULL'
)
for id, acc_number, iban in cursor.fetchall():
new_iban = new_acc_number = False
@@ -902,33 +944,39 @@ class res_partner_bank(osv.osv):
elif iban != iban.upper():
new_iban = iban.upper
if iban != new_iban or new_acc_number != acc_number:
cursor.execute("update res_partner_bank "
"set iban = '%s', acc_number = '%s' "
"where id = %s" % (
cursor.execute("UPDATE res_partner_bank "
"SET iban = '%s', acc_number = '%s' "
"WHERE id = %s" % (
new_iban, new_acc_number, id
))
def create(self, cursor, uid, vals, context={}):
@staticmethod
def _correct_IBAN(vals):
'''
Create dual function IBAN account for SEPA countries
Routine to correct IBAN values and deduce localized values when valid.
Note: No check on validity IBAN/Country
'''
if 'iban' in vals and vals['iban']:
iban = sepa.IBAN(vals['iban'])
vals['iban'] = str(iban)
vals['acc_number'] = iban.localized_BBAN
return self._founder.create(self, cursor, uid, vals, context)
return vals
def write(self, cursor, uid, ids, vals, context={}):
def create(self, cursor, uid, vals, context=None):
'''
Create dual function IBAN account for SEPA countries
Note: No check on validity IBAN/Country
'''
if 'iban' in vals and vals['iban']:
iban = sepa.IBAN(vals['iban'])
vals['iban'] = str(iban)
vals['acc_number'] = iban.localized_BBAN
return self._founder.write(self, cursor, uid, ids, vals, context)
return self._founder.create(self, cursor, uid,
self._correct_IBAN(vals), context
)
def write(self, cursor, uid, ids, vals, context=None):
'''
Create dual function IBAN account for SEPA countries
'''
return self._founder.write(self, cursor, uid, ids,
self._correct_IBAN(vals), context
)
def search(self, cursor, uid, args, *rest, **kwargs):
'''
@@ -1010,11 +1058,10 @@ class res_partner_bank(osv.osv):
Check IBAN number
'''
for bank_acc in self.browse(cursor, uid, ids):
if not bank_acc.iban:
continue
iban = sepa.IBAN(bank_acc.iban)
if not iban.valid:
return False
if bank_acc.iban:
iban = sepa.IBAN(bank_acc.iban)
if not iban.valid:
return False
return True
def get_bban_from_iban(self, cursor, uid, ids, context=None):
@@ -1032,8 +1079,8 @@ class res_partner_bank(osv.osv):
res[record_id] = False
return res
def onchange_acc_number(self, cursor, uid, ids, acc_number, partner_id,
country_id, context={}
def onchange_acc_number(self, cursor, uid, ids, acc_number,
partner_id, country_id, context=None
):
'''
Trigger to find IBAN. When found:
@@ -1044,44 +1091,92 @@ class res_partner_bank(osv.osv):
return {}
values = {}
# Pre fill country based on partners address
country_obj = self.pool.get('res.country')
partner_obj = self.pool.get('res.partner')
if (not country_id) and partner_id:
country = partner_obj.browse(cursor, uid, partner_id).country
country_ids = [country.id]
elif country_id:
country_ids = []
# Pre fill country based on available data. This is just a default
# which can be overridden by the user.
# 1. Use provided country_id (manually filled)
if country_id:
country = country_obj.browse(cursor, uid, country_id)
country_ids = [country_id]
else:
# Without country, there is no way to identify the right online
# interface to get IBAN accounts...
return {}
# 2. Use country_id of found bank accounts
# This can be usefull when there is no country set in the partners
# addresses, but there was a country set in the address for the bank
# account itself before this method was triggered.
elif ids and len(ids) == 1:
partner_bank_obj = self.pool.get('res.partner.bank')
partner_bank_id = partner_bank_obj.browse(cursor, uid, ids[0])
if partner_bank_id.country_id:
country = partner_bank_id.country_id
country_ids = [country.id]
# 3. Use country_id of default address of partner
# The country_id of a bank account is a one time default on creation.
# It originates in the same address we are about to check, but
# modifications on that address afterwards are not transfered to the
# bank account, hence the additional check.
elif partner_id:
partner_obj = self.pool.get('res.partner')
country = partner_obj.browse(cursor, uid, partner_id).country
country_ids = [country.id]
# 4. Without any of the above, take the country from the company of
# the handling user
if not country_ids:
user = self.pool.get('res.users').browse(cursor, uid, uid)
if user.address_id and user.address_id.country_id:
country = user.address_id.country_id
country_ids = [country.id]
else:
# Ok, tried everything, give up and leave it to the user
return warning(_('Insufficient data'),
_('Insufficient data to select online '
'conversion database')
)
result = {'value': values}
# Complete data with online database when available
if country.code in sepa.IBAN.countries:
info = sepa.online.account_info(country.code, acc_number)
if info:
iban_acc = sepa.IBAN(info.iban)
if iban_acc.valid:
values['acc_number'] = iban_acc.localized_BBAN
values['iban'] = unicode(iban_acc)
bank_id, country_id = get_or_create_bank(
self.pool, cursor, uid,
info.bic or iban_acc.BIC_searchkey,
code = info.code, name = info.bank
)
values['country_id'] = country_id or \
country_ids and country_ids[0] or \
False
values['bank'] = bank_id or False
try:
info = sepa.online.account_info(country.code, acc_number)
if info:
iban_acc = sepa.IBAN(info.iban)
if iban_acc.valid:
values['acc_number'] = iban_acc.localized_BBAN
values['iban'] = unicode(iban_acc)
bank_id, country_id = get_or_create_bank(
self.pool, cursor, uid,
info.bic or iban_acc.BIC_searchkey,
code = info.code, name = info.bank
)
values['country_id'] = country_id or \
country_ids and country_ids[0] or \
False
values['bank'] = bank_id or False
else:
info = None
if info is None:
result.update(warning(
_('Invalid data'),
_('The account number appears to be invalid for %(country)s')
% {'country': country.name}
))
except NotImplementedError:
if country.code in sepa.IBAN.countries:
acc_number_fmt = sepa.BBAN(acc_number, country.code)
if acc_number_fmt.valid:
values['acc_number'] = str(acc_number_fmt)
else:
values['acc_number'] = acc_number
result.update(warning(
_('Invalid format'),
_('The account number has the wrong format for %(country)s')
% {'country': country.name}
))
else:
info = None
if not info:
values['acc_number'] = acc_number
return {'value': values}
values['acc_number'] = acc_number
return result
def onchange_iban(self, cursor, uid, ids, iban, context={}):
def onchange_iban(self, cursor, uid, ids, iban, context=None):
'''
Trigger to verify IBAN. When valid:
1. Extract BBAN as local account
@@ -1097,19 +1192,19 @@ class res_partner_bank(osv.osv):
code=iban_acc.BIC_searchkey
)
return {
'value': {
'acc_number': iban_acc.localized_BBAN,
'iban': unicode(iban_acc),
'country': country_id or False,
'bank': bank_id or False,
}
'value': dict(
acc_number = iban_acc.localized_BBAN,
iban = unicode(iban_acc),
country = country_id or False,
bank = bank_id or False,
)
}
raise osv.except_osv(_('Invalid IBAN account number!'),
_("The IBAN number doesn't seem to be correct")
)
return warning(_('Invalid IBAN account number!'),
_("The IBAN number doesn't seem to be correct")
)
_constraints = [
(check_iban, "The IBAN number doesn't seem to be correct", ["iban"])
(check_iban, _("The IBAN number doesn't seem to be correct"), ["iban"])
]
res_partner_bank()
@@ -1120,7 +1215,8 @@ class res_bank(osv.osv):
online SWIFT database. Allow hand filled names to overrule SWIFT names.
'''
_inherit = 'res.bank'
def onchange_bic(self, cursor, uid, ids, bic, name, context={}):
def onchange_bic(self, cursor, uid, ids, bic, name, context=None):
'''
Trigger to auto complete other fields.
'''
@@ -1140,19 +1236,19 @@ class res_bank(osv.osv):
country_id = False
return {
'value': {
'value': dict(
# Only the first eight positions of BIC are used for bank
# transfers, so ditch the rest.
'bic': info.bic[:8],
'code': info.code,
'street': address.street,
'street2':
bic = info.bic[:8],
code = info.code,
street = address.street,
street2 =
address.has_key('street2') and address.street2 or False,
'zip': address.zip,
'city': address.city,
'country': country_id,
'name': name and name or info.name,
}
zip = address.zip,
city = address.city,
country = country_id,
name = name and name or info.name,
)
}
res_bank()

View File

@@ -41,11 +41,15 @@
<form string="Default Import Settings for Bank Account">
<field name="company_id" />
<separator string="Bank Account Details" colspan="4" />
<field name="partner_bank_id" /> <!-- Needs fiddling... domain="[('partner_id','=',company_id.partner_id)]"/-->
<field name="partner_bank_id" /> <!-- Needs domain for used companies /-->
<field name="journal_id" domain="[('type','=','cash')]" />
<separator string="Default Accounts for Unknown Movements" colspan="4" />
<field name="default_credit_account_id" />
<field name="default_debit_account_id" />
<separator string="Generation of Bank Costs Invoices" colspan="4" />
<field name="bank_partner_id" />
<field name="costs_account_id" attrs="{'required': [('bank_partner_id', '&lt;&gt;', False)]}" />
<field name="invoice_journal_id" attrs="{'required': [('bank_partner_id', '&lt;&gt;', False)]}" />
</form>
</field>
</record>
@@ -56,7 +60,7 @@
<field name="arch" type="xml">
<tree string="Default Import Settings for Bank Account">
<field name="company_id" />
<field name="partner_bank_id" /> <!-- Needs fiddling... domain="[('partner_id','=',company_id.partner_id)]"/-->
<field name="partner_bank_id" /> <!-- Needs domain for used companies /-->
<field name="journal_id" domain="[('type','=','cash')]" />
</tree>
</field>
@@ -207,8 +211,7 @@
</field>
</record>
<!-- Add invisible field on bank statements form for identification
of import file
<!-- Add invisible field for identification of import file on bank statements
-->
<record id="view_banking_bank_statement_form_4" model="ir.ui.view">
<field name="name">account.bank.statement.form.banking-4</field>
@@ -222,6 +225,33 @@
</field>
</record>
<!-- Show bank accounts in account_bank_statement_line to enable manual
coupling of bank account numbers to statement lines and harvest info
for future matching in the process.
-->
<record id="view_banking_bank_statement_form_5" model="ir.ui.view">
<field name="name">account.bank.statement.form.banking-5</field>
<field name="inherit_id" ref="account.view_bank_statement_form" />
<field name="model">account.bank.statement</field>
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='line_ids']/tree/field[@name='partner_id']" position="after">
<field name="partner_bank_id"/>
</xpath>
</field>
</record>
<record id="view_banking_bank_statement_form_6" model="ir.ui.view">
<field name="name">account.bank.statement.form.banking-6</field>
<field name="inherit_id" ref="account.view_bank_statement_form" />
<field name="model">account.bank.statement</field>
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='line_ids']/form/field[@name='partner_id']" position="after">
<field name="partner_bank_id"/>
</xpath>
</field>
</record>
<!-- Reset trigger on button_confirm to the trigger code in this module -->
<record id="view_banking_bank_statement_form_4" model="ir.ui.view">
<field name="name">account.bank.statement.form.banking-4</field>
@@ -235,7 +265,7 @@
</field>
</record>
<!-- Make buttons on payment order sensitive for 'Sent' state -->
<!-- Make buttons on payment order sensitive for extra states -->
<record id="view_banking_payment_order_form_1" model="ir.ui.view">
<field name="name">account.payment.order.form.banking-1</field>
<field name="inherit_id" ref="account_payment.view_payment_order_form" />
@@ -271,7 +301,7 @@
<field name="type">form</field>
<field name="arch" type="xml">
<field name="acc_number" position="replace">
<field name="acc_number" on_change="onchange_acc_number(acc_number, partner_id, country_id)" />
<field name="acc_number" on_change="onchange_acc_number(acc_number, partner_id, country_id)"/>
</field>
</field>
</record>
@@ -295,7 +325,7 @@
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='bank_ids']/form/field[@name='acc_number']" position="replace">
<field name="acc_number" on_change="onchange_acc_number(acc_number, active_id, country_id)" />
<field name="acc_number" on_change="onchange_acc_number(acc_number, parent.id, country_id)" />
</xpath>
</field>
</record>
@@ -306,7 +336,7 @@
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='bank_ids']/tree/field[@name='acc_number']" position="replace">
<field name="acc_number" on_change="onchange_acc_number(acc_number, active_id, country_id)" />
<field name="acc_number" on_change="onchange_acc_number(acc_number, parent.id, country_id)" />
</xpath>
</field>
</record>

View File

@@ -14,12 +14,26 @@
write({'state':'sent'})</field>
<field name="kind">function</field>
</record>
<!-- New activity for workflow payment order: rejected -->
<record id="act_rejected" model="workflow.activity">
<field name="name">rejected</field>
<field name="wkf_id" ref="account_payment.wkf_payment_order"/>
<field name="action">action_rejected()
write({'state':'rejected'})</field>
<field name="kind">function</field>
</record>
<!-- Add new transition sent -> done -->
<record id="trans_sent_done" model="workflow.transition">
<field name="act_from" ref="act_sent"/>
<field name="act_to" ref="account_payment.act_done"/>
<field name="signal">done</field>
</record>
<!-- Add new transition sent -> rejected -->
<record id="trans_sent_rejected" model="workflow.transition">
<field name="act_from" ref="act_sent"/>
<field name="act_to" ref="act_rejected"/>
<field name="signal">rejected</field>
</record>
<!-- Rewrite existing open -> done transition to include 'sent' -->
<record id="account_payment.trans_open_done" model="workflow.transition">
<field name="act_from" ref="account_payment.act_open"/>

View File

@@ -11,5 +11,17 @@
<field eval="False" name="required"/>
<field eval="False" name="readonly"/>
</record>
<!-- Unset readonly state of country_id for ordinary account.
Leaving it will make it impossible to use bank accounts with
addresses outside the companies country.
Ratio: one can have bank accounts in foreign banks. Foreign
addresses not automatically involve international banking.
-->
<record id="bank_normal_field_contry" model="res.partner.bank.type.field">
<field name="name">country_id</field>
<field name="bank_type_id" ref="base.bank_normal"/>
<field eval="False" name="required"/>
<field eval="False" name="readonly"/>
</record>
</data>
</openerp>

View File

@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.7\n"
"Project-Id-Version: OpenERP Server 5.0.11\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-02-19 16:17:51+0000\n"
"PO-Revision-Date: 2010-02-19 16:17:51+0000\n"
"POT-Creation-Date: 2010-06-29 14:33:53+0000\n"
"PO-Revision-Date: 2010-06-29 14:33:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -15,6 +15,12 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of bank costs invoices created"
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
@@ -32,6 +38,12 @@ msgstr ""
msgid "Select the processing details:"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid format"
msgstr ""
#. module: account_banking
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
@@ -53,8 +65,14 @@ msgstr ""
msgid "_Close"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,bank_partner_id:0
msgid "Bank Partner"
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_account_settings
#: model:ir.model,name:account_banking.model_account_banking_bank_journal
msgid "Default Journal for Bank Account"
msgstr ""
@@ -92,6 +110,11 @@ msgstr ""
msgid "Bank account %(account_no)s was not found in the database"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Generation of Bank Costs Invoices"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
@@ -105,6 +128,18 @@ msgid "The expected balance (%.2f) is different '\n"
" 'than the computed one. (%.2f)"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n"
" '%(no_candidates)s candidates found; can't choose."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,invoice_journal_id:0
msgid "Costs Journal"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
@@ -133,11 +168,24 @@ msgstr ""
msgid "Unable to import parser %(parser)s. Parser class not found."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Cancelled"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data to select online '\n"
" 'conversion database"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,statement_ids:0
@@ -155,16 +203,6 @@ msgstr ""
msgid "Unknown Bank"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,date:0
msgid "Import Date"
@@ -220,10 +258,8 @@ msgid "Bank Transaction ID"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to link transaction %(trans)s to invoice: '\n"
" '%(no_candidates)s candidates found; can't choose."
#: help:account.banking.account.settings,invoice_journal_id:0
msgid "This is the journal used to create invoices for bank costs."
msgstr ""
#. module: account_banking
@@ -237,6 +273,11 @@ msgstr ""
msgid "Sent"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,costs_account_id:0
msgid "The account to use when the bank invoices its own costs. Leave it blank to disable automatic invoice generation on bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
@@ -246,7 +287,17 @@ msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgid "Invalid data"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry
msgid "country_id"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Rejected"
msgstr ""
#. module: account_banking
@@ -268,12 +319,6 @@ msgid "The Transactions File to import. Please note that while it is perfectly s
"To stay on the safe side, always load bank statements files using the same format."
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/sepa/bbantoiban.py:0
#, python-format
@@ -290,6 +335,70 @@ msgstr ""
msgid "Imported Bank Statements"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr ""
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid "\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the document\n"
" version of Bank Statements, or created as an optional side effect of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
#: wizard_view:account_banking.banking_import,view_error:0
@@ -315,10 +424,9 @@ msgid "More then one possible match found for partner with name %(name)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr ""
#. module: account_banking
@@ -327,11 +435,27 @@ msgstr ""
msgid "ERROR!"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number has the wrong format for %(country)s"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,currency:0
msgid "Currency"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr ""
#. module: account_banking
#: field:payment.line,msg:0
msgid "Message"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,company_id:0
#: field:account.banking.imported.file,company_id:0
@@ -346,8 +470,9 @@ msgid "Log"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "Invalid value for transfer_type"
msgstr ""
#. module: account_banking
@@ -391,6 +516,13 @@ msgstr ""
msgid "Import Log"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
@@ -518,11 +650,21 @@ msgstr ""
msgid "Journal"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,costs_account_id:0
msgid "Bank Costs Account"
msgstr ""
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Finished"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Bank Account Details"
@@ -541,67 +683,9 @@ msgid "Number of transactions loaded"
msgstr ""
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid "\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the document\n"
" version of Bank Statements, or created as an optional side effect of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
" - (todo) MT940 (Swift) format transaction files,\n"
" - (todo) CODA (BE) format transaction files,\n"
" - (wish) SEPA Credits (ISO 200022) messages,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
" - (wish) BTL91 (NL) payment orders files (no format description available),\n"
" - (wish) SEPA Direct Debits (ISO 200022) messages\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number appears to be invalid for %(country)s"
msgstr ""
#. module: account_banking
@@ -609,6 +693,23 @@ msgstr ""
msgid "acc_number"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions matched"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,bank_partner_id:0
msgid "The partner to use for bank costs. Banks are not partners by default. You will most likely have to create one."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_imported_file
msgid "Imported Bank Statements File"

752
account_banking/i18n/da.po Normal file
View File

@@ -0,0 +1,752 @@
# Danish translation for account-banking
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the account-banking package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: account-banking\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-06-29 14:33:53+0000\n"
"PO-Revision-Date: 2010-02-06 14:36+0000\n"
"Last-Translator: nanker <Unknown>\n"
"Language-Team: Danish <da@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, fuzzy, python-format
msgid "Number of bank costs invoices created"
msgstr "Totalt antal transaktioner"
#. module: account_banking
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Results:"
msgstr "Resultater:"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of errors found"
msgstr "Antal fejl fundet"
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
msgid "Select the processing details:"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid format"
msgstr ""
#. module: account_banking
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
#. module: account_banking
#: field:payment.line,date_done:0
msgid "Date Confirmed"
msgstr "Dato bekræftet"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_statements,open_statements:0
msgid "_View Statements"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,end:0
#: wizard_button:account_banking.banking_import,view_statements,end:0
msgid "_Close"
msgstr "_Luk"
#. module: account_banking
#: field:account.banking.account.settings,bank_partner_id:0
msgid "Bank Partner"
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_account_settings
#: model:ir.model,name:account_banking.model_account_banking_bank_journal
msgid "Default Journal for Bank Account"
msgstr ""
#. module: account_banking
#: wizard_field:account_banking.banking_import,init,file:0
msgid "Statements File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"More than one bank account was found with the same number %(account_no)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of transactions"
msgstr "Totalt antal transaktioner"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Account move line \"%s\" is not valid"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,default_debit_account_id:0
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."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Bank account %(account_no)s was not found in the database"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Generation of Bank Costs Invoices"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions skipped due to errors"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"The expected balance (%.2f) is different '\n"
" 'than the computed one. (%.2f)"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n"
" '%(no_candidates)s candidates found; can\'t choose."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,invoice_journal_id:0
#, fuzzy
msgid "Costs Journal"
msgstr "Journal"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements skipped due to errors"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid IBAN account number!"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Import Settings for Bank Account"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,default_credit_account_id:0
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."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to import parser %(parser)s. Parser class not found."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Cancelled"
msgstr "Annulleret"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"Insufficient data to select online '\n"
" 'conversion database"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,statement_ids:0
msgid "Statements"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,default_debit_account_id:0
msgid "Default debit account"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Unknown Bank"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,date:0
msgid "Import Date"
msgstr "Importer dato"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Confirmed"
msgstr "Bekræftet"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_res_partner_banks
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_accounts
msgid "Bank Accounts"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Accounts for Unknown Movements"
msgstr ""
#. module: account_banking
#: view:account.bank.statement:0
msgid "Confirm"
msgstr "Bekræft"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statements found for account %(bank_account)s, '\n"
" 'but no default journal was defined."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,default_credit_account_id:0
msgid "Default credit account"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,international:0
msgid "International Transaction"
msgstr "International transaktion"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Please verify that an account is defined in the journal."
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,trans:0
msgid "Bank Transaction ID"
msgstr "Bank transaktion ID"
#. module: account_banking
#: help:account.banking.account.settings,invoice_journal_id:0
msgid "This is the journal used to create invoices for bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement %(id)s known - skipped"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Sent"
msgstr "Sendt"
#. module: account_banking
#: help:account.banking.account.settings,costs_account_id:0
msgid ""
"The account to use when the bank invoices its own costs. Leave it blank to "
"disable automatic invoice generation on bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Error !"
msgstr "Fejl !"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid data"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry
msgid "country_id"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Rejected"
msgstr ""
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals
msgid "Default Import Settings for Bank Accounts"
msgstr ""
#. module: account_banking
#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file
#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard
msgid "Import Bank Statements File"
msgstr ""
#. module: account_banking
#: help:account_banking.banking_import,init,file:0
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"
"\n"
"To stay on the safe side, always load bank statements files using the same "
"format."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/sepa/bbantoiban.py:0
#, python-format
msgid "This is a stub. Please implement your own code"
msgstr ""
#. module: account_banking
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Ugyldig XML for View Architecture!"
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Imported Bank Statements"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr "_Annuller"
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid ""
"\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're "
"just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the "
"document\n"
" version of Bank Statements, or created as an optional side effect "
"of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code "
"or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export "
"generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and "
"partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Import Bank Transactions File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Account %(account_no)s is not owned by %(partner)s"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,import:0
msgid "_Ok"
msgstr "_Ok"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "More then one possible match found for partner with name %(name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "ERROR!"
msgstr "FEJL!"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number has the wrong format for %(country)s"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,currency:0
msgid "Currency"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr "Rå data"
#. module: account_banking
#: field:payment.line,msg:0
msgid "Message"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,company_id:0
#: field:account.banking.imported.file,company_id:0
#: wizard_field:account_banking.banking_import,init,company:0
msgid "Company"
msgstr "Virksomhed"
#. module: account_banking
#: wizard_field:account_banking.banking_import,view_error,log:0
#: wizard_field:account_banking.banking_import,view_statements,log:0
msgid "Log"
msgstr "Log"
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "Invalid value for transfer_type"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Configration Error !"
msgstr "Konfigurationsfejl !"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
msgid "Bank Statements File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "This is a stub. Please implement your own."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "No suitable period found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files
msgid "Imported Bank Statements Files"
msgstr ""
#. module: account_banking
#: field:account.bank.statement,banking_id:0
msgid "Imported File"
msgstr "Importerede filer"
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,log:0
msgid "Import Log"
msgstr "Importer log"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping periods for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "The imported statements appear to be invalid! Check your file."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements loaded"
msgstr ""
#. module: account_banking
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings
msgid "Banking"
msgstr ""
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Error"
msgstr "Fejl"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of statements"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Unable to reconcile entry \"%s\": %.2f"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"No suitable fiscal year found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Import Details"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,period_id:0
msgid "Period"
msgstr "Periode"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Done"
msgstr "Udført"
#. module: account_banking
#: view:payment.order:0
msgid "Select Invoices to Pay"
msgstr "Vælg faktura til betaling"
#. module: account_banking
#: field:account.banking.imported.file,user_id:0
msgid "Responsible User"
msgstr "Ansvarlig bruger"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The statement balance is incorrect !\n"
msgstr ""
#. module: account_banking
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Unfinished"
msgstr "Ikke afsluttet"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statements found for unknown account %(bank_account)s"
msgstr ""
#. module: account_banking
#: model:ir.module.module,shortdesc:account_banking.module_meta_information
msgid "Account Banking"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,open_import:0
msgid "_View Imported File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The IBAN number doesn't seem to be correct"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,format:0
#: wizard_field:account_banking.banking_import,init,parser:0
msgid "File Format"
msgstr "Filformat"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping fiscal years found for date %(date)s and company %"
"(company_name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,journal_id:0
msgid "Journal"
msgstr "Journal"
#. module: account_banking
#: field:account.banking.account.settings,costs_account_id:0
#, fuzzy
msgid "Bank Costs Account"
msgstr "Bankkonto"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Finished"
msgstr "Afsluttet"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr "Udkast"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Bank Account Details"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,partner_bank_id:0
#: field:account.banking.account.settings,partner_bank_id:0
msgid "Bank Account"
msgstr "Bankkonto"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions loaded"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number appears to be invalid for %(country)s"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_acc_number_field
msgid "acc_number"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, fuzzy, python-format
msgid "Number of transactions matched"
msgstr "Totalt antal transaktioner"
#. module: account_banking
#: help:account.banking.account.settings,bank_partner_id:0
msgid ""
"The partner to use for bank costs. Banks are not partners by default. You "
"will most likely have to create one."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_imported_file
msgid "Imported Bank Statements File"
msgstr ""

View File

@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.7\n"
"Project-Id-Version: OpenERP Server 5.0.11\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-02-19 16:17:51+0000\n"
"PO-Revision-Date: 2010-02-19 16:17:51+0000\n"
"POT-Creation-Date: 2010-06-29 14:33:53+0000\n"
"PO-Revision-Date: 2010-06-29 14:33:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -15,6 +15,12 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of bank costs invoices created"
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
@@ -32,6 +38,12 @@ msgstr ""
msgid "Select the processing details:"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid format"
msgstr ""
#. module: account_banking
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
@@ -53,8 +65,14 @@ msgstr ""
msgid "_Close"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,bank_partner_id:0
msgid "Bank Partner"
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_account_settings
#: model:ir.model,name:account_banking.model_account_banking_bank_journal
msgid "Default Journal for Bank Account"
msgstr ""
@@ -92,6 +110,11 @@ msgstr ""
msgid "Bank account %(account_no)s was not found in the database"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Generation of Bank Costs Invoices"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
@@ -105,6 +128,18 @@ msgid "The expected balance (%.2f) is different '\n"
" 'than the computed one. (%.2f)"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n"
" '%(no_candidates)s candidates found; can\'t choose."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,invoice_journal_id:0
msgid "Costs Journal"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
@@ -133,11 +168,24 @@ msgstr ""
msgid "Unable to import parser %(parser)s. Parser class not found."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Cancelled"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data to select online '\n"
" 'conversion database"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,statement_ids:0
@@ -155,16 +203,6 @@ msgstr ""
msgid "Unknown Bank"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,date:0
msgid "Import Date"
@@ -220,10 +258,8 @@ msgid "Bank Transaction ID"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to link transaction %(trans)s to invoice: '\n"
" '%(no_candidates)s candidates found; can\'t choose."
#: help:account.banking.account.settings,invoice_journal_id:0
msgid "This is the journal used to create invoices for bank costs."
msgstr ""
#. module: account_banking
@@ -237,6 +273,11 @@ msgstr ""
msgid "Sent"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,costs_account_id:0
msgid "The account to use when the bank invoices its own costs. Leave it blank to disable automatic invoice generation on bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
@@ -246,7 +287,17 @@ msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgid "Invalid data"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry
msgid "country_id"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Rejected"
msgstr ""
#. module: account_banking
@@ -268,12 +319,6 @@ msgid "The Transactions File to import. Please note that while it is perfectly s
"To stay on the safe side, always load bank statements files using the same format."
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/sepa/bbantoiban.py:0
#, python-format
@@ -290,6 +335,70 @@ msgstr ""
msgid "Imported Bank Statements"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr ""
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid "\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the document\n"
" version of Bank Statements, or created as an optional side effect of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
#: wizard_view:account_banking.banking_import,view_error:0
@@ -315,10 +424,9 @@ msgid "More then one possible match found for partner with name %(name)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr ""
#. module: account_banking
@@ -327,11 +435,27 @@ msgstr ""
msgid "ERROR!"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number has the wrong format for %(country)s"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,currency:0
msgid "Currency"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr ""
#. module: account_banking
#: field:payment.line,msg:0
msgid "Message"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,company_id:0
#: field:account.banking.imported.file,company_id:0
@@ -346,8 +470,9 @@ msgid "Log"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "Invalid value for transfer_type"
msgstr ""
#. module: account_banking
@@ -391,6 +516,13 @@ msgstr ""
msgid "Import Log"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
@@ -518,11 +650,21 @@ msgstr ""
msgid "Journal"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,costs_account_id:0
msgid "Bank Costs Account"
msgstr ""
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Finished"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Bank Account Details"
@@ -541,67 +683,9 @@ msgid "Number of transactions loaded"
msgstr ""
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid "\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the document\n"
" version of Bank Statements, or created as an optional side effect of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
" - (todo) MT940 (Swift) format transaction files,\n"
" - (todo) CODA (BE) format transaction files,\n"
" - (wish) SEPA Credits (ISO 200022) messages,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
" - (wish) BTL91 (NL) payment orders files (no format description available),\n"
" - (wish) SEPA Direct Debits (ISO 200022) messages\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number appears to be invalid for %(country)s"
msgstr ""
#. module: account_banking
@@ -609,6 +693,23 @@ msgstr ""
msgid "acc_number"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions matched"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,bank_partner_id:0
msgid "The partner to use for bank costs. Banks are not partners by default. You will most likely have to create one."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_imported_file
msgid "Imported Bank Statements File"

752
account_banking/i18n/es.po Normal file
View File

@@ -0,0 +1,752 @@
# Spanish translation for account-banking
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the account-banking package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: account-banking\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-06-29 14:33:53+0000\n"
"PO-Revision-Date: 2010-04-28 20:13+0000\n"
"Last-Translator: Antonio Maldonado <Unknown>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, fuzzy, python-format
msgid "Number of bank costs invoices created"
msgstr "Número de transacciones cargadas"
#. module: account_banking
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Results:"
msgstr "Resultados:"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of errors found"
msgstr "Número de errores encontrados"
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
msgid "Select the processing details:"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid format"
msgstr ""
#. module: account_banking
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
#. module: account_banking
#: field:payment.line,date_done:0
msgid "Date Confirmed"
msgstr "Fecha confirmada"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_statements,open_statements:0
msgid "_View Statements"
msgstr "_Ver declaraciones"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,end:0
#: wizard_button:account_banking.banking_import,view_statements,end:0
msgid "_Close"
msgstr "_Cerrar"
#. module: account_banking
#: field:account.banking.account.settings,bank_partner_id:0
msgid "Bank Partner"
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_account_settings
#: model:ir.model,name:account_banking.model_account_banking_bank_journal
msgid "Default Journal for Bank Account"
msgstr ""
#. module: account_banking
#: wizard_field:account_banking.banking_import,init,file:0
msgid "Statements File"
msgstr "Archivo de declaraciones"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"More than one bank account was found with the same number %(account_no)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of transactions"
msgstr "Número total de transacciones"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Account move line \"%s\" is not valid"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,default_debit_account_id:0
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."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Bank account %(account_no)s was not found in the database"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Generation of Bank Costs Invoices"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions skipped due to errors"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"The expected balance (%.2f) is different '\n"
" 'than the computed one. (%.2f)"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n"
" '%(no_candidates)s candidates found; can\'t choose."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,invoice_journal_id:0
#, fuzzy
msgid "Costs Journal"
msgstr "Diario"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements skipped due to errors"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid IBAN account number!"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Import Settings for Bank Account"
msgstr ""
#. module: account_banking
#: help:account.banking.account.settings,default_credit_account_id:0
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."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to import parser %(parser)s. Parser class not found."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Cancelled"
msgstr "Cancelado"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"Insufficient data to select online '\n"
" 'conversion database"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,statement_ids:0
msgid "Statements"
msgstr "Declaraciones"
#. module: account_banking
#: field:account.banking.account.settings,default_debit_account_id:0
msgid "Default debit account"
msgstr "Cuenta de débito por omisión"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Unknown Bank"
msgstr "Banco desconocido"
#. module: account_banking
#: field:account.banking.imported.file,date:0
msgid "Import Date"
msgstr "Fecha de importación"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Confirmed"
msgstr "Confirmado"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_res_partner_banks
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_accounts
msgid "Bank Accounts"
msgstr "Cuentas de banco"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Accounts for Unknown Movements"
msgstr ""
#. module: account_banking
#: view:account.bank.statement:0
msgid "Confirm"
msgstr "Confirmar"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statements found for account %(bank_account)s, '\n"
" 'but no default journal was defined."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,default_credit_account_id:0
msgid "Default credit account"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,international:0
msgid "International Transaction"
msgstr "Transacción internacional"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Please verify that an account is defined in the journal."
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,trans:0
msgid "Bank Transaction ID"
msgstr "Identificador de transacción del banco"
#. module: account_banking
#: help:account.banking.account.settings,invoice_journal_id:0
msgid "This is the journal used to create invoices for bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement %(id)s known - skipped"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Sent"
msgstr "Enviar"
#. module: account_banking
#: help:account.banking.account.settings,costs_account_id:0
msgid ""
"The account to use when the bank invoices its own costs. Leave it blank to "
"disable automatic invoice generation on bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Error !"
msgstr "Error !"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid data"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry
msgid "country_id"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Rejected"
msgstr ""
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals
msgid "Default Import Settings for Bank Accounts"
msgstr ""
#. module: account_banking
#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file
#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard
msgid "Import Bank Statements File"
msgstr ""
#. module: account_banking
#: help:account_banking.banking_import,init,file:0
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"
"\n"
"To stay on the safe side, always load bank statements files using the same "
"format."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/sepa/bbantoiban.py:0
#, python-format
msgid "This is a stub. Please implement your own code"
msgstr ""
#. module: account_banking
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Imported Bank Statements"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr "_Cancelar"
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid ""
"\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're "
"just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the "
"document\n"
" version of Bank Statements, or created as an optional side effect "
"of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code "
"or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export "
"generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and "
"partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Import Bank Transactions File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Account %(account_no)s is not owned by %(partner)s"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,import:0
msgid "_Ok"
msgstr "Aceptar"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "More then one possible match found for partner with name %(name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr "Estado"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "ERROR!"
msgstr "ERROR!"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number has the wrong format for %(country)s"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,currency:0
msgid "Currency"
msgstr "Divisa"
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr "Datos en bruto"
#. module: account_banking
#: field:payment.line,msg:0
msgid "Message"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,company_id:0
#: field:account.banking.imported.file,company_id:0
#: wizard_field:account_banking.banking_import,init,company:0
msgid "Company"
msgstr "Compañía"
#. module: account_banking
#: wizard_field:account_banking.banking_import,view_error,log:0
#: wizard_field:account_banking.banking_import,view_statements,log:0
msgid "Log"
msgstr "Registro"
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "Invalid value for transfer_type"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Configration Error !"
msgstr "Error de configuración !"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
msgid "Bank Statements File"
msgstr "Archivo de declaraciones bancarias"
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "This is a stub. Please implement your own."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "No suitable period found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files
msgid "Imported Bank Statements Files"
msgstr ""
#. module: account_banking
#: field:account.bank.statement,banking_id:0
msgid "Imported File"
msgstr "Archivo importado"
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,log:0
msgid "Import Log"
msgstr "Importar registro"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping periods for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "The imported statements appear to be invalid! Check your file."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements loaded"
msgstr "Número de declaraciónes cargadas"
#. module: account_banking
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings
msgid "Banking"
msgstr "Bancario"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Error"
msgstr "Error"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of statements"
msgstr "Número total de declaraciones"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Unable to reconcile entry \"%s\": %.2f"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"No suitable fiscal year found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Import Details"
msgstr "Importar detalles"
#. module: account_banking
#: field:account.bank.statement.line,period_id:0
msgid "Period"
msgstr "Período"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Done"
msgstr "Hecho"
#. module: account_banking
#: view:payment.order:0
msgid "Select Invoices to Pay"
msgstr "Seleccionar facturas a pagar"
#. module: account_banking
#: field:account.banking.imported.file,user_id:0
msgid "Responsible User"
msgstr "Usuario responsable"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The statement balance is incorrect !\n"
msgstr "El balance de las declaraciones es incorrecto !\n"
#. module: account_banking
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Unfinished"
msgstr "Sin terminar"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statements found for unknown account %(bank_account)s"
msgstr ""
#. module: account_banking
#: model:ir.module.module,shortdesc:account_banking.module_meta_information
msgid "Account Banking"
msgstr "Cuenta bancaria"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,open_import:0
msgid "_View Imported File"
msgstr "_Ver archiv importado"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The IBAN number doesn't seem to be correct"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,format:0
#: wizard_field:account_banking.banking_import,init,parser:0
msgid "File Format"
msgstr "Formato de archivo"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping fiscal years found for date %(date)s and company %"
"(company_name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,journal_id:0
msgid "Journal"
msgstr "Diario"
#. module: account_banking
#: field:account.banking.account.settings,costs_account_id:0
#, fuzzy
msgid "Bank Costs Account"
msgstr "Cuenta de banco"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Finished"
msgstr "Terminando"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr "Borrador"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Bank Account Details"
msgstr "Detalles de la cuenta bancaria"
#. module: account_banking
#: field:account.bank.statement.line,partner_bank_id:0
#: field:account.banking.account.settings,partner_bank_id:0
msgid "Bank Account"
msgstr "Cuenta de banco"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions loaded"
msgstr "Número de transacciones cargadas"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number appears to be invalid for %(country)s"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_acc_number_field
msgid "acc_number"
msgstr "acc_number"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, fuzzy, python-format
msgid "Number of transactions matched"
msgstr "Número de transacciones cargadas"
#. module: account_banking
#: help:account.banking.account.settings,bank_partner_id:0
msgid ""
"The partner to use for bank costs. Banks are not partners by default. You "
"will most likely have to create one."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_imported_file
msgid "Imported Bank Statements File"
msgstr ""

767
account_banking/i18n/hr.po Normal file
View File

@@ -0,0 +1,767 @@
# Croatian translation for account-banking
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the account-banking package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: account-banking\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-06-29 14:33:53+0000\n"
"PO-Revision-Date: 2010-02-12 01:28+0000\n"
"Last-Translator: goranc <goranc@gmail.com>\n"
"Language-Team: Croatian <hr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, fuzzy, python-format
msgid "Number of bank costs invoices created"
msgstr "Broj učitanih transakcija"
#. module: account_banking
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Results:"
msgstr "Rezultati:"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of errors found"
msgstr "Broj pronađenih grešaka"
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
msgid "Select the processing details:"
msgstr "Odaberite detalje obrade:"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid format"
msgstr ""
#. module: account_banking
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr "Pogrešno ime modela u definiciji akcije."
#. module: account_banking
#: field:payment.line,date_done:0
msgid "Date Confirmed"
msgstr "Datum potvrđen"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_statements,open_statements:0
msgid "_View Statements"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,end:0
#: wizard_button:account_banking.banking_import,view_statements,end:0
msgid "_Close"
msgstr "_Zatvori"
#. module: account_banking
#: field:account.banking.account.settings,bank_partner_id:0
msgid "Bank Partner"
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_account_settings
#: model:ir.model,name:account_banking.model_account_banking_bank_journal
msgid "Default Journal for Bank Account"
msgstr "Predefinirana temeljnica za bankovni račun"
#. module: account_banking
#: wizard_field:account_banking.banking_import,init,file:0
msgid "Statements File"
msgstr "Datoteka sa stavkama"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"More than one bank account was found with the same number %(account_no)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of transactions"
msgstr "Ukupan broj transakcija"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Account move line \"%s\" is not valid"
msgstr "Redak prijenosa računa \"%s\" nije ispravan"
#. module: account_banking
#: help:account.banking.account.settings,default_debit_account_id:0
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."
msgstr ""
"Račun za upis primljene neočekivane uplate. To može biti potrebno kada "
"klijent plaća unaprijed, ili ako nema podudarne fakture. Omogućeno je "
"ispravljanje upisa prije potvrde."
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Bank account %(account_no)s was not found in the database"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Generation of Bank Costs Invoices"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions skipped due to errors"
msgstr "Broj transakcija preskočenih zbog pogreški"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"The expected balance (%.2f) is different '\n"
" 'than the computed one. (%.2f)"
msgstr ""
"Očekivani saldo (%.2f) je različit '\n"
" 'od izračunatog. (%.2f)"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n"
" '%(no_candidates)s candidates found; can\'t choose."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,invoice_journal_id:0
#, fuzzy
msgid "Costs Journal"
msgstr "Temeljnica"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements skipped due to errors"
msgstr "Broj stavki preskočenih zbog pogreški"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid IBAN account number!"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Import Settings for Bank Account"
msgstr "Predefinirane postavke za učitavanje podataka za bankovni račun"
#. module: account_banking
#: help:account.banking.account.settings,default_credit_account_id:0
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."
msgstr ""
"Račun za upis signalizirane neočekivane uplate. To se može dogoditi kada je "
"otkazana uplata izravnim zaduženjem od strane kupca, ili kada se ne može "
"pronaći podudarna uplata. Omogućeno je ispravljanje upisa prije potvrde."
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to import parser %(parser)s. Parser class not found."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Cancelled"
msgstr "Poništeno"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"Insufficient data to select online '\n"
" 'conversion database"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,statement_ids:0
msgid "Statements"
msgstr "Izvodi"
#. module: account_banking
#: field:account.banking.account.settings,default_debit_account_id:0
msgid "Default debit account"
msgstr "Predefinirani račun terećenja"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Unknown Bank"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,date:0
msgid "Import Date"
msgstr "Datum učitavanja"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Confirmed"
msgstr "Potvrđeno"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_res_partner_banks
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_accounts
msgid "Bank Accounts"
msgstr ""
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Accounts for Unknown Movements"
msgstr "Predefinirani računi za nedefinirane promete"
#. module: account_banking
#: view:account.bank.statement:0
msgid "Confirm"
msgstr "Potvrdi"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statements found for account %(bank_account)s, '\n"
" 'but no default journal was defined."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,default_credit_account_id:0
msgid "Default credit account"
msgstr "Predefinirani račun odobrenja"
#. module: account_banking
#: field:account.bank.statement.line,international:0
msgid "International Transaction"
msgstr "Međunaradni prijenos"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Please verify that an account is defined in the journal."
msgstr "Molimo provjerite da je račun definiran u temeljnici"
#. module: account_banking
#: field:account.bank.statement.line,trans:0
msgid "Bank Transaction ID"
msgstr "Oznaka bankovne transakcije"
#. module: account_banking
#: help:account.banking.account.settings,invoice_journal_id:0
msgid "This is the journal used to create invoices for bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement %(id)s known - skipped"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Sent"
msgstr "Poslano"
#. module: account_banking
#: help:account.banking.account.settings,costs_account_id:0
msgid ""
"The account to use when the bank invoices its own costs. Leave it blank to "
"disable automatic invoice generation on bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Error !"
msgstr "Greška !"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid data"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry
msgid "country_id"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Rejected"
msgstr ""
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals
msgid "Default Import Settings for Bank Accounts"
msgstr "Predefinirane postavke učitavanja za bankovne račune"
#. module: account_banking
#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file
#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard
msgid "Import Bank Statements File"
msgstr "Učitaj datoteku izvoda banke"
#. module: account_banking
#: help:account_banking.banking_import,init,file:0
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"
"\n"
"To stay on the safe side, always load bank statements files using the same "
"format."
msgstr ""
"Datoteka s transakcijama za učitavanje. Imajte na umu da je potpuno sigurno "
"ponovno učitavanje iste datoteke ili učitati datoteku izvoda koji se "
"vremenski preklapaju, ipak postoje formati datoteka koji mogu uzrokovati "
"različiti redoslijed, što može dovesti do dvostrukog unosa.\n"
"\n"
"Za sigurnost, uvijek učitati datoteke koristeći bankovni izvod istog formata."
#. module: account_banking
#: code:addons/account_banking/sepa/bbantoiban.py:0
#, python-format
msgid "This is a stub. Please implement your own code"
msgstr ""
#. module: account_banking
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "Neispravan XML za arhitekturu prikaza!"
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Imported Bank Statements"
msgstr "Učitani izvodi banke"
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr "_Odustani"
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid ""
"\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're "
"just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the "
"document\n"
" version of Bank Statements, or created as an optional side effect "
"of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code "
"or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export "
"generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and "
"partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Import Bank Transactions File"
msgstr "Učitaj datoteku bankovnih transakcija"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Account %(account_no)s is not owned by %(partner)s"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,import:0
msgid "_Ok"
msgstr "_U redu"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "More then one possible match found for partner with name %(name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr "Status"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "ERROR!"
msgstr "Greška!"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number has the wrong format for %(country)s"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,currency:0
msgid "Currency"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr "nepripremljeni podaci"
#. module: account_banking
#: field:payment.line,msg:0
msgid "Message"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,company_id:0
#: field:account.banking.imported.file,company_id:0
#: wizard_field:account_banking.banking_import,init,company:0
msgid "Company"
msgstr "Tvrtka"
#. module: account_banking
#: wizard_field:account_banking.banking_import,view_error,log:0
#: wizard_field:account_banking.banking_import,view_statements,log:0
msgid "Log"
msgstr "Dnevnik izmjena"
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "Invalid value for transfer_type"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Configration Error !"
msgstr "Konfiguracijska pogreška !"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
msgid "Bank Statements File"
msgstr "Datoteka bankovnog izvoda"
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "This is a stub. Please implement your own."
msgstr "Ovo je okvir. Izvedbu provedite sami."
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "No suitable period found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files
msgid "Imported Bank Statements Files"
msgstr "Učitana datoteka bankovnog izvoda"
#. module: account_banking
#: field:account.bank.statement,banking_id:0
msgid "Imported File"
msgstr "Učitana datoteka"
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,log:0
msgid "Import Log"
msgstr "Dnevnik učitavanja"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping periods for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "The imported statements appear to be invalid! Check your file."
msgstr "Učitane stavke nisu korektne! Provjerite datoteku."
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements loaded"
msgstr "Broj učitanih stavki"
#. module: account_banking
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings
msgid "Banking"
msgstr "Bankarstvo"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Error"
msgstr "Greška"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of statements"
msgstr "Ukupan broj stavki"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Unable to reconcile entry \"%s\": %.2f"
msgstr "Nije moguće uskladiti stavku \"%s\".%.2f"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"No suitable fiscal year found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Import Details"
msgstr "Pregled učitanih stavki"
#. module: account_banking
#: field:account.bank.statement.line,period_id:0
msgid "Period"
msgstr "Razdoblje"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Done"
msgstr "Završeno"
#. module: account_banking
#: view:payment.order:0
msgid "Select Invoices to Pay"
msgstr "Odaberite fakture za plaćanje"
#. module: account_banking
#: field:account.banking.imported.file,user_id:0
msgid "Responsible User"
msgstr "Odgovorni korisnik"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The statement balance is incorrect !\n"
msgstr "Saldo izvoda je netočan !\n"
#. module: account_banking
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Naziv objekta mora početi s x_ i ne smije sadržavati specijalne znakove !"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Unfinished"
msgstr "Nedovršeno"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statements found for unknown account %(bank_account)s"
msgstr ""
#. module: account_banking
#: model:ir.module.module,shortdesc:account_banking.module_meta_information
msgid "Account Banking"
msgstr "Bankovni računi"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,open_import:0
msgid "_View Imported File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The IBAN number doesn't seem to be correct"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,format:0
#: wizard_field:account_banking.banking_import,init,parser:0
msgid "File Format"
msgstr "Format datoteke"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping fiscal years found for date %(date)s and company %"
"(company_name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,journal_id:0
msgid "Journal"
msgstr "Temeljnica"
#. module: account_banking
#: field:account.banking.account.settings,costs_account_id:0
#, fuzzy
msgid "Bank Costs Account"
msgstr "Bankovni račun"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Finished"
msgstr "Završeno"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr "Nedovršeno"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Bank Account Details"
msgstr "Stavke bankovnih računa"
#. module: account_banking
#: field:account.bank.statement.line,partner_bank_id:0
#: field:account.banking.account.settings,partner_bank_id:0
msgid "Bank Account"
msgstr "Bankovni račun"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions loaded"
msgstr "Broj učitanih transakcija"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number appears to be invalid for %(country)s"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_acc_number_field
msgid "acc_number"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, fuzzy, python-format
msgid "Number of transactions matched"
msgstr "Broj učitanih transakcija"
#. module: account_banking
#: help:account.banking.account.settings,bank_partner_id:0
msgid ""
"The partner to use for bank costs. Banks are not partners by default. You "
"will most likely have to create one."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr "Stavke ovog računa nisu u valjanom stanju."
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_imported_file
msgid "Imported Bank Statements File"
msgstr "Učitane datoteke bankovnih izvoda"

View File

@@ -1,13 +1,13 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * account_banking
# * account_banking
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.7\n"
"Project-Id-Version: OpenERP Server 5.0.11\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-08 15:18:44+0000\n"
"PO-Revision-Date: 2010-01-08 15:18:44+0000\n"
"POT-Creation-Date: 2010-06-09 10:17:04+0000\n"
"PO-Revision-Date: 2010-06-29 14:26:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -16,7 +16,8 @@ msgstr ""
"Plural-Forms: \n"
#. module: account_banking
#: wizard_view:account_banking.banking_import,import:0
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Results:"
msgstr "Resultaat:"
@@ -31,28 +32,36 @@ msgstr "Aantal gevonden fouten"
msgid "Select the processing details:"
msgstr "Kies de verwerkings-details:"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid format"
msgstr "Ongeldig formaat"
#. module: account_banking
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr "Ongeldige naam in actie-definitie."
#. module: account_banking
#: wizard_button:account_banking.banking_import,import,open:0
msgid "_Open Statement"
msgstr "_Open bankafschriften"
#. module: account_banking
#: field:payment.line,date_done:0
msgid "Date Confirmed"
msgstr "Bevestigingsdatum"
#. module: account_banking
#: wizard_button:account_banking.banking_import,import,end:0
#: wizard_button:account_banking.banking_import,view_statements,open_statements:0
msgid "_View Statements"
msgstr "_Bekijk bankafschriften"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,end:0
#: wizard_button:account_banking.banking_import,view_statements,end:0
msgid "_Close"
msgstr "_Sluit"
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_account_settings
#: model:ir.model,name:account_banking.model_account_banking_bank_journal
msgid "Default Journal for Bank Account"
msgstr "Standaard dagboek voor bankrekening"
@@ -64,8 +73,11 @@ msgstr "Transactiebestand"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "More than one bank account was found with the same number %(account_no)s"
msgstr "Meer dan één bankrekening gevonden met hetzelfde rekeningnummer %(account_no)s"
msgid ""
"More than one bank account was found with the same number %(account_no)s"
msgstr ""
"Meer dan één bankrekening gevonden met hetzelfde rekeningnummer %(account_no)"
"s"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
@@ -81,8 +93,15 @@ msgstr "Boekingsregel \"%s\" is onjuist."
#. module: account_banking
#: help:account.banking.account.settings,default_debit_account_id:0
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."
msgstr "De rekening waarop geboekt moet worden bij onverwachte betalingen. Dit kan nodig zijn als een klant vooruit betaalt of wanneer er geen overeenkomende factuur gevonden kan worden. Merk op dat u altijd boekingen kunt corrigeren voordat u deze bevestigt."
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."
msgstr ""
"De rekening waarop geboekt moet worden bij onverwachte betalingen. Dit kan "
"nodig zijn als een klant vooruit betaalt of wanneer er geen overeenkomende "
"factuur gevonden kan worden. Merk op dat u altijd boekingen kunt corrigeren "
"voordat u deze bevestigt."
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
@@ -90,6 +109,18 @@ msgstr "De rekening waarop geboekt moet worden bij onverwachte betalingen. Dit k
msgid "Bank account %(account_no)s was not found in the database"
msgstr "Bankrekening %(account)s niet gevonden in de database"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n"
" '%(no_candidates)s candidates found; can\'t choose."
msgstr ""
"Niet in staat transactie id %(trans)s (ref: %(ref)s) aan factuur te "
"koppelen: \n"
" '%(no_candidates)s kandidaten gevonden; kan niet "
"kiezen."
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
@@ -99,23 +130,23 @@ msgstr "Aantal overgeslagen transacties als gevolg van fouten"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The expected balance (%.2f) is different '\n"
msgid ""
"The expected balance (%.2f) is different '\n"
" 'than the computed one. (%.2f)"
msgstr "Het verwachte saldo (%.2f) wijkt af van het berekende- (%.2f)."
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr "Afschrift voor bankrekening %(account)s gebruik andere valuta dan opgegeven in het bankdagboek."
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements skipped due to errors"
msgstr "Aantal afschriften overgeslagen door fouten"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid IBAN account number!"
msgstr "Ongeldig IBAN-rekeningnummer"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Import Settings for Bank Account"
@@ -123,20 +154,45 @@ msgstr "Standaardinstellingen voor bankrekeningen"
#. module: account_banking
#: help:account.banking.account.settings,default_credit_account_id:0
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."
msgstr "De te gebruiken rekening bij onverwachte betalingen. Dit kan voorkomen indien een incasso-opdracht door een klant is geannuleerd, of wanneer er geen overeenkomende betaling kan worden gevonden. Merk op dat u altijd boekingen kunt corrigeren voordat u deze bevestigt."
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."
msgstr ""
"De te gebruiken rekening bij onverwachte betalingen. Dit kan voorkomen "
"indien een incasso-opdracht door een klant is geannuleerd, of wanneer er "
"geen overeenkomende betaling kan worden gevonden. Merk op dat u altijd "
"boekingen kunt corrigeren voordat u deze bevestigt."
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to import parser %(parser)s. Parser class not found."
msgstr "Niet in staat parser %(parser)s te importeren. Parser class niet gevonden."
msgstr ""
"Niet in staat parser %(parser)s te importeren. Parser class niet gevonden."
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data"
msgstr "Onvoldoende gegevens"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Cancelled"
msgstr "Geannuleerd"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"Insufficient data to select online '\n"
" 'conversion database"
msgstr ""
"Onvoldoende gegevens om on-line'\n"
" 'conversie-database te kiezen"
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,statement_ids:0
@@ -149,6 +205,20 @@ msgid "Default debit account"
msgstr "Standaard debet-rekening"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Unknown Bank"
msgstr "Onbekende bank"
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr "_Annuleer"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr "Concept"
#. module: account_banking
#: field:account.banking.imported.file,date:0
@@ -160,6 +230,12 @@ msgstr "Importdatum"
msgid "Confirmed"
msgstr "Bevestigd"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_res_partner_banks
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_accounts
msgid "Bank Accounts"
msgstr "Bankrekeningen"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Accounts for Unknown Movements"
@@ -170,18 +246,21 @@ msgstr "Standaard rekeningen voor onverwachte mutaties"
msgid "Confirm"
msgstr "Bevestig"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statements found for account %(bank_account)s, '\n"
" 'but no default journal was defined."
msgstr ""
"Afschriften gevonden voor bankrekening %(bank_account)s, maar geen "
"gedefinieerd dagboek gevonden hiervoor."
#. module: account_banking
#: field:account.banking.account.settings,default_credit_account_id:0
msgid "Default credit account"
msgstr "Standaard credit-rekening"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statements found for account %(bank_account)s, '\n"
" 'but no default journal was defined."
msgstr "Afschriften gevonden voor bankrekening %(bank_account)s, maar geen gedefinieerd dagboek gevonden hiervoor."
#. module: account_banking
#: field:account.bank.statement.line,international:0
msgid "International Transaction"
@@ -218,8 +297,18 @@ msgstr "Fout !"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr "De boekingsregels zijn niet geldig."
msgid "Invalid data"
msgstr "Ongeldige gegevens"
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry
msgid "country_id"
msgstr "country_id"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Rejected"
msgstr "Geweigerd"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
@@ -235,12 +324,34 @@ msgstr "Importeer bankafschrift bestand"
#. module: account_banking
#: help:account_banking.banking_import,init,file:0
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"
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"
"\n"
"To stay on the safe side, always load bank statements files using the same format."
msgstr "Het te importeren transactiebestand. Let alstublieft op: hoewel het zondermeer veilig is om hetzelfde bestand meerdere keren te importeren of om in tijd overlappende bestanden te importeren, zijn er formaten die een ander nummeringsschema introduceren, wat tot problemen kan leiden.\n"
"To stay on the safe side, always load bank statements files using the same "
"format."
msgstr ""
"Het te importeren transactiebestand. Let alstublieft op: hoewel het "
"zondermeer veilig is om hetzelfde bestand meerdere keren te importeren of om "
"in tijd overlappende bestanden te importeren, zijn er formaten die een ander "
"nummeringsschema introduceren, wat tot problemen kan leiden.\n"
"\n"
"Om aan de veilige kant te blijven, importeer altijd transactiebestanden in hetzelfde formaat."
"Om aan de veilige kant te blijven, importeer altijd transactiebestanden in "
"hetzelfde formaat."
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr "Status"
#. module: account_banking
#: code:addons/account_banking/sepa/bbantoiban.py:0
#, python-format
msgid "This is a stub. Please implement your own code"
msgstr "Dit is een stub. Maak alstublieft uw eigen versie."
#. module: account_banking
#: constraint:ir.ui.view:0
@@ -253,8 +364,9 @@ msgid "Imported Bank Statements"
msgstr "Geïmporteerde bankafschriften"
#. module: account_banking
#: wizard_view:account_banking.banking_import,import:0
#: wizard_view:account_banking.banking_import,init:0
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Import Bank Transactions File"
msgstr "Importeer banktransacties-bestand"
@@ -276,23 +388,41 @@ msgid "More then one possible match found for partner with name %(name)s"
msgstr "Meer dan één mogelijke match gevonden voor partner met naam %(name)s"
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr "Status"
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr ""
"Afschrift voor bankrekening %(bank_account)s gebruikt '\n"
" 'andere valuta dan opgegeven in het bankdagboek."
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "No suitable period found for date %(date)s"
msgstr "Geen geschikte periode gevonden voor datum %(date)s"
msgid "ERROR!"
msgstr "FOUT!"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Multiple overlapping periods for date %(date)s"
msgstr "Meerdere overlappende periodes gevonden voor datum %(date)s"
msgid "The account number has the wrong format for %(country)s"
msgstr "Het rekeningnummer heeft het verkeerde formaat voor %(country)s"
#. module: account_banking
#: field:account.bank.statement.line,currency:0
msgid "Currency"
msgstr "Valuta"
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr "Ruwe data"
#. module: account_banking
#: field:payment.line,msg:0
msgid "Message"
msgstr "Bericht"
#. module: account_banking
#: field:account.banking.account.settings,company_id:0
@@ -302,14 +432,16 @@ msgid "Company"
msgstr "Bedrijf"
#. module: account_banking
#: wizard_field:account_banking.banking_import,import,log:0
#: wizard_field:account_banking.banking_import,view_error,log:0
#: wizard_field:account_banking.banking_import,view_statements,log:0
msgid "Log"
msgstr "Logboek"
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr "Ruwe data"
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "Invalid value for transfer_type"
msgstr "Ongeldige waarde voor transfer_type"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
@@ -317,120 +449,6 @@ msgstr "Ruwe data"
msgid "Configration Error !"
msgstr "Instellingsfout!"
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid "\n"
" Module to do banking.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the document\n"
" version of Bank Statements, or created as an optional side effect of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" + MultiBank (NL) format transaction files,\n"
" - (todo) MT940 (Swift) format transaction files,\n"
" - (todo) CODA (BE) format transaction files,\n"
" - (wish) SEPA Credits (ISO 200022) messages,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
" - (wish) BTL91 (NL) payment orders files (no format description available),\n"
" - (wish) SEPA Direct Debits (ISO 200022) messages\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr " Module voor bankzaken.\n"
"\n"
" Deze module probeert alle bestaande bankimport- en -exportschema's\n"
" te combineren. Ratio hierachter is dat het vrij gebruikelijk is om\n"
" buitenlandse bankrekeningen te hebben naast nationale-. De huidige\n"
" benadering waarbij nationale bankinterfaces ondergebracht worden in\n"
" de l10n_xxx modules, maakt het zeer lastig om deze naast elkaar te\n"
" gebruiken. Een meer bank-geöriënteerde benadering lijkt logischer en\n"
" 'schoner'.\n"
"\n"
" Wijzigingen op standaard OpenERP:\n"
"\n"
" * Legt focus op berichtuitwisseling met banken:\n"
" + Bankafschriftregels opgewaardeerd naar onafhankelijke banktransacties.\n"
" + Bankafschriften hebben geen speciale accountancy-betekenis, ze zijn\n"
" slechts enveloppen voor een reeks banktransacties.\n"
" + Bankafschriften kunnen hetzij met de hand worden ingevoerd als projectie\n"
" van de papieren versie, of gemaakt worden als neveneffect van het\n"
" importeren van banktransacties.\n"
"\n"
" * Voorbereidingen voor SEPA:\n"
" + IBAN bankrekeningen zijn de standaard in de SEPA-landen\n"
" + lokale bankrekeningen worden afgeleid van SEPA (uitgezonderd Turkije)\n"
" maar worden beschouwd als identiek aan de corresponderende IBAN-rekening.\n"
" + Banken worden geïdentificeerd met hetzij land + bankcode + branchcode of BIC\n"
" - Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + Nationale online databases kunnen gebruikt worden om BBAN's naar IBAN's te\n"
" converteren.\n"
"\n"
" * Geeft dropin uitbreidbare importvoorzieningen voor bankcommunicatie in:\n"
" + MultiBank (NL) formaat transactiebestanden,\n"
" - (todo) MT940 (Swift) formaat transactiebestanden,\n"
" - (todo) CODA (BE) formaat transactiebestanden,\n"
" - (wish) SEPA Credits (ISO 200022) berichten,\n"
"\n"
" * Breidt betalingen uit voor digitaal bankieren:\n"
" + Werkstroom in betalingen aangepast voor bank-operaties\n"
" + Bouwt op account_payment mechanieken voor uitbreidingen met export generatoren.\n"
" - ClieOp3 (NL) betalings- en incasso-opdrachten beschikbaar in de\n"
" account_banking_nl_clieop module\n"
" - (wish) BTL91 (NL) batalingsopdrachten (geen formaatbeschrijving beschikbaar),\n"
" - (wish) SEPA Direct Debits (ISO 200022) berichten\n"
"\n"
" * Toegevoegde mogelijkheden voor het import/export mechanisme:\n"
" + Automatische koppeling en aanmaken van bankrekeningen, banken en relaties\n"
" tijdens het importeren van transacties.\n"
" + Automatisch koppelen met facturen en betalingen.\n"
" + Solide importmechanisme dat meerdere imports van dezelfde transacties over\n"
" over meerdere bestanden toestaat.\n"
" + Dagboek-instellingen per bankrekening.\n"
" + Business logica en bestands-parsing strikt gescheiden om de ontwikkeling\n"
" van nieuwe parsers te vergemakkelijken\n"
" + Geen speciale configuratie nodig voor de parsers, nieuwe parsers worden\n"
" herkend en beschikbaar gemaakt voor gebuikers bij server(her)start.\n"
" "
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
msgid "Bank Statements File"
@@ -442,6 +460,14 @@ msgstr "Bankafschrift bestand"
msgid "This is a stub. Please implement your own."
msgstr "Dit is een stub. Maak alstublieft uw eigen versie."
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "No suitable period found for date %(date)s and company %(company_name)s"
msgstr ""
"Geen geschikt boekjaar gevonden voor datum %(date)s en bedrijf %"
"(company_name)s"
#. module: account_banking
#: view:account.banking.imported.file:0
#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
@@ -449,6 +475,12 @@ msgstr "Dit is een stub. Maak alstublieft uw eigen versie."
msgid "Imported Bank Statements Files"
msgstr "Geïmporteerde bankafschrift bestanden"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number appears to be invalid for %(country)s"
msgstr "Het bankrekeningnummer blijkt ongeldig te zijn voor %(country)s"
#. module: account_banking
#: field:account.bank.statement,banking_id:0
msgid "Imported File"
@@ -460,6 +492,15 @@ msgstr "Geïmporteerd bestand"
msgid "Import Log"
msgstr "Import log"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping periods for date %(date)s and company %(company_name)s"
msgstr ""
"Meerdere overlappende periodes gevonden voor datum %(date)s en bedrijf %"
"(company_name)s"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
@@ -483,12 +524,27 @@ msgstr "Bankzaken"
msgid "Error"
msgstr "Fout"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of statements"
msgstr "Totaal aantal afschriften"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Unable to reconcile entry \"%s\": %.2f"
msgstr "Niet in staat boeking af te letteren \"%s\": %.2f"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"No suitable fiscal year found for date %(date)s and company %(company_name)s"
msgstr ""
"Geen geschikt boekjaar gevonden voor datum %(date)s en bedrijf %"
"(company_name)s"
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Import Details"
@@ -522,8 +578,10 @@ msgstr "Het saldo op het afschrift is onjuist!\n"
#. module: account_banking
#: constraint:ir.model:0
msgid "The Object name must start with x_ and not contain any special character !"
msgstr "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !"
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
@@ -542,10 +600,15 @@ msgid "Account Banking"
msgstr "Account Banking"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#: wizard_button:account_banking.banking_import,view_error,open_import:0
msgid "_View Imported File"
msgstr "_Bekijk geïmporteerd bestand"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Total number of statements"
msgstr "Totaal aantal afschriften"
msgid "The IBAN number doesn't seem to be correct"
msgstr "Het IBAN-nummer lijkt niet correct te zijn"
#. module: account_banking
#: field:account.banking.imported.file,format:0
@@ -553,6 +616,16 @@ msgstr "Totaal aantal afschriften"
msgid "File Format"
msgstr "Bestandsformaat"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping fiscal years found for date %(date)s and company %"
"(company_name)s"
msgstr ""
"Meerdere overlappende boekjaren gevonden voor datum %(date)s en bedrijf %"
"(company_name)s"
#. module: account_banking
#: field:account.banking.account.settings,journal_id:0
msgid "Journal"
@@ -563,25 +636,11 @@ msgstr "Dagboek"
msgid "Finished"
msgstr "Gereed"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "No suitable fiscal year found for company %(company_name)s"
msgstr "Geen geschikt boekjaar gevonden voor bedrijf %(company_name)s"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Bank Account Details"
msgstr "Details bankrekening"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to link transaction %(trans)s to invoice: '\n"
" '%(no_candidates)s candidates found; can't choose."
msgstr "Niet in staat transactie %(trans)s aan factuur te koppelen: '\n"
" '%(no_candidates)s kandidaten gevonden; kan niet kiezen."
#. module: account_banking
#: field:account.bank.statement.line,partner_bank_id:0
#: field:account.banking.account.settings,partner_bank_id:0
@@ -595,10 +654,163 @@ msgid "Number of transactions loaded"
msgstr "Aantal geladen transacties"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#: model:ir.module.module,description:account_banking.module_meta_information
msgid ""
"\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're "
"just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the "
"document\n"
" version of Bank Statements, or created as an optional side effect "
"of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code "
"or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
" - (todo) MT940 (Swift) format transaction files,\n"
" - (todo) CODA (BE) format transaction files,\n"
" - (wish) SEPA Credits (ISO 200022) messages,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export "
"generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
" - (wish) BTL91 (NL) payment orders files (no format description "
"available),\n"
" - (wish) SEPA Direct Debits (ISO 200022) messages\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and "
"partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr ""
" Module voor bankzaken.\n"
"\n"
" Waarschuwing: deze module is afhankelijk van BeautifulSoup.\n"
"\n"
" Deze module probeert alle bestaande bankimport- en -exportschema's\n"
" te combineren. Ratio hierachter is dat het vrij gebruikelijk is om\n"
" buitenlandse bankrekeningen te hebben naast nationale-. De huidige\n"
" benadering waarbij nationale bankinterfaces ondergebracht worden in\n"
" de l10n_xxx modules, maakt het zeer lastig om deze naast elkaar te\n"
" gebruiken. Een meer bank-geöriënteerde benadering lijkt logischer en\n"
" 'schoner'.\n"
"\n"
" Wijzigingen op standaard OpenERP:\n"
"\n"
" * Legt focus op berichtuitwisseling met banken:\n"
" + Bankafschriftregels opgewaardeerd naar onafhankelijke "
"banktransacties.\n"
" + Bankafschriften hebben geen speciale accountancy-betekenis, ze zijn\n"
" slechts enveloppen voor een reeks banktransacties.\n"
" + Bankafschriften kunnen hetzij met de hand worden ingevoerd als "
"projectie\n"
" van de papieren versie, of gemaakt worden als neveneffect van het\n"
" importeren van banktransacties.\n"
"\n"
" * Voorbereidingen voor SEPA:\n"
" + IBAN bankrekeningen zijn de standaard in de SEPA-landen\n"
" + lokale bankrekeningen worden afgeleid van SEPA (uitgezonderd "
"Turkije)\n"
" maar worden beschouwd als identiek aan de corresponderende IBAN-"
"rekening.\n"
" + Banken worden geïdentificeerd met hetzij land + bankcode + "
"branchcode of BIC\n"
" - Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + Nationale online databases kunnen gebruikt worden om BBAN's naar "
"IBAN's te\n"
" converteren.\n"
"\n"
" * Geeft dropin uitbreidbare importvoorzieningen voor bankcommunicatie "
"in:\n"
" + MultiBank (NL) formaat transactiebestanden,\n"
" - (todo) MT940 (Swift) formaat transactiebestanden,\n"
" - (todo) CODA (BE) formaat transactiebestanden,\n"
" - (wish) SEPA Credits (ISO 200022) berichten,\n"
"\n"
" * Breidt betalingen uit voor digitaal bankieren:\n"
" + Werkstroom in betalingen aangepast voor bank-operaties\n"
" + Bouwt op account_payment mechanieken voor uitbreidingen met export "
"generatoren.\n"
" - ClieOp3 (NL) betalings- en incasso-opdrachten beschikbaar in de\n"
" account_banking_nl_clieop module\n"
" - (wish) BTL91 (NL) batalingsopdrachten,\n"
" - (wish) SEPA Direct Debits (ISO 200022) berichten\n"
"\n"
" * Toegevoegde mogelijkheden voor het import/export mechanisme:\n"
" + Automatische koppeling en aanmaken van bankrekeningen, banken en "
"relaties\n"
" tijdens het importeren van transacties.\n"
" + Automatisch koppelen met facturen en betalingen.\n"
" + Solide importmechanisme dat meerdere imports van dezelfde "
"transacties over\n"
" over meerdere bestanden toestaat.\n"
" + Dagboek-instellingen per bankrekening.\n"
" + Business logica en bestands-parsing strikt gescheiden om de "
"ontwikkeling\n"
" van nieuwe parsers te vergemakkelijken\n"
" + Geen speciale configuratie nodig voor de parsers, nieuwe parsers "
"worden\n"
" herkend en beschikbaar gemaakt voor gebuikers bij server(her)start.\n"
" "
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_acc_number_field
msgid "acc_number"
msgstr "acc_number"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Multiple overlapping fiscal years found for date %(date)s"
msgstr "Meerdere overlappende boekjaren gevonden voor datum %(date)s"
msgid "Number of transactions matched"
msgstr "Aantal transacties herkend"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr "De boekingsregels zijn niet geldig."
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_imported_file

764
account_banking/i18n/ro.po Normal file
View File

@@ -0,0 +1,764 @@
# Romanian translation for account-banking
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the account-banking package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: account-banking\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-06-29 14:33:53+0000\n"
"PO-Revision-Date: 2010-05-24 22:26+0000\n"
"Last-Translator: Lavinia Loredana Bertia <Unknown>\n"
"Language-Team: Romanian <ro@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of bank costs invoices created"
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Results:"
msgstr "Resultate:"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of errors found"
msgstr "Număr de erori găsite"
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
msgid "Select the processing details:"
msgstr "Selectați detaliile de procesare:"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid format"
msgstr ""
#. module: account_banking
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr "Nume invalid de model în definirea acțiunii"
#. module: account_banking
#: field:payment.line,date_done:0
msgid "Date Confirmed"
msgstr "Dată confirmată"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_statements,open_statements:0
msgid "_View Statements"
msgstr "_Vizualizează extrasurile de cont"
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,end:0
#: wizard_button:account_banking.banking_import,view_statements,end:0
msgid "_Close"
msgstr "_Închide"
#. module: account_banking
#: field:account.banking.account.settings,bank_partner_id:0
msgid "Bank Partner"
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_account_settings
#: model:ir.model,name:account_banking.model_account_banking_bank_journal
msgid "Default Journal for Bank Account"
msgstr ""
#. module: account_banking
#: wizard_field:account_banking.banking_import,init,file:0
msgid "Statements File"
msgstr "Fișier de extrasuri de cont"
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"More than one bank account was found with the same number %(account_no)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of transactions"
msgstr "Număr total de tranzacții"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Account move line \"%s\" is not valid"
msgstr "înregistrarea contabilă \"%s\" nu este validă"
#. module: account_banking
#: help:account.banking.account.settings,default_debit_account_id:0
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."
msgstr ""
"Contul ce trebuie folosit când este primită o plată neașteptată. Acesta "
"poate fi necesitat când un client plătește în avans sau când nu este găsită "
"factura aferentă. Tranzacțiile pot fi corectate înainte de a fi confirmate."
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Bank account %(account_no)s was not found in the database"
msgstr "Contul bancar %(account_no)s nu a fost găsit în baza de date."
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Generation of Bank Costs Invoices"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions skipped due to errors"
msgstr "S-a sărit peste o serie de tranzacții din cauza unor erori."
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"The expected balance (%.2f) is different '\n"
" 'than the computed one. (%.2f)"
msgstr ""
"Soldul preconizat (%.2f) este diferit '\n"
" ' de cel calculat. (%.2f)"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '\n"
" '%(no_candidates)s candidates found; can\'t choose."
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,invoice_journal_id:0
msgid "Costs Journal"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements skipped due to errors"
msgstr "S-a sărit peste o serie de extrasuri de cont din cauza unor erori"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid IBAN account number!"
msgstr "IBAN invalid!"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Import Settings for Bank Account"
msgstr "Setări implicite de importare pentru Contul Bancar"
#. module: account_banking
#: help:account.banking.account.settings,default_credit_account_id:0
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."
msgstr ""
"Contul ce trebuie folosit când este semnalată o plată neașteptată. Aceasta "
"se poate întâmpla când un client anulează un debit direct, sau când nu este "
"găsită plata aferentă. Tranzacțiile pot fi modificate înainte de a fi "
"confirmate."
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Unable to import parser %(parser)s. Parser class not found."
msgstr ""
"Nu se poate importa analizatorul %(parser)s. Categoria analizatorului nu a "
"fost găsită."
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Insufficient data"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Cancelled"
msgstr "Anulat"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid ""
"Insufficient data to select online '\n"
" 'conversion database"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,statement_ids:0
msgid "Statements"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,default_debit_account_id:0
msgid "Default debit account"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Unknown Bank"
msgstr "Bancă necunoscută"
#. module: account_banking
#: field:account.banking.imported.file,date:0
msgid "Import Date"
msgstr "Importă data"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Confirmed"
msgstr "Confirmat"
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_res_partner_banks
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_accounts
msgid "Bank Accounts"
msgstr "Conturi bancare"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Default Accounts for Unknown Movements"
msgstr "Conturi Implicite pentru Tranzacții Necunoscute"
#. module: account_banking
#: view:account.bank.statement:0
msgid "Confirm"
msgstr "Confirmă"
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statements found for account %(bank_account)s, '\n"
" 'but no default journal was defined."
msgstr ""
"Extrasuri de cont găsite pentru contul %(bank_account)s, '\n"
" ' dar s-a setat nici un jurnal implicit."
#. module: account_banking
#: field:account.banking.account.settings,default_credit_account_id:0
msgid "Default credit account"
msgstr "Cont de credit implicit"
#. module: account_banking
#: field:account.bank.statement.line,international:0
msgid "International Transaction"
msgstr "Tranzacție Internațională"
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Please verify that an account is defined in the journal."
msgstr "Verificaţi dacă acest cont este definit în jurnal."
#. module: account_banking
#: field:account.bank.statement.line,trans:0
msgid "Bank Transaction ID"
msgstr "ID-ul Tranzacției Bancare"
#. module: account_banking
#: help:account.banking.account.settings,invoice_journal_id:0
msgid "This is the journal used to create invoices for bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statement %(id)s known - skipped"
msgstr "Extrasul %(id)s este recunoscut - s-a sărit peste el"
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Sent"
msgstr "S-a trimis"
#. module: account_banking
#: help:account.banking.account.settings,costs_account_id:0
msgid ""
"The account to use when the bank invoices its own costs. Leave it blank to "
"disable automatic invoice generation on bank costs."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Error !"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Invalid data"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_normal_field_contry
msgid "country_id"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Rejected"
msgstr ""
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.action_account_banking_journals
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_bank_journals
msgid "Default Import Settings for Bank Accounts"
msgstr ""
#. module: account_banking
#: model:ir.actions.wizard,name:account_banking.wizard_account_banking_import_file
#: model:ir.ui.menu,name:account_banking.menu_account_banking_import_wizard
msgid "Import Bank Statements File"
msgstr ""
#. module: account_banking
#: help:account_banking.banking_import,init,file:0
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"
"\n"
"To stay on the safe side, always load bank statements files using the same "
"format."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/sepa/bbantoiban.py:0
#, python-format
msgid "This is a stub. Please implement your own code"
msgstr ""
#. module: account_banking
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Imported Bank Statements"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,end:0
msgid "_Cancel"
msgstr "_Anulează"
#. module: account_banking
#: model:ir.module.module,description:account_banking.module_meta_information
msgid ""
"\n"
" Module to do banking.\n"
"\n"
" Note: This module is depending on BeautifulSoup.\n"
"\n"
" This modules tries to combine all current banking import and export\n"
" schemes. Rationale for this is that it is quite common to have foreign\n"
" bank account numbers next to national bank account numbers. The current\n"
" approach, which hides the national banking interface schemes in the\n"
" l10n_xxx modules, makes it very difficult to use these simultanious.\n"
" A more banking oriented approach seems more logical and cleaner.\n"
"\n"
" Changes to default OpenERP:\n"
"\n"
" * Puts focus on the real life messaging with banks:\n"
" + Bank statement lines upgraded to independent bank transactions.\n"
" + Banking statements have no special accountancy meaning, they're "
"just\n"
" message envelopes for a number of bank transactions.\n"
" + Bank statements can be either encoded by hand to reflect the "
"document\n"
" version of Bank Statements, or created as an optional side effect "
"of\n"
" importing Bank Transactions.\n"
"\n"
" * Preparations for SEPA:\n"
" + IBAN accounts are the standard in the SEPA countries\n"
" + local accounts are derived from SEPA (excluding Turkey) but are\n"
" considered to be identical to the corresponding SEPA account.\n"
" + Banks are identified with either Country + Bank code + Branch code "
"or BIC\n"
" + Each bank can have its own pace in introducing SEPA into their\n"
" communication with their customers.\n"
" + National online databases can be used to convert BBAN's to IBAN's.\n"
" + The SWIFT database is consulted for bank information.\n"
"\n"
" * Adds dropin extensible import facility for bank communication in:\n"
" - Drop-in input parser development.\n"
" - MultiBank (NL) format transaction files available as\n"
" account_banking_nl_multibank,\n"
"\n"
" * Extends payments for digital banking:\n"
" + Adapted workflow in payments to reflect banking operations\n"
" + Relies on account_payment mechanics to extend with export "
"generators.\n"
" - ClieOp3 (NL) payment and direct debit orders files available as\n"
" account_banking_nl_clieop\n"
"\n"
" * Additional features for the import/export mechanism:\n"
" + Automatic matching and creation of bank accounts, banks and "
"partners,\n"
" during import of statements.\n"
" + Automatic matching with invoices and payments.\n"
" + Sound import mechanism, allowing multiple imports of the same\n"
" transactions repeated over multiple files.\n"
" + Journal configuration per bank account.\n"
" + Business logic and format parsing strictly separated to ease the\n"
" development of new parsers.\n"
" + No special configuration needed for the parsers, new parsers are\n"
" recognized and made available at server (re)start.\n"
" "
msgstr ""
#. module: account_banking
#: wizard_view:account_banking.banking_import,init:0
#: wizard_view:account_banking.banking_import,view_error:0
#: wizard_view:account_banking.banking_import,view_statements:0
msgid "Import Bank Transactions File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "Account %(account_no)s is not owned by %(partner)s"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,init,import:0
msgid "_Ok"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "More then one possible match found for partner with name %(name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,state:0
#: field:payment.line,export_state:0
msgid "State"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "ERROR!"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number has the wrong format for %(country)s"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,currency:0
msgid "Currency"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,file:0
msgid "Raw Data"
msgstr ""
#. module: account_banking
#: field:payment.line,msg:0
msgid "Message"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,company_id:0
#: field:account.banking.imported.file,company_id:0
#: wizard_field:account_banking.banking_import,init,company:0
msgid "Company"
msgstr ""
#. module: account_banking
#: wizard_field:account_banking.banking_import,view_error,log:0
#: wizard_field:account_banking.banking_import,view_statements,log:0
msgid "Log"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "Invalid value for transfer_type"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Configration Error !"
msgstr ""
#. module: account_banking
#: model:ir.actions.act_window,name:account_banking.act_account_payment_account_bank_statement
msgid "Bank Statements File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/parsers/models.py:0
#, python-format
msgid "This is a stub. Please implement your own."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid "No suitable period found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: model:ir.actions.act_window,name:account_banking.action_account_banking_imported_files
#: model:ir.ui.menu,name:account_banking.menu_action_account_banking_imported_files
msgid "Imported Bank Statements Files"
msgstr ""
#. module: account_banking
#: field:account.bank.statement,banking_id:0
msgid "Imported File"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
#: field:account.banking.imported.file,log:0
msgid "Import Log"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid ""
"Statement for account %(bank_account)s uses different '\n"
" 'currency than the defined bank journal."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping periods for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "The imported statements appear to be invalid! Check your file."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of statements loaded"
msgstr ""
#. module: account_banking
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_actions
#: model:ir.ui.menu,name:account_banking.menu_finance_banking_settings
msgid "Banking"
msgstr ""
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Error"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Total number of statements"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "Unable to reconcile entry \"%s\": %.2f"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"No suitable fiscal year found for date %(date)s and company %(company_name)s"
msgstr ""
#. module: account_banking
#: view:account.banking.imported.file:0
msgid "Import Details"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,period_id:0
msgid "Period"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Done"
msgstr ""
#. module: account_banking
#: view:payment.order:0
msgid "Select Invoices to Pay"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,user_id:0
msgid "Responsible User"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The statement balance is incorrect !\n"
msgstr ""
#. module: account_banking
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Unfinished"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Statements found for unknown account %(bank_account)s"
msgstr ""
#. module: account_banking
#: model:ir.module.module,shortdesc:account_banking.module_meta_information
msgid "Account Banking"
msgstr ""
#. module: account_banking
#: wizard_button:account_banking.banking_import,view_error,open_import:0
msgid "_View Imported File"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The IBAN number doesn't seem to be correct"
msgstr ""
#. module: account_banking
#: field:account.banking.imported.file,format:0
#: wizard_field:account_banking.banking_import,init,parser:0
msgid "File Format"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/banktools.py:0
#, python-format
msgid ""
"Multiple overlapping fiscal years found for date %(date)s and company %"
"(company_name)s"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,journal_id:0
msgid "Journal"
msgstr ""
#. module: account_banking
#: field:account.banking.account.settings,costs_account_id:0
#, fuzzy
msgid "Bank Costs Account"
msgstr "Conturi bancare"
#. module: account_banking
#: selection:account.banking.imported.file,state:0
msgid "Finished"
msgstr ""
#. module: account_banking
#: selection:payment.line,export_state:0
msgid "Draft"
msgstr "Schiță"
#. module: account_banking
#: view:account.banking.account.settings:0
msgid "Bank Account Details"
msgstr ""
#. module: account_banking
#: field:account.bank.statement.line,partner_bank_id:0
#: field:account.banking.account.settings,partner_bank_id:0
msgid "Bank Account"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, python-format
msgid "Number of transactions loaded"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account number appears to be invalid for %(country)s"
msgstr ""
#. module: account_banking
#: model:res.partner.bank.type.field,name:account_banking.bank_acc_number_field
msgid "acc_number"
msgstr ""
#. module: account_banking
#: code:addons/account_banking/wizard/bank_import.py:0
#, fuzzy, python-format
msgid "Number of transactions matched"
msgstr "Număr total de tranzacții"
#. module: account_banking
#: help:account.banking.account.settings,bank_partner_id:0
msgid ""
"The partner to use for bank costs. Banks are not partners by default. You "
"will most likely have to create one."
msgstr ""
#. module: account_banking
#: code:addons/account_banking/account_banking.py:0
#, python-format
msgid "The account entries lines are not in valid state."
msgstr ""
#. module: account_banking
#: model:ir.model,name:account_banking.model_account_banking_imported_file
msgid "Imported Bank Statements File"
msgstr ""

View File

@@ -71,6 +71,62 @@ class mem_bank_transaction(object):
'reference', 'message', 'statement_id',
]
# transfer_type's to be used by the business logic.
# Depending on the type your parser gives a transaction, different
# behavior can be triggered in the business logic.
#
# BANK_COSTS Automated credited costs by the bank.
# Used to generate an automated invoice from the bank
# Will be excluded from matching.
# BANK_TERMINAL A cash withdrawal from a bank terminal.
# Will be excluded from matching.
# CHECK A delayed payment. Can be used to trigger extra
# moves from temporary accounts. (Money away).
# TODO: No special treatment yet.
# Will be selected for matching.
# DIRECT_DEBIT Speaks for itself. When outgoing (credit) and
# matched, can signal the matched invoice triaged.
# Will be selected for matching.
# ORDER Order to the bank. Can work both ways.
# Will be selected for matching.
# PAYMENT_BATCH A payment batch. Can work in both directions.
# Incoming payment batch transactions can't be
# matched with payments, outgoing can.
# Will be selected for matching.
# PAYMENT_TERMINAL A payment with debit/credit card in a (web)shop
# Invoice numbers and other hard criteria are most
# likely missing.
# Will be selected for matching
# PERIODIC_ORDER An automated payment by the bank on your behalf.
# Always outgoing.
# Will be selected for matching.
#
# Perhaps more will follow.
#
# When writing parsers, map other types with similar meaning to these to
# prevent cluttering the API. For example: the Dutch ING Bank has a
# transfer type Post Office, meaning a cash withdrawal from one of their
# agencies. This can be mapped to BANK_TERMINAL without losing any
# significance for OpenERP.
BANK_COSTS = 'BC'
BANK_TERMINAL = 'BT'
CHECK = 'CK'
DIRECT_DEBIT = 'DD'
ORDER = 'DO'
PAYMENT_BATCH = 'PB'
PAYMENT_TERMINAL = 'PT'
PERIODIC_ORDER = 'PO'
types = [
BANK_COSTS, BANK_TERMINAL, CHECK, DIRECT_DEBIT, ORDER,
PAYMENT_BATCH, PAYMENT_TERMINAL, PERIODIC_ORDER,
]
type_map = {
# This can be a translation map of type versus bank type. Each key is
# the real transfer_type, each value is the mem_bank_transaction.type
}
def __init__(self, *args, **kwargs):
super(mem_bank_transaction, self).__init__(*args, **kwargs)
self.id = ''
@@ -87,6 +143,28 @@ class mem_bank_transaction(object):
self.message = ''
self.statement_id = ''
def copy(self):
'''
Return a copy of self
'''
retval = mem_bank_transaction()
for attr in self.__slots__:
setattr(retval, attr, getattr(self, attr))
return retval
def _get_type(self):
if self.transfer_type in self.type_map:
return self.type_map[self.transfer_type]
return self.transfer_type
def _set_type(self, value):
if value in self.types:
self.transfer_type = value
else:
raise ValueError, _('Invalid value for transfer_type')
type = property(_get_type, _set_type)
def is_valid(self):
'''
Heuristic check: at least id, execution_date, remote_account and

View File

@@ -21,3 +21,4 @@
import iban
import online
IBAN = iban.IBAN
BBAN = iban.BBAN

View File

@@ -421,6 +421,98 @@ class IBAN(str):
'''
return self[4:]
class BBAN(object):
'''
Class to reformat a local BBAN account number to IBAN specs.
Simple validation based on length of spec string elements and real data.
'''
@staticmethod
def _get_length(fmt, element):
'''
Internal method to calculate the length of a parameter in a
formatted string
'''
i = 0; max_i = len(fmt._iban)
while i < max_i:
if fmt._iban[i] == element:
next = i +1
while next < max_i and fmt._iban[next] == element:
next += 1
return next - i
i += 1
return 0
def __init__(self, bban, countrycode):
'''
Reformat and sanity check on BBAN format.
Note that this is not a fail safe check, it merely checks the format of
the BBAN following the IBAN specifications.
'''
if countrycode.upper() in IBAN.countries:
self._fmt = IBAN.BBAN_formats[countrycode.upper()]
res = ''
i = 0; j = 0; max_i = len(self._fmt._bban); max_j = len(bban)
while i < max_i and j < max_j:
while bban[j] in ' \t' and j < max_j:
j += 1
if self._fmt._bban[i] == '%':
i += 1
parm = self._fmt._bban[i]
if parm == 'I':
_bban = IBAN(bban)
if _bban.valid:
self._bban = str(_bban)
else:
self._bban = None
# Valid, so nothing else to do
return
elif parm in 'ABCDPSTVWXZ':
_len = self._get_length(self._fmt, parm)
addon = bban[j:j+_len]
if len(addon) != _len:
# Note that many accounts in the IBAN standard
# are allowed to have leading zeros, so zfill
# to full spec length for visual validation.
#
# Note 2: this may look funny to some, as most
# local schemes strip leading zeros. It allows
# us however to present the user a visual feedback
# in order to catch simple user mistakes as
# missing digits.
if parm == 'A':
res += addon.zfill(_len)
else:
# Invalid, just drop the work and leave
return
else:
res += addon
j += _len
elif self._fmt._bban[i] in [bban[j], ' ', '/', '-', '.']:
res += self._fmt._bban[i]
if self._fmt._bban[i] == bban[j]:
j += 1
elif self._fmt._bban[i].isalpha():
res += self._fmt._bban[i]
i += 1
if i == max_i:
self._bban = res
else:
self._bban = None
def __str__(self):
'''String representation'''
return self._bban
def __unicode__(self):
'''Unicode representation'''
return unicode(self._bban)
@property
def valid(self):
'''Simple check if BBAN is in the right format'''
return self._bban and True or False
if __name__ == '__main__':
import sys
for arg in sys.argv[1:]:

View File

@@ -27,6 +27,7 @@ import urllib, urllib2
from BeautifulSoup import BeautifulSoup
from account_banking.sepa import postalcode
from account_banking.sepa.urlagent import URLAgent, SoupForm
from account_banking.sepa.iban import IBAN
from account_banking.struct import struct
__all__ = [
@@ -91,8 +92,10 @@ def get_iban_bic_BE(bank_acc):
# Parse the results
soup = BeautifulSoup(response)
result = struct()
result.iban = contents(soup, 'IBAN').replace(' ', '')
iban = contents(soup, 'IBAN')
if iban.lower().startswith('not a'):
return None
result = struct(iban=iban.replace(' ', ''))
result.bic = contents(soup, 'BIC').replace(' ', '')
result.bank = contents(soup, 'BankName')
@@ -104,10 +107,19 @@ def get_iban_bic_BE(bank_acc):
def BBAN_is_IBAN(bank_acc):
'''
Straight copy, valid for SEPA members who switched to SEPA from old
Intelligent copy, valid for SEPA members who switched to SEPA from old
standards before SEPA actually started.
'''
return bank_acc
if isinstance(bank_acc, IBAN):
iban_acc = bank_acc
else:
iban_acc = IBAN(bank_acc)
return struct(
account = str(bank_acc),
country_id = iban_acc.countrycode,
code = iban_acc.BIC_searchkey
# Note: BIC can not be constructed here!
)
_account_info = {
# TODO: Add more online data banks
@@ -124,11 +136,15 @@ _account_info = {
def account_info(iso, bank_acc):
'''
Consult the online database for this country or return None
Consult the online database for this country to obtain its
corresponding IBAN/BIC number and other info available.
Raise NotImplemented when no information service could be found.
Returns None when a service was found but something went wrong.
Returns a dictionary (struct) of information when found.
'''
if iso in _account_info:
return _account_info[iso](bank_acc)
return None
raise NotImplementedError()
bic_re = re.compile("[^']+'([^']*)'.*")
SWIFTlink = 'http://www.swift.com/bsl/freequery.do'

View File

@@ -18,6 +18,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
# Many thanks to our contributors
#
# Kaspars Vilkens (KNdati): lenghty discussions, bugreports and bugfixes
# Stefan Rijnhart (Therp): bugreport and bugfix
#
'''
This module contains the business logic of the wizard account_banking_import.
The parsing is done in the parser modules. Every parser module is required to
@@ -26,6 +31,7 @@ use parser.models as a mean of communication with the business logic.
import pooler
import time
import wizard
import netsvc
import base64
from tools import config
from tools.translate import _
@@ -34,6 +40,8 @@ from account_banking.parsers.convert import *
from account_banking.struct import struct
from banktools import *
bt = models.mem_bank_transaction
def parser_types(*args, **kwargs):
'''Delay evaluation of parser types until start of wizard, to allow
depending modules to initialize and add their parsers to the list
@@ -57,7 +65,7 @@ class banking_import(wizard.interface):
log = dict(string='Log', type='text', readonly=True)
)
banking_import_form = '''<?xml version="1.0"?>
import_form = '''<?xml version="1.0"?>
<form string="Import Bank Transactions File">
<separator colspan="4" string="Select the processing details:" />
<field name="company" colspan="1" />
@@ -66,7 +74,7 @@ class banking_import(wizard.interface):
<field name="parser"/>
</form>'''
banking_import_fields = dict(
import_fields = dict(
company = dict(
string = 'Company',
type = 'many2one',
@@ -95,11 +103,14 @@ class banking_import(wizard.interface):
def __init__(self, *args, **kwargs):
super(banking_import, self).__init__(*args, **kwargs)
self.__state = ''
self.__linked_invoices = {}
self.__linked_payments = {}
def _fill_results(self, *args, **kwargs):
return {'log': self._log}
def _get_move_info(self, cursor, uid, move_line):
def _get_move_info(self, cursor, uid, move_line, partner_bank_id=False,
partial=False):
reconcile_obj = self.pool.get('account.bank.statement.reconcile')
type_map = {
'out_invoice': 'customer',
@@ -107,7 +118,9 @@ class banking_import(wizard.interface):
'out_refund': 'customer',
'in_refund': 'supplier',
}
retval = struct(move_line=move_line)
retval = struct(move_line=move_line, partner_id=move_line.partner_id.id,
partner_bank_id=partner_bank_id
)
retval.reference = move_line.ref
if move_line.invoice:
retval.invoice = move_line.invoice
@@ -115,12 +128,16 @@ class banking_import(wizard.interface):
else:
retval.type = 'general'
move_line.reconcile_id = reconcile_obj.create(
cursor, uid, {'line_ids': [(6, 0, [move_line.id])]}
cursor, uid, {
partial and 'line_partial_ids' or 'line_ids': [
(6, 0, [move_line.id])
]
}
)
return retval
def _link_payment(self, cursor, uid, trans, payment_lines,
partner_id, bank_account_id, log):
partner_ids, bank_account_ids, log):
'''
Find the payment order belonging to this reference - if there is one
This is the easiest part: when sending payments, the returned bank info
@@ -137,18 +154,21 @@ class banking_import(wizard.interface):
]
if len(candidates) == 1:
candidate = candidates[0]
payment_line_obj = self.pool.get('payment.line')
payment_line_obj.write(cursor, uid, [candidate.id], {
'export_state': 'done',
'date_done': trans.effective_date.strftime('%Y-%m-%d')}
)
return self._get_move_info(cursor, uid, candidate.move_line_id)
# Check cache to prevent multiple matching of a single payment
if candidate.id not in self.__linked_payments:
self.__linked_payments[candidate.id] = True
payment_line_obj = self.pool.get('payment.line')
payment_line_obj.write(cursor, uid, [candidate.id], {
'export_state': 'done',
'date_done': trans.effective_date.strftime('%Y-%m-%d')}
)
return self._get_move_info(cursor, uid, candidate.move_line_id)
return False
def _link_invoice(self, cursor, uid, trans, move_lines,
partner_id, bank_account_id, log):
partner_ids, bank_account_ids, log):
'''
Find the invoice belonging to this reference - if there is one
Use the sales journal to check.
@@ -179,49 +199,188 @@ class banking_import(wizard.interface):
2. The wrong match was made.
Statements are encoded in draft. You will have the opportunity to
manually correct the wrong assumptions.
Return values:
move_info: the move_line information belonging to the matched
invoice
new_trans: the new transaction when the current one was split.
This can happen when multiple invoices were paid with a single
bank transaction.
'''
# First on partner
candidates = [x for x in move_lines if x.partner_id.id == partner_id]
def eyecatcher(invoice):
'''
Return the eyecatcher for an invoice
'''
return invoice.type.startswith('in_') and invoice.name or \
invoice.number
def has_id_match(invoice, ref, msg):
'''
Aid for debugging - way more comprehensible than complex
comprehension filters ;-)
Match on ID of invoice (reference, name or number, whatever
available and sensible)
'''
if invoice.reference:
# Reference always comes first, as it is manually set for a
# reason.
iref = invoice.reference.upper()
if iref in ref or iref in msg:
return True
if invoice.type.startswith('in_'):
# Internal numbering, no likely match on number
if invoice.name:
iname = invoice.name.upper()
if iname in ref or iname in msg:
return True
elif invoice.type.startswith('out_'):
# External id's possible and likely
inum = invoice.number.upper()
if inum in ref or inum in msg:
return True
return False
def _cached(move_line):
'''Check if the move_line has been cached'''
return move_line.id in self.__linked_invoices
def _cache(move_line, remaining=0.0):
'''Cache the move_line'''
self.__linked_invoices[move_line.id] = remaining
def _remaining(move_line):
'''Return the remaining amount for a previously matched move_line
'''
return self.__linked_invoices[move_line.id]
def _sign(invoice):
'''Return the direction of an invoice'''
return {'in_invoice': -1,
'in_refund': 1,
'out_invoice': 1,
'out_refund': -1
}[invoice.type]
digits = int(config['price_accuracy'])
partial = False
# Search invoice on partner
if partner_ids:
candidates = [x for x in move_lines
if x.partner_id.id in partner_ids and
(not _cached(x) or _remaining(x))
]
else:
candidates = []
# Next on reference/invoice number. Mind that this uses the invoice
# itself, as the move_line references have been fiddled with on invoice
# creation. This also enables us to search for the invoice number in the
# reference instead of the other way around, as most human interventions
# *add* text.
if not candidates:
if len(candidates) > 1 or not candidates:
ref = trans.reference.upper()
msg = trans.message.upper()
candidates = [x for x in move_lines
if x.invoice.number.upper() in ref or
x.invoice.number.upper() in msg
# The manual usage of the sales journal creates moves that
# are not tied to invoices. Thanks to Stefan Rijnhart for
# reporting this.
candidates = [x for x in candidates or move_lines
if x.invoice and has_id_match(x.invoice, ref, msg)
and (not _cached(x) or _remaining(x))
]
if len(candidates) > 1:
# Match on amount expected. Limit this kind of search to known
# partners.
if not candidates and partner_ids:
candidates = [x for x in move_lines
if round(abs(x.credit or x.debit), digits) ==
round(abs(trans.transferred_amount), digits) and
(not _cached(x) or _remaining(x))
]
move_line = False
if candidates and len(candidates) > 0:
# Now a possible selection of invoices has been found, check the
# amounts expected and received.
#
# TODO: currency coercing
digits = int(config['price_accuracy'])
if trans.transferred_amount < 0:
if trans.transferred_amount > 0:
func = lambda x, y=abs(trans.transferred_amount), z=digits:\
round(x.debit, z) == round(y, z)
else:
func = lambda x, y=abs(trans.transferred_amount), z=digits:\
round(x.credit, z) == round(y, z)
best = [x for x in move_lines if func(x)]
if len(best) != 1:
best = [x for x in candidates if func(x)]
if len(best) == 1:
# Exact match
move_line = best[0]
invoice = move_line.invoice
if _cached(move_line):
partial = True
expected = _remaining(move_line)
else:
_cache(move_line)
elif len(candidates) > 1:
# Multiple matches
log.append(
_('Unable to link transaction %(trans)s to invoice: '
_('Unable to link transaction id %(trans)s (ref: %(ref)s) to invoice: '
'%(no_candidates)s candidates found; can\'t choose.') % {
'trans': trans.id,
'no_candidates': len(best)
'ref': trans.reference,
'no_candidates': len(best) or len(candidates)
})
return False
move_line = False
partial = False
if len(candidates) == 1:
return self._get_move_info(cursor, uid, candidates[0])
elif len(candidates) == 1:
# Mismatch in amounts
move_line = candidates[0]
invoice = move_line.invoice
expected = round(_sign(invoice) * invoice.amount_total, digits)
partial = True
return False
trans2 = None
if move_line and partial:
found = round(trans.transferred_amount, digits)
if abs(expected) > abs(found):
# Partial payment, reuse invoice
_cache(move_line, expected - found)
elif abs(expected) < abs(found):
# Possible combined payments, need to split transaction to
# verify
_cache(move_line)
trans2 = trans.copy()
trans2.transferred_amount -= expected
trans.transferred_amount = expected
trans.id += 'a'
trans2.id += 'b'
# NOTE: the following is debatable. By copying the
# eyecatcher of the invoice itself, we enhance the
# tracability of the invoices, but we degrade the
# tracability of the bank transactions. When debugging, it
# is wise to disable this line.
trans.reference = eyecatcher(move_line.invoice)
if move_line:
account_ids = [
x.id for x in bank_account_ids
if x.partner_id.id == move_line.partner_id.id
]
return (
self._get_move_info(cursor, uid, move_line,
account_ids and account_ids[0] or False,
partial = partial and not trans2
),
trans2
)
return (False, False)
def _link_canceled_debit(self, cursor, uid, trans, payment_lines,
partner_id, bank_account_id, log):
partner_ids, bank_account_ids, log):
'''
Direct debit transfers can be canceled by the remote owner within a
legaly defined time period. These 'payments' are most likely
@@ -231,10 +390,78 @@ class banking_import(wizard.interface):
# TODO: code _link_canceled_debit
return False
def _banking_import_statements_file(self, cursor, uid, data, context):
def _link_costs(self, cursor, uid, trans, period_id, account_info, log):
'''
Get or create a costs invoice for the bank and return it with
the payment as seen in the transaction (when not already done).
'''
if not account_info.costs_account_id:
return []
digits = int(config['price_accuracy'])
amount = round(abs(trans.transferred_amount), digits)
# search supplier invoice
invoice_obj = self.pool.get('account.invoice')
invoice_ids = invoice_obj.search(cursor, uid, [
'&',
('type', '=', 'in_invoice'),
('partner_id', '=', account_info.bank_partner_id.id),
('company_id', '=', account_info.company_id.id),
('date_invoice', '=', date2str(trans.effective_date)),
('reference', '=', trans.reference),
('amount_total', '=', amount),
]
)
if invoice_ids and len(invoice_ids) == 1:
invoice = invoice_obj.browse(cursor, uid, invoice_ids)
elif not invoice_ids:
# create supplier invoice
partner_obj = self.pool.get('res.partner')
invoice_lines = [(0,0,dict(
amount = 1,
price_unit = amount,
name = trans.message or trans.reference,
account_id = account_info.costs_account_id.id
))]
invoice_address_id = partner_obj.address_get(
cursor, uid, [account_info.bank_partner_id.id], ['invoice']
)
invoice_id = invoice_obj.create(cursor, uid, dict(
type = 'in_invoice',
company_id = account_info.company_id.id,
partner_id = account_info.bank_partner_id.id,
address_invoice_id = invoice_address_id['invoice'],
period_id = period_id,
journal_id = account_info.invoice_journal_id.id,
account_id = account_info.bank_partner_id.property_account_payable.id,
date_invoice = date2str(trans.effective_date),
reference_type = 'none',
reference = trans.reference,
name = trans.reference or trans.message,
check_total = amount,
invoice_line = invoice_lines,
))
invoice = invoice_obj.browse(cursor, uid, invoice_id)
# Set number
invoice.action_number(cursor, uid, [invoice_id])
# Create moves
invoice.action_move_create(cursor, uid, [invoice_id])
# Create workflow
wf_service = netsvc.LocalService('workflow')
res = wf_service.trg_create(uid, 'account.invoice', invoice.id,
cursor)
# Move to state 'open'
wf_service.trg_validate(uid, 'account.invoice', invoice.id,
'invoice_open', cursor)
# return move_lines to mix with the rest
return [x for x in invoice.move_id.line_id if x.account_id.reconcile]
def _import_statements_file(self, cursor, uid, data, context):
'''
Import bank statements / bank transactions file.
This module/function represents the business logic, the parser modules
This method represents the business logic, the parser modules
represent the decoding logic.
'''
form = data['form']
@@ -285,19 +512,21 @@ class banking_import(wizard.interface):
import_id = statement_file_obj.create(cursor, uid, dict(
company_id = company.id,
file = statements_file,
date = time.strftime('%Y-%m-%d'),
user_id = uid,
state = 'unfinished'
state = 'unfinished',
format = parser.name,
))
# Results
no_stat_loaded = 0
no_trans_loaded = 0
no_stat_skipped = 0
no_trans_skipped = 0
no_trans_matched = 0
no_errors = 0
log = []
results = struct(
stat_loaded_cnt = 0,
trans_loaded_cnt = 0,
stat_skipped_cnt = 0,
trans_skipped_cnt = 0,
trans_matched_cnt = 0,
bank_costs_invoice_cnt = 0,
error_cnt = 0,
log = [],
)
# Caching
error_accounts = {}
@@ -305,20 +534,15 @@ class banking_import(wizard.interface):
imported_statement_ids = []
if statements:
# Get default defaults
def_pay_account_id = company.partner_id.property_account_payable.id
def_rec_account_id = company.partner_id.property_account_receivable.id
# Get interesting journals once
if company:
journal_ids = journal_obj.search(cursor, uid, [
('type', 'in', ('sale','purchase')),
('company_id', '=', company.id),
])
else:
journal_ids = None
if not journal_ids:
journal_ids = journal_obj.search(cursor, uid, [
('type', 'in', ('sale','purchase')),
('active', '=', True),
('company_id', '=', False),
])
journal_ids = journal_obj.search(cursor, uid, [
('type', 'in', ('sale','purchase')),
('company_id', '=', company.id),
])
# Get all unreconciled moves predating the last statement in one big
# swoop. Assumption: the statements in the file are sorted in ascending
# order of date.
@@ -351,8 +575,8 @@ class banking_import(wizard.interface):
for statement in statements:
if statement.local_account in error_accounts:
# Don't repeat messages
no_stat_skipped += 1
no_trans_skipped += len(statement.transactions)
results.stat_skipped_cnt += 1
results.trans_skipped_cnt += len(statement.transactions)
continue
# Create fallback currency code
@@ -367,24 +591,24 @@ class banking_import(wizard.interface):
# Pull account info/currency
account_info = get_company_bank_account(
self.pool, cursor, uid, statement.local_account,
statement.local_currency, company, log
statement.local_currency, company, results.log
)
if not account_info:
log.append(
results.log.append(
_('Statements found for unknown account %(bank_account)s') %
{'bank_account': statement.local_account}
)
error_accounts[statement.local_account] = True
no_errors += 1
results.error_cnt += 1
continue
if 'journal_id' not in account_info:
log.append(
results.log.append(
_('Statements found for account %(bank_account)s, '
'but no default journal was defined.'
) % {'bank_account': statement.local_account}
)
error_accounts[statement.local_account] = True
no_errors += 1
results.error_cnt += 1
continue
# Get required currency code
@@ -402,13 +626,13 @@ class banking_import(wizard.interface):
if statement.local_currency \
and account_info.currency_id.code != statement.local_currency:
# TODO: convert currencies?
log.append(
results.log.append(
_('Statement for account %(bank_account)s uses different '
'currency than the defined bank journal.') %
{'bank_account': statement.local_account}
)
error_accounts[statement.local_account] = True
no_errors += 1
results.error_cnt += 1
continue
# Check existence of previous statement
@@ -417,7 +641,7 @@ class banking_import(wizard.interface):
('date', '=', date2str(statement.date)),
])
if statement_ids:
log.append(
results.log.append(
_('Statement %(id)s known - skipped') % {
'id': statement.id
}
@@ -440,66 +664,102 @@ class banking_import(wizard.interface):
# move each line to the right period and try to match it with an
# invoice or payment
subno = 0
for transaction in statement.transactions:
injected = False
i = 0
max_trans = len(statement.transactions)
while i < max_trans:
move_info = False
if injected:
transaction, injected = injected, False
else:
transaction = statement.transactions[i]
# Keep a tracer for identification of order in a statement in case
# of missing transaction ids.
subno += 1
# Link remote partner, import account when needed
partner_bank = get_bank_account(
self.pool, cursor, uid, transaction.remote_account, log, fail=True
)
if partner_bank:
partner_id = partner_bank.partner_id.id
partner_bank_id = partner_bank.id
elif transaction.remote_owner:
partner_id = get_or_create_partner(
self.pool, cursor, uid, transaction.remote_owner, log
)
if transaction.remote_account:
partner_bank_id = create_bank_account(
self.pool, cursor, uid, partner_id,
transaction.remote_account, transaction.remote_owner,
log
)
else:
partner_id = False
partner_bank_id = False
# Link accounting period
period_id = get_period(self.pool, cursor, uid,
transaction.effective_date, company,
log)
results.log)
if not period_id:
no_trans_skipped += 1
results.trans_skipped_cnt += 1
continue
# Allow inclusion of generated bank invoices
if transaction.type == bt.BANK_COSTS:
lines = self._link_costs(
cursor, uid, transaction, period_id, account_info,
results.log
)
results.bank_costs_invoice_cnt += bool(lines)
for line in lines:
if not [x for x in move_lines if x.id == line.id]:
move_lines.append(line)
partner_ids = [account_info.bank_partner_id.id]
partner_banks = []
else:
# Link remote partner, import account when needed
partner_banks = get_bank_accounts(
self.pool, cursor, uid, transaction.remote_account,
results.log, fail=True
)
if partner_banks:
partner_ids = [x.partner_id.id for x in partner_banks]
elif transaction.remote_owner:
partner_id = get_or_create_partner(
self.pool, cursor, uid, transaction.remote_owner,
results.log
)
if transaction.remote_account:
partner_bank_id = create_bank_account(
self.pool, cursor, uid, partner_id,
transaction.remote_account,
transaction.remote_owner, results.log
)
partner_ids = [partner_id]
partner_banks = partner_bank_obj.browse(
cursor, uid, [partner_bank_id]
)
else:
partner_ids = []
partner_banks = []
# Credit means payment... isn't it?
if transaction.transferred_amount < 0 and payment_lines:
# Link open payment - if any
move_info = self._link_payment(
cursor, uid, transaction,
payment_lines, partner_id,
partner_bank_id, log
payment_lines, partner_ids,
partner_banks, results.log
)
# Second guess, invoice
# Second guess, invoice -> may split transaction, so beware
if not move_info:
# Link invoice - if any
move_info = self._link_invoice(
cursor, uid, transaction, move_lines, partner_id,
partner_bank_id, log
move_info, injected = self._link_invoice(
cursor, uid, transaction, move_lines, partner_ids,
partner_banks, results.log
)
if not move_info:
# Use the default settings, but allow individual partner
# settings to overrule this. Note that you need to change
# the internal type of these accounts to either 'payable'
# or 'receivable' to enable usage like this.
if transaction.transferred_amount < 0:
account_id = account_info.default_credit_account_id
if len(partner_banks) == 1:
account_id = partner_banks[0].partner_id.property_account_payable
if len(partner_banks) != 1 or account_id.id == def_pay_account_id:
account_id = account_info.default_credit_account_id
else:
account_id = account_info.default_debit_account_id
if len(partner_banks) == 1:
account_id = partner_banks[0].partner_id.property_account_receivable
if len(partner_banks) != 1 or account_id.id == def_rec_account_id:
account_id = account_info.default_debit_account_id
else:
account_id = move_info.move_line.account_id
no_trans_matched += 1
results.trans_matched_cnt += 1
values = struct(
name = '%s.%s' % (statement.id, transaction.id or subno),
@@ -512,18 +772,25 @@ class banking_import(wizard.interface):
period_id = period_id,
currency = account_info.currency_id.id,
)
if partner_id:
values.partner_id = partner_id
if partner_bank_id:
values.partner_bank_id = partner_bank_id
if move_info:
values.type = move_info.type
values.reconcile_id = move_info.move_line.reconcile_id
values.partner_id = move_info.partner_id
values.partner_bank_id = move_info.partner_bank_id
else:
values.partner_id = values.partner_bank_id = False
if not values.partner_id and partner_ids and len(partner_ids) == 1:
values.partner_id = partner_ids[0]
if not values.partner_bank_id and partner_banks and \
len(partner_banks) == 1:
values.partner_bank_id = partner_banks[0].id
statement_line_id = statement_line_obj.create(cursor, uid, values)
no_trans_loaded += 1
results.trans_loaded_cnt += 1
if not injected:
i += 1
no_stat_loaded += 1
results.stat_loaded_cnt += 1
if payment_lines:
# As payments lines are treated as individual transactions, the
@@ -546,23 +813,25 @@ class banking_import(wizard.interface):
)
)
report = [
'%s: %s' % (_('Total number of statements'), no_stat_skipped + no_stat_loaded),
'%s: %s' % (_('Total number of transactions'), no_trans_skipped + no_trans_loaded),
'%s: %s' % (_('Number of errors found'), no_errors),
'%s: %s' % (_('Number of statements skipped due to errors'), no_stat_skipped),
'%s: %s' % (_('Number of transactions skipped due to errors'), no_trans_skipped),
'%s: %s' % (_('Number of statements loaded'), no_stat_loaded),
'%s: %s' % (_('Number of transactions loaded'), no_trans_loaded),
'%s: %s' % (_('Total number of statements'), results.stat_skipped_cnt + results.stat_loaded_cnt),
'%s: %s' % (_('Total number of transactions'), results.trans_skipped_cnt + results.trans_loaded_cnt),
'%s: %s' % (_('Number of errors found'), results.error_cnt),
'%s: %s' % (_('Number of statements skipped due to errors'), results.stat_skipped_cnt),
'%s: %s' % (_('Number of transactions skipped due to errors'), results.trans_skipped_cnt),
'%s: %s' % (_('Number of statements loaded'), results.stat_loaded_cnt),
'%s: %s' % (_('Number of transactions loaded'), results.trans_loaded_cnt),
'%s: %s' % (_('Number of transactions matched'), results.trans_matched_cnt),
'%s: %s' % (_('Number of bank costs invoices created'), results.bank_costs_invoice_cnt),
'',
'%s:' % ('Error report'),
'',
]
text_log = '\n'.join(report + log)
state = no_errors and 'error' or 'ready'
text_log = '\n'.join(report + results.log)
state = results.error_cnt and 'error' or 'ready'
statement_file_obj.write(cursor, uid, import_id, dict(
state = state, log = text_log,
))
if no_errors or not imported_statement_ids:
if results.error_cnt or not imported_statement_ids:
self._nextstate = 'view_error'
else:
self._nextstate = 'view_statements'
@@ -608,15 +877,15 @@ class banking_import(wizard.interface):
'actions' : [],
'result' : {
'type' : 'form',
'arch' : banking_import_form,
'fields': banking_import_fields,
'arch' : import_form,
'fields': import_fields,
'state': [('end', '_Cancel', 'gtk-cancel'),
('import', '_Ok', 'gtk-ok'),
]
}
},
'import': {
'actions': [_banking_import_statements_file],
'actions': [_import_statements_file],
'result': {
'type': 'choice',
'next_state': _check_next_state,

View File

@@ -29,7 +29,7 @@ from account_banking.struct import struct
__all__ = [
'get_period',
'get_bank_account',
'get_bank_accounts',
'get_or_create_partner',
'get_company_bank_account',
'create_bank_account',
@@ -84,7 +84,7 @@ def get_period(pool, cursor, uid, date, company, log):
return False
return period_ids[0]
def get_bank_account(pool, cursor, uid, account_number, log, fail=False):
def get_bank_accounts(pool, cursor, uid, account_number, log, fail=False):
'''
Get the bank account with account number account_number
'''
@@ -107,13 +107,7 @@ def get_bank_account(pool, cursor, uid, account_number, log, fail=False):
% dict(account_no=account_number)
)
return False
elif len(bank_account_ids) != 1:
log.append(
_('More than one bank account was found with the same number %(account_no)s')
% dict(account_no=account_number)
)
return False
return partner_bank_obj.browse(cursor, uid, bank_account_ids)[0]
return partner_bank_obj.browse(cursor, uid, bank_account_ids)
def get_or_create_partner(pool, cursor, uid, name, log):
'''
@@ -142,20 +136,26 @@ def get_company_bank_account(pool, cursor, uid, account_number, currency,
for the requested currency.
'''
results = struct()
bank_account = get_bank_account(pool, cursor, uid, account_number, log,
fail=True)
if not bank_account:
bank_accounts = get_bank_accounts(pool, cursor, uid, account_number, log,
fail=True)
if not bank_accounts:
return False
if bank_account.partner_id.id != company.partner_id.id:
elif len(bank_accounts) != 1:
log.append(
_('More than one bank account was found with the same number %(account_no)s')
% dict(account_no = account_number)
)
return False
if bank_accounts[0].partner_id.id != company.partner_id.id:
log.append(
_('Account %(account_no)s is not owned by %(partner)s')
% dict(account_no = account_number,
partner = company.partner_id.name,
))
return False
results.account = bank_account
results.account = bank_accounts[0]
bank_settings_obj = pool.get('account.banking.account.settings')
criteria = [('partner_bank_id', '=', bank_account.id)]
criteria = [('partner_bank_id', '=', bank_accounts[0].id)]
# Find matching journal for currency
journal_obj = pool.get('account.journal')
@@ -174,14 +174,19 @@ def get_company_bank_account(pool, cursor, uid, account_number, currency,
bank_settings_ids = bank_settings_obj.search(cursor, uid, criteria)
if bank_settings_ids:
settings = bank_settings_obj.browse(cursor, uid, bank_settings_ids)[0]
results.company_id = company
results.journal_id = settings.journal_id
# Take currency from settings or from company
if settings.journal_id.currency.id:
results.currency_id = settings.journal_id.currency
else:
results.currency_id = company.currency_id
# Rest just copy/paste from settings. Why am I doing this?
results.default_debit_account_id = settings.default_debit_account_id
results.default_credit_account_id = settings.default_credit_account_id
results.costs_account_id = settings.costs_account_id
results.invoice_journal_id = settings.invoice_journal_id
results.bank_partner_id = settings.bank_partner_id
return results
def get_or_create_bank(pool, cursor, uid, bic, online=False, code=None,
@@ -326,4 +331,18 @@ def create_bank_account(pool, cursor, uid, partner_id,
# Create bank account and return
return pool.get('res.partner.bank').create(cursor, uid, values)
def get_or_create_bank_partner():
'''
Find the partner belonging to a bank. When not found, create one using the
available data.
'''
pass
def generate_supplier_invoice():
'''
Create an supplier invoice for a transaction from a bank. Used to create
invoices on the fly when parsing bank costs.
'''
pass
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@@ -50,10 +50,10 @@ class HeaderRecord(record.Record): #{{{
record.Filler('filler', 21),
]
def __init__(self, id='1', volgnr=1, duplicate=False):
def __init__(self, id='1', seqno=1, duplicate=False):
super(HeaderRecord, self).__init__()
self.sender_id = id
self.file_id = '%02d%02d' % (self.creation_date.day, volgnr)
self.file_id = '%02d%02d' % (self.creation_date.day, seqno)
self.duplicatecode = duplicate and '2' or '1'
#}}}
@@ -382,7 +382,7 @@ class PaymentsBatch(Batch):
'''Payment batch'''
transactionclass = Payment
class SalarisBatch(Batch):
class SalaryBatch(Batch):
'''Salary payment class'''
transactionclass = SalaryPayment
@@ -390,8 +390,8 @@ class ClieOpFile(object):
'''The grand unifying class'''
def __init__(self, identification='1', execution_date=None,
name_sender='', accountno_sender='',
test=False, **kwargs):
self.header = HeaderRecord(id=identification,)
test=False, seqno=1, **kwargs):
self.header = HeaderRecord(id=identification, seqno=seqno)
self.footer = FooterRecord()
self.batches = []
self._execution_date = execution_date
@@ -454,7 +454,7 @@ class PaymentsFile(ClieOpFile):
class SalaryPaymentsFile(PaymentsFile):
'''Salary Payments file'''
batchclass = SalarisBatch
batchclass = SalaryBatch
orderclass = SalaryPaymentOrder
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@@ -28,7 +28,16 @@ from tools.translate import _
#import pdb; pdb.set_trace()
import clieop
form = '''<?xml version="1.0"?>
def strpdate(arg, format='%Y-%m-%d'):
'''shortcut'''
return datetime.strptime(arg, format).date()
def strfdate(arg, format='%Y-%m-%d'):
'''shortcut'''
return arg.strftime(format)
class wizard_banking_export_clieop(wizard.interface):
form = '''<?xml version="1.0"?>
<form string="Client Opdrachten Export">
<separator colspan="4" string="Processing Details" />
<field name="batchtype" />
@@ -40,60 +49,60 @@ form = '''<?xml version="1.0"?>
<field name="fixed_message" />
</form>'''
fields = {
'reference' : {
'string': 'Reference',
'type': 'char',
'size': 5,
'required': False,
'help': ('The bank will use this reference in feedback communication '
'to refer to this run. Only five characters are available.'
)
},
'batchtype': {
'string': 'Type',
'type': 'selection',
'selection': [
('CLIEOPPAY', 'Payments'),
('CLIEOPSAL', 'Salary Payments'),
('CLIEOPINC', 'Direct Debits'),
],
'readonly': True,
},
'execution_date': {
'string': 'Execution Date',
'type': 'date',
'required': False,
'help': ('This is the date the file should be processed by the bank. '
'Don\'t choose a date beyond the nearest date in your '
'payments. The latest allowed date is 30 days from now.\n'
'Please keep in mind that banks only execute on working days '
'and typically use a delay of two days between execution date '
'and effective transfer date.'
),
},
'test': {
'string': 'Test Run',
'type': 'boolean',
'required': True,
'default': True,
'help': ('Select this if you want your bank to run a test process '
'rather then execute your orders for real.'
)
},
'fixed_message': {
'string': 'Fixed Message',
'type': 'char',
'size': 32,
'required': False,
'default': '',
'help': ('A fixed message to apply to all transactions in addition to '
'the individual messages.'
),
},
}
fields = {
'reference' : {
'string': 'Reference',
'type': 'char',
'size': 5,
'required': False,
'help': ('The bank will use this reference in feedback communication '
'to refer to this run. Only five characters are available.'
)
},
'batchtype': {
'string': 'Type',
'type': 'selection',
'selection': [
('CLIEOPPAY', 'Payments'),
('CLIEOPSAL', 'Salary Payments'),
('CLIEOPINC', 'Direct Debits'),
],
'readonly': True,
},
'execution_date': {
'string': 'Execution Date',
'type': 'date',
'required': False,
'help': ('This is the date the file should be processed by the bank. '
'Don\'t choose a date beyond the nearest date in your '
'payments. The latest allowed date is 30 days from now.\n'
'Please keep in mind that banks only execute on working days '
'and typically use a delay of two days between execution date '
'and effective transfer date.'
),
},
'test': {
'string': 'Test Run',
'type': 'boolean',
'required': True,
'default': True,
'help': ('Select this if you want your bank to run a test process '
'rather then execute your orders for real.'
)
},
'fixed_message': {
'string': 'Fixed Message',
'type': 'char',
'size': 32,
'required': False,
'default': '',
'help': ('A fixed message to apply to all transactions in addition to '
'the individual messages.'
),
},
}
file_form = '''<?xml version="1.0"?>
file_form = '''<?xml version="1.0"?>
<form string="Client Opdrachten Export">
<field name="filetype" />
<field name="identification" />
@@ -107,256 +116,255 @@ file_form = '''<?xml version="1.0"?>
<field name="log" colspan="4" nolabel="1" />
</form>'''
file_fields = {
'testcode': {
'string': 'Test Run',
'type': 'selection',
'selection': [('T', _('Yes')), ('P', _('No'))],
'required': False,
'readonly': True,
},
'prefered_date': {
'string': 'Prefered Processing Date',
'type': 'date',
'required': False,
'readonly': True,
},
'no_transactions': {
'string': 'Number of Transactions',
'type': 'int',
'required': False,
'readonly': True,
},
'check_no_accounts': {
'string': 'Check Number Accounts',
'type': 'char',
'size': 5,
'required': False,
'readonly': True,
},
'total_amount': {
'string': 'Total Amount',
'type': 'float',
'required': False,
'readonly': True,
},
'identification': {
'string': 'Identification',
'type': 'char',
'size': 6,
'required': False,
'readonly': True,
},
'filetype': {
'string': 'File Type',
'type': 'selection',
'selection': [
('CREDBET', 'Payment Batch'),
('SALARIS', 'Salary Payment Batch'),
('INCASSO', 'Direct Debit Batch'),
],
'required': False,
'readonly': True,
},
'file': {
'string': 'ClieOp File',
'type': 'binary',
'required': False,
'readonly': True,
},
'log': {
'string': 'Log',
'type': 'text',
'readonly': True,
},
}
file_fields = {
'testcode': {
'string': 'Test Run',
'type': 'selection',
'selection': [('T', _('Yes')), ('P', _('No'))],
'required': False,
'readonly': True,
},
'prefered_date': {
'string': 'Prefered Processing Date',
'type': 'date',
'required': False,
'readonly': True,
},
'no_transactions': {
'string': 'Number of Transactions',
'type': 'int',
'required': False,
'readonly': True,
},
'check_no_accounts': {
'string': 'Check Number Accounts',
'type': 'char',
'size': 5,
'required': False,
'readonly': True,
},
'total_amount': {
'string': 'Total Amount',
'type': 'float',
'required': False,
'readonly': True,
},
'identification': {
'string': 'Identification',
'type': 'char',
'size': 6,
'required': False,
'readonly': True,
},
'filetype': {
'string': 'File Type',
'type': 'selection',
'selection': [
('CREDBET', 'Payment Batch'),
('SALARIS', 'Salary Payment Batch'),
('INCASSO', 'Direct Debit Batch'),
],
'required': False,
'readonly': True,
},
'file': {
'string': 'ClieOp File',
'type': 'binary',
'required': False,
'readonly': True,
},
'log': {
'string': 'Log',
'type': 'text',
'readonly': True,
},
}
def strpdate(arg, format='%Y-%m-%d'):
'''shortcut'''
return datetime.strptime(arg, format).date()
def _check_orders(self, cursor, uid, data, context):
'''
Check payment type for all orders.
def strfdate(arg, format='%Y-%m-%d'):
'''shortcut'''
return arg.strftime(format)
Combine orders into one. All parameters harvested by the wizard
will apply to all orders. This will in effect create one super
batch for ClieOp, instead of creating individual parameterized
batches. As only large companies are likely to need the individual
settings per batch, this will do for now.
Also mind that rates for batches are way higher than those for
transactions. It pays to limit the number of batches.
'''
form = data['form']
today = date.today()
pool = pooler.get_pool(cursor.dbname)
payment_order_obj = pool.get('payment.order')
def _check_orders(self, cursor, uid, data, context):
'''
Check payment type for all orders.
runs = {}
# Only orders of same type can be combined
payment_orders = payment_order_obj.browse(cursor, uid, data['ids'])
for payment_order in payment_orders:
Combine orders into one. All parameters harvested by the wizard
will apply to all orders. This will in effect create one super
batch for ClieOp, instead of creating individual parameterized
batches. As only large companies are likely to need the individual
settings per batch, this will do for now.
'''
form = data['form']
today = date.today()
pool = pooler.get_pool(cursor.dbname)
payment_order_obj = pool.get('payment.order')
runs = {}
# Only orders of same type can be combined
payment_orders = payment_order_obj.browse(cursor, uid, data['ids'])
for payment_order in payment_orders:
payment_type = payment_order.mode.type.code
if payment_type in runs:
runs[payment_type].append(payment_order)
else:
runs[payment_type] = [payment_order]
if payment_order.date_prefered == 'fixed':
if payment_order.date_planned:
execution_date = strpdate(payment_order.date_planned)
payment_type = payment_order.mode.type.code
if payment_type in runs:
runs[payment_type].append(payment_order)
else:
execution_date = today
elif payment_order.date_prefered == 'now':
execution_date = today
elif payment_order.date_prefered == 'due':
# Max processing date is 30 days past now, so limiting beyond that
# will catch too early payments
max_date = execution_date = today + timedelta(days=31)
for line in payment_order.line_ids:
if line.move_line_id.date_maturity:
date_maturity = strpdate(line.move_line_id.date_maturity)
if date_maturity < execution_date:
execution_date = date_maturity
runs[payment_type] = [payment_order]
if payment_order.date_prefered == 'fixed':
if payment_order.date_planned:
execution_date = strpdate(payment_order.date_planned)
else:
execution_date = today
if execution_date and execution_date >= max_date:
raise wizard.except_wizard(
_('Error'),
_('You can\'t create ClieOp orders more than 30 days in advance.')
)
# Sanity check: can't process in the past
form['execution_date'] = strfdate(max(execution_date, today))
if len(runs) != 1:
raise wizard.except_wizard(
_('Error'),
_('You can only combine payment orders of the same type')
)
form['batchtype'] = type = runs.keys()[0]
form['reference'] = runs[type][0].reference[-5:]
return form
def _create_clieop(self, cursor, uid, data, context):
'''
Wizard to actually create the ClieOp3 file
'''
pool = pooler.get_pool(cursor.dbname)
payment_order_obj = pool.get('payment.order')
form = data['form']
clieopfile = None
payment_orders = payment_order_obj.browse(cursor, uid, data['ids'])
for payment_order in payment_orders:
if not clieopfile:
# Just once: create clieop file
our_account_owner = payment_order.mode.bank_id.owner_name \
or payment_order.mode.bank_id.partner_id.name
our_account_nr = payment_order.mode.bank_id.acc_number
if not our_account_nr and payment_order.mode.bank_id.iban:
our_account_nr = sepa.IBAN(
payment_order.mode.bank_id.iban
).localized_BBAN
if not our_account_nr:
raise wizard.except_wizard(
_('Error'),
_('Your bank account has to have a valid account number')
)
clieopfile = {'CLIEOPPAY': clieop.PaymentsFile,
'CLIEOPINC': clieop.DirectDebitFile,
'CLIEOPSAL': clieop.SalaryPaymentsFile,
}[form['batchtype']](
identification = form['reference'],
execution_date = form['execution_date'],
name_sender = our_account_owner,
accountno_sender = our_account_nr,
test = form['test']
)
# As payment_orders can have multiple transactions, create a new batch
# for each payment_order
if form['fixed_message']:
messages = [form['fixed_message']]
else:
messages = []
batch = clieopfile.batch(
messages = messages,
batch_id = payment_order.reference
)
for line in payment_order.line_ids:
kwargs = dict(
name = line.bank_id.owner_name or line.bank_id.partner_id.name,
amount = line.amount_currency,
reference = line.communication or None,
)
if line.communication2:
kwargs['messages'] = [line.communication2]
other_account_nr = line.bank_id.acc_number
iban = sepa.IBAN(other_account_nr)
# Is this an IBAN account?
if iban.valid:
if iban.countrycode != 'NL':
elif payment_order.date_prefered == 'now':
execution_date = today
elif payment_order.date_prefered == 'due':
# Max processing date is 30 days past now, so limiting beyond that
# will catch too early payments
max_date = execution_date = today + timedelta(days=31)
for line in payment_order.line_ids:
if line.move_line_id.date_maturity:
date_maturity = strpdate(line.move_line_id.date_maturity)
if date_maturity < execution_date:
execution_date = date_maturity
else:
execution_date = today
if execution_date and execution_date >= max_date:
raise wizard.except_wizard(
_('Error'),
_('You cannot send international bank transfers '
'through ClieOp3!')
_('You can\'t create ClieOp orders more than 30 days in advance.')
)
other_account_nr = iban.localized_BBAN
if form['batchtype'] == 'CLIEOPINC':
kwargs['accountno_beneficiary'] = our_account_nr
kwargs['accountno_payer'] = other_account_nr
else:
kwargs['accountno_beneficiary'] = other_account_nr
kwargs['accountno_payer'] = our_account_nr
transaction = batch.transaction(**kwargs)
# Sanity check: can't process in the past
form['execution_date'] = strfdate(max(execution_date, today))
# Generate the specifics of this clieopfile
order = clieopfile.order
values = dict(
filetype = order.name_transactioncode,
identification = order.identification,
prefered_date = strfdate(order.preferred_execution_date),
total_amount = int(order.total_amount) / 100.0,
check_no_accounts = order.total_accountnos,
no_transactions = order.nr_posts,
testcode = order.testcode,
file = base64.encodestring(clieopfile.rawdata),
)
form.update(values)
values['daynumber'] = int(clieopfile.header.file_id[2:])
values['payment_order_ids'] = ','.join(map(str, data['ids']))
data['file_id'] = pool.get('banking.export.clieop').create(cursor, uid, values)
data['clieop'] = clieopfile
form['log'] = ''
return form
if len(runs) != 1:
raise wizard.except_wizard(
_('Error'),
_('You can only combine payment orders of the same type')
)
def _cancel_clieop(self, cursor, uid, data, context):
'''
Cancel the ClieOp: just drop the file
'''
pool = pooler.get_pool(cursor.dbname)
pool.get('banking.export.clieop').unlink(cursor, uid, data['file_id'])
return {'state': 'end'}
form['batchtype'] = type = runs.keys()[0]
form['reference'] = runs[type][0].reference[-5:]
return form
def _save_clieop(self, cursor, uid, data, context):
'''
Save the ClieOp: mark all payments in the file as 'sent'.
'''
pool = pooler.get_pool(cursor.dbname)
clieop_obj = pool.get('banking.export.clieop')
payment_order_obj = pool.get('payment.order')
clieop_file = clieop_obj.write(
cursor, uid, data['file_id'], {'state':'sent'}
)
payment_order_obj.write(cursor, uid, data['ids'], {'state': 'sent'})
return {'state': 'end'}
def _create_clieop(self, cursor, uid, data, context):
'''
Wizard to actually create the ClieOp3 file
'''
pool = pooler.get_pool(cursor.dbname)
payment_order_obj = pool.get('payment.order')
form = data['form']
clieopfile = None
payment_orders = payment_order_obj.browse(cursor, uid, data['ids'])
for payment_order in payment_orders:
if not clieopfile:
# Just once: create clieop file
our_account_owner = payment_order.mode.bank_id.owner_name \
or payment_order.mode.bank_id.partner_id.name
our_account_nr = payment_order.mode.bank_id.acc_number
if not our_account_nr and payment_order.mode.bank_id.iban:
our_account_nr = sepa.IBAN(
payment_order.mode.bank_id.iban
).localized_BBAN
if not our_account_nr:
raise wizard.except_wizard(
_('Error'),
_('Your bank account has to have a valid account number')
)
clieopfile = {'CLIEOPPAY': clieop.PaymentsFile,
'CLIEOPINC': clieop.DirectDebitFile,
'CLIEOPSAL': clieop.SalaryPaymentsFile,
}[form['batchtype']](
identification = form['reference'],
execution_date = form['execution_date'],
name_sender = our_account_owner,
accountno_sender = our_account_nr,
test = form['test']
)
# ClieOp3 files can contain multiple batches, but we put all
# orders into one single batch. Ratio behind this is that a
# batch costs more money than a single transaction, so it is
# cheaper to combine than it is to split. As we split out all
# reported errors afterwards, there is no additional gain in
# using multiple batches.
if form['fixed_message']:
messages = [form['fixed_message']]
else:
messages = []
# The first payment order processed sets the reference of the
# batch.
batch = clieopfile.batch(
messages = messages,
batch_id = payment_order.reference
)
for line in payment_order.line_ids:
kwargs = dict(
name = line.bank_id.owner_name or line.bank_id.partner_id.name,
amount = line.amount_currency,
reference = line.communication or None,
)
if line.communication2:
kwargs['messages'] = [line.communication2]
other_account_nr = line.bank_id.acc_number
iban = sepa.IBAN(other_account_nr)
# Is this an IBAN account?
if iban.valid:
if iban.countrycode != 'NL':
raise wizard.except_wizard(
_('Error'),
_('You cannot send international bank transfers '
'through ClieOp3!')
)
other_account_nr = iban.localized_BBAN
if form['batchtype'] == 'CLIEOPINC':
kwargs['accountno_beneficiary'] = our_account_nr
kwargs['accountno_payer'] = other_account_nr
else:
kwargs['accountno_beneficiary'] = other_account_nr
kwargs['accountno_payer'] = our_account_nr
transaction = batch.transaction(**kwargs)
# Generate the specifics of this clieopfile
order = clieopfile.order
values = dict(
filetype = order.name_transactioncode,
identification = order.identification,
prefered_date = strfdate(order.preferred_execution_date),
total_amount = int(order.total_amount) / 100.0,
check_no_accounts = order.total_accountnos,
no_transactions = order.nr_posts,
testcode = order.testcode,
file = base64.encodestring(clieopfile.rawdata),
)
form.update(values)
values['daynumber'] = int(clieopfile.header.file_id[2:])
values['payment_order_ids'] = ','.join(map(str, data['ids']))
data['file_id'] = pool.get('banking.export.clieop').create(cursor, uid, values)
data['clieop'] = clieopfile
form['log'] = ''
return form
def _cancel_clieop(self, cursor, uid, data, context):
'''
Cancel the ClieOp: just drop the file
'''
pool = pooler.get_pool(cursor.dbname)
pool.get('banking.export.clieop').unlink(cursor, uid, data['file_id'])
return {'state': 'end'}
def _save_clieop(self, cursor, uid, data, context):
'''
Save the ClieOp: mark all payments in the file as 'sent'.
'''
pool = pooler.get_pool(cursor.dbname)
clieop_obj = pool.get('banking.export.clieop')
payment_order_obj = pool.get('payment.order')
clieop_file = clieop_obj.write(
cursor, uid, data['file_id'], {'state':'sent'}
)
payment_order_obj.write(cursor, uid, data['ids'], {'state': 'sent'})
return {'state': 'end'}
class wizard_banking_export_clieop(wizard.interface):
states = {
'init': {
'actions': [_check_orders],
@@ -397,6 +405,7 @@ class wizard_banking_export_clieop(wizard.interface):
},
}
}
wizard_banking_export_clieop('account_banking_nl_clieop.banking_export_clieop')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@@ -34,6 +34,8 @@ import csv
__all__ = ['parser']
bt = models.mem_bank_transaction
class transaction_message(object):
'''
A auxiliary class to validate and coerce read values
@@ -90,6 +92,21 @@ class transaction(models.mem_bank_transaction):
'reference', 'message'
]
type_map = {
'ACC': bt.ORDER,
'BEA': bt.PAYMENT_TERMINAL,
'BTL': bt.ORDER,
'DIV': bt.ORDER,
'IDB': bt.PAYMENT_TERMINAL,
'INC': bt.DIRECT_DEBIT,
'IOB': bt.ORDER,
'KNT': bt.BANK_COSTS,
'KST': bt.BANK_COSTS,
'OPN': bt.BANK_TERMINAL,
'OVS': bt.ORDER,
'PRV': bt.BANK_COSTS,
}
def __init__(self, line, *args, **kwargs):
'''
Initialize own dict with read values.
@@ -107,7 +124,7 @@ class transaction(models.mem_bank_transaction):
transfer_type set to 'PRV'.
2. Invoices from the bank itself are communicated through statements.
These too have no remote_account and no remote_owner. They have a
transfer_type set to 'KST' or 'DIV'.
transfer_type set to 'KST' or 'KNT'.
3. Transfers sent through the 'International Transfers' system get
their feedback rerouted through a statement, which is not designed to
hold the extra fields needed. These transfers have their transfer_type
@@ -123,7 +140,7 @@ class transaction(models.mem_bank_transaction):
self.effective_date) and (
self.remote_account or
self.transfer_type in [
'KST', 'PRV', 'BTL', 'BEA', 'OPN', 'DIV'
'KST', 'PRV', 'BTL', 'BEA', 'OPN', 'KNT',
])
class statement(models.mem_bank_statement):