[MERGE] account_banking_fi_patu: added finish patu parser - thanks to Sami Haahtinen

[FIX] account_banking_nl_clieop: added forgotten danish translation file.
This commit is contained in:
Pieter J. Kersten
2010-06-30 09:11:08 +02:00
parent e575dd5da5
commit cb48435950
5 changed files with 786 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2010 Sami Haahtinen (<http://ressukka.net>).
# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
# All Rights Reserved
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract EduSense BV
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import patu
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@@ -0,0 +1,42 @@
##############################################################################
#
# Copyright (C) 2010 Sami Haahtinen (<http://ressukka.net>).
# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
# All Rights Reserved
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract EduSense BV
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Account Banking PATU module',
'version': '0.1',
'license': 'GPL-3',
'author': 'Sami Haahtinen',
'website': 'http://ressukka.net',
'category': 'Account Banking',
'depends': ['account_banking'],
'description': '''
Module to import Finnish PATU format transation files.
This modules contains no logic, just an import filter for account_banking.
''',
'active': False,
'installable': True,
}

View File

@@ -0,0 +1,227 @@
#!/usr/bin/env python
# encoding: utf-8
"""Parser for PATU format files"""
import re, datetime
def fixchars(line):
"""Fix the characters mangled in the input
:param line: Line to rewrite
:returns: string, fixed line
"""
# Fix the umlauts int the input
line = line.replace("{", u"ä")
line = line.replace("}", u"ö")
# XXX: There are a whole bunch of these, adding them later
return line
class PatuParser(object):
"""Parse PATU lines in to structs"""
def __init__( self ):
""" Initialize PATU parser """
recparse = dict()
recparse["00"] = "T(?P<recordid>00)(?P<record_len>\d{3})" \
+ "(?P<version>\d{3})(?P<accountnr>\d{14})" \
+ "(?P<statementnr>\d{3})(?P<startdate>\d{6})" \
+ "(?P<enddate>\d{6})" \
+ "(?P<creationdate>\d{6})(?P<creationtime>\d{4})" \
+ "(?P<customerid>.{17})(?P<balancedate>\d{6})" \
+ "(?P<startingbalance>.{19})" \
+ "(?P<itemcount>\d{6})(?P<currency>.{3})" \
+ "(?P<accountname>.{30})"\
+ "(?P<accountlimit>\d{18})(?P<accountowner>.{35})" \
+ "(?P<bankcontact1>.{40})(?P<bankcontact2>.{40})" \
+ "(?P<bankcontact3>.{30})(?P<ibanswift>.{30})"
recparse["10"] = "T(?P<recordid>[18]0)(?P<record_len>\d{3})" \
+ "(?P<eventid>\d{6})" \
+ "(?P<archivalnr>.{18})(?P<recorddate>\d{6})" \
+ "(?P<valuedate>\d{6})" \
+ "(?P<paymentdate>\d{6})(?P<eventtype>\d)" \
+ "(?P<eventcode>.{3})(?P<eventdesc>.{35})" \
+ "(?P<amount>.{19})(?P<receiptcode>.)(?P<creationmethod>.)" \
+ "(?P<recipientname>.{35})(?P<recipientsource>.)" \
+ "(?P<recipientaccount>.{14})(?P<recipientaccountchanged>.)" \
+ "(?P<refnr>.{20})" \
+ "(?P<formnr>.{8})(?P<eventlevel>.)"
recparse["11"] = "T(?P<recordid>[18]1)(?P<record_len>\d{3})" \
+ "(?P<infotype>.{2})" \
+ "(?:(?# Match specific info)" \
+ "(?<=00)(?P<message>.{35})+" \
+ "|" \
+ "(?<=01)(?P<transactioncount>\d{8})" \
+ "|" \
+ "(?<=02)(?P<customerid>.{10})\s(?P<invoicenr>.{15})\s" \
+ "(?P<invoicedate>\d{6})" \
+ "|" \
+ "(?<=03)(?P<cardnumber>.{19})\s(?P<storereference>.{14})" \
+ "|" \
+ "(?<=04)(?P<origarchiveid>.{18})" \
+ "|" \
+ "(?<=05)(?P<destinationamount>.{19})\s(?P<currency>.{3})\s" \
+ "(?P<exchangerate>.{11})(?P<rateref>.{6})" \
+ "|" \
+ "(?<=06)(?P<principalinfo1>.{35})(?P<principalinfo2>.{35})" \
+ "|" \
+ "(?<=07)(?P<bankinfo1>.{35})" \
+ "(?P<bankinfo2>.{35})?" \
+ "(?P<bankinfo3>.{35})?" \
+ "(?P<bankinfo4>.{35})?" \
+ "(?P<bankinfo5>.{35})?" \
+ "(?P<bankinfo6>.{35})?" \
+ "(?P<bankinfo7>.{35})?" \
+ "(?P<bankinfo8>.{35})?" \
+ "(?P<bankinfo9>.{35})?" \
+ "(?P<bankinfo10>.{35})?" \
+ "(?P<bankinfo11>.{35})?" \
+ "(?P<bankinfo12>.{35})?" \
+ "|" \
+ "(?<=08)(?P<paymentcode>\d{3})\s(?P<paymentdesc>.{31})" \
+ "|" \
+ "(?<=09)(?P<recipientname2>.{35})" \
+ "|" \
+ "(?<=11)(?P<reference>.{35})(?P<recipientiban>.{35})" \
+ "(?P<recipientbic>.{35})(?P<recipientnameiban>.{70})" \
+ "(?P<sendername>.{70})(?P<senderid>.{35})" \
+ "(?P<archivalid>.{70})" \
+ ")"
recparse["40"] = "T(?P<recordid>40)(?P<record_len>\d{3})" \
+ "(?P<recorddate>\d{6})(?P<balance>.{19})" \
+ "(?P<availablefunds>.{19})"
recparse["50"] = "T(?P<recordid>50)(?P<record_len>\d{3})" \
+ "(?P<period>\d)(?P<perioddate>\d{6})" \
+ "(?P<depositcount>\d{8})(?P<depositsum>.{19})" \
+ "(?P<withdrawcount>\d{8})(?P<withdrawsum>.{19})"
recparse["60"] = "T(?P<recordid>60)(?P<record_len>\d{3})" \
+ "(?P<bankid>.{3})(?P<specialid>01)" \
+ "(?P<interestperiodstart>\d{6})-" \
+ "(?P<interestperiodend>\d{6})" \
+ "(?P<avgbalanceinfo>.)(?P<avgbalance>.{19})" \
+ "(?P<interestinfo>.)(?P<interestrate>\d{7})" \
+ "(?P<limitbalanceinfo>.)(?P<avglimitbalance>.{19})" \
+ "(?P<limitinterestinfo>.)(?P<limitinterestrate>\d{7})" \
+ "(?P<limitusageinfo>.)(?P<limitusage>\d{7})" \
+ "(?P<permanentbalanceinfo>.)(?P<permanentbalance>.{19})" \
+ "(?P<refinterestinfo>.)(?P<refinterestname>.{35})" \
+ "(?P<refinterestrate>\d{7})" \
+ "(?P<refcreditinfo>.)(?P<refcreditname>.{35})" \
+ "(?P<refcreditrate>\d{7})"
recparse["70"] = "T(?P<recordid>70)(?P<record_len>\d{3})" \
+ "(?P<bankid>\d{3})" \
+ "(?P<infoline1>.{80})" \
+ "(?P<infoline2>.{80})?" \
+ "(?P<infoline3>.{80})?" \
+ "(?P<infoline4>.{80})?" \
+ "(?P<infoline5>.{80})?" \
+ "(?P<infoline6>.{80})?"
for record in recparse:
recparse[record] = re.compile(recparse[record])
self.recparse = recparse
def parse_record(self, line):
"""Docstring for parse_perus
:param line: description
:returns: description
"""
line = fixchars(line)
for matcher in self.recparse:
matchobj = self.recparse[matcher].match(line)
if matchobj:
break
if not matchobj:
print " **** failed to match line '%s'" % (line)
return
# Strip strings
matchdict = matchobj.groupdict()
# Remove members set to None
for field in matchdict.keys():
if not matchdict[field]:
del matchdict[field]
matchkeys = set(matchdict.keys())
needstrip = set(["bankcontact1", "bankcontact2", "bankcontact3",
"customerid", "accountowner", "accountname", "refnr", "formnr",
"recipientname", "eventdesc", "recipientaccount", "message",
"principalinfo1", "bankinfo1", "bankinfo2", "bankinfo3",
"bankinfo4", "bankinfo5", "bankinfo6", "bankinfo7", "bankinfo8",
"bankinfo9", "bankinfo10", "bankinfo11", "bankinfo12",
"principalinfo2", "paymentdesc", "infoline1", "infoline2",
"infoline3", "infoline4", "infoline5", "infoline6",
"recipientname2", "recipientnameiban", "sendername"])
for field in matchkeys & needstrip:
matchdict[field] = matchdict[field].strip()
# Convert to int
needsint = set(["itemcount", "eventid", "record_len",
"depositcount", "withdrawcount"])
for field in matchkeys & needsint:
matchdict[field] = float(matchdict[field])
# Convert to float
needsfloat = set(["startingbalance", "accountlimit", "amount",
"destinationamount", "balance", "availablefunds", "depositsum",
"withdrawsum", "avgbalance", "avglimitbalance",
"permanentbalance"])
for field in matchkeys & needsfloat:
matchdict[field] = float(matchdict[field])
# convert sents to euros
needseur = set(["startingbalance", "accountlimit", "amount",
"destinationamount", "balance", "availablefunds", "depositsum",
"withdrawsum", "avgbalance", "permanentbalance"])
for field in matchkeys & needseur:
matchdict[field] = matchdict[field] / 100
# convert ibanswift to separate fields
if matchdict.has_key("ibanswift"):
matchdict["iban"], matchdict["swift"] = \
matchdict["ibanswift"].strip().split()
# Convert date fields
needdate = set(["startdate", "enddate", "creationdate", "balancedate",
"valuedate", "paymentdate", "recorddate", "perioddate"])
for field in matchkeys & needdate:
# Base all dates on the year 2000, since it's unlikely that this
# starndard will survive to see 2020 due to SEPA
datestring = matchdict[field]
if datestring == '000000':
matchdict[field] = None
continue
matchdict[field] = datetime.date(int("20" + datestring[0:2]),
int(datestring[2:4]), int(datestring[4:6]))
# convert time fields
needtime = set(["creationtime"])
for field in matchkeys & needtime:
timestring = matchdict[field]
matchdict[field] = datetime.time(int(timestring[0:2]),
int(timestring[2:4]))
return matchdict
def parse_file(filename):
"""Parse file with PATU format inside
:param filename: description
:returns: description
"""
patufile = open(filename, "r")
parser = PatuParser()
for line in patufile:
parser.parse_record(line)
def main():
"""The main function, currently just calls a dummy filename
:returns: description
"""
parse_file("myinput.nda")
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,139 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# Copyright (C) 2010 Sami Haahtinen (<http://ressukka.net>).
# Copyright (C) 2009 EduSense BV (<http://www.edusense.nl>).
# All Rights Reserved
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
'''
This parser implements the PATU format support. PATU format is a generic format
used by finnish banks.
'''
from account_banking.parsers import models
from tools.translate import _
from account_banking_fi_patu.parser import PatuParser
__all__ = ['parser']
class transaction(models.mem_bank_transaction):
'''
Implementation of transaction communication class for account_banking.
'''
mapping = {
"remote_account": "recipientaccount",
"remote_currency": "currency",
"transferred_amount": "amount",
"execution_date": "recorddate",
"effective_date": "paymentdate",
"transfer_type": "eventtype",
"reference": "refnr",
"eventcode": "eventcode",
"message": "message"}
def __init__(self, record, *args, **kwargs):
'''
Initialize own dict with read values.
'''
super(transaction, self).__init__(*args, **kwargs)
for key in self.mapping:
try:
setattr(self, key, record[self.mapping[key]])
except KeyError:
pass
def is_valid(self):
'''
Override validity checks.
There are certain situations for PATU which can be validated as
invalid, but are normal.
If eventcode is 730, the transaction was initiated by the bank and
doesn't have a destination account.
'''
if self.eventcode and (self.eventcode == "720" or self.eventcode ==
"710"):
# Withdrawal from and deposit to the account
return (self.execution_date and self.transferred_amount and True) \
or False
if self.eventcode and self.eventcode == "730":
# The transaction is bank initiated, no remote account is present
return (self.execution_date and self.transferred_amount and True) \
or False
return super(transaction, self).is_valid()
class statement(models.mem_bank_statement):
'''
Implementation of bank_statement communication class of account_banking
'''
def __init__(self, record, *args, **kwargs):
'''
Set decent start values based on first transaction read
'''
super(statement, self).__init__(*args, **kwargs)
self.id = record["statementnr"]
self.local_account = self.convert_bank_account(record["accountnr"])
self.date = record["creationdate"]
self.start_balance = record["startingbalance"]
def convert_bank_account(self, accountnr):
"""Convert bank account number in to a abbreviated format used in
finland"""
bank = accountnr[:6]
account = accountnr[6:].lstrip("0")
return "%s-%s" % (bank, account)
def import_transaction(self, record):
'''
Import a transaction to the statement
'''
if record["recordid"] == "40":
self.end_balance = record["balance"]
elif record["recordid"] == "10" or record["recordid"] == "80":
# XXX: Sum up entries that have detailed records set for them. For
# now, ignore the parent entry
if record["receiptcode"] == "E":
return
self.transactions.append(transaction(record))
class parser(models.parser):
code = 'FIPATU'
name = _('PATU statement sheet')
doc = _('''\
PATU statement format defines one or more statements in each file. This parser
will parse all statements in a file and import them to OpenERP
''')
def parse(self, data):
result = []
stmnt = None
patuparser = PatuParser()
for line in data.splitlines():
# Skip empty (last) lines
if not line:
continue
record = patuparser.parse_record(line)
if record["recordid"] == "00":
# New statement
stmnt = statement(record)
result.append(stmnt)
else:
stmnt.import_transaction(record)
result.append(stmnt)
return result
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@@ -0,0 +1,348 @@
# 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: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-01-08 15:36+0000\n"
"PO-Revision-Date: 2010-02-06 14:41+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"
"X-Launchpad-Export-Date: 2010-06-09 10:04+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_banking_nl_clieop
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
msgid "Direct Debits"
msgstr ""
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
#: selection:banking.export.clieop,testcode:0
#, python-format
msgid "No"
msgstr "Nej"
#. module: account_banking_nl_clieop
#: model:ir.module.module,shortdesc:account_banking_nl_clieop.module_meta_information
msgid "Account Banking NL ClieOp"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,no_transactions:0
#: field:banking.export.clieop,no_transactions:0
msgid "Number of Transactions"
msgstr ""
#. module: account_banking_nl_clieop
#: model:ir.actions.wizard,name:account_banking_nl_clieop.wizard_account_banking_export_clieop
msgid "Export ClieOp File"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,prefered_date:0
#: field:banking.export.clieop,prefered_date:0
msgid "Prefered Processing Date"
msgstr ""
#. module: account_banking_nl_clieop
#: model:payment.type,name:account_banking_nl_clieop.export_clieop_pay
msgid "ClieOp3 Payment Batch"
msgstr ""
#. module: account_banking_nl_clieop
#: field:banking.export.clieop,state:0
msgid "State"
msgstr ""
#. module: account_banking_nl_clieop
#: help:account_banking_nl_clieop.banking_export_clieop,init,test:0
msgid ""
"Select this if you want your bank to run a test process rather then execute "
"your orders for real."
msgstr ""
#. module: account_banking_nl_clieop
#: selection:banking.export.clieop,state:0
msgid "Draft"
msgstr "Udkast"
#. module: account_banking_nl_clieop
#: view:banking.export.clieop:0
msgid "Processing Information"
msgstr ""
#. module: account_banking_nl_clieop
#: help:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
msgid ""
"A fixed message to apply to all transactions in addition to the individual "
"messages."
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,check_no_accounts:0
#: field:banking.export.clieop,check_no_accounts:0
msgid "Check Number Accounts"
msgstr ""
#. module: account_banking_nl_clieop
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,save:0
msgid "Save"
msgstr "Gem"
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
msgid "Type"
msgstr ""
#. module: account_banking_nl_clieop
#: selection:banking.export.clieop,state:0
msgid "Sent"
msgstr "Sendt"
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,log:0
msgid "Log"
msgstr "Log"
#. module: account_banking_nl_clieop
#: view:banking.export.clieop:0
msgid "ClieOp Information"
msgstr "ClieOp information"
#. module: account_banking_nl_clieop
#: model:ir.model,name:account_banking_nl_clieop.model_banking_export_clieop
msgid "ClieOp3 Export"
msgstr "ClieOp3 eksport"
#. module: account_banking_nl_clieop
#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
#, python-format
msgid "You can only combine payment orders of the same type"
msgstr ""
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
#: selection:banking.export.clieop,filetype:0
msgid "Salary Payment Batch"
msgstr ""
#. module: account_banking_nl_clieop
#: selection:banking.export.clieop,state:0
msgid "Reconciled"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
msgid "Reference for further communication"
msgstr ""
#. module: account_banking_nl_clieop
#: field:banking.export.clieop,duplicates:0
msgid "Number of Duplicates"
msgstr ""
#. module: account_banking_nl_clieop
#: help:account_banking_nl_clieop.banking_export_clieop,init,reference:0
msgid ""
"The bank will use this reference in feedback communication to refer to this "
"run. Only five characters are available."
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
msgid "Processing Details"
msgstr ""
#. module: account_banking_nl_clieop
#: model:payment.type,name:account_banking_nl_clieop.export_clieop_sal
msgid "ClieOp3 Salary Payment Batch"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,create:0
msgid "Create"
msgstr "Opret"
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
#: selection:banking.export.clieop,filetype:0
msgid "Direct Debit Batch"
msgstr ""
#. module: account_banking_nl_clieop
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,file:0
#: field:banking.export.clieop,file:0
msgid "ClieOp File"
msgstr ""
#. module: account_banking_nl_clieop
#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
#, python-format
msgid "You can't create ClieOp orders more than 30 days in advance."
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
msgid "Execution Date"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,fixed_message:0
msgid "Fixed Message"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
#: field:banking.export.clieop,filetype:0
msgid "File Type"
msgstr "Filtype"
#. module: account_banking_nl_clieop
#: model:payment.type,name:account_banking_nl_clieop.export_clieop_inc
msgid "ClieOp3 Direct Debit Batch"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,test:0
#: field:banking.export.clieop,testcode:0
msgid "Test Run"
msgstr "Testkørsel"
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
msgid "Payments"
msgstr "Betalinger"
#. module: account_banking_nl_clieop
#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
#, python-format
msgid "Error"
msgstr "Fejl"
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,init,batchtype:0
msgid "Salary Payments"
msgstr "Lønudbetalinger"
#. module: account_banking_nl_clieop
#: wizard_view:account_banking_nl_clieop.banking_export_clieop,create:0
#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
#: view:banking.export.clieop:0
msgid "Client Opdrachten Export"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_view:account_banking_nl_clieop.banking_export_clieop,init:0
msgid "Additional message for all transactions"
msgstr ""
#. module: account_banking_nl_clieop
#: model:ir.actions.act_window,name:account_banking_nl_clieop.action_account_banking_clieops
#: model:ir.ui.menu,name:account_banking_nl_clieop.menu_action_account_banking_exported_clieop_files
msgid "Generated ClieOp3 Files"
msgstr ""
#. module: account_banking_nl_clieop
#: model:ir.module.module,description:account_banking_nl_clieop.module_meta_information
msgid ""
"\n"
" Module to export payment orders in ClieOp format.\n"
"\n"
" ClieOp format is used by Dutch banks to batch national bank transfers.\n"
" This module uses the account_banking logic.\n"
" "
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,init,reference:0
msgid "Reference"
msgstr "Reference"
#. module: account_banking_nl_clieop
#: help:account_banking_nl_clieop.banking_export_clieop,init,execution_date:0
msgid ""
"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."
msgstr ""
#. module: account_banking_nl_clieop
#: field:banking.export.clieop,payment_order_ids:0
msgid "Payment Orders"
msgstr "Betalingsordrer"
#. module: account_banking_nl_clieop
#: view:banking.export.clieop:0
msgid "General Information"
msgstr "Generel information"
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,total_amount:0
#: field:banking.export.clieop,total_amount:0
msgid "Total Amount"
msgstr "Totalt beløb"
#. module: account_banking_nl_clieop
#: field:banking.export.clieop,daynumber:0
msgid "ClieOp Transaction nr of the Day"
msgstr ""
#. module: account_banking_nl_clieop
#: wizard_button:account_banking_nl_clieop.banking_export_clieop,create,cancel:0
#: wizard_button:account_banking_nl_clieop.banking_export_clieop,init,end:0
msgid "Cancel"
msgstr "Annuller"
#. module: account_banking_nl_clieop
#: wizard_field:account_banking_nl_clieop.banking_export_clieop,create,identification:0
#: field:banking.export.clieop,identification:0
msgid "Identification"
msgstr "Identifikation"
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,create,testcode:0
#: code:addons/account_banking_nl_clieop/account_banking_clieop.py:0
#: code:addons/account_banking_nl_clieop/wizard/export_clieop.py:0
#: selection:banking.export.clieop,testcode:0
#, python-format
msgid "Yes"
msgstr "Ja"
#. module: account_banking_nl_clieop
#: selection:account_banking_nl_clieop.banking_export_clieop,create,filetype:0
#: selection:banking.export.clieop,filetype:0
msgid "Payment Batch"
msgstr ""
#. module: account_banking_nl_clieop
#: field:banking.export.clieop,date_generated:0
msgid "Generation Date"
msgstr ""