Friday, December 26, 2025
10 changes · 19.0
Enhancements to existing features
Point of Sale users can now select and copy text from error popups. This makes it easier to share exact error messages with support teams or colleagues when troubleshooting issues.
Original PR description
Before this commit, it was not possible to select and copy text from the error popup shown in the POS interface. This limitation hindered users from easily copying error messages for reporting or troubleshooting purposes. task-id: 5411067 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240570
This update enhances the refresh process for return data in the accounting reports. Previously, the date range was unpredictable, leading to inconsistent updates. Now, data is refreshed within a consistent one-year window (past and future), ensuring reliable reporting.
Original PR description
Previously, the minimum date used for the refresh period in `_try_create_returns_for_fiscal_year` was the fiscal year itself, which caused confusion. Depending on whether we were at the beginning or the end of the fiscal year, the amount of past data being updated was inconsistent. The new behavior refreshes a fixed window of one year in the past and one year in the future, making the update range predictable and consistent. task-5388423 Forward-Port-Of: odoo/enterprise#101484
Resolved issues and error corrections
French-certified Point of Sale receipts now show the original unit price when a cashier changes an item's price. This prevents misleading receipt and order summary information by keeping the old price separate from the updated total price.
Original PR description
Steps to reproduce ------------------ 1. Insall `l10n_fr_pos_cert` and set the company to the french one 2. Open PoS, and select a product, it will have a price say X 3. Using the numpad, change the price of that product to Y Observe that the line now says "Old price unit: Y * Qty / Unit", instead of it being "X / Unit". Why it's happening: ------------------- We were displaying the `currencyDisplayPrice`, which is the total amount to be paid, instead. The fix ------- We add a getter on the product model `displayPriceUnit`, it shows the original product unit price. We therefore introduce a new getter that compute the unit price using the original lst price. opw-5365735 opw-5378158
DIN 5008 purchase order reports now show the Expected Arrival Date, matching the standard purchase order report. This helps buyers and suppliers see delivery timing directly on printed purchase documents and avoids missing schedule information.
Original PR description
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order…
**Steps to reproduce:** 1. Install l10n_din5008 and purchase modules. 2. Switch the Document Layout template to DIN 5008. 3. Create or open an existing Purchase Order. 4. Print the Purchase Order report. **Issue:** The Expected Arrival Date does not appear on the DIN 5008 Purchase Order report. Both functional experts and PO (CHKL) confirmed that the Expected Arrival Date should appear by default on the Purchase Order report in DIN 5008. **Cause:** The date_planned (Expected Arrival) field was introduced in standard Purchase Order report in v18.0, but DIN 5008 report template was not updated accordingly **Fix:** Add the Expected Arrival information to the DIN 5008 Purchase Order template. Before: <img width="606" height="162" alt="image" src="https://github.com/user-attachments/assets/e11f5b1f-5898-4ec9-a4f2-087db5dfeced" /> After: <img width="605" height="147" alt="image" src="https://github.com/user-attachments/assets/57419d00-50c9-4508-9bfc-307c0a54dc67" /> **opw-5376176** Forward-Port-Of: odoo/odoo#239619
This fix updates Saudi Arabia invoice QR codes so the invoice time is sent in the format expected by ZATCA. It prevents the timezone suffix from being added after converting to Riyadh time, helping invoices remain compliant and scannable.
Original PR description
In ZATCA phase 1, after converting the time to Asia/Riyadh timezone, the time information is added to the qr code in iso format which concatenates the timezone ("+03:00"). However, ZATCA expects the time to simply be sent as is in Asia/Riyadh timezone.
Task: 5319097
Description of the issue/feature this PR addresses:
Current behavior before PR:
Desired behavior after PR is merged:
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241075This update prevents certain incompatible USB devices from causing errors during IoT printer setup. It improves reliability for businesses using Odoo IoT-connected printers by allowing the system to handle unsupported devices more gracefully.
Original PR description
This PR fixes the exception thrown by the usb devices incompatible with escpos code.
It fixes the following exception:
```
2025-12-22 14:49:59,724 1433 ERROR ? odoo.addons.iot_drivers.exception_logger: File "/home/pi/odoo/addons/iot_drivers/iot_ha
ndlers/drivers/printer_driver_L.py", line 42, in init
self._init_escpos(device)
2025-12-22 14:49:59,724 1433 ERROR ? odoo.addons.iot_drivers.exception_logger: ValueError: The device has no langid (permission issue, no string descriptors supported or device error)
```
Forward-Port-Of: odoo/odoo#240976This update corrects formatting in HR-related documentation so the content builds cleanly without warning messages. It helps keep module documentation consistent and avoids noise during documentation checks.
Original PR description
This pull request fixes improperly formatted reStructuredText section titles in the hr module documentation. The original MD file used a section underline that were shorter than the title text, which caused docutils to raise this warning: (WARNING/2) Title underline too short. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances security by ensuring that the account batch payment process can access employee address information, even for users without HR permissions. The change uses 'sudo' to grant necessary access, preventing potential restrictions and improving the reliability of the payment calculations. This resolves an internal issue identified as OPW-5428523.
Original PR description
In commit a6ed1bd, new logic for handling employee addresses was introduced. However, the _get_all_addr function requires employee_ids, which implicitly requires access to the Employees model and, therefore, be in HR groups. During the compute process, _get_all_addr is only used to check whether an employee has an address; no address data is exposed. To fix this issue, the call to _get_all_addr should be executed with sudo(). OPW-5428523 Forward-Port-Of: odoo/enterprise#102851
This update restores the intended behavior for the Knowledge composer by hiding the GIF and canned response actions. These features were previously visible after a recent system update, but have now been intentionally hidden to streamline the content creation process within Knowledge.
Original PR description
The GIF picker was previously hidden in Knowledge, but became visible again after the composer actions refactor. Commit that introduced the change: https://github.com/odoo/odoo/commit/5e1daafeac231c333ea13369fc208627213d67d4 This commit restores the intended behavior by hiding the GIF action again and also hides the canned response action, as neither feature is relevant when composing content in Knowledge, by applying conditions on the corresponding composer actions. Task-5163888 Forward-Port-Of: odoo/enterprise#102862 Forward-Port-Of: odoo/enterprise#100585
This update ensures that all work entries are consistently set to 'draft' state when the action is triggered. Previously, the system didn't always update work entries correctly, leading to potential inconsistencies. This change improves data accuracy and streamlines payroll processing.
Original PR description
Problem ---------- the `action_set_to_draft` should set any work entry to draft regardless of the situation. Solution ---------- If only the state is write to draft, let the whole vals be written task-5410512