Daily updates from Odoo
Friday, December 26, 2025
12 changes · saas-18.3
Resolved issues and error corrections
This update fixes a reporting issue where the expected arrival date wasn't displayed on DIN 5008 Purchase Order reports. The fix adds this crucial information, aligning with previous versions and confirmed requirements from internal teams. This ensures accurate reporting for DIN 5008 transactions.
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 update corrects a previous error in the Profit & Loss report's Gross Profit calculation, now accurately reflecting the impact of stock levels. Additionally, the report's layout has been simplified for better readability and user experience. This ensures more reliable financial reporting.
Original PR description
Previously, the Gross Profit calculation did not include the stock effect, which resulted in incorrect values. With this PR, the Gross Profit is now computed including the stock effect, ensuring accurate results. In addition, some UI adjustments have been made to simplify and improve the readability of the report. task-5357539 opw-5163207 master PR: https://github.com/odoo/enterprise/pull/101650 Forward-Port-Of: odoo/enterprise#101649
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 update, but this change ensures they are hidden when creating content within Knowledge, streamlining the composing process.
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#100585
This update ensures that the correct analytic account is consistently used when expenses are reinvoiced to customers. Previously, the analytic distribution would shift unexpectedly, leading to inaccurate reporting. Now, the analytic account linked to the sales order takes priority, guaranteeing accurate tracking of costs and revenue across all related documents.
Original PR description
Steps to reproduce the flow: - Create an expensable product “Hotel” that can be reinvoiced to a customer - Create an analytic distribution model that automatically applies the analytic account…
Steps to reproduce the flow: - Create an expensable product “Hotel” that can be reinvoiced to a customer - Create an analytic distribution model that automatically applies the analytic account “Commercial &Marketing” to the previous created product “Hotel” - Create an SO for a customer “Gilles”. The SO is linked to the analytic account “Home Construction” - Create an expense which category is “Hotel”. The analytic distribution is automatically set to “Commercial & Marketing” - Reinvoice this expense to “Gilles”. The analytic distribution automatically changes to “Home Construction”. -> Wrong. We lose part of the information - When posting the expense report, the expense is added in the SO through a dedicated SO line. The analytic account previously set as “Home Construction” is now transformed, for an unknown reason, into “Commercial & Marketing”. -> Wrong. - On the vendor bill, the analytic distribution is “Home Construction” Now: 1. The analytic plans from the expense and from the SO are different. Simply add the analytic account from the SO 2. The analytic plans are the same. There are conflicts. In this case, the analytic distribution set on the SO is prioritary. We ensure that costs incurred or sales generated from the expense are reflected in the SO's analytic plan rather than the generic one. In the previous example, Home Construction is the only analytic account that should be considered on the expense, bill and SO. task-4564463 Forward-Port-Of: odoo/odoo#240267 Forward-Port-Of: odoo/odoo#233794
This update allows users to easily copy and paste error messages from the Point of Sale interface. Previously, users couldn't copy these messages, making it difficult to report issues or troubleshoot problems. This change improves usability and support efficiency.
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 security by granting necessary access to employee data for the account batch payment process. Previously, a restriction prevented non-HR users from correctly processing payments, now the system utilizes sudo to ensure proper functionality. This resolves a potential access issue and improves the reliability of batch payment operations.
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 ensures invoices exported with foreign VAT numbers (used for distance selling) correctly display the appropriate VAT number in the PDF invoice (factur-x file). Previously, the company's VAT was used instead. This fix improves invoice accuracy and compliance with EU regulations.
Original PR description
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1.…
When exporting invoices, the VAT number of the company could be wrong if the fiscal position of the invoice defines a foreign VAT number. In that case we need to use it. Steps to reproduce: 1. Install a European localization (ex: l10n_at) 2. Enable EU Intra-community Distance Selling. You should now have new OSS fiscal positions. Update the one you want to use with a foreign VAT. 3. Create a valid foreign customer. (within the EU) 4. Create and send an invoice for this customer. 5. In the PDF, there is an embedded factur-x file. Notice how the VAT number under the SellerTradeParty corresponds to the company's VAT, not the foreign VAT number defined on the fiscal position. This is more apparent because we use the correct VAT number in the PDF file but not in the corresponding XML. This commit fixes this issue by first checking if we have a foreign VAT number defined on the fiscal position of the invoice. If so, we use it. opw-5182837 Forward-Port-Of: odoo/odoo#237580 Forward-Port-Of: odoo/odoo#236692
This update fixes an issue where holiday carryover days were not being calculated correctly, leading to an inaccurate count of expiring days. The change ensures that accrued holiday days are properly added to the total, resulting in a more precise calculation of available holidays at the end of the validity period. This improves the accuracy of holiday balances.
Original PR description
To reproduce: ============= - Create an accrual plan: - Carryover date: allocation - One level: - Accrues 2 days. - Accrual date: monthly on 1st of each month - Starts immediately on allocation start…
To reproduce:
=============
- Create an accrual plan:
- Carryover date: allocation
- One level:
- Accrues 2 days.
- Accrual date: monthly on 1st of each month - Starts immediately on allocation start date - Carryover policy: all days carry over - Carried over days validity: 3 months.
- Create an allocation that uses the above accrual plan on 23/09/2025:
- Starts on 01/07/2024
We should have 30 days in total with 24 expiring on 01/10/2025 but we only have 22 expiring on 01/10/2025.
Problem:
========
When `accrued_gain_time` of the accrual plan is 'start', in the `_process_accrual_plans` method, the property `expiring_days` is set when the first accrual still hasn't been added to the `number_of_days` (it is usually added at the [end of the loop](https://github.com/odoo/odoo/blob/18.0/addons/hr_holidays/models/hr_leave_allocation.py#L596)).
Solution:
=========
In the `_process_accrual_plans`, add the accrued days to the `number_of_days` before the `expiring_days` is set.
[opw-4963163](https://www.odoo.com/odoo/all-tasks/4963163)
Forward-Port-Of: odoo/odoo#233424This update fixes an error in how VAT is calculated for transactions using Reverse Charge taxes, particularly when combined with non-deductible expense configurations. Previously, the output VAT was incorrectly reduced. Now, the full VAT amount (21%) is accurately reflected as payable, aligning with standard accounting practices for Reverse Charge scenarios.
Original PR description
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable…
When combining a Reverse Charge tax (e.g., Intra-Community Acquisition) with a Non-Deductible tax configuration (e.g., 60% Professional Use), the resulting accounting entry for the VAT Payable (Output Tax) was incorrect. Steps to reproduce: 1. Create a Vendor Bill. 2. Use a Tax configured as both Reverse Charge (e.g., 21%) and partially Non-Deductible (e.g., 40% non-deductible). 3. Set the price to 100.00. Observed behavior: - VAT Deductible (Input): 12.60 (Correct: 60% of 21). - Non-Deductible Expense: 8.40 (Correct: 40% of 21). - VAT Payable (Output): 12.60 (Incorrect: it was reduced by the non-deductible part). Expected behavior: - VAT Payable (Output) should be 21.00. In a Reverse Charge mechanism, the full tax amount must be declared as due, regardless of the deductibility on the input side. Solution: Post process the taxes_data in case of professional with reverse-charge so wie will have the Payable part with the hole amount 21 in the previous example task-5418096 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#240955
This update fixes a minor issue in the self-ordering point-of-sale module by updating how changes to items in the shopping cart are tracked. Previously, a system was in place that was no longer used. This change ensures that cart modifications are correctly recorded, improving the overall shopping experience.
Original PR description
Before this commit, to check line changes the lastChangesSent was used, which doesn't exist anymore. This commit replaces its usage with uiState.lineChanges. opw-5407191 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240197
This update fixes a bug where setting a Bill of Materials (BoM) in a manufacturing order would sometimes create duplicate work orders. The issue stemmed from how the system recomputed work orders when the BoM or quantity changed before saving. Now, work orders are created only once, ensuring accurate order processing.
Original PR description
Steps to reproduce:
- Create a storable product "P1"
- Create a BoM with one operation
- Create a manufacturing order for product "P1"
- Do not set any BoM
- Save
- In draft state:
- Set the BoM
- Without saving, update the quantity to produce
Problem:
The same operation is added twice, resulting in duplicate work orders.
Cause:
Work orders are recomputed multiple times when BoM and quantity are changed before saving, and existing (not yet saved) work orders linked to the same BoM are not properly filtered out.
Fix:
Ensure that work orders linked to the current BoM are only created once during recomputation.
opw-5404686
Forward-Port-Of: odoo/odoo#241319
Forward-Port-Of: odoo/odoo#240757This update fixes an issue where adding the same product multiple times to a Point of Sale order would create duplicate orderlines. The change ensures that prices with varying decimal places are correctly merged, resulting in a more accurate and streamlined order process. This improves the overall reliability of the POS system.
Original PR description
Before this commit, when a product had a price with more decimals than the currency, adding it multiple times to the order would create multiple orderlines instead of merging them. This was due to rounding issue when comparing the prices of the orderlines. opw-5341735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240132 Forward-Port-Of: odoo/odoo#238639