Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FIX] l10n_uy_edi: Fix en el manejo de formatos de reporte #245

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mem-adhoc necesitamos un enlace acá? que pasa si no está disponible o cambia?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pablohmontenegro Pablito esto no es un enlace, basicamente consultamos a la api el formato que necesitamos para informar los campos! no va a cambiar

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"""

mem-adhoc marked this conversation as resolved.
Show resolved Hide resolved
mem-adhoc marked this conversation as resolved.
Show resolved Hide resolved
#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.")