Skip to content

Commit

Permalink
Add serializer to parse invoices into marshmallow
Browse files Browse the repository at this point in the history
  • Loading branch information
gdalmau committed Sep 19, 2017
1 parent 86e376f commit e664c24
Showing 1 changed file with 118 additions and 1 deletion.
119 changes: 118 additions & 1 deletion sii/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from decimal import Decimal, localcontext

from sii import __SII_VERSION__
from sii.models import invoices_record
from sii.models import invoices_record, invoices_deregister
from sii.utils import COUNTRY_CODES

SIGN = {'N': 1, 'R': 1, 'A': -1, 'B': -1, 'RA': 1, 'C': 1, 'G': 1} # 'BRA': -1
Expand Down Expand Up @@ -598,3 +598,120 @@ def generate_object(self):
)

return res.data


def get_baja_factura_recibida_dict(invoice):

cabecera = get_header(invoice)
cabecera.pop('TipoComunicacion')

obj = {
'BajaLRFacturasRecibidas': {
'Cabecera': cabecera,
'RegistroLRBajaRecibidas': {
'PeriodoImpositivo': {
'Ejercicio': invoice.period_id.name[3:7],
'Periodo': invoice.period_id.name[0:2]
},
'IDFactura': {
'IDEmisorFactura': {
'NombreRazon': invoice.partner_id.name,
'NIF': invoice.partner_id.vat
},
'NumSerieFacturaEmisor': invoice.origin,
'FechaExpedicionFacturaEmisor': invoice.origin_date_invoice
}
}
}
}

return obj


def get_baja_factura_emitida_dict(invoice):

cabecera = get_header(invoice)
cabecera.pop('TipoComunicacion')

obj = {
'BajaLRFacturasEmitidas': {
'Cabecera': cabecera,
'RegistroLRBajaExpedidas': {
'PeriodoImpositivo': {
'Ejercicio': invoice.period_id.name[3:7],
'Periodo': invoice.period_id.name[0:2]
},
'IDFactura': {
'IDEmisorFactura': {
'NIF': invoice.company_id.partner_id.vat
},
'NumSerieFacturaEmisor': invoice.number,
'FechaExpedicionFacturaEmisor': invoice.date_invoice
}
}
}
}

return obj


class SIIDeregister(SII):

def __init__(self, invoice):
super(SIIDeregister, self).__init__(invoice)
if invoice.type.startswith('in'):
self.invoice_deregister_model = (
invoices_deregister.BajaFacturasRecibidas()
)
self.invoice_deregister_dict = get_baja_factura_recibida_dict(
self.invoice
)
elif invoice.type.startswith('out'):
self.invoice_deregister_model = (
invoices_deregister.BajaFacturasEmitidas()
)
self.invoice_deregister_dict = get_baja_factura_emitida_dict(
self.invoice
)
else:
raise AttributeError(
'Valor desconocido en el tipo de factura: {}'.format(
invoice.type
)
)

def validate_deregister_invoice(self):

res = {}

errors = self.invoice_deregister_model.validate(
self.invoice_deregister_dict
)

res['successful'] = False if errors else True
res['object_validated'] = self.invoice_deregister_dict
if errors:
errors_list = self.get_validation_errors_list(errors)
res['errors'] = errors_list

return res

def generate_deregister_object(self):

validation_values = self.validate_deregister_invoice()
if not validation_values['successful']:
raise Exception(
'Errors were found while trying to validate the data:',
validation_values['errors']
)

res = self.invoice_deregister_model.dump(
self.invoice_deregister_dict
)
if res.errors:
raise Exception(
'Errors were found while trying to generate the dump:',
res.errors
)

return res.data

0 comments on commit e664c24

Please sign in to comment.