mirror of
https://github.com/OCA/bank-payment.git
synced 2025-02-02 10:37:31 +02:00
[IMP] account_banking, account_banking_nl_clieop: improved casting of data
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
##############################################################################
|
||||
{
|
||||
'name': 'Account Banking',
|
||||
'version': '0.1.53',
|
||||
'version': '0.1.54',
|
||||
'license': 'GPL-3',
|
||||
'author': 'EduSense BV',
|
||||
'website': 'http://www.edusense.nl',
|
||||
|
||||
@@ -43,20 +43,21 @@ import unicodedata
|
||||
|
||||
class Field(object):
|
||||
'''Base Field class - fixed length left aligned string field in a record'''
|
||||
def __init__(self, name, length=1, fillchar=' '):
|
||||
def __init__(self, name, length=1, fillchar=' ', cast=str):
|
||||
self.name = name.replace(' ', '_')
|
||||
self.length = length
|
||||
self.fillchar = fillchar
|
||||
self.cast = cast
|
||||
|
||||
def format(self, value):
|
||||
value = str(value)
|
||||
value = self.cast(value)
|
||||
if len(value) > self.length:
|
||||
return value[:self.length]
|
||||
return value.ljust(self.length, self.fillchar)
|
||||
|
||||
def take(self, buffer):
|
||||
offset = hasattr(self, 'offset') and self.offset or 0
|
||||
return buffer[offset:offset + self.length].rstrip(self.fillchar)
|
||||
return self.cast(buffer[offset:offset + self.length].rstrip(self.fillchar))
|
||||
|
||||
def __repr__(self):
|
||||
return '%s "%s"' % (self.__class__.__name__, self.name)
|
||||
@@ -64,7 +65,7 @@ class Field(object):
|
||||
class Filler(Field):
|
||||
'''Constant value field'''
|
||||
def __init__(self, name, length=1, value=' '):
|
||||
super(Filler, self).__init__(name, length)
|
||||
super(Filler, self).__init__(name, length, cast=str)
|
||||
self.value = str(value)
|
||||
|
||||
def take(self, buffer):
|
||||
@@ -77,9 +78,9 @@ class Filler(Field):
|
||||
|
||||
class DateField(Field):
|
||||
'''Variable date field'''
|
||||
def __init__(self, name, format='%Y-%m-%d', auto=False):
|
||||
def __init__(self, name, format='%Y-%m-%d', auto=False, cast=str):
|
||||
length = len(date.today().strftime(format))
|
||||
super(DateField, self).__init__(name, length)
|
||||
super(DateField, self).__init__(name, length, cast=cast)
|
||||
self.dateformat = format
|
||||
self.auto = auto
|
||||
|
||||
@@ -94,7 +95,7 @@ class DateField(Field):
|
||||
def take(self, buffer):
|
||||
value = super(DateField, self).take(buffer)
|
||||
if value:
|
||||
return strpdate(value, self.dateformat)
|
||||
return self.cast(strpdate(value, self.dateformat))
|
||||
return self.auto and date.today() or None
|
||||
|
||||
class RightAlignedField(Field):
|
||||
@@ -106,7 +107,7 @@ class RightAlignedField(Field):
|
||||
|
||||
def take(self, buffer):
|
||||
offset = hasattr(self, 'offset') and self.offset or 0
|
||||
return buffer[offset:offset + self.length].lstrip(self.fillchar)
|
||||
return self.cast(buffer[offset:offset + self.length].lstrip(self.fillchar))
|
||||
|
||||
class NumberField(RightAlignedField):
|
||||
'''Deviation of Field: left zero filled'''
|
||||
@@ -115,7 +116,7 @@ class NumberField(RightAlignedField):
|
||||
super(NumberField, self).__init__(*args, **kwargs)
|
||||
|
||||
def format(self, value):
|
||||
return super(NumberField, self).format(value and str(value) or '')
|
||||
return super(NumberField, self).format(self.cast(value or ''))
|
||||
|
||||
class RecordType(object):
|
||||
fields = []
|
||||
@@ -186,7 +187,7 @@ class Record(object):
|
||||
return self._recordtype.format(self._value)
|
||||
|
||||
def __unicode__(self):
|
||||
return unicode(str(self))
|
||||
return unicode(self.cast(self))
|
||||
|
||||
def asciify(str):
|
||||
return unicodedata.normalize('NFKD', str).encode('ascii', 'ignore')
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
##############################################################################
|
||||
{
|
||||
'name': 'Account Banking PATU module',
|
||||
'version': '0.53',
|
||||
'version': '0.54',
|
||||
'license': 'GPL-3',
|
||||
'author': 'Sami Haahtinen',
|
||||
'website': 'http://ressukka.net',
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
##############################################################################
|
||||
{
|
||||
'name': 'Account Banking NL ClieOp',
|
||||
'version': '0.53',
|
||||
'version': '0.54',
|
||||
'license': 'GPL-3',
|
||||
'author': 'EduSense BV',
|
||||
'website': 'http://www.edusense.nl',
|
||||
|
||||
@@ -28,12 +28,20 @@ __all__ = ['DirectDebitBatch', 'PaymentsBatch', 'DirectDebit', 'Payment',
|
||||
'OrdersFile',
|
||||
]
|
||||
|
||||
class StringField(record.Field):
|
||||
def take(self, buffer):
|
||||
return convert.to_swift(super(StringField, self).take(buffer))
|
||||
class SWIFTField(record.Field):
|
||||
'''
|
||||
A SWIFTField does not assume 'ascii' data. It actively converts data to
|
||||
SWIFT-specs.
|
||||
'''
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs['cast'] = convert.to_swift
|
||||
super(SWIFTField, self).__init__(*args, **kwargs)
|
||||
|
||||
#def take(self, buffer):
|
||||
# return convert.to_swift(super(SWIFTField, self).take(buffer))
|
||||
|
||||
def format(self, value):
|
||||
return convert.to_swift(super(StringField, self).format(value))
|
||||
#def format(self, value):
|
||||
# return convert.to_swift(super(SWIFTField, self).format(value))
|
||||
|
||||
def eleven_test(s):
|
||||
'''
|
||||
@@ -60,7 +68,7 @@ class HeaderRecord(record.Record): #{{{
|
||||
record.Filler('variantcode', 1, 'A'),
|
||||
record.DateField('creation_date', '%d%m%y', auto=True),
|
||||
record.Filler('filename', 8, 'CLIEOP03'),
|
||||
StringField('sender_id', 5),
|
||||
SWIFTField('sender_id', 5),
|
||||
record.Field('file_id', 4),
|
||||
record.Field('duplicatecode', 1),
|
||||
record.Filler('filler', 21),
|
||||
@@ -90,7 +98,7 @@ class BatchHeaderRecord(record.Record):
|
||||
record.NumberField('accountno_sender', 10),
|
||||
record.NumberField('batch_tracer', 4),
|
||||
record.Filler('currency_order', 3, 'EUR'),
|
||||
StringField('batch_id', 16),
|
||||
SWIFTField('batch_id', 16),
|
||||
record.Filler('filler', 10),
|
||||
]
|
||||
|
||||
@@ -110,7 +118,7 @@ class FixedMessageRecord(record.Record):
|
||||
_fields = [
|
||||
record.Filler('recordcode', 4, '0020'),
|
||||
record.Filler('variantcode', 1, 'A'),
|
||||
StringField('fixed_message', 32),
|
||||
SWIFTField('fixed_message', 32),
|
||||
record.Filler('filler', 13),
|
||||
]
|
||||
|
||||
@@ -122,7 +130,7 @@ class SenderRecord(record.Record):
|
||||
# NAW = Name, Address, Residence
|
||||
record.Field('NAWcode', 1),
|
||||
record.DateField('preferred_execution_date', '%d%m%y', auto=True),
|
||||
StringField('name_sender', 35),
|
||||
SWIFTField('name_sender', 35),
|
||||
record.Field('testcode', 1),
|
||||
record.Filler('filler', 2),
|
||||
]
|
||||
@@ -144,7 +152,7 @@ class NamePayerRecord(record.Record):
|
||||
_fields = [
|
||||
record.Filler('recordcode', 4, '0110'),
|
||||
record.Filler('variantcode', 1, 'B'),
|
||||
StringField('name', 35),
|
||||
SWIFTField('name', 35),
|
||||
record.Filler('filler', 10),
|
||||
]
|
||||
|
||||
@@ -153,7 +161,7 @@ class PaymentReferenceRecord(record.Record):
|
||||
_fields = [
|
||||
record.Filler('recordcode', 4, '0150'),
|
||||
record.Filler('variantcode', 1, 'A'),
|
||||
StringField('paymentreference', 16),
|
||||
SWIFTField('paymentreference', 16),
|
||||
record.Filler('filler', 29),
|
||||
]
|
||||
|
||||
@@ -162,7 +170,7 @@ class DescriptionRecord(record.Record):
|
||||
_fields = [
|
||||
record.Filler('recordcode', 4, '0160'),
|
||||
record.Filler('variantcode', 1, 'A'),
|
||||
StringField('description', 32),
|
||||
SWIFTField('description', 32),
|
||||
record.Filler('filler', 13),
|
||||
]
|
||||
|
||||
@@ -171,7 +179,7 @@ class NameBeneficiaryRecord(record.Record):
|
||||
_fields = [
|
||||
record.Filler('recordcode', 4, '0170'),
|
||||
record.Filler('variantcode', 1, 'B'),
|
||||
StringField('name', 35),
|
||||
SWIFTField('name', 35),
|
||||
record.Filler('filler', 10),
|
||||
]
|
||||
|
||||
@@ -179,7 +187,7 @@ class OrderRecord(record.Record):
|
||||
'''Order details'''
|
||||
_fields = [
|
||||
record.Filler('recordcode', 6, 'KAE092'),
|
||||
StringField('name_transactioncode', 18),
|
||||
SWIFTField('name_transactioncode', 18),
|
||||
record.NumberField('total_amount', 13),
|
||||
record.Field('accountno_sender', 10),
|
||||
record.NumberField('total_accountnos', 5),
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
##############################################################################
|
||||
{
|
||||
'name': 'Account Banking - Girotel',
|
||||
'version': '0.53',
|
||||
'version': '0.54',
|
||||
'license': 'GPL-3',
|
||||
'author': 'EduSense BV',
|
||||
'website': 'http://www.edusense.nl',
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
##############################################################################
|
||||
{
|
||||
'name': 'Account Banking',
|
||||
'version': '0.53',
|
||||
'version': '0.54',
|
||||
'license': 'GPL-3',
|
||||
'author': 'EduSense BV',
|
||||
'website': 'http://www.edusense.nl',
|
||||
|
||||
Reference in New Issue
Block a user