Skip to content

Commit 5cb2f55

Browse files
committed
Finvoice with most validation
1 parent 01d4015 commit 5cb2f55

File tree

5 files changed

+7
-231
lines changed

5 files changed

+7
-231
lines changed

docs/finvoice.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,11 @@
272272
</InvoiceRow>
273273
<SpecificationDetails>
274274
<SpecificationFreeText>LASKUN VAPAAMUOTOISET ERITTELYTIEDOT:</SpecificationFreeText>
275-
<SpecificationFreeText>Sarake-1 Sarake-2 Sarake-3</SpecificationFreeText>
276-
<SpecificationFreeText>---------------------------------------------------------------------------------------------------</SpecificationFreeText>
277-
<SpecificationFreeText>1.sarakkeen tieto 2.sarakkeen tieto 10,00</SpecificationFreeText>
278-
<SpecificationFreeText>Toinen rivi Toinen rivi 1 000,00</SpecificationFreeText>
279-
<SpecificationFreeText>Kolmas rivi 3/2 1,00</SpecificationFreeText>
275+
<SpecificationFreeText>Sarake-1 Sarake-2 Sarake-3</SpecificationFreeText>
276+
<SpecificationFreeText>--------------------------------------------------------------------------------</SpecificationFreeText>
277+
<SpecificationFreeText>1.sarakkeen tieto 2.sarakkeen tieto 10,00</SpecificationFreeText>
278+
<SpecificationFreeText>Toinen rivi Toinen rivi 1 000,00</SpecificationFreeText>
279+
<SpecificationFreeText>Kolmas rivi 3/2 1,00</SpecificationFreeText>
280280
<SpecificationFreeText>Muotoituja tietoja voidaan käyttää mm.tarkemman erittelyn esittämiseen:</SpecificationFreeText>
281281
</SpecificationDetails>
282282
<EpiDetails>

finvoice/finvoice.py

Lines changed: 1 addition & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ def raise_parse_error(node, msg):
492492
raise GDSParseError(msg)
493493

494494
def raise_value_error(value, msg):
495-
msg = '%s (element %s)' % (msg, value, )
495+
msg = '%s (value "%s")' % (msg, value, )
496496
raise GDSParseError(msg)
497497

498498

@@ -10895,37 +10895,6 @@ def buildAttributes(self, node, attrs, already_processed):
1089510895
self.IdentificationSchemeName = value
1089610896
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1089710897
pass
10898-
def validate_valueOf_(self, value):
10899-
if ( isinstance( value, basestring ) and value.__len__() <= 35 ):
10900-
pass
10901-
else:
10902-
raise_value_error( value, 'Expected less than 35 characters' )
10903-
return value
10904-
def build(self, node):
10905-
already_processed = set()
10906-
self.buildAttributes(node, node.attrib, already_processed)
10907-
self.valueOf_ = get_all_text_(node)
10908-
self.validate_valueOf_(self.valueOf_)
10909-
for child in node:
10910-
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
10911-
self.buildChildren(child, node, nodeName_)
10912-
return self
10913-
def validate_IdentificationSchemeName(self, value):
10914-
if ( value == "IBAN" ):
10915-
pass
10916-
else:
10917-
raise_value_error( value, 'Expected "IBAN"' )
10918-
return value
10919-
def buildAttributes(self, node, attrs, already_processed):
10920-
value = find_attr_value_('IdentificationSchemeName', node)
10921-
if value is not None and 'IdentificationSchemeName' not in already_processed:
10922-
already_processed.add('IdentificationSchemeName')
10923-
self.IdentificationSchemeName = value
10924-
self.validate_IdentificationSchemeName(self.IdentificationSchemeName)
10925-
value = find_attr_value_('xsi:type', node)
10926-
if value is not None and 'xsi:type' not in already_processed:
10927-
already_processed.add('xsi:type')
10928-
self.extensiontype_ = value
1092910898
# end class SellerAccountIDType
1093010899

1093110900

@@ -11011,37 +10980,6 @@ def buildAttributes(self, node, attrs, already_processed):
1101110980
self.IdentificationSchemeName = value
1101210981
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1101310982
pass
11014-
def validate_valueOf_(self, value):
11015-
if ( isinstance( value, basestring ) and 8 <= value.__len__() <= 11 ):
11016-
pass
11017-
else:
11018-
raise_value_error( value, 'Expected value between 8..11 characters' )
11019-
return value
11020-
def build(self, node):
11021-
already_processed = set()
11022-
self.buildAttributes(node, node.attrib, already_processed)
11023-
self.valueOf_ = get_all_text_(node)
11024-
self.validate_valueOf_(self.valueOf_)
11025-
for child in node:
11026-
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
11027-
self.buildChildren(child, node, nodeName_)
11028-
return self
11029-
def validate_IdentificationSchemeName(self, value):
11030-
if ( value == "BIC" ):
11031-
pass
11032-
else:
11033-
raise_value_error( value, 'Expected "BIC"' )
11034-
return value
11035-
def buildAttributes(self, node, attrs, already_processed):
11036-
value = find_attr_value_('IdentificationSchemeName', node)
11037-
if value is not None and 'IdentificationSchemeName' not in already_processed:
11038-
already_processed.add('IdentificationSchemeName')
11039-
self.IdentificationSchemeName = value
11040-
self.validate_IdentificationSchemeName(self.IdentificationSchemeName)
11041-
value = find_attr_value_('xsi:type', node)
11042-
if value is not None and 'xsi:type' not in already_processed:
11043-
already_processed.add('xsi:type')
11044-
self.extensiontype_ = value
1104510983
# end class SellerBicType
1104610984

1104710985

@@ -11764,52 +11702,6 @@ def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1176411702
obj_.build(child_)
1176511703
self.SellerPostalAddressDetails = obj_
1176611704
obj_.original_tagname_ = 'SellerPostalAddressDetails'
11767-
def validate_SellerOrganisationNamesType(self, value):
11768-
if ( value.__len__() <= 3 ):
11769-
pass
11770-
else:
11771-
raise_value_error( value.__len__(), 'Expected maximum of 3 elements' )
11772-
return value
11773-
def validate_SellerOrganisationNamesType(self, value):
11774-
if ( value.__len__() <= 3 ):
11775-
pass
11776-
else:
11777-
raise_value_error( value.__len__(), 'Expected maximum of 3 elements' )
11778-
return value
11779-
def validate_SellerOrganisationBankName(self, value):
11780-
if ( value.__len__() <= 2 ):
11781-
pass
11782-
else:
11783-
raise_value_error( value.__len__(), 'Expected maximum of 3 elements' )
11784-
return value
11785-
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
11786-
if nodeName_ == 'SellerPartyIdentifier':
11787-
SellerPartyIdentifier_ = child_.text
11788-
SellerPartyIdentifier_ = self.gds_validate_string(SellerPartyIdentifier_, node, 'SellerPartyIdentifier')
11789-
self.SellerPartyIdentifier = SellerPartyIdentifier_
11790-
self.validate_genericStringType1_48(self.SellerPartyIdentifier) # validate type genericStringType1_48
11791-
elif nodeName_ == 'SellerOrganisationNames':
11792-
obj_ = SellerOrganisationNamesType.factory()
11793-
obj_.build(child_)
11794-
self.SellerOrganisationNames.append(obj_)
11795-
self.validate_SellerOrganisationNamesType(self.SellerOrganisationNames)
11796-
obj_.original_tagname_ = 'SellerOrganisationNames'
11797-
elif nodeName_ == 'SellerOrganisationBankName':
11798-
SellerOrganisationBankName_ = child_.text
11799-
SellerOrganisationBankName_ = self.gds_validate_string(SellerOrganisationBankName_, node, 'SellerOrganisationBankName')
11800-
self.SellerOrganisationBankName.append(SellerOrganisationBankName_)
11801-
self.validate_genericStringType1_35(self.SellerOrganisationBankName) # validate type genericStringType1_35
11802-
self.validate_SellerOrganisationBankName(self.SellerOrganisationBankName)
11803-
elif nodeName_ == 'SellerPostalAddressDetails':
11804-
obj_ = SellerPostalAddressDetailsType.factory()
11805-
obj_.build(child_)
11806-
self.SellerPostalAddressDetails = obj_
11807-
obj_.original_tagname_ = 'SellerPostalAddressDetails'
11808-
elif nodeName_ == 'IndustryCode':
11809-
IndustryCode_ = child_.text
11810-
IndustryCode_ = self.gds_validate_string(IndustryCode_, node, 'IndustryCode')
11811-
self.IndustryCode = IndustryCode_
11812-
self.validate_genericStringType0_6(self.IndustryCode) # validate type genericStringType0_6
1181311705
# end class SellerPartyDetailsType
1181411706

1181511707

@@ -15640,34 +15532,6 @@ def buildAttributes(self, node, attrs, already_processed):
1564015532
self.Format = value
1564115533
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
1564215534
pass
15643-
def validate_valueOf_(self, value):
15644-
import datetime
15645-
if ( datetime.datetime.strptime( value, '%Y%m%d' ).strftime( '%Y%m%d' ) == value ):
15646-
pass
15647-
else:
15648-
raise_value_error( value, 'Time format does not match' )
15649-
return value
15650-
def build(self, node):
15651-
already_processed = set()
15652-
self.buildAttributes(node, node.attrib, already_processed)
15653-
self.valueOf_ = get_all_text_(node)
15654-
self.validate_valueOf_(self.valueOf_)
15655-
for child in node:
15656-
nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
15657-
self.buildChildren(child, node, nodeName_)
15658-
return self
15659-
def validate_Format(self, value):
15660-
if ( value == "CCYYMMDD" ):
15661-
pass
15662-
else:
15663-
raise_value_error( value, 'Expected "CCYYMMDD"' )
15664-
return value
15665-
def buildAttributes(self, node, attrs, already_processed):
15666-
value = find_attr_value_('Format', node)
15667-
if value is not None and 'Format' not in already_processed:
15668-
already_processed.add('Format')
15669-
self.Format = value
15670-
self.validate_Format(self.Format)
1567115535
# end class date
1567215536

1567315537

finvoice/sender/senderinfo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ def raise_parse_error(node, msg):
492492
raise GDSParseError(msg)
493493

494494
def raise_value_error(value, msg):
495-
msg = '%s (element %s)' % (msg, value, )
495+
msg = '%s (value "%s")' % (msg, value, )
496496
raise GDSParseError(msg)
497497

498498

generators/gends_user_methods_finvoice.py

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -415,64 +415,6 @@ def buildAttributes(self, node, attrs, already_processed):
415415
class_names=r'^date$',
416416
)
417417

418-
method230 = MethodSpec(name='validate_SellerOrganisationNamesType',
419-
source='''\
420-
def validate_SellerOrganisationNamesType(self, value):
421-
if ( value.__len__() <= 3 ):
422-
pass
423-
else:
424-
raise_value_error( value.__len__(), 'Expected maximum of 3 elements' )
425-
return value
426-
''',
427-
class_names=r'^SellerPartyDetailsType$',
428-
)
429-
430-
method231 = MethodSpec(name='validate_SellerOrganisationBankName',
431-
source='''\
432-
def validate_SellerOrganisationBankName(self, value):
433-
if ( value.__len__() <= 2 ):
434-
pass
435-
else:
436-
raise_value_error( value.__len__(), 'Expected maximum of 3 elements' )
437-
return value
438-
''',
439-
class_names=r'^SellerPartyDetailsType$',
440-
)
441-
442-
method240 = MethodSpec(name='buildChildren',
443-
source='''\
444-
def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
445-
if nodeName_ == 'SellerPartyIdentifier':
446-
SellerPartyIdentifier_ = child_.text
447-
SellerPartyIdentifier_ = self.gds_validate_string(SellerPartyIdentifier_, node, 'SellerPartyIdentifier')
448-
self.SellerPartyIdentifier = SellerPartyIdentifier_
449-
self.validate_genericStringType1_48(self.SellerPartyIdentifier) # validate type genericStringType1_48
450-
elif nodeName_ == 'SellerOrganisationNames':
451-
obj_ = SellerOrganisationNamesType.factory()
452-
obj_.build(child_)
453-
self.SellerOrganisationNames.append(obj_)
454-
self.validate_SellerOrganisationNamesType(self.SellerOrganisationNames)
455-
obj_.original_tagname_ = 'SellerOrganisationNames'
456-
elif nodeName_ == 'SellerOrganisationBankName':
457-
SellerOrganisationBankName_ = child_.text
458-
SellerOrganisationBankName_ = self.gds_validate_string(SellerOrganisationBankName_, node, 'SellerOrganisationBankName')
459-
self.SellerOrganisationBankName.append(SellerOrganisationBankName_)
460-
self.validate_genericStringType1_35(self.SellerOrganisationBankName) # validate type genericStringType1_35
461-
self.validate_SellerOrganisationBankName(self.SellerOrganisationBankName)
462-
elif nodeName_ == 'SellerPostalAddressDetails':
463-
obj_ = SellerPostalAddressDetailsType.factory()
464-
obj_.build(child_)
465-
self.SellerPostalAddressDetails = obj_
466-
obj_.original_tagname_ = 'SellerPostalAddressDetails'
467-
elif nodeName_ == 'IndustryCode':
468-
IndustryCode_ = child_.text
469-
IndustryCode_ = self.gds_validate_string(IndustryCode_, node, 'IndustryCode')
470-
self.IndustryCode = IndustryCode_
471-
self.validate_genericStringType0_6(self.IndustryCode) # validate type genericStringType0_6
472-
''',
473-
class_names=r'^SellerPartyDetailsType$',
474-
)
475-
476418
method250 = MethodSpec(name='validate_SellerOrganisationName',
477419
source='''\
478420
def validate_SellerOrganisationName(self, value):
@@ -503,35 +445,6 @@ def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
503445
# This list of specifications must be named METHOD_SPECS.
504446
#
505447
METHOD_SPECS = (
506-
method10,
507-
method20,
508-
method30,
509-
method40,
510-
method50,
511-
method60,
512-
method70,
513-
method80,
514-
method90,
515-
method91,
516-
method100,
517-
method110,
518-
method120,
519-
method130,
520-
method140,
521-
method150,
522-
method160,
523-
method170,
524-
method180,
525-
method190,
526-
method200,
527-
method210,
528-
method220,
529-
method230,
530-
method230,
531-
method231,
532-
method240,
533-
method250,
534-
method260,
535448
)
536449

537450

generators/gends_user_methods_senderinfo.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,6 @@ def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
527527
method210,
528528
method220,
529529
method230,
530-
method230,
531530
method231,
532531
method240,
533532
method250,

0 commit comments

Comments
 (0)