diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..ff5300ef --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.languageServer": "None" +} \ No newline at end of file diff --git a/l10n_uy_edi/models/l10n_uy_cfe.py b/l10n_uy_edi/models/l10n_uy_cfe.py index 29244535..e0286e62 100644 --- a/l10n_uy_edi/models/l10n_uy_cfe.py +++ b/l10n_uy_edi/models/l10n_uy_cfe.py @@ -1430,17 +1430,33 @@ 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 +1491,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..49135bf4 --- /dev/null +++ b/l10n_uy_edi/tests/test_report_params.py @@ -0,0 +1,62 @@ +from odoo.tests import common + + +class TestL10nReportParams(common.TransactionCase): + + # Creamos este test para los formatos de parametros de reporte + + 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']]) + 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 + """ + 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 = 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_en.id, + 'narration': content, + 'invoice_date': '2024-01-21', + 'date': '2024-01-21', + }) + 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': content, + 'invoice_date': '2024-01-21', + 'date': '2024-01-21', + }) + + def test_reportparams_adenda(self): + + nombreParametros, valoresParametros = self.move_2._get_report_params() + self.assertEqual(nombreParametros, ['adenda'], "The format parameters are incorrect.") + self.assertEqual(valoresParametros, ['true'], "The format parameters are incorrect.") + + nombreParametros, valoresParametros = self.move._get_report_params() + + self.assertEqual(nombreParametros, ['adenda','reporte'], "The format parameters are incorrect.") + self.assertEqual(valoresParametros, ['true','ingles'], "The format parameters are incorrect.")