Tuesday, December 2, 2025
12 changes · master
Resolved issues and error corrections
This update adjusts the Thailand tax reporting tests to reflect a recent change in how withholding taxes are calculated. Previously, taxes were based on invoices; now, they're determined at the time of payment. This ensures accurate tax reporting for Thai businesses using Odoo Enterprise.
Original PR description
Adapt Thailand tax report tests to handle withholding taxes that are now recognized at payment time instead of invoice time. related-https://github.com/odoo/odoo/pull/237502 task-5360234
This update fixes a technical issue related to the Swiss payroll module (l10n_ch_hr_payroll) by adding missing input types. These input types are crucial for accurately calculating payroll according to Swiss tax and social security regulations. This ensures the system correctly handles Swiss payroll reporting.
Original PR description
Forward-Port-Of: odoo/enterprise#100992
This update resolves an issue preventing the correct transmission of payroll data for Swiss businesses. The fix ensures that necessary fields are accessible within the HR payroll module, allowing for accurate reporting and compliance with local regulations. This improves the reliability of the system for our Swiss clients.
Original PR description
Forward-Port-Of: odoo/enterprise#100939
This update resolves an issue where resetting work entries from a payslip would completely remove the entry. The fix ensures the correct employee ID is used, preventing this behavior and maintaining accurate work entry tracking. This improves the reliability of payroll processing.
Original PR description
Steps to reproduce: - Install the hr_payroll module. - Open the form view of an employee with a running contract and click on the Payslip smart button. - Create or open an existing payslip, then open the Work Entries using the smart button. - Select any work entry and click Reset Selected Work Entries. Issue: Clicking Reset Selected Work Entries removes the work entry for that day and leaves it empty. Cause: The issue occurs because an incorrect active_id is passed in the context. It works correctly when coming from the employee form (where active_id is the employee ID), but fails when accessed from the payslip (where active_id is the payslip ID). --- Fix: PR https://github.com/odoo/odoo/pull/235211 updates the context to ensure the correct employee ID is passed. - This commit contains test for the reset work entry problem Task-5095098 Forward-Port-Of: odoo/enterprise#100719
This update resolves an issue where the point-of-sale system would crash when a disconnected payment terminal was detected. The fix ensures smoother operation and prevents errors related to payment terminal connectivity, improving the overall reliability of the POS system. This was tracked as task 3252747.
Original PR description
Before, when we were trying to use a payment terminal which is disconnected in pos_iot an error was triggered: ``` TypeError: Cannot read properties of undefined (reading 'add') at…
Before, when we were trying to use a payment terminal which is disconnected in pos_iot an error was triggered:
```
TypeError: Cannot read properties of undefined (reading 'add')
at IoTLongpolling._doWarnFail (http://10.30.64.95:8069/web/assets/debug/point_of_sale.assets.js:46298:20) (/pos_iot/static/src/js/iot_longpolling.js:20)
at _doWarnFail (patch pos_iot.IotLongpolling) (http://10.30.64.95:8069/web/assets/debug/point_of_sale.pos_assets_backend.js:17846:44) (patch pos_iot.IotLongpolling http://10.30.64.95:8069/web/assets/debug/point_of_sale.pos_assets_backend.js:17846)
at Object.<anonymous> (http://10.30.64.95:8069/web/assets/debug/point_of_sale.pos_assets_backend.js:122534:26) (/iot/static/src/iot_longpolling.js:216)
at fire (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:26170:31) (/web/static/lib/jquery/jquery.js:3564)
at Object.fireWith [as rejectWith] (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:26300:7) (/web/static/lib/jquery/jquery.js:3694)
at process (http://10.30.64.95:8069/web/assets/debug/web.assets_common.js:26524:22) (/web/static/lib/jquery/jquery.js:3918)
```
This PR solves the issue.
[Task 3252747](https://www.odoo.com/web#id=3252747&cids=1&menu_id=4720&action=333&active_id=1737&model=project.task&view_type=form)This update resolves an error that occurred when Worldline terminals connected to IoT boxes experienced disconnection issues during transaction processing. The team has consolidated Worldline drivers and added refund functionality, streamlining maintenance and improving the reliability of transactions with these terminals. This ensures smoother operations for users utilizing Worldline payment systems.
Original PR description
Before, when trying to process a transaction with a terminal connected to the IoT box which is disconnected was triggering an error This PR fixes that error [Task 3252747](https://www.odoo.com/web#id=3252747&cids=1&menu_id=4720&action=333&active_id=1737&model=project.task&view_type=form)
This update consolidates multiple wage fields into a single 'wage on payslip' field, streamlining payroll calculations and ensuring accurate paychecks. It also corrects a previous issue where the mobility budget wasn't correctly applied to 13th month payments, aligning with legal requirements.
Original PR description
State of the art ============ Currently we have wage, wage on signature and wage with sacrifice. Wage is the "classic one" Wage with sacrifice is the updated version of wage when you have group…
State of the art ============ Currently we have wage, wage on signature and wage with sacrifice. Wage is the "classic one" Wage with sacrifice is the updated version of wage when you have group insurance or extra leaves. Wage with mobility budget is the wage when user select the mobility budget (not seen in front end) Wage on signature is set when you do the salary configurator flow If I don't have the salary configurator, everything is on Wage. And that amount is used in the payslip computation. If I have the salary configurator, the Wage I signed for is on Wage on Signature and it will be used in the payslips. Specifications =========== Merge Wage with sacrifice, Wage with mobility budget and Wage on signature into a single field -> wage on payslip as Wage on signature depends on both Wage with mobility budget and Wage with sacrifice and Wage with mobility budget depends on Wage with sacrifice At the end, the only wage we want is the final one, computed based on holidays, if any, and based on mobility budget if any. The wage on signature was just a "backup" to ensure that what we signed is used in the payslip. In the view, only the wage on payslip will be displayed, and there is no need to make conditional display between the different old wage field in function of the selected sacrifices. Task-5125864
This update resolves an issue where CFDI invoices generated in Mexico were producing incorrect rounding values. The changes improve the invoice generation process by using a tolerance for amount spreading and aggregating lines before CFDI creation, preventing further rounding errors. This ensures accurate tax calculations and compliance with Mexican regulations.
Original PR description
- Refactor the CFDI generation using the EDI tax helpers to prevent rounding issues by spreading the amounts according a tolerance of 0.000001. - Aggregate lines before computing the global invoice CFDI. That way, we avoid creating new rounding issues by post-processing the created CFDI. task_id: 5096249 Forward-Port-Of: odoo/enterprise#100679 Forward-Port-Of: odoo/enterprise#99395
This update fixes an issue where adding shifts to existing rental orders didn't correctly update the order line and total price. The fix ensures that new shifts are properly added to the order, reflecting the increased quantity and ensuring accurate pricing. This improves the rental planning process for users.
Original PR description
**steps to reproduce:** - Configure a booking product as service and rental. - Confirm a shift to create a rental order. - Activate sync on the role. - Add a new shift with the same product using "Add to last order". - Open the rental order: the order line and total price are not updated. **issue:** The price and the order line were not updated when a new shift was added to the last order. **cause:** Previously, adding a new shift to a rental order did not add the order line on the corresponding order. becacuse we was not checking the state of the order and at line creation line will be created for confirmed order only. **fix:** A check is added when the getting the rental order it should be confirmed. task-5093190 Forward-Port-Of: odoo/enterprise#95314
This update fixes an issue where credit notes (resulting in negative amounts) were not being included in the XBRL export of the EC Sales List report. The change ensures that all sales, including negative amounts, are now correctly generated and exported for accurate reporting. This improves compliance with Dutch tax regulations.
Original PR description
To replicate: 1. Install l10n_nl_reports_sbr_icp 2. Create an european partner with a VAT number 3. Create a credit note for this partner 4. Go to Accounting > Reporting > EC Sales List 5. The negative line appears in the report 6. Click on XBRL to export the report The negative line is not included in the exported report Only non-negative positive lines are added to the report in `_generate_codes_values()`. This commit changes that to include non-zero values. opw-5220622 Forward-Port-Of: odoo/enterprise#100669 Forward-Port-Of: odoo/enterprise#100009
This update resolves a critical issue in the Luxembourg payroll localization (l10n_lu_hr_payroll) where payslips incorrectly displayed a zero or negative net pay, even with a positive total salary. The fix ensures accurate calculation of net pay by correctly incorporating the 'net_wage' variable, preventing misleading warning messages.
Original PR description
Converted other inputs into salary rules and adjusted the tests Fixed a bug in the LU localization where the following warning appeared — “The net pay for this payslip is zero or negative.” — even when the net salary was > 0. The issue was that net_wage was not included in issue_dependencies. As a result, when it was recalculated or computed for the first time, it did not trigger _compute_issues, causing the warning banner to be displayed incorrectly. task - 5122394
This update resolves an issue where changes made to spreadsheet sale data inputs were sometimes lost due to unexpected system updates. The fix ensures that input values are reliably saved, preventing data loss and improving the user experience when updating sales records. This enhances data accuracy and reduces potential errors.
Original PR description
Currently, the FieldSync record input suffers from two issues: 1) The input value can be reset by parasitic renders While the user is inputting a value, if they did not confirm it and a global render occurs (other user joining the session, dragging the mouse on the grid), the input value will be reset to the one stored in the plugin, therefore erasing the last change of the user 2) In Chrome-based navigators, users can change the value of the input by using their mouse scrolling wheel. Such action *does not* trigger an `onChange` event; which means that the new value is never directly saved. Both issues are addressed in this commit by keeping an internal state inside the component `FieldSyncSidePanel` and ensure this state is properly reflected in the plugin once we stop editing the input. Task-5123069 Forward-Port-Of: odoo/enterprise#101017 Forward-Port-Of: odoo/enterprise#96431