diff --git a/PyFePA/fepa.py b/PyFePA/fepa.py
index c560174..4285dfe 100644
--- a/PyFePA/fepa.py
+++ b/PyFePA/fepa.py
@@ -45,7 +45,7 @@ def __setattr__(self,item,value):
try:
validator = self.__class__.__dict__[item]
vval = validator.validate(value)
- if vval:
+ if vval or vval == 0:
super(GenFePA, self).__setattr__(item,vval)
else:
raise ValueError('Value {0} not allowed in {1}.{2}'.format(value,self.__class__,item))
diff --git a/PyFePA/fields.py b/PyFePA/fields.py
index 28141aa..a904ebb 100644
--- a/PyFePA/fields.py
+++ b/PyFePA/fields.py
@@ -143,6 +143,7 @@ def validate(self, value):
elif self.minlen <= len('{:.2f}'.format(float(value))) <= self.maxlen:
return float(value)
except(ValueError, TypeError):
+ print 'DEBUG- ', value
return False
def __init__(self, **kwargs):
diff --git a/PyFePA/serializer.py b/PyFePA/serializer.py
index cedcf25..64cdf7e 100644
--- a/PyFePA/serializer.py
+++ b/PyFePA/serializer.py
@@ -43,7 +43,7 @@ def validate(invoice_part):
value = invoice_part.__getattribute__(k)
if value:
value = value if isinstance(v,FieldObject) or (isinstance(value,list) and v.multi) else v.tostring(value)
- if not value and v.required and not v.conflict:
+ if not (value or value == 0) and v.required and not v.conflict:
raise ValidateException('Missing required value on {0}.{1}'.format(invoice_part.__class__.__name__, k))
taglist[v.code] = {'tag': k, 'value': value, 'type': v.type, 'depend': v.depend,
'conflict': v.conflict, 'required': v.required}
diff --git a/PyFePA/siamm.py b/PyFePA/siamm.py
index 4abc2fe..a05978a 100644
--- a/PyFePA/siamm.py
+++ b/PyFePA/siamm.py
@@ -109,32 +109,34 @@ def _siam_serialize(value):
validate(value)
- intercettazioni = etree.Element('Intercettazioni')
- (etree.SubElement(intercettazioni, 'ID')).text = str(value['id']) if 'id' in value else '1'
- (etree.SubElement(intercettazioni, 'BENEFICIARIO')).text = unicode(value['beneficiario'].strip('IT'))
- (etree.SubElement(intercettazioni, 'TIPOPAGAMENTO')).text = value['tipopagamento']
- (etree.SubElement(intercettazioni, 'ENTEPAGANTE')).text = value['entepagante']
- (etree.SubElement(intercettazioni, 'NUMEROFATTURA')).text = value['numerofattura']
- (etree.SubElement(intercettazioni, 'DATAEMISSIONEPROVV')).text = \
- "{:%Y-%m-%dT%H:%M:%S}".format(value['dataemissioneprovv']) if 'dataemissioneprovv' in value else ''
- (etree.SubElement(intercettazioni, 'NUMEROMODELLO37')).text = \
- value['numeromodello37'] if 'numeromodello37' in value else None
- (etree.SubElement(intercettazioni, 'REGISTRO')).text = value['registro']
- (etree.SubElement(intercettazioni, 'DATAFATTURA')).text = \
- "{:%Y-%m-%dT%H:%M:%S}".format(value['datafattura'])
- (etree.SubElement(intercettazioni, 'IMPORTOTOTALE')).text = \
- '{:.2f}'.format(float(value['importototale']))
- (etree.SubElement(intercettazioni, 'IMPORTOIVA')).text = \
- '{:.2f}'.format(float(value['importoiva']))
- (etree.SubElement(intercettazioni, 'NR_RG')).text = value['nr_rg'] if 'nr_rg' in value else None
- (etree.SubElement(intercettazioni, 'SEDE')).text = value['sede']
+ intercettazioni = etree.Element('INTERCETTAZIONI')
+ (etree.SubElement(intercettazioni, 'ID')).text = str(value['id']).upper() if 'id' in value else '1'
+ (etree.SubElement(intercettazioni, 'BENEFICIARIO')).text = unicode(value['beneficiario'].strip('IT')).upper()
+ (etree.SubElement(intercettazioni, 'TIPOPAGAMENTO')).text = value['tipopagamento'].upper()
+ (etree.SubElement(intercettazioni, 'ENTEPAGANTE')).text = value['entepagante'].upper()
(etree.SubElement(intercettazioni, 'DATAINIZIOPRESTAZIONE')).text = \
"{:%Y-%m-%dT%H:%M:%S}".format(value['datainizioprestazione'])
(etree.SubElement(intercettazioni, 'DATAFINEPRESTAZIONE')).text = \
"{:%Y-%m-%dT%H:%M:%S}".format(value['datafineprestazione'])
- (etree.SubElement(intercettazioni, 'COGNOMEMAGISTRATO')).text = unicode(value['cognomemagistrato'])
- (etree.SubElement(intercettazioni, 'NOMEMAGISTRATO')).text = unicode(value['nomemagistrato'])
- (etree.SubElement(intercettazioni, 'TIPOINTERCETTAZIONE')).text = value['tipointercettazione']
+ (etree.SubElement(intercettazioni, 'NR_RG')).text = value['nr_rg'] if 'nr_rg' in value else None
+ (etree.SubElement(intercettazioni, 'REGISTRO')).text = value['registro'].upper()
+ (etree.SubElement(intercettazioni, 'SEDE')).text = value['sede'].upper()
+ (etree.SubElement(intercettazioni, 'IMPORTOTOTALE')).text = \
+ '{:.2f}'.format(float(value['importototale']))
+ (etree.SubElement(intercettazioni, 'IMPORTOIVA')).text = \
+ '{:.2f}'.format(float(value['importoiva']))
+ (etree.SubElement(intercettazioni, 'NUMEROFATTURA')).text = value['numerofattura'].upper()
+ (etree.SubElement(intercettazioni, 'DATAFATTURA')).text = \
+ "{:%Y-%m-%dT%H:%M:%S}".format(value['datafattura'])
+ if not value['tipointercettazione'] == 'GPS':
+ (etree.SubElement(intercettazioni, 'NUMEROMODELLO37')).text = \
+ value['numeromodello37'] if 'numeromodello37' in value else None
+ (etree.SubElement(intercettazioni, 'TIPOINTERCETTAZIONE')).text = value['tipointercettazione'].upper()
+ (etree.SubElement(intercettazioni, 'NOMEMAGISTRATO')).text = unicode(value['nomemagistrato']).upper()
+ (etree.SubElement(intercettazioni, 'COGNOMEMAGISTRATO')).text = unicode(value['cognomemagistrato']).upper()
+ (etree.SubElement(intercettazioni, 'DATAEMISSIONEPROVV')).text = \
+ "{:%Y-%m-%dT%H:%M:%S}".format(value['dataemissioneprovv']) if 'dataemissioneprovv' in value \
+ and value['dataemissioneprovv'] != '' else ''
return intercettazioni
diff --git a/PyFePA/test/IT01234567890_11001.xml b/PyFePA/test/IT01234567890_11001.xml
index a353153..c231327 100644
--- a/PyFePA/test/IT01234567890_11001.xml
+++ b/PyFePA/test/IT01234567890_11001.xml
@@ -101,7 +101,7 @@
LA DESCRIZIONE DELLA FORNITURA èàè àù PUO' SUPERARE I CENTO CARATTERI CHE RAPPRESENTAVANO IL PRECEDENTE LIMITE DIMENSIONALE. TALE LIMITE NELLA NUOVA VERSIONE E' STATO PORTATO A MILLE CARATTERI
5.00
Unita
- 1.00
+ 0.00
5.00
22.00
diff --git a/setup.py b/setup.py
index f989cd5..768603a 100644
--- a/setup.py
+++ b/setup.py
@@ -22,7 +22,7 @@
setup(
name = 'PyFePA',
packages = ['PyFePA'],
- version = '1.0.2',
+ version = '1.0.3',
description = 'Python object of italian FatturaPA, serialize, deserialize and verify',
author = 'Luigi Di Naro',
author_email = 'Luigi.DiNaro@ktec.it',