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',