diff --git a/source/helper/util.py b/source/helper/util.py index 5bcc45f..8551d03 100644 --- a/source/helper/util.py +++ b/source/helper/util.py @@ -239,14 +239,15 @@ class DictToCfdi(): type_boveda = self._data['addenda'].get('type', '') type_client = self._data['addenda'].get('type_client', '') data = self._data['addenda'].get('boveda', False) - self._boveda(type_boveda, data) + lotes = self._data['addenda']['lotes'] + self._boveda(type_boveda, data, lotes) if type_client: data = self._data['addenda'].get('cliente', False) partes = self._data['addenda'].get('partes', ()) self._addenda_client(type_client, data, partes) return - def _boveda(self, type_boveda, data): + def _boveda(self, type_boveda, data, lotes): if not data: return @@ -271,6 +272,16 @@ class DictToCfdi(): for k, v in data.items(): node_name = f'{{{XMLNS}}}{k}' ET.SubElement(node, node_name, v) + if lotes: + node_name = f'{{{XMLNS}}}Lotes' + node_lotes = ET.SubElement(node, node_name) + for lote in lotes: + node_name = f'{{{XMLNS}}}Lote' + node_lote = ET.SubElement(node_lotes, node_name) + for k2, v2 in lote.items(): + node_name = f'{{{XMLNS}}}{k2}' + sn = ET.SubElement(node_lote, node_name) + sn.text = v2 elif type_boveda == '02': for k, v in data.items(): node_name = f'{{{XMLNS}}}{k}' @@ -328,6 +339,7 @@ class DataToDict(): '05': '_conceptos', '06': '_impuestos', '10': '_leyendas', + '49': '_addenda_lotes', '50': '_boveda', '51': '_addenda', '52': '_addenda_partes', @@ -338,6 +350,7 @@ class DataToDict(): self._cfdi = {'conceptos': [], 'complementos': {}, 'addenda': {}} self._type_header = '' self._partes = [] + self._lotes = [] self._process_data() @property @@ -358,6 +371,7 @@ class DataToDict(): getattr(self, header)(parts[2:]) self._cfdi['addenda']['partes'] = self._partes + self._cfdi['addenda']['lotes'] = self._lotes return def _comprobante(self, data): @@ -626,6 +640,18 @@ class DataToDict(): self._cfdi['addenda']['cliente'] = data return + def _addenda_lotes(self, lote): + attr = { + 'IVM_InvoiceID': '', + 'POline': lote[0], + 'NoIdentificacion': lote[1], + 'Lote': lote[2], + 'Cantidad': lote[3], + 'Fecha': lote[4], + } + self._lotes.append(attr) + return + def _addenda_partes(self, parte): if self._type_header == '2': attr = {'posicion': parte[0],