From 650d6d8b4568b1c4976bc346a816e66e9db9b305 Mon Sep 17 00:00:00 2001 From: Maximiliano Mezzavilla Date: Wed, 2 Oct 2024 08:51:58 -0300 Subject: [PATCH] [FIX] l10n_uy_edi: Fix en el manejo de formatos de reporte Ticket: 80829 --- l10n_uy_edi/models/l10n_uy_cfe.py | 40 +++++++++++++++++++------------ l10n_uy_edi/models/res_company.py | 4 ++++ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/l10n_uy_edi/models/l10n_uy_cfe.py b/l10n_uy_edi/models/l10n_uy_cfe.py index 29244535..215f0d6f 100644 --- a/l10n_uy_edi/models/l10n_uy_cfe.py +++ b/l10n_uy_edi/models/l10n_uy_cfe.py @@ -1430,17 +1430,30 @@ 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) > 799 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 +1488,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..9c4710cf 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 + ArrayOfstring = client.get_type('{http://schemas.microsoft.com/2003/10/Serialization/Arrays}ArrayOfstring') + if req_data.get('nombreParametros') and req_data.get('valoresParametros'): + 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