diff --git a/l10n_uy_edi/models/l10n_uy_cfe.py b/l10n_uy_edi/models/l10n_uy_cfe.py index 29244535..d81b80bc 100644 --- a/l10n_uy_edi/models/l10n_uy_cfe.py +++ b/l10n_uy_edi/models/l10n_uy_cfe.py @@ -1430,17 +1430,31 @@ 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()) >= 5 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 +1489,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/test_adendas.py b/l10n_uy_edi/tests/test_adendas.py new file mode 100644 index 00000000..9f641af7 --- /dev/null +++ b/l10n_uy_edi/tests/test_adendas.py @@ -0,0 +1,50 @@ +############################################################################## +# For copyright and license notices, see __manifest__.py file in module root +# directory +############################################################################## +from odoo.tests import common +from odoo import fields +from unittest.mock import patch + + +class TestL10nUyCurrencyUpdate(common.TransactionCase): + + # Creamos este test para los formatos de parametros de reporte + + + def setUp(self): + + company = self.company_id + lang = 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 + """ + adenda = self.env['l10n.uy.adenda'].create({ + 'name': 'Adenda Test pruebas', + 'legend_type': 'adenda', + 'company_id': company.id, + 'apply_on': 'account.move', + 'content': content + }) + partner = self.env['res.partner'].create({ + 'name': 'Partner Test Adenda', + 'lang': lang.code + }) + + def reportparams_adenda_test(self): + \ No newline at end of file