diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py index e68a175..f4c2e2b 100644 --- a/source/app/controllers/util.py +++ b/source/app/controllers/util.py @@ -1325,6 +1325,7 @@ class LIBO(object): def pdf(self, path, data, ods=False): options = {'AsTemplate': True, 'Hidden': True} log.debug('Abrir plantilla...') + self._template = self._doc_open(path, options) if self._template is None: return b'' @@ -1471,7 +1472,16 @@ class LIBO(object): return {}, msg data = tuple([r[2:] for r in rows[:count+2]]) - return data, '' + + sheet = doc.Sheets['Deducciones'] + notes = sheet.getAnnotations() + new_titles = {} + for n in notes: + col = n.getPosition().Column - 2 + if data[0][col] == '004': + new_titles[col] = n.getString() + + return data, new_titles, '' def _get_otros_pagos(self, doc, count): rows, msg = self._get_data(doc, 'OtrosPagos') @@ -1535,7 +1545,7 @@ class LIBO(object): doc.close(True) return {}, msg - deducciones, msg = self._get_deducciones(doc, len(nomina)) + deducciones, new_titles, msg = self._get_deducciones(doc, len(nomina)) if msg: doc.close(True) return {}, msg @@ -1561,6 +1571,28 @@ class LIBO(object): return {}, msg doc.close(True) + + rows = len(nomina) + 2 + + if rows != len(percepciones): + msg = 'Cantidad de filas incorrecta en: Percepciones' + return {}, msg + if rows != len(deducciones): + msg = 'Cantidad de filas incorrecta en: Deducciones' + return {}, msg + if rows != len(otros_pagos): + msg = 'Cantidad de filas incorrecta en: Otros Pagos' + return {}, msg + if rows != len(separacion): + msg = 'Cantidad de filas incorrecta en: SeparaciĆ³n' + return {}, msg + if rows != len(horas_extras): + msg = 'Cantidad de filas incorrecta en: Horas Extras' + return {}, msg + if rows != len(incapacidades): + msg = 'Cantidad de filas incorrecta en: Incapacidades' + return {}, msg + data['nomina'] = nomina data['percepciones'] = percepciones data['deducciones'] = deducciones @@ -1568,6 +1600,7 @@ class LIBO(object): data['separacion'] = separacion data['horas_extras'] = horas_extras data['incapacidades'] = incapacidades + data['new_titles'] = new_titles return data, '' @@ -1590,11 +1623,13 @@ class LIBO(object): def to_pdf(data, emisor_rfc, ods=False, pdf_from='1'): rfc = data['emisor']['rfc'] + default = 'plantilla_factura.ods' if DEBUG: rfc = emisor_rfc version = data['comprobante']['version'] if 'nomina' in data and data['nomina']: version = '{}_{}'.format(data['nomina']['version'], version) + default = 'plantilla_nomina.ods' pagos = '' if data.get('pagos', False): @@ -1611,7 +1646,7 @@ def to_pdf(data, emisor_rfc, ods=False, pdf_from='1'): if data['donativo']: donativo = '_donativo' name = '{}_{}{}{}.ods'.format(rfc.lower(), pagos, version, donativo) - path = get_template_ods(name) + path = get_template_ods(name, default) if path: return app.pdf(path, data, ods) diff --git a/source/app/models/main.py b/source/app/models/main.py index 01d0236..fd8e180 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -7638,7 +7638,6 @@ class CfdiNomina(BaseModel): data['fecha_pago'] = util.calc_to_date(row['fecha_pago']) data['fecha_inicial_pago'] = util.calc_to_date(row['fecha_inicial_pago']) data['fecha_final_pago'] = util.calc_to_date(row['fecha_final_pago']) - # ~ data['dias_pagados'] = util.get_days(data['fecha_inicial_pago'], data['fecha_final_pago']) data['dias_pagados'] = days_pay return data, '' @@ -7691,7 +7690,7 @@ class CfdiNomina(BaseModel): return data, totals, '' - def _validate_deducciones(self, headers, row): + def _validate_deducciones(self, headers, row, new_titles): total_retenciones = 0.0 total_otras_deducciones = 0.0 @@ -7717,6 +7716,7 @@ class CfdiNomina(BaseModel): new = { 'tipo_deduccion': td, 'importe': importe, + 'concepto': new_titles.get(i, ''), } data.append(new) @@ -7880,6 +7880,7 @@ class CfdiNomina(BaseModel): separacion = data['separacion'][2:] horas_extras = data['horas_extras'][2:] incapacidades = data['incapacidades'][2:] + new_titles = data['new_titles'] for i, row in enumerate(data['nomina']): row['lugar_expedicion'] = emisor.cp_expedicion or emisor.codigo_postal @@ -7901,7 +7902,7 @@ class CfdiNomina(BaseModel): continue new_deducciones, total_deducciones, msg = \ - self._validate_deducciones(self, hd, deducciones[i]) + self._validate_deducciones(self, hd, deducciones[i], new_titles) if msg: util.log_file('nomina', msg) continue diff --git a/source/templates/plantilla_nomina.ods b/source/templates/plantilla_nomina.ods new file mode 100644 index 0000000..3f344fd Binary files /dev/null and b/source/templates/plantilla_nomina.ods differ