- Implementar mejora al mostrar fecha de autorización en los RIDEs
PR principal: https://github.com/TRESCLOUD/ecuadorian-localization18/pull/341
Tarea: 9136
Ticket: https://www.trescloud.com/web#id=40052&cids=1&menu_id=1898&action=2734&model=helpdesk.ticket&view_type=form
- Se modifica método
get_paperformatpara agregar el formatopaperformat_10n_ec_no_margincuando el modelo del reporte es account.move, con esto evitamos agregar margen innecesario en la parte superior del reporte cuando se imprime desde Ventas.
- Se corrige el método que valida que las ventas no superen el monto establecido de $50 para el consumidor final, la validación no funcionaba ya que matenía la sintaxis antigua para acceder a objetos
- Ticket: 39809
- Dado que el módulo OCA/bank-payment/account_payment_mode configura una lista de métodos de pagos, en los métodos de _default_outbound_payment_methods y _default_inbound_payment_methods. Mejoramos para que siempre filtrar el método de cheques de clientes, y forzar a que solo se configure manualmente para evitar validaciones
Ticket #39677
Ticket: https://www.trescloud.com/web#id=38554&cids=1&model=helpdesk.ticket&view_type=form
-
Cuando se actualiza el costo del producto por la vista formulario, se crea un stock valuation layer redondeado por la moneda de la compañia. Con este PR evitamos que se redondee por la moneda y lo forzamos a que lo haga con la precision del producto configurada.
-
Se agrega filtro de compañia al producto. Corrige bug de instnacia multicompany genera el kardex sin elegir ningun producto, provoca error de permisos de usuario.
-
En costo transaccion: Se usa el campo 'value' debido a que en el modulo trescloud_stock_account_fixes, existen metodos
(_prepare_in_svl_vals, _prepare_out_svl_vals)que fuerzan el redondeo hacia la precision del producto y no de la moneda, en las entradas y salidas. Pero en las salidas(_prepare_out_svl_vals), dicha modificacion se realizó en diciembre 2025, por ende habrá diferencias comparando los SVL de los meses anteriores de odoo vs el kardex excel si no se usa el 'value'. Una migracion no es viable por tratarse de valoraciones ya validadas y es mejor obtener elvaluecomo se hace cuando se crean valoraciones desde la liquidacion de importación.
Nota: El punto 1 permite corregir manualmente este escenario que se encontró en un cliente donde Odoo realiza mal la multiplicacion del costo unitario por pequeñas décimas.
Caso inmeq:
ticket:
- Usar campo Value en columna costo transaccion
https://www.trescloud.com/web#id=38738&menu_id=1898&cids=1&action=2420&model=helpdesk.ticket&view_type=form - Bug Filtro de compañia en consulta de productos
https://www.trescloud.com/web#id=39648&menu_id=1898&cids=1&action=2420&model=helpdesk.ticket&view_type=form - Usar campo Value en columna costo transaccion y actualiza costo de producto manual para corregir error Odoo
https://www.trescloud.com/web#id=39261&menu_id=1898&cids=1&action=2420&model=helpdesk.ticket&view_type=form
Forward ports from 16.0
Task:
https://www.trescloud.com/web/#id=8194&menu_id=955&cids=1&action=459&active_id=1759&model=project.task&view_type=form
Commits:
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/c46f9054aced0c7c563355631eb3bf7c764c95a3
[IMP][CL] trescloud_account_customer_checks_management: change default bank comision value
Debido a que el método _l10n_ec_get_referenced_reimbursement_invoice_ids solo admite un registro, iteramos para adjuntar las facturas de reembolsos confirmadas
Ticket: 40207
Ticket: https://www.trescloud.com/web#id=40010&menu_id=1907&cids=1&action=2420&model=helpdesk.ticket&view_type=form
- Se elimina el actual pdf de una factura luego de autorizarla para provocar que se genere un nuevo PDF que tenga el estado de autorización actualizado y se envíe al cliente sin novadades.
- El problema que se trata de resolver es que al generar el PDF de la factura antes de autorizarla (ya sea enviando por mail al cliente) se guarda este PDF y al mandar a autorizar se usa el mismo PDF anterior (con información de autorización desactualizada).
Forward port v16 -> v18
Commits:
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/205a32d81c8f0765fc55512f6594048cd70803de
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/e0c9bc4eac3c5c242a199d844f6c344498d33cfe
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/f1fa6baa6e2d48ea8eccbf5dda65a134e09a4826
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/e6232419e0dba9c0286aaa456dc6c4246a7e3029
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/179c07e4d130016fc428b73d8ff1f00dcca61ec7
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/f904f1c528b138a98f4e74f8debbbc2232e38e90
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/a55e7556cb454f8c9ba90ad13df7c7e1f35e6b75
Ticket: https://www.trescloud.com/web#id=39889&cids=1&menu_id=1898&action=2420&model=helpdesk.ticket&view_type=form
Validar si hay valores en las líneas de código auxiliar para enviar en el xml de facturas y notas de crédito
Ticket #39828
Forward ports from 16.0
Task:
https://www.trescloud.com/web/#id=8194&menu_id=955&cids=1&action=459&active_id=1759&model=project.task&view_type=form
Commits:
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/19ae8ce789129a35002e348dabd796fc7d4aa815
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/0c76613518a93b9434dc913fdd92fd328dd7ce99
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/386d1531687f2c7969d5461bf5cd38df42887abb
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/7e8d836baa66d609440d6809bd70a7c71669a3ab
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/4d1bb1b572833c8b4dc9c8bffa9fd5cf79007a1c
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/afea100c9b4eef60b4a698f4a7466fad05fc3c96
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/68413ed5c8d493c752379569592cf16e28301c64
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/2a7ebaa7677ad5c32dbafa3ac86beb1ebed421a1
Forward ports from 16.0
Task: https://www.trescloud.com/web#id=8194&cids=1&menu_id=955&action=459&active_id=1759&model=project.task&view_type=form
Referenced commits:
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/e7940c38198348209cc97fd28358a8fb93477580
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/14ba6d19b72186b7900630b8259c5dbf15ec593d
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/f504cefb410a14525a3481c647441b4be6ce4da6
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/7686f77924e7364c931ad6fe90b57041bfdd361b
https://github.com/TRESCLOUD/ecuadorian-localization16/commit/20f381f9d554bcf512acc2e090cbb74d410b198f
Se crea una migracion para limpiar registros de la tabla 'l10n_ec.hr.employee.expenses' provenientes de v16 o anteriores.
Inicialmente en la migracion de 16 a 18 solo se cambio el nombre de la tabla 'hr_employee_information', -> 'l10n_ec_hr_employee_expenses' sin tomar en cuenta que entre versiones ya cambia el concepto de los campos que se llaman igual Ref Linea migracion
Cambio de lógica de la tabla 'l10n_ec.hr.employee.expenses' en v18:
- v16: Se usaba para almacenar el valor final y exacto del reporte RDEP.
- v18: Se utiliza exclusivamente para 'Saldos Iniciales' (ej. acumulados de meses previos al inicio en Odoo).
El RDEP ahora se genera sumando el cálculo automático del sistema más estos saldos iniciales, en lugar de tomar el valor absoluto de la tabla.
Campos a limpiar: thirteenth_salary, fourteenth_salary, reserve_fund
ticket: https://www.trescloud.com/web#id=39971&cids=1&menu_id=955&model=helpdesk.ticket&view_type=form
- Cuando se descarga el RDEP y el empleado no tiene el campo legal_name, se genera un error. Se añade para que se envie el nombre del empleado y además agregamos advertencias tanto en el RDEP como en el tablero
Ticket: 39911
- Anteriormente se cálculaba en base a una lista de códigos de reglas de ingresos actuales en el sistema, esto provocaba un incorrecto cálculo cuando tenenemos el escenario de que una regla cambio de un código a otro, entonces en la nómina el código antiguo permanecia y por ende al buscar con los códigos actuales no se consideraba en el cálculo
- Mejoramos para filtrar y cálcular directamente de las líneas
- Anteriormente para calcular las variaciones solo excluiamos directamente la regla de salario nóminal, con esta propuesta de cambio creamos un método para que se pueda extender la lista de reglas a excluir en personalizaciones
Ticket: 39274
Odoo tiene un constraint (técnico: check_monthly_amount) que valida que los montos a ingresar en los adjuntos salaraiales sean mayores a cero. En la migración se rompe porque trata de crear adjuntos salariales desde los ingresos y gastos adicionales de los contratos, donde el monto es cero. Mejoramos la busqueda de los ingresos y egresos para tomar solo los que tienen un monto mayor a cero y notificamos al cliente que debe revisar los montos de los egresos o ingresos en los contratos o crearlos a mano en la nueva versión.
Error a corregir:
2026-01-15 16:41:22,746 25330 INFO i001470_18 OpenUpgrade: Executing method _create_salary_attachment
2026-01-15 16:41:22,747 25330 DEBUG i001470_18 OpenUpgrade: 137 rows affected after 0:00:00.000505 running
SELECT contract_id, input_type_id, amount FROM hr_additional_income_expense -- tabla deprecada de ingresos y gastos adicionales
2026-01-15 16:41:22,753 25330 ERROR i001470_18 odoo.sql_db: bad query: b'INSERT INTO "hr_salary_attachment" ("company_id", "create_date", "create_uid", "date_end", "date_start", "description", "is_refund", "monthly_amount", "no_end_date", "other_input_type_id", "state", "write_date", "write_uid") VALUES (1, \'2026-01-15 16:41:10.197609\', 1, NULL, \'2026-01-01\', \'Pr\xc3\xa9stamo Quirografario a Reembolsar al IESS\', false, \'0.00\', true, 30, \'open\', \'2026-01-15 16:41:10.197609\', 1) RETURNING "id"'
ERROR: new row for relation "hr_salary_attachment" violates check constraint "hr_salary_attachment_check_monthly_amount"
DETAIL: Failing row contains (2, 1, Préstamo Quirografario a Reembolsar al IESS, 0.00, null, null, null, 2026-01-01, null, open, null, 1, 2026-01-15 16:41:10.197609, 1, 2026-01-15 16:41:10.197609, t, f, 30).
2026-01-15 16:41:22,753 25330 ERROR i001470_18 OpenUpgrade: l10n_ec_hr_payroll: error in migration script /opt/odoo/repositorio_master/ecuadorian-hr18/l10n_ec_hr_payroll/migrations/18.0.0.2/post-migration.py: new row for relation "hr_salary_attachment" violates check constraint "hr_salary_attachment_check_monthly_amount"
DETAIL: Failing row contains (2, 1, Préstamo Quirografario a Reembolsar al IESS, 0.00, null, null, null, 2026-01-01, null, open, null, 1, 2026-01-15 16:41:10.197609, 1, 2026-01-15 16:41:10.197609, t, f, 30).
2026-01-15 16:41:22,753 25330 ERROR i001470_18 OpenUpgrade: new row for relation "hr_salary_attachment" violates check constraint "hr_salary_attachment_check_monthly_amount"
DETAIL: Failing row contains (2, 1, Préstamo Quirografario a Reembolsar al IESS, 0.00, null, null, null, 2026-01-01, null, open, null, 1, 2026-01-15 16:41:10.197609, 1, 2026-01-15 16:41:10.197609, t, f, 30).
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/openupgradelib/openupgrade.py", line 2406, in wrapped_function
func(
File "/opt/odoo/repositorio_master/ecuadorian-hr18/l10n_ec_hr_payroll/migrations/18.0.0.2/post-migration.py", line 534, in migrate
_create_salary_attachment(env)
File "/usr/local/lib/python3.12/site-packages/openupgradelib/openupgrade.py", line 2331, in wrapped_function
return func(args, *kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/ecuadorian-hr18/l10n_ec_hr_payroll/migrations/18.0.0.2/post-migration.py", line 365, in _create_salary_attachment
new_attachment = HrSalaryAttachment.create(attachment_vals)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in create
File "/opt/odoo/repositorio_master/odoo/odoo/api.py", line 497, in _model_create_multi
return create(self, [arg])
^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/addons/mail/models/mail_thread.py", line 293, in create
threads = super(MailThread, self).create(vals_list)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in create
File "/opt/odoo/repositorio_master/odoo/odoo/api.py", line 498, in _model_create_multi
return create(self, arg)
^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/models.py", line 5034, in create
records = self._create(data_list)
^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/models.py", line 5218, in _create
cr.execute(SQL(
File "/opt/odoo/repositorio_master/odoo/odoo/sql_db.py", line 364, in execute
res = self._obj.execute(query, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.CheckViolation: new row for relation "hr_salary_attachment" violates check constraint "hr_salary_attachment_check_monthly_amount"
DETAIL: Failing row contains (2, 1, Préstamo Quirografario a Reembolsar al IESS, 0.00, null, null, null, 2026-01-01, null, open, null, 1, 2026-01-15 16:41:10.197609, 1, 2026-01-15 16:41:10.197609, t, f, 30).
2026-01-15 16:41:22,783 25330 WARNING i001470_18 odoo.modules.loading: Transient module states were reset
2026-01-15 16:41:22,786 25330 ERROR i001470_18 odoo.modules.registry: Failed to load registry
2026-01-15 16:41:22,786 25330 CRITICAL i001470_18 odoo.service.server: Failed to initialize database i001470_18.
Traceback (most recent call last):
File "/opt/odoo/repositorio_master/odoo/odoo/service/server.py", line 1366, in preload_registries
registry = Registry.new(dbname, update_module=update_module)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/decorator.py", line 232, in fun
return caller(func, (extras + args), kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/tools/func.py", line 97, in locked
return func(inst, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/modules/registry.py", line 129, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/opt/odoo/repositorio_master/odoo/odoo/modules/loading.py", line 485, in load_modules
processed_modules += load_marked_modules(env, graph,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/modules/loading.py", line 365, in load_marked_modules
loaded, processed = load_module_graph(
^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/modules/loading.py", line 233, in load_module_graph
migrations.migrate_module(package, 'post')
File "/opt/odoo/repositorio_master/OpenUpgrade/openupgrade_framework/odoo_patch/odoo/modules/migration.py", line 18, in migrate_module
MigrationManager.migrate_module._original_method(self, pkg, stage)
File "/opt/odoo/repositorio_master/odoo/odoo/modules/migration.py", line 222, in migrate_module
exec_script(self.cr, installed_version, pyfile, pkg.name, stage, stageformat[stage] % version)
File "/opt/odoo/repositorio_master/odoo/odoo/modules/migration.py", line 259, in exec_script
mod.migrate(cr, installed_version)
File "/usr/local/lib/python3.12/site-packages/openupgradelib/openupgrade.py", line 2406, in wrapped_function
func(
File "/opt/odoo/repositorio_master/ecuadorian-hr18/l10n_ec_hr_payroll/migrations/18.0.0.2/post-migration.py", line 534, in migrate
_create_salary_attachment(env)
File "/usr/local/lib/python3.12/site-packages/openupgradelib/openupgrade.py", line 2331, in wrapped_function
return func(*args, kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/ecuadorian-hr18/l10n_ec_hr_payroll/migrations/18.0.0.2/post-migration.py", line 365, in _create_salary_attachment
new_attachment = HrSalaryAttachment.create(attachment_vals)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in create
File "/opt/odoo/repositorio_master/odoo/odoo/api.py", line 497, in _model_create_multi
return create(self, [arg])
^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/addons/mail/models/mail_thread.py", line 293, in create
threads = super(MailThread, self).create(vals_list)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in create
File "/opt/odoo/repositorio_master/odoo/odoo/api.py", line 498, in _model_create_multi
return create(self, arg)
^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/models.py", line 5034, in create
records = self._create(data_list)
^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/repositorio_master/odoo/odoo/models.py", line 5218, in _create
cr.execute(SQL(
File "/opt/odoo/repositorio_master/odoo/odoo/sql_db.py", line 364, in execute
res = self._obj.execute(query, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.CheckViolation: new row for relation "hr_salary_attachment" violates check constraint "hr_salary_attachment_check_monthly_amount"
DETAIL: Failing row contains (2, 1, Préstamo Quirografario a Reembolsar al IESS, 0.00, null, null, null, 2026-01-01, null, open, null, 1, 2026-01-15 16:41:10.197609, 1, 2026-01-15 16:41:10.197609, t, f, 30).
2026-01-15 16:41:22,789 25330 INFO i001470_18 odoo.service.server: Initiating shutdown
- Escenario en que no configuraron la fecha de vecimiento en los apuntes contables para nóminas de prestamos
Ticket: RVINGENIERIA: Error al migrar los prestamos. (#39694)
Mejoras Enero 2026