Wednesday, November 26, 2025
13 changes · saas-18.4
Enhancements to existing features
This update allows IoT devices to connect to the Odoo POS system without requiring a secure HTTPS certificate. It leverages a new feature in Chromium (142) that supports HTTP requests over the local network (LNA). This simplifies the setup and improves compatibility for IoT devices.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/100331 **This PR contains 2 commits:** - **[IMP] iot_base: allow use of LNA for IoT requests** Chromium 142 added support for HTTPS -> HTTP…
Enterprise PR: https://github.com/odoo/enterprise/pull/100331 **This PR contains 2 commits:** - **[IMP] iot_base: allow use of LNA for IoT requests** Chromium 142 added support for HTTPS -> HTTP requests on the local network (Local Network Access). This commit adds a flag to the IoT longpolling class to enable LNA support. The flag forces all requests to use HTTP even in an HTTPS environment. It also sets the `targetAddressSpace` option to `local` in the `fetch` request. - **[IMP] point_of_sale: use_lna support for IoT requests** Since https://github.com/odoo/odoo/pull/235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. task-5353672 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237147
This update enables IoT devices to function without requiring HTTPS certificates by utilizing a new system parameter. It also displays a warning message when HTTP requests to the Blackbox fail, ensuring a smoother user experience. This change supports the recent odoo/odoo#235702 update.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/237147 Since odoo/odoo#235702, there is a `point_of_sale.use_lna` system parameter. When it is set, ePOS requests will use HTTP instead of HTTPS, and the `targetAddressSpace: "local"` option is used in the `fetch` request. This bypasses the need for a HTTPS certificate. This commit adds the same functionality to all IoT requests from the POS. This should allow the IoT box to function correctly without a HTTPS certificate. In addition, we now show a warning message when a request to the Blackbox via HTTP fails and has to fallback to the websocket. task-5353672 Forward-Port-Of: odoo/enterprise#100331
Resolved issues and error corrections
This update corrects an error preventing the l10n_vn_edi_viettel module from successfully retrieving invoice documents from the Sinvoice system. The previous issue stemmed from incorrect parameter requirements in the API documentation, which caused a 400 error. This fix ensures accurate document retrieval, improving the functionality of Vietnamese VAT invoice processing.
Original PR description
* Problem: When trying to get document from sinvoice, we get error not found * Reason: in the api document the parameter not include 'strIssueDate' and also the 'transactionUuid' not require at all, but if we include 'transactionUuid' we still get 400 error 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#236628
This update fixes an error in the Peru tax return reports (RVIE Sales 14.4) that incorrectly included credit note amounts in the VAT columns. The fix ensures the report accurately reflects SUNAT regulations for credit note reporting, improving data accuracy for tax compliance.
Original PR description
How to reproduce the issue: -With l10n_pe localization - Create an invoice for the previous period, generate a credit note for that invoice in the current period. - In the tax return with report VAT Report (RVIE Sales 14.4) (PE), download the txt file. - Columns 15(base_igv), 16(amount_discount), 17(tax_igv) and 18(tax_igv_discount) are wrong: the credit note is included in col 15 and 17 However, according to SUNAT spec the rule should be: - If the NC modifies a document issued in the same period: amounts must be reported in Col. 15 and 17 (with the negative sign already inherent in the NC). - If the NC modifies a document issued in previous periods: amounts must be reported in Col. 16 (Discount BI) and Col. 18 (Discount IGV/IPM) (values must be negative), and not in 15/17 opw-5094466 Forward-Port-Of: odoo/enterprise#96146
This update fixes an issue where vendor bill payment statuses remained incorrect after deleting or resetting payments. The change ensures that the vendor bill's status accurately reflects the payment's state, resolving a discrepancy between vendor and customer invoice updates. This improves data accuracy and reporting.
Original PR description
Steps to reproduce: ------------------------- 1. Install the Accounting module. 2. Create and confirm a Vendor Bill. 3. Click on Pay and create a payment for the bill. 4. Open the created payment…
Steps to reproduce: ------------------------- 1. Install the Accounting module. 2. Create and confirm a Vendor Bill. 3. Click on Pay and create a payment for the bill. 4. Open the created payment using the smart button. 5. Delete the payment or click on Reset to Draft. Observation: ------------------------- 1. On deleting the payment: The Vendor Bill still shows the "In Payment" status even after the payment is deleted. 2. On resetting the payment to draft: The Vendor Bill also remains in the "In Payment" status instead of reverting to "Not Paid". This behavior is not observed for customer invoices, where the payment state updates correctly in both cases. Issue: ------------------------- 1. Delete case: In the `unlink` method, https://github.com/odoo/odoo/blob/b991f766e28dc71f8627fdfbf2d59589d9707d3a/addons/account/models/account_payment.py#L938-L945 the `linked_invoices` variable only includes invoices that are reconciled (i.e., their journal items are matched). Since the Vendor Bill is not yet reconciled, it is excluded from recomputation. Hence, its `payment_state` remains unchanged. 2. Reset to draft case: In the `_compute_payment_state` method, https://github.com/odoo/odoo/blob/b991f766e28dc71f8627fdfbf2d59589d9707d3a/addons/account/models/account_move.py#L1162-L1163 the compute depends on the state of reconciled payments. However, since these payments are not reconciled, the compute method is not triggered, and the payment state remains outdated. Solution: ------------------------- Added `matched_payment_ids.state` in the depends of the `_compute_reconciled_payment_ids` method to ensure it recomputes correctly when payment state changes on setting payment to draft or deleting payment Ticket [link](https://www.odoo.com/odoo/project.task/5208772) opw-5208772 Forward-Port-Of: odoo/odoo#234725
This update resolves a problem where the exchange rate was missing on invoices for certain currencies in Odoo versions 17.0 and 18.0. The fix addresses a design conflict within a shared invoice template used across multiple countries, ensuring accurate exchange rate display. This improvement impacts invoicing accuracy for users in Saudi Arabia.
Original PR description
Steps to reproduce: - install l10n_ae - switch to AE company - create an invoice with a currency != AED and print -> exchange rate shows - install l10n_sa_edi - print the invoice with the AE company -> in 17.0, the exchange rate is missing -> in 18.0, the template is broken The same fix can be applied for both 17.0 and 18.0. The main issue is that l10n_gcc_invoice is a template for 5 different countries, and all of them inherit it without primary=True, which results in many conflicts if several of these countries are installed on the database. Here, we only try to solve the most apparent issue, which is the broken template for the exchange rates. Note that in 19, a major PR has been fixing this inheriting issue: https://github.com/odoo/odoo/commit/1cddcab8b8626b34c437a51d320b0a3e4698dae7 opw-5215971 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237193 Forward-Port-Of: odoo/odoo#236844
This update fixes an issue where invoice lines were incorrectly reconciled across different customers during POS sessions. Previously, settling payments mixed invoices from various customers, leading to inaccurate reporting. Now, reconciliation is limited to the specific partner within the POS session, ensuring accurate financial records.
Original PR description
Invoice lines to be reconciled are not tailored to the single partner while the session lines do. That causes reconciliation to happen between different partners. To reproduce: Create an invoice of 100 to Customer 1 and an invoice of 200 to Customer 2. In a pos session, go to Customer 1, settle 50 on that invoice. Go to Customer 2, settle 100 on their invoice. Close register. => Lines from different customer are reconciled together. task-5346644 Forward-Port-Of: odoo/enterprise#100131
This update fixes a reporting issue on the Purchase Dashboard by ensuring the 'Not Acknowledged' and 'Late Receipt' counters accurately reflect only pending acknowledgments and genuinely late receipts. Previously, completed receipts were incorrectly included, leading to misleading data. This change improves the dashboard's reliability for tracking purchase order status.
Original PR description
Before this commit: ------------------------- - On the Purchase Dashboard, the 'Not Acknowledged' and 'Late Receipt' counters also included purchase orders whose receipts had already been done. - For…
Before this commit:
-------------------------
- On the Purchase Dashboard, the 'Not Acknowledged' and 'Late Receipt' counters
also included purchase orders whose receipts had already been done.
- For Not Acknowledged:
- Such POs should be implicitly considered acknowledged once their receipts
are done, but they were still shown at the counter.
- Additionally, unacknowledged POs that were locked were incorrectly excluded
from the counter.
- For Late Receipt:
- POs with received products were incorrectly counted as late, even
though their receipts were already done.
- Locked POs with late receipts were also excluded from the counter, which was
an incorrect behavior.
Steps to reproduce:
-------------------------
1. Install the 'purchase_stock' module.
2. Open Purchase module.
3. On the Purchase Dashboard, click on the 'Not Acknowledged' or 'Late
Receipt' card.
4. Notice that POs whose receipts are already completed still appear in the
counters and some locked POs that are unacknowledged or have late receipts
are missing from the counters
Cause of the issue
-------------------------
- The domains for both Not Acknowledged and Late Receipt counters only relied on
the purchase order state without checking whether the receipts were done.
- As a result, POs with done receipts were still included in the counters, while
some locked POs were incorrectly excluded.
After this commit:
-----------------------
- Updated the search domains for both counters to properly exclude POs whose
receipts are done.
- The action_done method now triggers action_acknowledged, ensuring that any
unacknowledged POs with completed receipts are automatically marked as
acknowledged and excluded from the Not Acknowledged counter. Locked POs that
remain unacknowledged will still correctly appear in the counter.
- Now the POs with received products are no longer shown as late once their
receipts are completed and Locked POs with late receipts will now correctly
continue to appear in the counter.
- This ensures that the dashboard accurately reflects only pending
acknowledgments and genuinely late receipts, helping users track POs in
the correct state.
Task ID: 4874116
Forward-Port-Of: odoo/odoo#237176
Forward-Port-Of: odoo/odoo#224180This update fixes an issue where time logs were incorrectly assigned to the current user instead of the assigned employee when marking a work order as complete. Previously, this caused confusion about who was working on orders. Now, the time log accurately reflects the assigned employee, ensuring accurate tracking of work hours.
Original PR description
## **Issue Before This Commit:** When a work order is assigned to an employee (not linked to the current user), and the current user marks it as done, the time log is wrongly created under the…
## **Issue Before This Commit:** When a work order is assigned to an employee (not linked to the current user), and the current user marks it as done, the time log is wrongly created under the current user’s employee instead of the assigned one. This behavior caused confusion for the user as the wrong person was shown as working on the order. ## **Steps to Reproduce:** - Create an MO with work orders and confirm it. - Assign another employee to a work order. - Mark the work order as done with the current user from the work order line. - Open the workorder and notice that the time log is created for the current user’s employee. ## **Cause of the Issue:** The bug was introduced in PR (https://github.com/odoo/enterprise/pull/84790), where the logic for assigning the main employee was overridden, ignoring the case of an already assigned employee. ## **With This Commit:** The time log is now created for the assigned employee, This resolves the confusion by ensuring the right person is tracked on the work order. TaskID: 4983514 Forward-Port-Of: odoo/enterprise#100467 Forward-Port-Of: odoo/enterprise#93378
This update reverts a recent change that caused incorrect pricing calculations for products with multiple plans and variants. By restoring the previous logic, we ensure accurate pricing is displayed for these products, resolving a critical issue impacting sales accuracy.
Original PR description
This commit reverts the modifications introduced in the one-time sale [PR](https://github.com/odoo/enterprise/pull/77981). Those changes caused incorrect pricing behavior for products with variants, as the necessary logic for handling multiple plans and variants was removed. By reverting, we restore the correct price computation for products that have both multiple plans and variants. opw-5224319
This update improves the speed of the website builder, specifically when adding and managing forms. Previously, rendering complex forms took over a second, which was frustrating for users. Now, the process is significantly faster – just a few hundred milliseconds – thanks to optimizations in the BuilderList component.
Original PR description
Before this commit, rendering BuilderList with many elements caused noticeable delays. How to reproduce: ======================= - Use a runbot with all demo data - Switch to edit mode in the website builder - Add a form - Link the form to the Contact model - Add the "State" field Before this commit: The options related to the "State" field took more than one second to render. After this commit: Rendering is several hundred milliseconds faster. Additional commits will follow to further improve the situation. Reason for the slowdown: ======================= BuilderList is not optimized to render several thousand records (about 1900 in this example). This commit addresses the identified bottlenecks to reduce rendering time. 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
This update resolves an issue where changing the 'analytic.project_plan' system parameter didn't properly update related fields in the accounting system. The fix ensures that dynamic fields are correctly created and removed when this parameter is modified, preventing data inconsistencies and errors. This improves the accuracy of project accounting.
Original PR description
A field on `account.analytic.line` is created for every plan using the `id` of the plan to make the names unique, like `x_plan{id}_id`. The plan that has the ID of the `analytic.project_plan`…
A field on `account.analytic.line` is created for every plan using the `id` of the plan to make the names unique, like `x_plan{id}_id`. The plan that has the ID of the `analytic.project_plan` parameter does not get a dynamic field, it uses `account_id`. If you change the system parameter for analytic.project_plan, the plan with the corresponding value will now use `account_id,` and the plan that corresponds to the previous default value will have no corresponding field on `account.analytic.line`.
So, when the project plan system parameter changes, the dynamic fields that are created for each analytic plan (apart from the project one) do not get updated.
Steps:
1. Set the `analytic.project_plan` system parameter to a value other than `1`
2. Enable `Analytic Accounting` setting under `Accounting > Analytic`
3. Create a sales order with a service product that creates a project.
4. Confirm sales order
5. Traceback: `ValueError: Invalid field account.analytic.line.x_plan1_id in leaf 'x_plan1_id', 'in', [23])`
We now extend the write method on `ir.config_parameter` so that when the value of the analytic.project_plan is changed the dynamic fields on `account.analytic.line` are properly added and removed. This solution always creates a field for the previous value and deletes a field for the new value so that no plan ever has two fields referencing it.
Ticket [link](https://www.odoo.com/odoo/project.task/5069381)
opw-5069381
Forward-Port-Of: odoo/odoo#234987
Forward-Port-Of: odoo/odoo#231981This update fixes a problem that occurred during Odoo upgrades where new companies were created without a designated subcontracting location. This caused subsequent upgrade steps to fail, leading to instability. The change ensures locations are correctly created during upgrades, improving overall system reliability.
Original PR description
During an upgrade, it could happen that some companies are created before this module is loaded. That means the override of `_create_per_company_locations` is not called and the company is created with an empty `subcontracting_location_id`. That can lead later to issues as that value was not expected to be empty. To reproduce: - On 16, install `onboarding`[^1], `l10n_de`, `mrp_subcontracting` with demo data. - Upgrade to 17. Module `l10n_de` will have created a company with empty subcontracting location. - Upgrade to 18. The upgrade will break during a call to `_create_or_update_sequences_and_picking_types` in `stock` because of the empty value. [^1]: onboarding is necessary to ensure l10n_de is loaded before mrp_subcontracting because of the dependencies. Forward-Port-Of: odoo/odoo#236149