Skip to content

Commit

Permalink
[FIX] l10n_uy_edi: Fix en el manejo de formatos de reporte
Browse files Browse the repository at this point in the history
closes #245

Ticket: 80829
Signed-off-by: Katherine Zaoral <[email protected]>
  • Loading branch information
mem-adhoc committed Oct 14, 2024
1 parent 76406fd commit 61e642e
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 15 deletions.
42 changes: 27 additions & 15 deletions l10n_uy_edi/models/l10n_uy_cfe.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down
4 changes: 4 additions & 0 deletions l10n_uy_edi/models/res_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
1 change: 1 addition & 0 deletions l10n_uy_edi/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import test_check_uy_vat
from . import test_report_params
78 changes: 78 additions & 0 deletions l10n_uy_edi/tests/test_report_params.py
Original file line number Diff line number Diff line change
@@ -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.")

0 comments on commit 61e642e

Please sign in to comment.