Skip to content

Commit 9a6bda4

Browse files
committed
[FIX] l10n_uy_edi: Fix en el manejo de formatos de reporte
Ticket: 80829
1 parent 32dfe55 commit 9a6bda4

File tree

4 files changed

+99
-15
lines changed

4 files changed

+99
-15
lines changed

l10n_uy_edi/models/l10n_uy_cfe.py

+27-15
Original file line numberDiff line numberDiff line change
@@ -1430,17 +1430,32 @@ def _l10n_uy_get_cfe_referencia(self):
14301430
return res
14311431

14321432
def _get_report_params(self):
1433-
# En caso de que el contenido de las adendas sea mayor a 799 caracteres, la adenda se imprimira en
1434-
# la segunda pagina de forma automatica, caso contrario, el cliente podra elegir el tipo de reporte que quiera
1435-
# Si no elige ningun tipo de reporte, se imprimira el default de uruware
1433+
""" Modificamos para que al generar el PDF no genere el formato standard sino lo genere tomando en cuenta
1434+
lo siguiente:
1435+
1436+
1. En caso que el cliente tenga definido un reporte en los ajustes de sistema, sea porque tenga un reporte
1437+
personalizado o preferencia de imprimir algún otro formato,
1438+
2. En caso de que el comprobante tenga adendas con textos muy largos (mayor a 799 caracteres) si imprime
1439+
el formato standard va a hacer que salga cortada. en este caso si vemos que algun comprobante cumple
1440+
esta condición entonces la adenda se imprimira en una pagina separada (adenda en segunda pagina -
1441+
es un formato disponible en uruware)
1442+
3. En caso de que el documento sea un e-ticket o e-factura expo o sus respectivas NC y ND se fijara si
1443+
el partner de la factura tiene definido algun lenguaje != español: de ser asi imprime el reporte
1444+
tanto en español como en ingles (tambien es un formato disponible en uruware)
1445+
"""
14361446
adenda = self._l10n_uy_get_cfe_adenda().get('Adenda')
1437-
if adenda and len(adenda) > 799:
1438-
report_params = [['adenda'],['true']]
1439-
else:
1440-
#En caso de que el cliente eliga el reporte que quiere imprimir
1441-
report_params = safe_eval.safe_eval(self.company_id.l10n_uy_report_params or '[]')
1442-
1443-
return report_params
1447+
report_params = safe_eval.safe_eval(self.company_id.l10n_uy_report_params or "[]")
1448+
nombreParametros = report_params[0] if report_params else []
1449+
valoresParametros = report_params[1] if report_params else []
1450+
if adenda and len(adenda.splitlines()) >= 6 and 'adenda' not in nombreParametros:
1451+
nombreParametros.append('adenda')
1452+
valoresParametros.append('true')
1453+
if self.l10n_latam_document_type_id.code in ['101', '102', '103', '121', '122', '123'] and \
1454+
self.partner_id.lang and 'es' not in self.partner_id.lang:
1455+
nombreParametros.append('reporte')
1456+
valoresParametros.append('ingles')
1457+
1458+
return nombreParametros, valoresParametros
14441459

14451460
def action_l10n_uy_get_pdf(self):
14461461
""" Call query webservice to print pdf format of the CFE
@@ -1475,11 +1490,8 @@ def action_l10n_uy_get_pdf(self):
14751490
'serieCfe': document_number[0],
14761491
'numeroCfe': document_number[1],
14771492
}
1478-
report_params = self._get_report_params()
1479-
1480-
if report_params:
1481-
nombreParametros = report_params[0]
1482-
valoresParametros = report_params[1]
1493+
nombreParametros, valoresParametros = self._get_report_params()
1494+
if nombreParametros and valoresParametros:
14831495
versionPdf = 'ObtenerPdfConParametros'
14841496
req_data.update({
14851497
'nombreParametros': nombreParametros,

l10n_uy_edi/models/res_company.py

+4
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ def _l10n_uy_ucfe_query(self, method, req_data={}, return_transport=False):
156156
res = company._uy_get_client(company.l10n_uy_ucfe_query_url, return_transport=return_transport)
157157
client = res[0] if isinstance(res, tuple) else res
158158
transport = res[1] if isinstance(res, tuple) else False
159+
if req_data.get('nombreParametros') and req_data.get('valoresParametros'):
160+
ArrayOfstring = client.get_type('{http://schemas.microsoft.com/2003/10/Serialization/Arrays}ArrayOfstring')
161+
req_data['nombreParametros'] = ArrayOfstring(req_data.get('nombreParametros'))
162+
req_data['valoresParametros'] = ArrayOfstring(req_data.get('valoresParametros'))
159163
response = client.service[method](**req_data)
160164
return (response, transport) if return_transport else response
161165

l10n_uy_edi/tests/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from . import test_check_uy_vat
2+
from . import test_report_params
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
from odoo.tests import common
2+
3+
4+
class TestL10nReportParams(common.TransactionCase):
5+
6+
# Creamos este test para los formatos de parametros de reporte
7+
8+
def setUp(self):
9+
10+
company_uy = self.env.ref('l10n_uy_account.company_uy')
11+
lang_es = self.env['res.lang'].search([['code', '=', 'en_AR']])
12+
lang_en = self.env['res.lang'].search([['code', '=', 'en_US']])
13+
content = """
14+
Estimated Net Weight: 25.995,00 Kg
15+
Estimated Gross Weight: 26.774,850 Kg
16+
In 1 x 40 reef
17+
BL Nº: TBI
18+
SHIPPER / MANUFACTURER: C.VALE - COOPERATIVA AGROINDUSTRIAL (SIF 3300)
19+
AV. ARIOSVALDO BITENCOURT, 2000 CENTRO 85950000, PALOTINA - BRASIL
20+
MEANS OF TRANSPORTATION: Sea
21+
ORIGIN: Brazil
22+
PORT OF LOADING: Paranagua - Brazil
23+
PORT OF DISCHARGE: Cebu - Philippines
24+
SHIPMENT DATE: September, 2024
25+
SALE TERMS: CNF (COST AND FREIGHT) Insurance under responsibility of the buyer
26+
TERMS OF PAYMENT: 100% TT Against copy of original documents
27+
"""
28+
adenda = self.env['l10n.uy.adenda'].create({
29+
'name': 'Adenda Test pruebas',
30+
'legend_type': 'adenda',
31+
'company_id': company_uy.id,
32+
'apply_on': 'account.move',
33+
'content': content
34+
})
35+
partner_en = self.env['res.partner'].create({
36+
'name': 'Partner Test Adenda EN',
37+
'lang': lang_en.code
38+
})
39+
partner_es = self.env['res.partner'].create({
40+
'name': 'Partner Test Adenda ES',
41+
'lang': lang_es.code
42+
})
43+
move = self.env['account.move'].create({
44+
'move_type': 'out_invoice',
45+
'l10n_latam_document_type_id': self.env.ref('l10n_uy_account.dc_e_ticket').id,
46+
'partner_id': partner_en.id,
47+
'invoice_date': '2024-01-21',
48+
'date': '2024-01-21',
49+
})
50+
move_2 = self.env['account.move'].create({
51+
'move_type': 'out_invoice',
52+
'l10n_latam_document_type_id': self.env.ref('l10n_uy_account.dc_e_ticket').id,
53+
'partner_id': partner_es.id,
54+
'invoice_date': '2024-01-21',
55+
'date': '2024-01-21',
56+
})
57+
58+
def test_reportparams_adenda_test(self):
59+
60+
nombreParametros, valoresParametros = self.move_2._get_report_params()
61+
self.assertEqual(nombreParametros, ['adenda'])
62+
self.assertEqual(valoresParametros, ['true'])
63+
64+
nombreParametros, valoresParametros = self.move._get_report_params()
65+
66+
self.assertEqual(nombreParametros, ['adenda','reporte'])
67+
self.assertEqual(valoresParametros, ['true','ingles'])

0 commit comments

Comments
 (0)