diff --git a/l10n_uy_edi/models/l10n_uy_cfe.py b/l10n_uy_edi/models/l10n_uy_cfe.py index 29244535..0cf1a39b 100644 --- a/l10n_uy_edi/models/l10n_uy_cfe.py +++ b/l10n_uy_edi/models/l10n_uy_cfe.py @@ -1430,17 +1430,32 @@ def _l10n_uy_get_cfe_referencia(self): return res def _get_report_params(self): - # En caso de que el contenido de las adendas sea mayor a 799 caracteres, la adenda se imprimira en - # la segunda pagina de forma automatica, caso contrario, el cliente podra elegir el tipo de reporte que quiera - # Si no elige ningun tipo de reporte, se imprimira el default de uruware + """ Modificamos para que al generar el PDF no genere el formato standard sino lo genere tomando en cuenta + lo siguiente: + + 1. En caso que el cliente tenga definido un reporte en los ajustes de sistema, sea porque tenga un reporte + personalizado o preferencia de imprimir algún otro formato, + 2. En caso de que el comprobante tenga adendas con textos muy largos (mayor a 799 caracteres) si imprime + el formato standard va a hacer que salga cortada. en este caso si vemos que algun comprobante cumple + esta condición entonces la adenda se imprimira en una pagina separada (adenda en segunda pagina - + es un formato disponible en uruware) + 3. En caso de que el documento sea un e-ticket o e-factura expo o sus respectivas NC y ND se fijara si + el partner de la factura tiene definido algun lenguaje != español: de ser asi imprime el reporte tanto en + español como en ingles (tambien es un formato disponible en uruware) + """ adenda = self._l10n_uy_get_cfe_adenda().get('Adenda') - if adenda and len(adenda) > 799: - report_params = [['adenda'],['true']] - else: - #En caso de que el cliente eliga el reporte que quiere imprimir - report_params = safe_eval.safe_eval(self.company_id.l10n_uy_report_params or '[]') - - return report_params + report_params = safe_eval.safe_eval(self.company_id.l10n_uy_report_params or "[]") + nombreParametros = report_params[0] if report_params else [] + valoresParametros = report_params[1] if report_params else [] + if adenda and len(adenda.splitlines()) > 6 and 'adenda' not in nombreParametros: + nombreParametros.append('adenda') + valoresParametros.append('true') + if self.l10n_latam_document_type_id.code in ['101', '102', '103', '121', '122', '123'] and \ + self.partner_id.lang and 'es' not in self.partner_id.lang: + nombreParametros.append('reporte') + valoresParametros.append('ingles') + + return nombreParametros, valoresParametros def action_l10n_uy_get_pdf(self): """ Call query webservice to print pdf format of the CFE @@ -1475,11 +1490,8 @@ def action_l10n_uy_get_pdf(self): 'serieCfe': document_number[0], 'numeroCfe': document_number[1], } - report_params = self._get_report_params() - - if report_params: - nombreParametros = report_params[0] - valoresParametros = report_params[1] + nombreParametros, valoresParametros = self._get_report_params() + if nombreParametros and valoresParametros: versionPdf = 'ObtenerPdfConParametros' req_data.update({ 'nombreParametros': nombreParametros, diff --git a/l10n_uy_edi/models/res_company.py b/l10n_uy_edi/models/res_company.py index 6058c619..fb66b0f3 100644 --- a/l10n_uy_edi/models/res_company.py +++ b/l10n_uy_edi/models/res_company.py @@ -156,6 +156,10 @@ def _l10n_uy_ucfe_query(self, method, req_data={}, return_transport=False): res = company._uy_get_client(company.l10n_uy_ucfe_query_url, return_transport=return_transport) client = res[0] if isinstance(res, tuple) else res transport = res[1] if isinstance(res, tuple) else False + if req_data.get('nombreParametros') and req_data.get('valoresParametros'): + ArrayOfstring = client.get_type('{http://schemas.microsoft.com/2003/10/Serialization/Arrays}ArrayOfstring') + req_data['nombreParametros'] = ArrayOfstring(req_data.get('nombreParametros')) + req_data['valoresParametros'] = ArrayOfstring(req_data.get('valoresParametros')) response = client.service[method](**req_data) return (response, transport) if return_transport else response diff --git a/l10n_uy_edi/tests/__init__.py b/l10n_uy_edi/tests/__init__.py index 21a26e52..52502ff1 100644 --- a/l10n_uy_edi/tests/__init__.py +++ b/l10n_uy_edi/tests/__init__.py @@ -1 +1,2 @@ from . import test_check_uy_vat +from . import test_report_params diff --git a/l10n_uy_edi/tests/test_report_params.py b/l10n_uy_edi/tests/test_report_params.py new file mode 100644 index 00000000..82aab913 --- /dev/null +++ b/l10n_uy_edi/tests/test_report_params.py @@ -0,0 +1,78 @@ +from odoo.tests import common + + +class TestL10nReportParams(common.TransactionCase): + + + def setUp(self): + super().setUp() + + lang_es = self.env['res.lang'].search([['code', '=', 'en_AR']]) + lang_en = self.env['res.lang'].search([['code', '=', 'en_US']]) + self.content = """ + Estimated Net Weight: 25.995,00 Kg + Estimated Gross Weight: 26.774,850 Kg + In 1 x 40 reef + BL Nº: TBI + SHIPPER / MANUFACTURER: C.VALE - COOPERATIVA AGROINDUSTRIAL (SIF 3300) + AV. ARIOSVALDO BITENCOURT, 2000 CENTRO 85950000, PALOTINA - BRASIL + MEANS OF TRANSPORTATION: Sea + ORIGIN: Brazil + PORT OF LOADING: Paranagua - Brazil + PORT OF DISCHARGE: Cebu - Philippines + SHIPMENT DATE: September, 2024 + SALE TERMS: CNF (COST AND FREIGHT) Insurance under responsibility of the buyer + TERMS OF PAYMENT: 100% TT Against copy of original documents + """ + adenda = """ + linea 1 + linea 2 + linea 3 + linea 4 + linea 5 + linea 6 + """ + self.partner_en = self.env['res.partner'].create({ + 'name': 'Partner Test Adenda EN', + 'lang': lang_en.code + }) + partner_es = self.env['res.partner'].create({ + 'name': 'Partner Test Adenda ES', + 'lang': lang_es.code + }) + self.move_2 = self.env['account.move'].create({ + 'move_type': 'out_invoice', + 'l10n_latam_document_type_id': self.env.ref('l10n_uy_account.dc_e_ticket').id, + 'partner_id': partner_es.id, + 'narration': adenda, + 'invoice_date': '2024-01-21', + 'date': '2024-01-21', + }) + + def test_reportparams_adenda(self): + """Creamos este test para los formatos de parametros de reporte""" + + #Nos aseguramos que se imprima el reporte en formato estandar + nombreParametros, valoresParametros = self.move_2._get_report_params() + self.assertFalse(nombreParametros) + self.assertFalse(valoresParametros) + + #Agregamos adenda de mas de 6 renglones + self.move_2.narration = self.content + + self.assertEqual(self.move_2._get_report_params(), (['adenda'],['true']), + "El formato de parametros es incorrecto.") + + #Agregamos partner con idioma ingles, adenda y tipo de doc (al cambiar partner se borran los campos) + self.move_2.partner_id = self.partner_en + self.move_2.narration = self.content + self.move_2.l10n_latam_document_type_id = self.env.ref('l10n_uy_account.dc_e_ticket').id + + self.assertEqual(self.move_2._get_report_params(), (['adenda','reporte'], ['true','ingles']), + "El formato de parametros es incorrecto.") + + #Cambiamos el tipo ya que el reporte en ingles no es para e-factura + self.move_2.l10n_latam_document_type_id = self.env.ref('l10n_uy_account.dc_e_inv').id + + self.assertEqual(self.move_2._get_report_params(), (['adenda'], ['true']), + "El formato de parametros es incorrecto.")