Thursday, November 27, 2025
14 changes · 18.0
Resolved issues and error corrections
This update fixes an issue where documents and moves were incorrectly linked across companies in a multi-company setup. By adding the company ID, the system now accurately creates and searches documents within the correct company context, preventing errors and ensuring data integrity. This improves the reliability of our core accounting processes.
Original PR description
Behavior before: In a multi-company setup, fetching documents could include records from different companies based on VAT numbers. When creating attachments or searching for existing moves, the company ID was not properly considered, leading to incorrect company assignments and failed move creation. Behavior after: Documents and moves are now created and searched within the correct company context by explicitly including the company ID. Root Cause: The company ID was missing in both the attachment creation and the domain used to search for existing moves, causing cross-company mismatches. opw-4929985
This update fixes an issue where signature fields added to views in Studio didn't display the correct widget option. Now, when adding a signature field, Studio automatically includes the signature widget in the selection list, allowing users to properly configure these fields. This ensures signature fields function as intended within the Studio view editor.
Original PR description
Before this commit: ------------------- When a user added an existing signature field to a view, Studio automatically assigned the default binary widget. The expected signature widget did not appear…
Before this commit: ------------------- When a user added an existing signature field to a view, Studio automatically assigned the default binary widget. The expected signature widget did not appear in the widget selection list. As a result, users could not configure the field as a signature input. <img width="1920" height="938" alt="image" src="https://github.com/user-attachments/assets/35893235-2541-4bd5-a7a5-4feab562acb2" /> Cause: ----- Studio builds the dropdown of available widgets by computing a [widgetKey](https://github.com/odoo/enterprise/blob/17.0/web_studio/static/src/client_action/view_editor/editors/utils.js#L132) based on the field type. Because the signature widget did not declare binary as a supported field type, it was always filtered out for fields of type binary. Thus Studio treated the field like any normal binary field and excluded the signature option. After this commit: ------------------ The signature widget is correctly exposed as a supported widget for fields of type binary. When adding an existing signature field to the view (with developer mode enabled), Studio now shows signature in the widget list. <img width="1917" height="934" alt="image" src="https://github.com/user-attachments/assets/079e0a17-ff5a-4dc6-a12d-e02b9cad013e" /> Why this fix is needed: ---------------------- Signature fields are stored as binary, but they require the dedicated signature widget to render correctly. By marking binary as a supported field type for the signature widget, Studio can properly detect and offer the widget during field configuration. Given that this widget is very domain-specific and not intended for general binary fields, it was not added to [web_studio/static/src/client_action/view_editor/editors/sidebar_safe_fields.js](https://github.com/odoo/enterprise/blob/17.0/web_studio/static/src/client_action/view_editor/editors/sidebar_safe_fields.js) though this may be reconsidered after this fix the option is accessible only when the debugger mode is on, if want to show this widget to all the binary type fields even when the debugger mode is off the we'll have to add it to this file. OPW : 5260188 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237287
This update resolves an issue where Italian e-invoicing error messages weren't being correctly stored and displayed to users. The fix ensures that error messages from the Italian tax authority are now properly captured and presented, improving invoice processing for Italian clients. This prevents data loss and provides better feedback to users.
Original PR description
Before this commit:
Steps
1) When clients try to send their invoice to Italian e-invoicing
2) If it's got rejected, they replied with an error message
=> A Traceback Error is raised with the message:
`errors = '\n- '.join(error.get('errors', ''))
^^^^^^^^^
AttributeError: 'str' object has no attribute 'get'`,
This occurs because the `_call_web_service_after_invoice_pdf_render()` method in l10n_it_edi is setting `moves_data[move]['error']` to a string while `_generate_and_send_invoices()` that calls `_hook_if_errors()` expects it to be a dict.
After this commit:
If the Italian e-invoicing rejects the request with `error_message` in the response, Odoo stores and displays it to the client correctly.
opw-5271525This update corrects a bug where the 'Use Documents' option wasn't automatically enabled for LATAM invoices during setup. The fix ensures that when a LATAM chart of accounts is selected, this crucial setting is correctly applied, streamlining invoice processing for Latin American businesses. This resolves an issue impacting invoice document generation.
Original PR description
### Issue: During the loading of fiscal position data for LATAMs the option "Use Documents" on Journals is not set-up. ### Steps to reproduce: - Install 'l10n_ar' - Settings > Accounting - Make sure…
### Issue: During the loading of fiscal position data for LATAMs the option "Use Documents" on Journals is not set-up. ### Steps to reproduce: - Install 'l10n_ar' - Settings > Accounting - Make sure the "Fiscal Localization" have a value (not Argentina) - Change the "Fiscal Localization" to "Argentine - Generic Chart of Accounts [...]" - Go in Accounting > Configuration > Journals - Click on "Ventas Preimpreso" - The journal don't have "Use Documents" ticked but it should ### Cause: When loading the data, `_get_chart_template_data()` calls `_get_ar_base_res_company()` and `_get_latam_document_account_journal()`. The first one returns the data to change `res.company.account_fiscal_country_id` to `base.ar`. The second one [checks](https://github.com/odoo/odoo/blob/26a5384af0af8fc6e6b5a10bea277f937e2b3481/addons/l10n_latam_invoice_document/models/account_chart_template.py#L12) that [`self.env.company.account_fiscal_country_id.code == "AR"`](https://github.com/odoo/odoo/blob/d985ec2e9b61b5e6c36a278654d526aaa5b512e2/addons/l10n_ar/models/res_company.py#L36) before returning the data to change `l10n_latam_use_documents` to `True`. As `res.company.account_fiscal_country_id` has not been updated, it's not Argentina during the check and `_get_latam_document_account_journal()` returns nothing. ### Solution: When loading the template, we cannot use `res.company.account_fiscal_country_id` to know if we are in LATAM or not. So instead we check on `chart_template`. opw-5221931
This update resolves an issue where the DIOT tax report export failed when journal entries lacked a partner. The code was updated to gracefully handle missing partner information, preventing errors and ensuring the report generation process continues smoothly. This ensures accurate reporting for all DIOT tax scenarios.
Original PR description
**Steps to reproduce:** 1. Install `Accounting` and `l10n_mx_reports` modules. 2. Create two journal entries using DIOT tax grid: one with partner, one without 3. Confirm the entries. 4. Go to `Accounting → Reporting → Tax Report → DIOT (MX)`. 5. Try to print the DIOT report in TXT format from the top-right dropdown. **Observed behavior:** * Export fails with a traceback if any entry has no partner. **Root cause:** The method `_get_diot_values_per_partner` does not handle entries without partners. **Solution:** raise `Usererror` if entries without partners when sorting and exporting. note: The second commit addresses a traceback caused by a missing operation_type_code. This occurs when all entries lack a partner or when a partner’s operation_type_code field is not set. opw-5060825 Forward-Port-Of: odoo/enterprise#96529
This update fixes a potential issue where duplicate payments could be created when UrbanPiper order statuses were updated. The change ensures that a payment is only created if the order hasn't already been paid, preventing errors and streamlining the payment process. This improves order accuracy and reliability.
Original PR description
When an UrbanPiper order status is updated to 'food_ready' via webhook, the controller's _order_status_update method was calling _make_order_payment without checking if the order was already paid. This could result in duplicate payments being created if the webhook was called multiple times or if the order status transitioned back to 'food_ready'. The fix adds a check to ensure the order is not already paid before attempting to create a payment, matching the behavior in the order_status_update method.
This update corrects a problem that prevented users from sending E-Factura (SPV) invoices when linking bank accounts to invoices in the Romanian localization. The issue stemmed from a mismatch in how bank and partner information handled 'state' data. The fix ensures the correct field is used, allowing E-Factura sending to proceed smoothly. This resolves a previous bug identified in 18.4 and later versions.
Original PR description
Same issue already fixed for 18.4+ here: https://github.com/odoo/odoo/pull/231399 Issue: When setting up a payment reference and linking a bank to an invoice, sending an E-Factura (SPV) triggers an exception: state_id not defined for res.bank. Repro Steps: 1- Create invoice for romanian localization. 2- Link payment account to invoice. 3- Add bank to payment account. 4- Confirm and send invoice with "Send E-Factura SPV" checked. Cause: The state field is defined differently for res.bank and res.partner. res.partner uses state_id, while res.bank uses state. The code that retrieves addresses assumes the same field for both, leading to an exception when accessing state for res.bank. Fix: The fix checks the type of the input and selects the appropriate field (state or state_id) accordingly. opw-5362000 (cherry picked from commit a2af8d434bfc7f77008959c8179e8f158bcf9e93) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a crash that occurred when releasing a table in the Restaurant POS module. The issue stemmed from deleting the order prematurely when switching screens, causing the system to attempt to access non-existent order data. Now, the order is deleted after returning to the main screen, preventing the crash and ensuring a smoother user experience.
Original PR description
### Steps to reproduce: - Open the Restaurant POS. - Select a table and add a product. - Click order button. - Reopen the same table and remove all order lines. - Click "Release Table". ### Issue: - A blank screen appears and an error is shown in the browser console. ### Reason: - This happens because the order is deleted before switching screens, so the system tries to access order that no longer exists. ### Fix: - The order is now deleted after switching back to the main screen. Related PR: https://github.com/odoo/enterprise/pull/89715 Task: 4899160
This update fixes a bug where sales made through the Point of Sale (PoS) system weren't reflected in event sale reports. The fix modifies the report's data query to include these sales, ensuring a more accurate record of event revenue. This improves reporting accuracy for event organizers.
Original PR description
Add event registration sold through PoS to the event sale report. Steps to reproduce: ------------------- * Create an event with tickets * Sell a ticket through the PoS * Go to the event sale report > Observation: The ticket sold through PoS is not included in the report Why the fix: ------------ We modify the SQL query of the event sale report to include event registrations sold through PoS. We also make sure to remove duplicates from the original query. opw-4935195
This update fixes an issue where Point of Sale (POS) picking wasn't correctly generating items when selling BOM kits with variant-specific components. Previously, it only considered one variant, even with multiple orders. Now, the system accurately creates picking lists for all variant combinations, ensuring complete order fulfillment.
Original PR description
When selling a bom kit that have some components that applies on specific variants only, the picking was not correctly created. It would only take one kit variant into account, even if you sold 2…
When selling a bom kit that have some components that applies on specific variants only, the picking was not correctly created. It would only take one kit variant into account, even if you sold 2 kits with different variants. Steps to reproduce: ------------------- * Create a product P * For product P, create an attribute with type "No variant" and values V1 and V2 * Create a BoM Kit for product P, with 3 components C1 C2 and C3 - C2 applies only for variant V1 - C3 applies only for variant V2 * Create a POS order with 2 lines of product P: - 1 with variant V1 - 1 with variant V2 * Validate the order and check the created picking > Observation: Only C1 and C2 are in the picking, C3 is missing Why the fix: ------------ When creating the picking, the code was grouping the order lines by product only, and not by product variant. Therefore, the 2 lines would be grouped together, and only one of the variant-specific components would be taken into account. opw-5051289
This update fixes a security vulnerability where Portal and Internal users could create private knowledge articles without the necessary permissions. The fix restricts article creation to users with 'Create' access, improves the user interface by hiding creation buttons when access is denied, and adds new tests to ensure proper access control.
Original PR description
How to Reproduce : 1. Remove 'Create' access on the 'Knowledge Article' model for Portal and Internal users. 2. Now log in as a Portal. 3. Try to create a new private article. 4. Log in as an…
How to Reproduce : 1. Remove 'Create' access on the 'Knowledge Article' model for Portal and Internal users. 2. Now log in as a Portal. 3. Try to create a new private article. 4. Log in as an Internal user. 5. Try to create a new private article. Both Internal and Portal users can still create private articles even after 'Create access' is removed. Article creation logic in `knowledge.article` was bypassing the usual access rights because of `sudo` (mainly to add the creator as a member, since creation rights on the member model are not granted). This allowed users to create private articles even without create access. This commit introduces: 1. Model-level access check in `create`. Sudo the creation of articles only when the user has create rights. 2. UI imp to hide the '+' button in the sidebar and the `New` button in the topbar when the user doesn't have create access. 3. New test cases to verify that model-level access rights are respected when creating an article. task-4916280 Forward-Port-Of: odoo/enterprise#93034
A recent update to the stock management system introduced a bug that caused errors when creating new stock lots. This fix resolves the issue where the system couldn't properly process newly created lots, preventing certain stock operations from functioning correctly. This ensures all stock transactions, including new lot creation, are processed reliably.
Original PR description
### Description: With the commit 72a87353f76bfa31561bed5eb21377b8e95cb7ee, `_find_delivery_ids_by_lot` has been replaced with another method more optimized. However, it introduces a bug when triggering the compute on a new lot. When `self` is not an existing lot but rather a new lot, it throws an error since the lot doesn't have an ID. ### References: 72a87353f76bfa31561bed5eb21377b8e95cb7ee opw-5355952 Forward-Port-Of: odoo/odoo#237621
This update prevents refund amounts from exceeding original order totals when using global discounts in the Mexican localization (l10n_mx_edi_pos). Previously, this caused errors during global invoice generation. The fix limits refunds to the original order amount, specifically for the Mexican module, to ensure accurate invoicing.
Original PR description
When refunding an order that originally had a global discount, if you didn't refund the discount, the refund total amount would exceed the original order total. This would cause issues when trying to…
When refunding an order that originally had a global discount, if you didn't refund the discount, the refund total amount would exceed the original order total. This would cause issues when trying to generate a global invoice for the mexican localization. Steps to reproduce: ------------------- * Activate the global discount option in any PoS * Open PoS and make a sale with a global discount * Refund the sale without including the discount * Go to the backend * Go to the order list and select the 2 orders you made * Now try to create a global invoice > Observation: The global invoice is in error because the negative lines cannot be distributed correctly. Why the fix: ------------ To avoid this issue with the global invoice we simply prevent the user to generate a refund with a greater amount than the original order. We only apply this limit to the mexican localization because it's the only module that is affected by this issue. Other localizations can still refund without restrictions even if this work flow does not really make sense. opw-4899501
This update fixes an issue where the tax amount on invoices wasn't correctly updated after deleting and adding a line. Specifically, deleting a taxed line followed by an untaxed line would result in an incorrect tax total. The fix adjusts the system's logic to properly recalculate tax amounts in these scenarios.
Original PR description
**PROBLEM** If in an invoice you delete a taxed line, and then add an untaxed line the tax amount might not be up to date. **STEP TO REPRODUCE** 1. create an invoice with 2 lines both taxed. 2.…
**PROBLEM** If in an invoice you delete a taxed line, and then add an untaxed line the tax amount might not be up to date. **STEP TO REPRODUCE** 1. create an invoice with 2 lines both taxed. 2. remove one of the line, and create a new line which is untaxed. 3. confirm the invoice and notice the tax amount is not correct (= to the tax amount with the 2 taxed lines). Be sure to not click on the "journal items" tab, else the bug will not occur. **ISSUE** In _sync_tax_lines(), there is checks to know if we should recompute the tax amount, or keep the old one. We enter the check that checks the changed lines and determine if we should recompute the tax amount. This check doesn't take into account the fact that a line could have been deleted. Because we are in a elif chain, we don't do other checks. **FIX** Moving up in the elif chain the check that test if a base line with tax was removed and recompute the tax amount if that's the case. [opw-5157090](https://www.odoo.com/odoo/project/49/tasks/5157090)