Daily updates from Odoo
Monday, January 19, 2026
176 changes
24 changes
Enhancements to existing features
This update ensures that Thai province names within Odoo are displayed in their native Thai language. Previously, these names were stored in English, leading to inconsistencies. This change improves the accuracy and user experience for Thai users.
Original PR description
State names are not translatable in Odoo, so they should be stored in their native language for consistency. This PR updates all Thai provinces to use their native Thai names. task-5484432 Forward-Port-Of: odoo/odoo#243461
This update aligns the payment field widget in the Enterprise version of Odoo with the Community Edition. This ensures consistency and simplifies the process for users entering payment information, improving usability and reducing potential errors. The change was driven by a need for greater alignment between the two Odoo versions.
Original PR description
Added extra fields to align with the widget in CE task-5258726 Forward-Port-Of: odoo/enterprise#104300
Resolved issues and error corrections
This update removes a restriction that prevented users from inserting records into lists grouped by many2many fields. The previous limitation was unnecessary and blocked functionality without a clear reason. This change ensures users can now seamlessly insert records from these grouped lists.
Original PR description
When we introduced the record-specific insertion from a list, we added a limitation on lists grouped by many2many fields but this limitation makes no sense, it only blocks the users without any clear reason. Task: 5267035 Forward-Port-Of: odoo/enterprise#103869 Forward-Port-Of: odoo/enterprise#103161
This update adjusts the size of 'looking for help' timers in live chat conversations on the discuss sidebar. The change makes the overall appearance of discussion items more balanced and visually appealing. This improves the user experience by creating a cleaner and more organized chat interface.
Original PR description
Timers on "looking for help" live chat conversations on discuss sidebar were slightly too big. This commit reduces the size to make the overal text content of a discuss item more balanced. Before / After <img width="296" height="100" alt="Screenshot 2026-01-16 at 16 58 50" src="https://github.com/user-attachments/assets/32d8e304-c00f-4d2f-bcb9-3b58be7f01c4" /> <img width="298" height="99" alt="Screenshot 2026-01-16 at 16 58 57" src="https://github.com/user-attachments/assets/2cc6fff7-8613-4b56-b44c-22ad72738286" />
A technical error occurred when only the l10n_be_hr_payroll module was installed. This update corrected a configuration issue by moving a field to the appropriate module, preventing a build error. This ensures the Belgian payroll functionality operates correctly.
Original PR description
A traceback about bike_id occurs when only installing l10n_be_hr_payroll. The field bike_id is in the fleet bridge of the belgian payroll. The field is already present in the _get_whitelist_fields_from_template method in that module. Removing the field from the l10n_be_hr_payroll method solves the issue. Runbot build error: https://runbot.odoo.com/odoo/runbot.build.error/234856 task-5504273
This update resolves an issue where the 'Other Input' section of the Payroll app displayed trailing zeros for negative salary attachment counts. The fix adjusts a widget to properly handle negative values, ensuring accurate reporting of negative amounts. This improves the clarity and reliability of payroll data.
Original PR description
Steps to Reproduce: - install Payroll app - create an employee and create a salary attachment. - check the negative value for salary attachment - generate a payslip Issue: - In "Other Input" section, salary attachment count displays value with trailing decimal zeros for negative amounts. Reason: - The field is using the widget float_without_trailing_zeros which should remove the extra decimal zeros but it doesn't work when the value is negative. Solution: - Fix the regular expression in the float_without_trailing_zeros widget to handle negative values and properly remove trailing decimal zeros. task-5477466 Forward-Port-Of: odoo/odoo#243074
This update addresses several minor issues within the l10n_hr_edi module, primarily focused on improving the reliability and user experience of invoice processing. Specifically, it enhances error handling related to fiscalization status checks, improves multi-company API support, and clarifies settings for Company BUs, ensuring smoother invoice generation and approval workflows.
Original PR description
- Adjusting error handling for receiving an empty response from MER for a document fiscalization status. - Adding additional checks for running multi-company-wide MER API methods. - Adjusting how approval API call is handled when confirming a bill. - Adding a tooltip about Company BU in MER settings and missing "company dependent" indicators for the credentials. Continuation of task-4925745 Related to opw-5477846 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244357 Forward-Port-Of: odoo/odoo#244023
A technical issue within the VoIP functionality's test process was causing a tour to fail when using demo data. This commit corrects the tour by ensuring it selects the correct contact associated with the call, resolving the problem and improving the reliability of the test.
Original PR description
`call_activity_chatter_link` tour fails when test contains demo data. When contains demo data, the test select a wrong contact in Contact tab. In this commit, we change to select the first call in Recent tab to ensure this is the contact of the call we just made.
This update fixes an issue where Odoo incorrectly exported negative discounts in Peppol BIS 3 invoices. The change ensures that negative discounts are now correctly classified as surcharges, aligning with PEPPOL standards and preventing calculation errors. This ensures accurate invoice generation and compliance with international trade regulations.
Original PR description
In Peppol BIS 3 (UBL 2.1), negative discounts are logically treated as Surcharges (Charges) rather than Allowances. Previously, Odoo exported negative discounts as an Allowance with a negative amount and a numeric reason code (95). This violated: BR-CL-20 / PEPPOL-EN16931-CL003: Coded charge reasons must belong to the UNCL 7161 (alphabetic) list when ChargeIndicator is 'true'. PEPPOL-EN16931-R120: The line net amount calculation failed due to the negative sign in the calculation. Solution: Dynamically toggles ChargeIndicator based on the discount sign. Swaps AllowanceChargeReasonCode to 'ADK' (Surcharge) for negative discounts. task-5432024 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#241070
This update corrects a missing piece of information required for Chilean SII (Service de Impuestos Internos) compliance within the Odoo Enterprise system. Specifically, the regional office for the Alto Hospicio area has been added, ensuring accurate reporting for businesses operating in that region. This ensures compliance with local tax regulations.
Original PR description
Oficina Regional Alto Hospicio Comuna Alto Hospicio Región Taracapá Forward-Port-Of: odoo/enterprise#102712
This update fixes an issue where the POS product information popup only displayed the first tax applied to a product. Now, the popup correctly shows all taxes associated with the product, separated by commas, providing customers with accurate tax details. This improves the user experience and ensures accurate pricing information.
Original PR description
Before this commit: --- - The POS product info popup displayed only the first tax from `tax_details`, which meant multiple applied taxes were not visible. - The logic fetched a single tax name instead of all tax applied to the product. After this commit: --- - The POS store sends a full list of tax names instead of a single name. - The popup template displays all tax names, comma-separated. task-5406826 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239813
This update resolves a problem where customers couldn't change product selections in the Point of Sale configurator when specific attribute exclusions were set. The issue was previously fixed but reintroduced. The fix removes the code that was incorrectly disabling options, allowing customers to freely select product combinations.
Original PR description
Step to reproduce: - Create 2 attributes with 2 values each A1V1 A1V2 and A2V1 A2V2 - Create a product with these attributes and set the attribute exclusion so that only 2 valid combinations are possible. (ex: a1v1 excludes a2v2 and a1v2 excludes a2v1) - Open PoS and try to add the product to the cart. - The configurator popup will appear. Observation: - You will not be able to change the selection because the other combinations are not correct. Cause: - The issue was already fixed [1] but issue was reintroduced in [2] Fix: - Remove the code, which was causing the issue, we shouldn't disable an option and allow customer to change the combiantion [1] https://github.com/odoo/odoo/commit/5864780ed703f61d763e1b49c33da3bbf8ca32f2 [2] https://github.com/odoo/odoo/commit/6e7c663543ba2b219d492795971f42e3e2c1213e opw-5418977 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241259
This update resolves a technical issue causing duplicate entries in the Accounts Coverage Report. The fix ensures accurate reporting by ignoring identical report lines with the same name and code, improving data reliability. This change primarily impacts the reporting functionality within the Enterprise module.
Original PR description
Reproduce the bug: -Install Ireland(ie) reports -Enable debug mode -Go to Reporting>Balance Sheet>Accounts Coverage Report -The generated sheet should have false positive duplicates error Fix: Ignore the report lines that has the same name and the same code task: 5373732 Forward-Port-Of: odoo/enterprise#101311
This update corrects a bug where a project was automatically created when ordering 0 units of a prepaid service product within a quotation. Previously, the system didn't check if the project was linked to an optional product. Now, the quotation is confirmed without project creation when ordering zero units, ensuring accurate invoicing and order management.
Original PR description
--- ## Short functional explanation of the error Let's say we have a prepaid service as a product, generating a project upon order. When we order 0 units of this product as an optional product, a project is still created. ## Reproduction Steps 1. Create a product of type Service. Set Project in the field Create On Order. Set the Invoicing Policy at Prepaid. 2. Create a quotation containing an optional product with 0 units of this service and click on confirm. ### Expected behavior The quotation is confirmed, but no project is created. ### Unexpected behavior A project linked to the product and the quotation is created. ## Origin of the issue When creating projects linked to order lines, we don't check if such projects are linked to optional products. opw-5406118 Forward-Port-Of: odoo/odoo#240608
This update removes a feature that allowed users to directly open folders from the sync configuration list. This change simplifies the process of selecting and editing configuration rows, leading to a more user-friendly experience. The removal addresses a usability issue that was causing confusion.
Original PR description
Previously, clicking a folder in the sync configuration list redirected the user to the folder view, which made it difficult to select or edit the configuration row. To improve usability, the ability to open folders directly from `documents_account.documents_folder_setting_view_list` has been removed. task-5212503 Forward-Port-Of: odoo/enterprise#103218
This update ensures that newly created General(MISC) entries in the accounting system automatically have ‘no follow-up’ enabled. This simplifies the tracking process for these common transactions and reduces the risk of unnecessary notifications. It's a minor, technical adjustment to improve efficiency.
Original PR description
General(MISC) entries should be no_followup by default. task-5489772 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244309
This update fixes an issue where sorting of picking records was not functioning correctly due to a technical detail in how Odoo compares related data. The change ensures that picking records are sorted accurately, improving the reliability of inventory management processes. This resolves a potential inconsistency in how the system identifies and orders related records.
Original PR description
Ordering recordset based on relationnal field should always take the relational field's `.id` instead of the field itself. This is due to the BaseModel `__gt__` override comparing if a set is included into another and not if the `id` is bigger that the other `id`. runbot : 237512 Forward-Port-Of: odoo/enterprise#104561
This update fixes a minor issue where the employee onboarding tour sometimes finished prematurely, leaving the form in an incomplete state. This prevented users from fully completing the tour and resulted in a confusing error message. The fix ensures the tour waits for form autosave, guaranteeing a clean and successful completion.
Original PR description
This commit fixes an indeterministic error in the hr_salary_calculator_tour where, sometimes, the last tour's steps finish too quickly and doesn't wait for the form's autosave (triggered by the employee autocomplete selection) to complete, leading to a "Tour finished with a dirty form view being open" error. This is kind of a follow-up of https://github.com/odoo/enterprise/commit/5497e947cdfa242c090a3d77d900375bfb067b0f runbot-237794
This update resolves a technical issue related to how live chat and WhatsApp information is combined when creating support tickets. Specifically, the system now correctly merges member and live chat details, ensuring a more seamless and accurate ticketing process. This enhancement improves the overall efficiency of our helpdesk operations.
This update ensures the website's product barcode lookup feature accurately reflects a recent change in Odoo. Specifically, the test now correctly handles scenarios where products created through the website aren't automatically published if a category isn't selected, aligning with a community update.
Original PR description
Align barcodelookup website test with the community change where products created from the website are not auto-published when no category is selected. opw:5408903 SEE ALSO: Community PR:https://github.com/odoo/odoo/pull/242779 Forward-Port-Of: odoo/enterprise#104491 Forward-Port-Of: odoo/enterprise#103778
This update resolves a sporadic issue where the quotation signing tour occasionally failed to complete correctly. The fix adds a deliberate pause within the tour to ensure all interactions have finished loading, resulting in a more reliable and consistent user experience for creating quotes.
Original PR description
This commit fixes the flaky quotation signing tour in sale_management by adding an explicit step to wait for interactions to fully load before proceeding with the next steps. runbot error-224021 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242848 Forward-Port-Of: odoo/odoo#242746
This update resolves an issue where the HTML editor would crash when attempting to remove formatting (specifically color) from a cell after text had been deleted. The fix ensures that the color is correctly removed without triggering an error, improving the stability and usability of the editor. This was a minor bug impacting the functionality of a core feature.
Original PR description
**Current behavior before PR:** Steps to reproduce: - Create a m x n table - Write some text in a cell, apply color on text - Delete text and keep empty colored element - Select cell - Trying to remove format throws infinite loop error in removeAllColor **Desired behavior after PR is merged:** Clicking on remove format button should remove color from empty colored element without causing traceback. task-5454993 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243976 Forward-Port-Of: odoo/odoo#241829
This update fixes an issue where the Netherlands localization incorrectly created duplicate fiscal positions. The change removes the redundant position and properly configures the NL Domestic fiscal position, ensuring accurate reporting for Dutch businesses. This ensures compliance with Dutch tax regulations.
Original PR description
Installing the Netherlands localisation creates two Domestic fiscal positions, both incorrectly configured. This commit removes the empty duplicate fiscal position and properly defines the NL Domestic fiscal position by setting the Country Group, leaving Country empty, and disabling VAT requirement. task-5489829 Forward-Port-Of: odoo/odoo#244183
This update corrects an issue where Odoo incorrectly displayed a 'Resume' prompt after successfully importing large CSV files in batches. The fix ensures the 'Resume' prompt only appears when a batch is truly incomplete, improving the user experience and preventing unnecessary prompts. This resolves a minor annoyance for users importing sizable datasets.
Original PR description
When importing a large file in multiple batches , Odoo incorrectly displays a "Resume" prompt at the end of the process, even though all records have been successfully imported. Steps to reproduce:…
When importing a large file in multiple batches , Odoo incorrectly displays a "Resume" prompt at the end of the process, even though all records have been successfully imported. Steps to reproduce: 1. Create a CSV file with enough records to trigger at least 2 batches 2. Go to any list view and select "Import records". 3. Upload the file and click "Import". 4. Wait for the import to complete. 5. Observe that despite an "X records successfully imported" notification, a warning "Click 'Resume' to proceed..." appears. The issue occurs because the `importRes.nextrow` state variable is updated during intermediate batches but is not cleared when the final batch completes. * In `_executeImportStep`, if `nextrow` is returned (intermediate batch), `importRes.nextrow` is updated. * If `nextrow` is falsy (final batch), the loop is stopped, but `importRes.nextrow` retains the value from the previous batch. * `executeImport` checks `importRes.nextrow` to decide whether to show the `"Resume"` message, leading to a false positive caused by the stale value. This commit fixes the issue by explicitly setting `importRes.nextrow` to `0` in `_executeImportStep` when the server indicates completion (returns a falsy `nextrow`). opw-5343837 Forward-Port-Of: odoo/odoo#241490
12 changes
Enhancements to existing features
This update ensures that Thai province names within Odoo are displayed in their native Thai language. Previously, these names were stored in English, leading to inconsistencies. This change improves the accuracy and user experience for Odoo users in Thailand.
Original PR description
State names are not translatable in Odoo, so they should be stored in their native language for consistency. This PR updates all Thai provinces to use their native Thai names. task-5484432 Forward-Port-Of: odoo/odoo#243461
Resolved issues and error corrections
This update fixes a problem where Odoo inviter notifications were triggered for all invited users, including portal users, leading to unnecessary alerts. Now, inviter notifications only appear when an internal user connects for the first time, streamlining the process and improving the user experience. The notification message has also been updated for clarity.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited…
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited user connected for the first time. This notification was triggered for **all user types**, including portal users. For portal users, this resulted in unnecessary toast notifications and chat window pop-ups. **Current behavior before PR:** --------------------------------- - The inviter is notified when any invited user connects for the first time. - This includes portal users. - Unnecessary notifications and chat pop-ups are shown for portal user connections. **Desired behavior after PR is merged:** ----------------------------------------- - The inviter is notified **only when an internal user** connects for the first time. - Portal users no longer trigger first-connection notifications. - The notification message is updated to: “[Username] just connected for the first time. Wish them luck!” **Task:** [4105780](https://www.odoo.com/odoo/project/1519/tasks/4105780) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242235
This update removes an unnecessary restriction that prevented users from inserting records into lists grouped by many2many fields. The change clarifies the process for adding records to these lists, improving usability and eliminating a frustrating limitation for users. This resolves a technical issue impacting the spreadsheet edition.
Original PR description
When we introduced the record-specific insertion from a list, we added a limitation on lists grouped by many2many fields but this limitation makes no sense, it only blocks the users without any clear reason. Task: 5267035 Forward-Port-Of: odoo/enterprise#103869 Forward-Port-Of: odoo/enterprise#103161
This update removes an unnecessary credit note warning from the GSTR report, streamlining the reporting process. Previously, a warning appeared when a credit note was linked to an invoice, but this has been corrected to ensure accurate GSTR reporting. The change ensures the GSTR report accurately reflects transactions.
Original PR description
This **PR** removes the credit note warning from the GSTR report, as it is not required at the report level. Additionally, when this warning is present on an invoice and the credit note is confirmed, the credit note is set to not checked. The warning will only be cleared once the credit note is posted and checked task-5469000 Forward-Port-Of: odoo/enterprise#104565 Forward-Port-Of: odoo/enterprise#102106
This update resolves a technical issue that caused translation tests to fail due to delays in loading sidebar content. By preloading translated elements, the sidebar now renders fully before tests begin, ensuring accurate and reliable test results. This improves the overall stability and efficiency of the translation process.
Original PR description
When opening the sidebar in translation mode, translated elements must be preloaded before the sidebar renders. Without preloading, the fetch requires an extra tick to complete, causing tests that immediately check sidebar content to fail because the sidebar isn't fully open yet. runbot-237540
This update fixes an issue where keyboard navigation within the website builder's image cropping tool was unreliable. Now, users can properly validate or dismiss the cropper using the 'Enter' and 'Escape' keys, significantly improving the user experience and accessibility. This ensures a smoother workflow for website content creation.
Original PR description
Steps to reproduce: - Select an image in the website builder. - Open the cropping tools. - Press Enter. - Try to discard the cropper. Before this commit, focus stayed on the toolbar crop button so `Enter` opened another cropper, `Escape` closed the sidebar, and the cropper buttons were not reachable via keyboard. After this commit, the cropper grabs focus and handles `Enter/Escape` itself so keyboard interactions validate or dismiss the cropper. task-5432043
This update ensures that when a customer's preferred delivery carrier is set (e.g., Azure Interior), it's automatically used when creating a shipping order. Previously, this functionality was broken, requiring manual carrier selection. This change improves the shipping process and reduces potential errors.
Original PR description
Steps to reproduce: - Create a storable product “P1” - Go to partner *Azure Interior*: - Set 'property_delivery_carrier_id' to any carrier - Create a sale order: - Customer: Azure Interior - Add 1 unit of P1 - Click on "Add shipping" Problem: Since this commit: https://github.com/odoo/odoo/pull/203955/files#diff-9f1fd37c63903c4c029f099d485a3f9831446850be55695a4603c05ef298885bL134-L137 the carrier defined on the partner is no longer loaded by default. Solution: Check if the carrier defined on the partner is among the allowed carriers, and if so, set it automatically. opw-5220118
This update corrects a data issue within the Odoo Enterprise system related to Chilean VAT (SII) reporting. Specifically, the necessary information for the 'Alto Hospicio' regional office has been added, ensuring accurate tax calculations and compliance. This ensures the system correctly handles transactions originating from this region.
Original PR description
Oficina Regional Alto Hospicio Comuna Alto Hospicio Región Taracapá Forward-Port-Of: odoo/enterprise#102712
A test related to inventory adjustments was failing intermittently due to a race condition caused by a lingering notification. This commit resolves the issue by automatically closing the notification message after the first adjustment, ensuring accurate test results. This improves the reliability of the inventory management process.
Original PR description
Before this commit, it could happen the test `test_inventory_packaging` fails sometime. It fails while checking the last assert: ```python self.assertEqual(self.product1.qty_available, 15.0) ``` The…
Before this commit, it could happen the test `test_inventory_packaging` fails sometime. It fails while checking the last assert: ```python self.assertEqual(self.product1.qty_available, 15.0) ``` The error message is: `AssertionError: 16.0 != 15.0` In the tour, we do a first inventory adjustment where we set the `proquct1` qty to 16, then we do a second inventory adjustment where we set its qty to 15. Now, the assert sometime fails because in the tour, the last step check the success message is visible: ```javascript trigger: ".o_notification_bar.bg-success", ``` The issue with that is that we already do a first inventory adjstment and its success notification is still visible while processing the second inventory adjustment, creating a race condition. To fix that, we just need to close the first notification message, and to do so, this commit back-ports and uses the step utils' method `checkNotificationMessage` (see [1]) since this method checks a notification message is there and close it. [1]: https://github.com/odoo/enterprise/pull/101495 runbot-build-error: [227692](https://runbot.odoo.com/odoo/runbot.build.error/227692) Forward-Port-Of: odoo/enterprise#104481
This update fixes an issue where order processing within picking batches wasn't functioning correctly. The change ensures that order lines are accurately linked to picking IDs by using the ID field instead of the field itself, resolving a fundamental comparison problem within the Odoo system. This improves the reliability of order fulfillment.
Original PR description
Ordering recordset based on relationnal field should always take the relational field's `.id` instead of the field itself. This is due to the BaseModel `__gt__` override comparing if a set is included into another and not if the `id` is bigger that the other `id`. runbot : 237512 Forward-Port-Of: odoo/enterprise#104561
This update resolves an issue where Odoo couldn't process XML invoices for customer invoices if the 'CustomizationID' tag was missing. The tag is a required element in UBL files, so this fix ensures invoices are correctly imported and processed, preventing import failures.
Original PR description
[FIX] account_edi_ubl_cii: xml import error customization id This error happens when the user tries to import an xml invoice in accounting > customer > invoice and the CustomizationID tag is empty. The cause of this is the CustomizationID tag that exists in the file, but it's empty. This tag is mandatory in a ubl file, so we cannot process the file if it's empty. opw-5238398 Forward-Port-Of: odoo/odoo#236668
This update fixes a bug in the website builder where changing a setting would incorrectly open the 'Edit' tab instead of the 'Theme' tab. The fix reorganizes the code to ensure the correct tab is displayed after a setting change, improving the user experience.
Original PR description
In commit 281ce591d4271a15dc867b439365cb41e9dee0b4, the condition for the `initiaTab` introduced a mistake: the actual value is ignored, and a truthy value is interpreted as `blocks`. This commit fixes the operation order and move the logic to a single place. Steps to reproduce: - Open website builder - Go to "Theme" tab - Change an option that reloads (like "Show header" in last section) - Bug: it goes to "Edit" (aka customize) tab task-5722163
8 changes
Enhancements to existing features
This update ensures that Thai province names within Odoo are displayed in their native Thai language. Previously, these names were stored in a translated format, leading to inconsistencies. This change improves the accuracy and user experience for Odoo users in Thailand.
Original PR description
State names are not translatable in Odoo, so they should be stored in their native language for consistency. This PR updates all Thai provinces to use their native Thai names. task-5484432 Forward-Port-Of: odoo/odoo#243461
Resolved issues and error corrections
This update fixes a problem where Odoo inviter notifications were triggered for portal users, leading to excessive notifications. Now, inviters only receive notifications when an internal user connects for the first time, streamlining the process and improving the user experience. The notification message has also been updated for clarity.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited…
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited user connected for the first time. This notification was triggered for **all user types**, including portal users. For portal users, this resulted in unnecessary toast notifications and chat window pop-ups. **Current behavior before PR:** --------------------------------- - The inviter is notified when any invited user connects for the first time. - This includes portal users. - Unnecessary notifications and chat pop-ups are shown for portal user connections. **Desired behavior after PR is merged:** ----------------------------------------- - The inviter is notified **only when an internal user** connects for the first time. - Portal users no longer trigger first-connection notifications. - The notification message is updated to: “[Username] just connected for the first time. Wish them luck!” **Task:** [4105780](https://www.odoo.com/odoo/project/1519/tasks/4105780) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242235
This update removes an unnecessary restriction on inserting records into spreadsheets when they're grouped by many2many fields. The previous limitation was causing confusion and blocking users without a clear reason. This change streamlines the process for adding records to spreadsheets, improving usability.
Original PR description
When we introduced the record-specific insertion from a list, we added a limitation on lists grouped by many2many fields but this limitation makes no sense, it only blocks the users without any clear reason. Task: 5267035 Forward-Port-Of: odoo/enterprise#103869 Forward-Port-Of: odoo/enterprise#103161
This update corrects a missing piece of information within the Odoo Enterprise software related to SII (Service de Identificación e Intercambio de Datos) regional offices in Chile. Specifically, the 'Alto Hospicio' regional office and its associated details have been added, ensuring accurate tax reporting for users operating in that area. This ensures compliance with Chilean tax regulations.
Original PR description
Oficina Regional Alto Hospicio Comuna Alto Hospicio Región Taracapá Forward-Port-Of: odoo/enterprise#102712
A test used to fail intermittently due to a race condition during inventory adjustments. This commit resolves the issue by automatically closing a notification message that lingered after the first adjustment, ensuring accurate test results. This improves the reliability of the inventory packaging process.
Original PR description
Before this commit, it could happen the test `test_inventory_packaging` fails sometime. It fails while checking the last assert: ```python self.assertEqual(self.product1.qty_available, 15.0) ``` The…
Before this commit, it could happen the test `test_inventory_packaging` fails sometime. It fails while checking the last assert: ```python self.assertEqual(self.product1.qty_available, 15.0) ``` The error message is: `AssertionError: 16.0 != 15.0` In the tour, we do a first inventory adjustment where we set the `proquct1` qty to 16, then we do a second inventory adjustment where we set its qty to 15. Now, the assert sometime fails because in the tour, the last step check the success message is visible: ```javascript trigger: ".o_notification_bar.bg-success", ``` The issue with that is that we already do a first inventory adjstment and its success notification is still visible while processing the second inventory adjustment, creating a race condition. To fix that, we just need to close the first notification message, and to do so, this commit back-ports and uses the step utils' method `checkNotificationMessage` (see [1]) since this method checks a notification message is there and close it. [1]: https://github.com/odoo/enterprise/pull/101495 runbot-build-error: [227692](https://runbot.odoo.com/odoo/runbot.build.error/227692) Forward-Port-Of: odoo/enterprise#104481
This update fixes an issue where sorting of picking records was not functioning correctly due to a technical detail in how Odoo compares related data. The change ensures that picking records are accurately sorted, improving the reliability of inventory management processes. This resolves a potential inconsistency in how data is processed.
Original PR description
Ordering recordset based on relationnal field should always take the relational field's `.id` instead of the field itself. This is due to the BaseModel `__gt__` override comparing if a set is included into another and not if the `id` is bigger that the other `id`. runbot : 237512 Forward-Port-Of: odoo/enterprise#104561
This update fixes an issue where invalid warehouse addresses were causing repeated geolocation requests to OpenStreetMap. The change now sets default coordinates for invalid addresses, preventing further attempts and improving the reliability of location data on the website. This results in a smoother user experience when selecting warehouse locations.
Original PR description
When a warehouse location had no coordinates, a request to geolocate the address was made to OpenStreetMap every time the location selector was open. However, when the address was invalid, the geolocation failed, and no coordinates were set, which caused further geolocation requests being continuously sent. This commit changes the geolocation behavior to set invalid coordinates for the address when the request fails, thus disabling future geolocation attempts for that address.
This update fixes an issue where clicking links within the Odoo chat window on mobile devices caused the window to remain open and block the newly opened page. The change automatically folds the chat window after a link click, ensuring users can immediately see the relevant page below. This enhances usability and prevents frustration for mobile users.
Original PR description
Clicking on an odoo link in the chat window will take the user to the related page in odoo. However, in mobile view, the chat window remains unfolded and covers the entire page, so the user can't see the newly opened page below the chat window unless they fold the chat window. This change fixes this by folding the chat window in mobile view when clicking an odoo link inside the chat window. task-4762503 Forward-Port-Of: odoo/odoo#208440
7 changes
Enhancements to existing features
This update ensures that Thai province names within Odoo are displayed in their native Thai language, improving consistency and accuracy. Previously, these names were stored in a translated format, which has now been corrected to align with standard practices.
Original PR description
State names are not translatable in Odoo, so they should be stored in their native language for consistency. This PR updates all Thai provinces to use their native Thai names. task-5484432 Forward-Port-Of: odoo/odoo#243461
Resolved issues and error corrections
This update fixes a bug where inviter notifications were sent to portal users when they connected for the first time. Now, inviters only receive notifications for internal users, reducing unnecessary alerts and improving the user experience. The notification message has also been updated for clarity.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited…
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited user connected for the first time. This notification was triggered for **all user types**, including portal users. For portal users, this resulted in unnecessary toast notifications and chat window pop-ups. **Current behavior before PR:** --------------------------------- - The inviter is notified when any invited user connects for the first time. - This includes portal users. - Unnecessary notifications and chat pop-ups are shown for portal user connections. **Desired behavior after PR is merged:** ----------------------------------------- - The inviter is notified **only when an internal user** connects for the first time. - Portal users no longer trigger first-connection notifications. - The notification message is updated to: “[Username] just connected for the first time. Wish them luck!” **Task:** [4105780](https://www.odoo.com/odoo/project/1519/tasks/4105780) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242235
This update increases the width of the barcode printed on customer receipts. Previously, the barcode was too narrow, causing scanning difficulties. This change ensures receipts can be easily and reliably scanned, improving the customer experience and order processing efficiency.
Original PR description
Step to reproduce; - install pos_loyalty - create a loyalty program of type "next order coupon" with minimum spend of 1$. - open pos and settle a order, see receipt. Issue: - currently bar-code is too narrow, making it difficult for to be scanned Fix: - increase the width of barcode, so it can be easily scanned. <table> <tr> <td> <b>Before</b> </td> <td> <b>After</b> </td> </tr> <tr> <td> <img width="451" height="508" alt="image" src="https://github.com/user-attachments/assets/a0d1e95e-0a9d-4552-977a-0ad9686867b8" /> </td> <td> <img width="456" height="517" alt="image" src="https://github.com/user-attachments/assets/40d04ac4-9ffc-4f81-a063-31b3ea26b4e1" /> </td> </tr> </table> opw-5363916 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242469
This update resolves an issue where tables inserted into the To-Do editor appeared after the existing text instead of before it. The fix streamlined the table insertion process, moving the logic to a more robust system that correctly handles cursor positioning and DOM updates. This ensures tables are consistently placed where users expect.
Original PR description
### Steps to Reproduce : - Open To-Do and type some text. - Place the cursor at the start of the block. - Insert a table. (e.g.: /table) - The table appears after the text instead of before it. ### Purpose of this PR: - Table insertion logic was previously duplicated inside TablePlugin, where it tried to manually split text and inline nodes before inserting the table. However, this responsibility is now correctly handled by `DomPlugin.insert()`, which already: - deletes the current selection if needed. - splits text and inline nodes safely. - handles block boundaries and unsplittable elements. - normalizes the DOM after insertion. - places the cursor at a valid position. task-5480759 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243242
This update resolves an issue where the SAFT export process would fail for Austrian companies without defined contacts. The fix eliminates a redundant check, ensuring the system correctly validates the presence of at least one contact before generating the SAFT file. This prevents errors and ensures accurate SAFT reporting.
Original PR description
[FIX] l10n_at_saft: saft export traceback When no contacts is defined on the company and the user tries to download the SAFT to XML, a traceback is shown Steps to reproduce the traceback: - Install l10n_at_saft module and create an Austrian company with no contacts - Create a few invoices for this company - Open the General Ledger report and export SAFT to XML, the traceback should appear no-task Forward-Port-Of: odoo/enterprise#104483 Forward-Port-Of: odoo/enterprise#104144
This update corrects a data omission in the Odoo Enterprise system related to Chilean SII (Service de Impuestos Internos) reporting. Specifically, the Regional Office for the Alto Hospicio area in Taracapá has been added, ensuring accurate tax reporting for businesses operating in that region. This ensures compliance with Chilean tax regulations.
Original PR description
Oficina Regional Alto Hospicio Comuna Alto Hospicio Región Taracapá Forward-Port-Of: odoo/enterprise#102712
This update resolves a bug in the Romanian Sales & Fiscal (SAFT) reporting module that was causing errors when processing different unit of measure categories. The fix ensures reports generate accurately by correctly handling data processing, minimizing potential disruptions to reporting functionality.
Original PR description
`saft_template` in `l10n_ro_saft` adds a table that loops over the different Unit of Measures (`uoms`) available. The issue is that if the `uoms` are part of different categories (ie: Length and Weight) we get a singleton error as we're trying to access a non-relational field of a recordset with multiple records. The commit fixes the error by using the already defined variable `uom` OPW-5499918 Forward-Port-Of: odoo/enterprise#104478
9 changes
Enhancements to existing features
This update ensures that Thai province names within Odoo are displayed in their native Thai language, improving accuracy and consistency. Previously, these names were stored in a translated format, which has now been corrected for a better user experience.
Original PR description
State names are not translatable in Odoo, so they should be stored in their native language for consistency. This PR updates all Thai provinces to use their native Thai names. task-5484432 Forward-Port-Of: odoo/odoo#243461
This update adds an index to the employee record database. This will significantly speed up searches and reporting related to employee identification, improving the overall performance of the HR module. The change ensures faster data retrieval and enhances the efficiency of HR processes.
Original PR description
Task: 4384436 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update resolves an issue where the HTML editor was incorrectly adding tabs to various content blocks, causing unexpected indentation when users selected mixed content. The fix now ensures tabs are only applied to contenteditable paragraph blocks, improving editor usability and preventing formatting errors.
Original PR description
#### Description of the issue this PR addresses: - Tab indentation was applied to non-paragraph and non-contenteditable blocks, leading to incorrect indentation behavior when a selection contained mixed block types. #### Desired behavior after PR is merged: - Filter selected blocks to indent only contenteditable paragraph-related elements (h1–h6, p, pre, blockquote, and div.o-paragraph), while excluding blocks marked as contenteditable="false". #### Steps to Reproduce: - Open a new to-do record. - Insert: Table, Table of Content, Banners, attachment, (18.2 - Toggle List) - Select all editor content using Ctrl + A. - Press the Tab key multiple times. => Multiple editor tab characters are inserted at unintended positions. task-5452410 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243635 Forward-Port-Of: odoo/odoo#241806
This update removes an unnecessary restriction that prevented users from inserting records into lists grouped by many2many fields. The change clarifies the process for inserting records from these lists, improving usability and functionality. This resolves a previous limitation that was not providing a clear benefit.
Original PR description
When we introduced the record-specific insertion from a list, we added a limitation on lists grouped by many2many fields but this limitation makes no sense, it only blocks the users without any clear reason. Task: 5267035 Forward-Port-Of: odoo/enterprise#103869 Forward-Port-Of: odoo/enterprise#103161
This update fixes an issue where the Builder List component was forcing developers to include default values for props, even when those values weren't needed. Now, the system only validates default props if actual props are provided, streamlining the development process and reducing unnecessary configurations. This ensures a more efficient and flexible Builder List experience.
Original PR description
Previously we validating the `default` props with the defaultPropsValue If someone didn't passed the props. which force to pass the default value even it isn't needed. 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 clarifies how preset selections work within the Point of Sale (POS) system. Specifically, it now visually indicates when preset options are presented as pop-ups, aligning with a recent change in how two-preset selections are handled. This ensures a smoother and more intuitive user experience for POS operations.
Original PR description
In this commit: =============== Update POS tours to explicitly indicate popup usage when selecting presets, to support the new auto-toggle behavior introduced when only two presets are configured. Task-5491093 Related Comm. PR: https://github.com/odoo/odoo/pull/244455
This update resolves an issue where the 'Other Input' section of the Payroll app incorrectly displayed trailing zeros for negative salary attachment counts. The fix adjusts a widget to properly handle negative values, ensuring accurate reporting of negative amounts. This improves the clarity and reliability of payroll data.
Original PR description
Steps to Reproduce: - install Payroll app - create an employee and create a salary attachment. - check the negative value for salary attachment - generate a payslip Issue: - In "Other Input" section, salary attachment count displays value with trailing decimal zeros for negative amounts. Reason: - The field is using the widget float_without_trailing_zeros which should remove the extra decimal zeros but it doesn't work when the value is negative. Solution: - Fix the regular expression in the float_without_trailing_zeros widget to handle negative values and properly remove trailing decimal zeros. task-5477466 Forward-Port-Of: odoo/odoo#243074
This update resolves a technical error within the WPS report testing process. Previously, a test was incorrectly creating bank records, which has now been corrected by ensuring the correct company ID is used. This ensures accurate report generation and data integrity.
Original PR description
The test was creating a res.partner.bank with the id of company passed as partner_id. This commit fixes this issue by passing the partner_id of the company instead. build_error-237562
This update corrects a problem where product images weren't consistently being removed from the website, particularly for products with variations. The fix ensures the image is fully loaded into the webpage before the removal button is clicked, preventing errors and improving the user experience. This ensures accurate product displays on the website.
Original PR description
With this commit, we fix tours: - website_sale.remove_main_product_image_with_variant - website_sale.add_and_remove_main_product_image_no_variant where we want to remove the product image. This fix add a step to ensure the image is in DOM before clicking on the remove button. error-runbot-id~237766 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
23 changes
Enhancements to existing features
This update ensures that Thai province names within Odoo are displayed in their native Thai language, improving accuracy and consistency. Previously, these names were stored in English, leading to potential translation issues. This change enhances the user experience for Thai-speaking customers and users.
Original PR description
State names are not translatable in Odoo, so they should be stored in their native language for consistency. This PR updates all Thai provinces to use their native Thai names. task-5484432 Forward-Port-Of: odoo/odoo#243461
Resolved issues and error corrections
This update resolves an issue where administrators were unexpectedly redirected to the 2FA login page, even when 2FA was disabled. The fix ensures that 2FA is only triggered for privileged Australian users when it's actually required, improving the login experience and preventing unnecessary security prompts.
Original PR description
Steps to reproduce: -------------------------- 1. Install l10n_au_hr_payroll_api with demo data 2. Logout and login again with `admin` Issue: -------- The login flow redirects to the Two-factor Authentication page even when 2FA is not enforced (auth_totp_enforce disabled) Cause: ------- https://github.com/odoo/enterprise/blob/8e8890f84b1c6b5b54f46e950af63b701c1dde4e/l10n_au_hr_payroll_api/models/res_users.py#L32-L38 Here, it overrides `_mfa_type()` to always return `totp_mail` for privileged Australian users, implicitly triggering the 2FA flow. Since the admin user belongs to [all privileged groups](https://github.com/odoo/enterprise/blob/8e8890f84b1c6b5b54f46e950af63b701c1dde4e/l10n_au_hr_payroll_api/models/res_groups.py#L11-L29), this affects the default login flow even when 2FA is disabled. Solution: --------- Only return `totp_mail` for privileged Australian users when 2FA is actually required by the `auth_totp.policy`. opw-5419671
This update fixes an issue where a popup remained open and displayed an empty white rectangle after deleting content. It also resolved problems with options still being displayed and causing errors when interacted with. This improves the user experience when editing popups.
Original PR description
wip
This update fixes a problem where inviter notifications were sent to portal users when they connected for the first time, causing unnecessary alerts. Now, inviters only receive notifications when an internal user connects. The notification message has also been updated for clarity.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited…
**Description of the issue this PR addresses:** ------------------------------------------------ When a user was invited to Odoo, the inviter received a first-connection notification when the invited user connected for the first time. This notification was triggered for **all user types**, including portal users. For portal users, this resulted in unnecessary toast notifications and chat window pop-ups. **Current behavior before PR:** --------------------------------- - The inviter is notified when any invited user connects for the first time. - This includes portal users. - Unnecessary notifications and chat pop-ups are shown for portal user connections. **Desired behavior after PR is merged:** ----------------------------------------- - The inviter is notified **only when an internal user** connects for the first time. - Portal users no longer trigger first-connection notifications. - The notification message is updated to: “[Username] just connected for the first time. Wish them luck!” **Task:** [4105780](https://www.odoo.com/odoo/project/1519/tasks/4105780) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242235
This update removes a restriction that prevented users from inserting records into lists grouped by many2many fields. The previous limitation was unnecessary and blocked functionality without a clear reason. This change ensures users can now seamlessly add records from these grouped lists.
Original PR description
When we introduced the record-specific insertion from a list, we added a limitation on lists grouped by many2many fields but this limitation makes no sense, it only blocks the users without any clear reason. Task: 5267035 Forward-Port-Of: odoo/enterprise#103869 Forward-Port-Of: odoo/enterprise#103161
This update enhances how users manage their consent for online account synchronization. The change allows for a more flexible approach to consent management, addressing a previous technical issue and expanding compatibility with different data providers. This improves user control and data privacy.
Original PR description
In this commit:https://github.com/odoo/enterprise/commit/bf5b7d03fe8e138ee8bc0246d3d148638db5d620 we introduce a message on the account_online_link to be able to manage the consent. But since manage_consent is not a field of account.online.linki would traceback, we changed the position of the code by popping the value. Also changed the url to use the provider_type to be able to use the route with any provider if needed task-5187621 Forward-Port-Of: odoo/enterprise#104519 Forward-Port-Of: odoo/enterprise#102428
This update ensures the website's barcode lookup feature works correctly when products are created without a category selection. It aligns the test with a recent community change, preventing newly created products from automatically being published – a key improvement for data accuracy and streamlined workflows.
Original PR description
Align barcodelookup website test with the community change where products created from the website are not auto-published when no category is selected. opw:5408903 SEE ALSO: Community PR:https://github.com/odoo/odoo/pull/242779 Forward-Port-Of: odoo/enterprise#104364 Forward-Port-Of: odoo/enterprise#103778
A recent issue prevented Attendance Officers/Admins from correctly accessing the employee onboarding feature within the HR Attendance module. This update restricts access to the onboarding menu for users without full Employee rights, preventing errors and ensuring proper functionality. This change improves stability and usability for users with the appropriate access levels.
Original PR description
# Issue Getting a traceback when trying to access the onboarding menu with just Attendance: Officer access right. # Steps to reproduce 1. Log in with a demo user, with just Attendance: Officer access right. 2. Navigate to Attendances app, and yes, you don't see Configuration, but still you can access the Onboarding menu by typing some random text on search. 3. Now, navigate to the Onboarding menu, and try setting a badge of an employee 4. You get a traceback. # Fix Attendance: Officer/Admin without Employee rights (either Officer/Admin) will not be able to access the Attendances Onboarding menu. Only the user with both the rights can access it. task-5267189 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where the 'Other Input' section in the payroll module incorrectly displayed trailing zeros for negative salary attachment amounts. The fix adjusts a widget to properly handle negative values, ensuring accurate count representation. This improves the user experience and data integrity for negative salary attachments.
Original PR description
Steps to Reproduce: - install Payroll app - create an employee and create a salary attachment. - check the negative value for salary attachment - generate a payslip Issue: - In "Other Input" section, salary attachment count displays value with trailing decimal zeros for negative amounts. Reason: - The field is using the widget float_without_trailing_zeros which should remove the extra decimal zeros but it doesn't work when the value is negative. Solution: - Fix the regular expression in the float_without_trailing_zeros widget to handle negative values and properly remove trailing decimal zeros. task-5477466 Forward-Port-Of: odoo/odoo#243074
This update resolves a recurring issue where the quotation signing tour occasionally failed to complete correctly. The fix adds a deliberate pause within the tour to ensure all interactions have finished loading, resulting in a more stable and reliable user experience. This improves the overall efficiency of the sales process.
Original PR description
This commit fixes the flaky quotation signing tour in sale_management by adding an explicit step to wait for interactions to fully load before proceeding with the next steps. runbot error-224021 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242746
This update fixes a usability issue where the filter button in list views was hidden behind the column resize handle, making it difficult to click. By increasing the button's layering, the change ensures a more consistent and intuitive user experience for selecting filters. This improves overall ease of use.
Original PR description
Description of the issue/feature this PR addresses: The filter button in lists views appear under the column resize handle, meaning that the handle can be grabbed accidentally when trying to click the filter button. Layering the button above the handle makes it more consistent to click. Video showing before/after behavior: https://drive.google.com/file/d/1Tmj-qX3nxsoG-QfO4LpGdp0adAfC69J5/view?usp=sharing --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue preventing users in French (fr_FR) from importing bank statements through the document app. The fix corrects a language-dependent ordering of import actions, ensuring the import process functions correctly. This improves the usability of the document app for all users.
Original PR description
**PROBLEM** You can't import a bank stamement from the document app in some languages (ie. fr_FR). **STEP TO REPRODUCE** 1. install account_document 2. upload a camt file to the Finance/ folder (you…
**PROBLEM** You can't import a bank stamement from the document app in some languages (ie. fr_FR). **STEP TO REPRODUCE** 1. install account_document 2. upload a camt file to the Finance/ folder (you can find them in account_bank_statement_import_camt) 3. switch the user language to french. 4. try importing the camt file, it will fail saying you have no right to execute this action in the folder. **CAUSE** In the data of document_account, the children actions of the import bank statement action don't have any sequence defined. This means there sequence will have a default value (5). Because they have the same sequence, their order of execution depend on their name, and it could changes depending on the language loaded. In English, the order is : 1. import the bank statement 2. move the file to some folder In French, the order is : 1. move the file to some folder 2. import the bank statement The import action doesn't work, because the action can't be executed in the folder we moved the file into. opw-5413409
This update resolves an issue where demo data installation caused incorrect packaging behavior. Specifically, a pre-existing package name interfered with the test process, leading to items being packed into the demo data package instead of new ones. The fix ensures a unique package name is created during demo data installation.
Original PR description
The test `test_put_in_pack_in_new_created_package` does a simple thing: 1. We scan a product then put it in pack; 2. We scan a second package than scan the package created during previous put in pack. To be sure we scan the package created in 1., we reset the package sequence so we're sure the created package will have 'PACK0000001' as name. The issue is: when demo data are installed, a package with this name is already created, which means when we scan 'PACK0000001' in step 2., instead of packing the second line into the newly created package, we pack it into the demo data package. To avoid that, this commit sets the package's sequence to 42 so we're sure the created package will be named 'PACK0000042'. runbot-build-error: [98126575](https://runbot.odoo.com/odoo/runbot.build.error/237802)
This update resolves a test failure that occurred when the current date was in 2027. The issue stemmed from a subscription end date set for December 31, 2026, causing the system to incorrectly close recurring invoices. This ensures the subscription functionality operates correctly regardless of the current year.
Original PR description
Before this commit, the test was failing if today date was in 2027. it occured because the end_date of the subscription was on the 31 of December 2026. As a result, when running in 2027, the _create_recurring_invoice method would close the order. runbot-id-237658
This update corrects a bug that caused an unnecessary 'Resume' prompt to appear after large CSV imports, even when all records were successfully processed. The fix ensures the 'Resume' prompt only appears when a batch is truly incomplete, improving the user experience and preventing confusion. This change enhances the reliability of the import process.
Original PR description
When importing a large file in multiple batches , Odoo incorrectly displays a "Resume" prompt at the end of the process, even though all records have been successfully imported. Steps to reproduce:…
When importing a large file in multiple batches , Odoo incorrectly displays a "Resume" prompt at the end of the process, even though all records have been successfully imported. Steps to reproduce: 1. Create a CSV file with enough records to trigger at least 2 batches 2. Go to any list view and select "Import records". 3. Upload the file and click "Import". 4. Wait for the import to complete. 5. Observe that despite an "X records successfully imported" notification, a warning "Click 'Resume' to proceed..." appears. The issue occurs because the `importRes.nextrow` state variable is updated during intermediate batches but is not cleared when the final batch completes. * In `_executeImportStep`, if `nextrow` is returned (intermediate batch), `importRes.nextrow` is updated. * If `nextrow` is falsy (final batch), the loop is stopped, but `importRes.nextrow` retains the value from the previous batch. * `executeImport` checks `importRes.nextrow` to decide whether to show the `"Resume"` message, leading to a false positive caused by the stale value. This commit fixes the issue by explicitly setting `importRes.nextrow` to `0` in `_executeImportStep` when the server indicates completion (returns a falsy `nextrow`). opw-5343837
This update fixes an issue where newly created appraisal templates weren't appearing in the selection list when launching a campaign. The problem stemmed from a technical error excluding templates based on company settings. The fix ensures that all templates, including newly created ones, are correctly displayed, streamlining the campaign setup process.
Original PR description
**Version:** - 19.-0 **Steps to reproduce:** - Install the Appraisal module. - Click the Launch Campaign button. - Open the wizard and create a new appraisal template. **Issue:** - Newly created appraisal templates do not appear in the selection list. **cause:** - When a new template is created, the company field is automatically set by default. - However, the domain used to fetch templates does not include the company condition, causing the newly created template to be excluded from the results. **Solution:** - remove domain and use check_company=True to get the company. Task-5416593
This update corrects a data issue within the Odoo Enterprise system related to Chilean SII (Service de Impuestos Internos) reporting. Specifically, it adds the necessary information for the 'Alto Hospicio' Regional Office, ensuring accurate tax reporting compliance. This ensures the system correctly handles regional office details for tax purposes.
Original PR description
Oficina Regional Alto Hospicio Comuna Alto Hospicio Región Taracapá Forward-Port-Of: odoo/enterprise#102712
This update simplifies the GSTR report generation by removing a redundant credit note warning. Previously, a warning appeared on invoices when a credit note was issued, which has now been corrected. The warning is now automatically cleared when the credit note is fully processed and checked.
Original PR description
This **PR** removes the credit note warning from the GSTR report, as it is not required at the report level. Additionally, when this warning is present on an invoice and the credit note is confirmed, the credit note is set to not checked. The warning will only be cleared once the credit note is posted and checked task-5469000 Forward-Port-Of: odoo/enterprise#104565 Forward-Port-Of: odoo/enterprise#102106
This update simplifies the Odoo Point of Sale receipt by removing the unit price display for individual items within combo products. This change, aligned with a recent Odoo 19.0 update, reduces customer confusion and provides a cleaner, more straightforward receipt experience. The removal ensures the total combo price is clearly presented.
Original PR description
Steps to reproduce: - In POS, select a combo product, confirm, and pay for it. - When the receipt is shown, the price per unit for the combo and for each product inside the combo is showing. Issue: - The price calculation of the individual products constituting the combo and showing the unit price of the combo when the combo quantity is 1 is confusing for the customer. Fix: - Since Odoo 19.0, we stopped showing prices for child lines in a combo on the cashier side; the same logic was followed here for the receipt. - The price per unit for a combo isn't necessary to appear when the quantity of the combo is 1.
This update fixes an issue where contacts with duplicate courses were incorrectly merged, leading to data inconsistencies. Now, the system prevents merging contacts with identical courses, displaying an error message to the user. This ensures data accuracy and a better user experience when managing attendees for website slides.
Original PR description
Expected Behaviour: Contacts with Duplicate courses should not be merged and the merge should fail. Actual Behaviour before the Fix: Contacts with duplicate courses are getting merged and the duplicate course is kept in the destination contact. Behaviour with the Fix: Contacts with duplicate courses are blocked from being merged and an error message is shown to the user saying that the reason the merge is blocked is a duplicate course. Steps to reproduce: 1- Go to one of the courses 2- Add two attendees to the course 3- Go to Contacts App 4- Select the two attendees you added to the course 5- Try merging the two contacts Before the fix, the merging will happen. After the fix, the merging will stop and an error message will appear.
This update fixes an issue where the Odoo Studio export process incorrectly excluded certain related and computed fields. The team has refined the exclusion logic to accurately handle these fields, ensuring a more reliable export experience. This change was validated by the Industry team and addresses a previous bug.
Original PR description
This commit fixes the computation of excluded fields for the studio export models. Before this commit, the excluded fields computation was considering computed and related fields in a similar way but…
This commit fixes the computation of excluded fields for the studio export models. Before this commit, the excluded fields computation was considering computed and related fields in a similar way but there are subtle differences that cause the excluded fields to sometimes be wrong. While analyzing the heuristic with the ORM team, we decided to separate the computation of related and computed fields. After this commit, we have a refined computation of excluded fields for related and computed fields: - for computed fields (that are not related ones), we always exclude them except when they are writeable (i.e. stored or with inverse) - for related fields, we always exclude them when the relation is in the list of related models to exclude. We also exclude them when they are not writeable on the current record only (not the source record), except if they are required. Some export scenarios have been tested manually and brought with them adaptations in the hardcoded lists of default fields to exclude. The Industry team agreed with these changes. Task id: opw-4974787
This update fixes an issue where sorting of picking records wasn't functioning correctly due to a technical detail in how Odoo compares related data. The change ensures that picking records are accurately sorted based on their identifiers, improving data consistency and reliability. This resolves a potential problem with reporting and data analysis.
Original PR description
Ordering recordset based on relationnal field should always take the relational field's `.id` instead of the field itself. This is due to the BaseModel `__gt__` override comparing if a set is included into another and not if the `id` is bigger that the other `id`. runbot : 237512 Forward-Port-Of: odoo/enterprise#104561
A test used to fail intermittently due to a race condition during inventory adjustments. This update ensures the test accurately reflects the process by closing a notification message after the first adjustment, preventing confusion and ensuring correct results. This improves the reliability of our inventory testing.
Original PR description
Before this commit, it could happen the test `test_inventory_packaging` fails sometime. It fails while checking the last assert: ```python self.assertEqual(self.product1.qty_available, 15.0) ``` The…
Before this commit, it could happen the test `test_inventory_packaging` fails sometime. It fails while checking the last assert: ```python self.assertEqual(self.product1.qty_available, 15.0) ``` The error message is: `AssertionError: 16.0 != 15.0` In the tour, we do a first inventory adjustment where we set the `proquct1` qty to 16, then we do a second inventory adjustment where we set its qty to 15. Now, the assert sometime fails because in the tour, the last step check the success message is visible: ```javascript trigger: ".o_notification_bar.bg-success", ``` The issue with that is that we already do a first inventory adjstment and its success notification is still visible while processing the second inventory adjustment, creating a race condition. To fix that, we just need to close the first notification message, and to do so, this commit back-ports and uses the step utils' method `checkNotificationMessage` (see [1]) since this method checks a notification message is there and close it. [1]: https://github.com/odoo/enterprise/pull/101495 runbot-build-error: [227692](https://runbot.odoo.com/odoo/runbot.build.error/227692) Forward-Port-Of: odoo/enterprise#104481
11 changes
Enhancements to existing features
This update ensures that Thai province names within Odoo are displayed in their native Thai language, improving accuracy and consistency. This change avoids translation issues and provides a more natural experience for users operating in Thailand.
Original PR description
State names are not translatable in Odoo, so they should be stored in their native language for consistency. This PR updates all Thai provinces to use their native Thai names. task-5484432 Forward-Port-Of: odoo/odoo#243461
This update expands Odoo's ability to handle Ukrainian Tax Identification Numbers (TINs). Previously, the system only accepted 12-digit numbers, preventing users from correctly entering 8-digit Ukrainian company and individual numbers. This change ensures accurate data entry for Ukrainian businesses and individuals.
Original PR description
with this commit:- - We are adding support for Ukrainian Tax ID numbers of 8 digits, which was 12 previously. - The following formats are now accepted: - National company numbers: 8 digits (e.g., 12345678) - European company numbers: 8 digits prefixed with 'UA' (e.g., UA12345678) - Individual numbers: 12 or 10 digits (e.g., 123456789012) - This change allows users to enter Ukrainian TINs that were previously incorrectly rejected due to length restrictions. task-5414806 opw-5373469
Resolved issues and error corrections
This update fixes a usability issue where the barcode on customer receipts was too narrow, making it difficult for staff to scan. The barcode width has been increased to ensure reliable scanning and accurate order processing. This improves the efficiency of our point-of-sale operations.
Original PR description
Step to reproduce; - install pos_loyalty - create a loyalty program of type "next order coupon" with minimum spend of 1$. - open pos and settle a order, see receipt. Issue: - currently bar-code is too narrow, making it difficult for to be scanned Fix: - increase the width of barcode, so it can be easily scanned. <table> <tr> <td> <b>Before</b> </td> <td> <b>After</b> </td> </tr> <tr> <td> <img width="451" height="508" alt="image" src="https://github.com/user-attachments/assets/a0d1e95e-0a9d-4552-977a-0ad9686867b8" /> </td> <td> <img width="456" height="517" alt="image" src="https://github.com/user-attachments/assets/40d04ac4-9ffc-4f81-a063-31b3ea26b4e1" /> </td> </tr> </table> opw-5363916 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242469
This update corrects a bug that occurred when attempting to change a tax lock date to a past date. The fix prevents the system from generating incorrect default values and triggering an error, ensuring accurate reporting. This improves the stability and reliability of financial reports.
Original PR description
To reproduce the issue, on a company in Luxembourg: 1) Set a tax lock date to November 30th 2) Attempt to change the tax lock date to November 15th ===> Lock date violation error. This happens because _generate_default_external_values still gets called in case the lock date is set back in the past (since _get_current_period_dates call in _create_default_report_external_values returns a tuple basically containing (former lock date + 1 day, new lock date)). Doing so, it tries generating a default external value with a value of 0 (because no data will ever be available in such an impossible date interval), but the previously set lock date prevents it, and raises the error. opw-5383010 Forward-Port-Of: odoo/enterprise#102756
This update corrects a bug that prevented users from importing XML invoices through the accounting module when the 'CustomizationID' tag was missing. The fix ensures that all UBL files now include this mandatory tag, allowing successful invoice processing. This resolves import errors and improves data accuracy.
Original PR description
[FIX] account_edi_ubl_cii: xml import error customization id This error happens when the user tries to import an xml invoice in accounting > customer > invoice and the CustomizationID tag is empty. The cause of this is the CustomizationID tag that exists in the file, but it's empty. This tag is mandatory in a ubl file, so we cannot process the file if it's empty. opw-5238398
This update resolves an issue where contacts created within a company branch couldn't be selected as customers in Field Service. Now, users operating from a branch company can seamlessly choose these contacts, mirroring their availability in Sales Order. This improves Field Service functionality and streamlines customer management within branch operations.
Original PR description
Steps to Reproduce: 1. Create a branch under an existing company. 2. Create a contact in company (so the contact is visible only to the company). 3. Switch to the branch of the company. 4. Open Field Service and create a new record. 5. In the *Customer* field, try to select the contact created earlier. Issue: The contact created under the company is not selectable in the *Customer* field in Field Service. Current behaviour: The same contact is visible in the Contacts app, and also selectable in Sales Order — but not in the Field Service. Expected behaviour: The contact created under the company should be selectable as a customer in Field Service when the current user is operating from that branch. Fix: Added domain on the field partner_id from xml in field services task's views. Task-5114444
This update resolves a problem where GS1 barcodes were causing errors during scanning, preventing products from being correctly identified. The fix allows the system to gracefully handle GS1 barcodes that don't conform to date formatting rules, ensuring accurate product and location detection.
Original PR description
Steps to reproduce: - Activate the GS1 nomenclature - Create a product with barcode: 15099590483921 - Scan the product from the Barcode app main menu Problem: A ValidationError is raised: "A GS1…
Steps to reproduce: - Activate the GS1 nomenclature - Create a product with barcode: 15099590483921 - Scan the product from the Barcode app main menu Problem: A ValidationError is raised: "A GS1 barcode nomenclature pattern was matched. However, the barcode failed to be converted to a valid date." Explanation: GS1 barcodes must follow a strict nomenclature based on well-defined rules. For example, a GS1 product barcode should start with the Application Identifier 01 followed by 14 digits. The GS1 parser processes the barcode rule by rule and applies the first matching rule. In this case, the barcode 15099590483921 is interpreted as a date because it starts with "15", which corresponds to a GS1 Application Identifier for a date. As a result, the parser attempts to convert the first six digits into a date and raises a ValidationError. Solution: Catch the ValidationError raised during GS1 date parsing in main_menu and explicitly reset parsed_results to False, allowing the normal main menu resolution logic to continue. This prevents GS1 parsing errors from blocking valid barcodes and ensures that product, picking, or location detection still works as expected. opw-5357611
This update resolves an issue where embedded buttons in the control panel were getting cropped due to incorrect height calculations during dragging. The fix ensures buttons accurately display their size, improving the user experience and preventing visual distortion. This change improves the overall appearance and functionality of the control panel.
Original PR description
The `o_embedded_actions` buttons are getting cropped when they are long enough. This is due to the `overflow-hidden` property which is now applied when no element are actively dragged. When an element is dragged after a css transformation, eg. the `o_dragged_embedded_action`, `getBoundingClientRect()` is returning the element height with the transformation. This creates an excess height on the `o_embedded_actions` due to the placeholder button having it's transformed height instead of the button height. Using offsetHeight returns the element size without the transform. Note this is not done on the width, because the width without the transform can lead to text-truncation. task-5225696 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue within the l10n_ro_saft module that was causing errors when generating SAFT reports. The fix ensures accurate reporting by correctly handling unit of measure data, preventing a 'singleton error' that impacted report generation. This improves the reliability of the SAFT reporting process.
Original PR description
`saft_template` in `l10n_ro_saft` adds a table that loops over the different Unit of Measures (`uoms`) available. The issue is that if the `uoms` are part of different categories (ie: Length and Weight) we get a singleton error as we're trying to access a non-relational field of a recordset with multiple records. The commit fixes the error by using the already defined variable `uom` OPW-5499918 Forward-Port-Of: odoo/enterprise#104478
Code cleanup and technical improvements
This update enhances the testing process for Odoo's Arabic accounting modules (l10n_ar). Specifically, a new testing method has been implemented to better validate invoice data, and the entire test suite has been updated for consistency and accuracy. This ensures the Arabic accounting features continue to function correctly and reliably.
Original PR description
- Implemented a working `assert_json` method on `AccountTestInvoicingCommon`, that also supports the ignore_schema system and quick save using the `SAVE_JSON` test tag. - Refactors the whole test suite of `l10n_ar*` modules to use the new accounting test helpers properly. task-4891206
This update streamlines the testing process for the l10n_ar_edi module by automatically verifying data against JSON files. This change allows tests to run without external modes and simplifies updates to test data through a simple tag, improving reliability and maintainability.
Original PR description
This commit refactors the whole `l10n_ar_edi` test suite to use the new helpers, and made it possible for the test to (finally) be run without external mode. Now, when running these new tests, the test framework will by default assert the request data with their associated JSON file. When a change is made, new overwrites for the test files can be easily changed by just adding the `SAVE_JSON` test tag on the command to run the tests. task-4891206
6 changes
Resolved issues and error corrections
This update ensures Odoo continues to work seamlessly with the latest itsme API version (v2). By updating the API route, the system now correctly processes itsme requests, maintaining reliable identity verification for users. This change is a routine maintenance update.
Original PR description
After this commit, the route of the itsme gets updated from "v1" to "v2" in the `sign_identity_request` call, in order to follow the new api. task-5499804
This update resolves a technical error within the `l10n_ro_saft` module that was preventing accurate reporting for Romanian Standardized Accounting Forms (SAFT). The fix ensures the system correctly handles different unit of measure categories, avoiding a 'singleton error' that impacted report generation. This improves the reliability of SAFT reporting for Romanian businesses.
Original PR description
`saft_template` in `l10n_ro_saft` adds a table that loops over the different Unit of Measures (`uoms`) available. The issue is that if the `uoms` are part of different categories (ie: Length and Weight) we get a singleton error as we're trying to access a non-relational field of a recordset with multiple records. The commit fixes the error by using the already defined variable `uom` OPW-5499918
This update fixes an error in the Swiss VAT reporting module that was incorrectly displaying reverse charge tax amounts as negative. The fix ensures accurate VAT reporting by properly handling negative tax rates used to model reverse charge transactions, preventing incorrect VAT calculations.
Original PR description
**Steps to reproduce:** * Install the **l10n_ch** module for a Swiss company. * Create a vendor bill for a **foreign vendor**. * Apply a reverse charge tax: * **8.1% R C** (figure **383a**), or * **7.7% R C** (figure **382a**). * Confirm the vendor bill. * Go to **Accounting → Reporting → Tax Report**. * Generate the VAT report for the relevant period. **Observed behavior:** * Figure **383a** (8.1% reverse charge) or **382a** (7.7% reverse charge) is reported as **negative**. * This leads to incorrect VAT reporting. **Cause:** * Reverse charge taxes use **negative tax rates** to model the reverse mechanism. * The Swiss tax report formulas for figures **383a** and **382a** applied an additional negative sign. **Fix:** * Override the tax-tag aggregation logic to invert the sign for these figures only for Swiss companies (CH). opw-5257445
This update prevents errors when creating inter-company invoices by ensuring payment terms are compatible with the receiving company. Previously, payment terms were incorrectly applied, causing invoice posting to fail. Now, only company-specific payment terms are used, streamlining inter-company transactions.
Original PR description
**Steps to reproduce:** * Install `Accounting` and `sales` modules. * Create two companies and enable **Inter-Company Transactions** with **Synchronize invoices/bills** in settings for both…
**Steps to reproduce:** * Install `Accounting` and `sales` modules. * Create two companies and enable **Inter-Company Transactions** with **Synchronize invoices/bills** in settings for both companies. * Create a **payment term** assigned to **Company A**. * Create a **sale order** from Company A to Company B using that payment term. * Confirm the sale order and create the **invoice**. * Post the invoice to trigger the inter-company vendor bill. **Observed behavior:** * The generated **vendor bill** for Company B uses **Company A’s payment term**. * Posting fails because the payment term is incompatible with Company B. **Cause:** * Inter-company document creation reuses payment terms without checking whether they belong to the **target company**. * Payment terms from the source company can be propagated to the destination document. **Fix:** * Ensure only **company-compatible** payment terms are applied when creating inter-company sale orders, purchase orders, and invoices. * Payment terms belonging to a different company are now ignored. **NOTE**: test is not implemented due to technical limitations. Inter-company invoice synchronization relies on UI context propagation that cannot be replicated in unit tests. The payment term validation logic depends on web client context flags that are only set during real UI interactions, not programmatic execution. opw-5392745
This update resolves an issue where the Amazon connector wasn't correctly identifying key delivery modules for major carriers like UPS, FedEx, USPS, and DHL. By mapping these modules, the connector now functions reliably with these carriers, ensuring accurate order processing and fulfillment within the Amazon integration.
Original PR description
Amazon connector did not recognize the _rest delivery modules (ups_rest, fedex_rest, usps_rest, dhl_rest). This maps them to the correct carrier names, consistent with existing mappings.
This update resolves an issue where the 'Month 13' column in the Mexican Trial Balance report incorrectly displayed data. The fix removed a redundant 'balance' column and corrected a hardcoded value, ensuring accurate reporting for Mexican companies. This improves the reliability of financial reports.
Original PR description
With l10n_mx company: 1 - Add the balance column to the “Trial Balance” accounting report 2 - Create a journal entry for the date 12/31/2024 for 5000 as a credit on the account 119.01.01 VAT due and balance it with 5000 as a debit on another account 3 - Open the Trial Balance report and click on the “Month 13” filter as well as the year 2024. Notice that the “Month 13” column has some numbers when there should not be a number in that column. Delete the balance column from the “Trial Balance” accounting report and notice that the numbers now appear in their appropriate columns. In the _l10n_mx_set_options_month_13 the way to find the initial value, month 13 and end value columns was hardcoded. opw-5222117