Daily updates from Odoo
Thursday, April 3, 2025
50 changes
23 changes
Enhancements to existing features
Spreadsheet dashboard files across several business apps were updated to the latest internal data format. This prepares the dashboards for upcoming visual improvements such as cleaner table styling and row hover effects, with no immediate functional change expected for users.
Additional tests improve confidence that planning resources, reporting figures, and export behavior work as expected. This reduces the risk of regressions in planning, timesheet forecasting, and sales-related planning workflows without changing day-to-day user features.
Original PR description
_*= project_timesheet_forecast, project_timesheet_forecast_sale
This commit introduces multiple test cases to ensure robust functionality across various aspects of the planning modules.
- Test the creation of material resources and assigning roles to them.
- Validate the accurate calculation of the following measures in `Planning Analysis` report.
- Billable Allocated Hours
- Non-Billable Allocated Hours
- Remaining Hours
- Effective hours
- Verify that the default exported field is correctly included in the export fields
when the "I want to update data" option is selected.
task-3231758Field service, subscription, and stock-related workflows now assign the right manager permissions when demo defaults are unavailable. This helps keep core business scenarios working reliably across companies and sales subscriptions.
Original PR description
_*= project_sale_subscription, sale_subscription, industry_fsm_stock The default demo is not loading, and the default groups have been moved to the demo. Therefore, I had to apply the project manager group to the current user. task-4677936
The rental eCommerce module was updated to stay compatible with recent changes in the main Odoo website sales platform. This helps ensure rental product pages and shopping flows continue to work consistently after the broader platform update.
Original PR description
Adapt according to changes in community. [task-4447730](https://www.odoo.com/web#id=4447730&cids=1&menu_id=4720&action=333&active_id=1695&model=project.task&view_type=form) Requires: - https://github.com/odoo/odoo/pull/197320 - https://github.com/odoo/upgrade/pull/7469
Resolved issues and error corrections
This update adjusts internal app customizations so they stay aligned with the latest core Odoo method definitions. It helps prevent technical linting issues and reduces the risk of errors when these modules interact with the main platform.
Original PR description
See community branch for lint test. odoo/odoo#203296
This fixes unstable automated tests for VOIP and room features so they run faster and more consistently. It reduces the risk of false failures during development and helps teams validate changes with less delay.
Original PR description
Issue: non-deterministic JS unit tests in VOIP. See commits for details. Community: https://github.com/odoo/odoo/pull/204471
This fix makes document-based accounting actions more reliable by allowing a journal to be identified either by its internal ID or by its code. It reduces the chance of errors when creating accounting entries from documents, especially in configurations that reference journals differently.
Original PR description
refactor account_create_account_move() to accept an ID of a journal or code of journal
This fixes a visual issue in Documents where the shortcut indicator could disappear when users dragged files over the search panel while holding Ctrl. Users now keep the expected visual guidance during drag-and-drop actions, reducing confusion.
Original PR description
Before this commit, when dragging documents over the search panel while holding the ctrl key the icon disappear preventing the user from the visual help. This commit fix the issue. Task-4689834
The Documents app now opens the server actions list with a default filter showing only top-level actions. This makes the list easier to navigate and helps users focus on the actions most relevant for configuration or review.
Original PR description
Add Top-level actions filter to the documents server actions list by default
Code cleanup and technical improvements
Customer-facing subscription actions in the portal, such as changing plans and closing subscriptions, have been rebuilt using Odoo’s newer interaction framework. This keeps the same business capabilities while making the subscription portal code easier to maintain and align with ongoing platform modernization.
Original PR description
**PR Description:** - Replace public widgets for portal subscriptions with new Interaction alternatives. This continues the refactoring work for public widgets. **Steps to Reproduce the Features:** -…
**PR Description:**
- Replace public widgets for portal subscriptions with new Interaction alternatives.
This continues the refactoring work for public widgets.
**Steps to Reproduce the Features:**
- **SubscriptionChangePlan:**
- Log in as an **Admin**.
- Navigate to the **Subscriptions app** and open a subscription with a recurring payment.
- Modify the **Self-Service** section of the subscription plan to include an optional plan
(e.g., update "Monthly" to include "Yearly" as an option).
- If the modified plan isn’t available on an existing subscription, create a new subscription for a **portal user**.
- Log in as the **portal user** and open the subscription with the modified plan.
(Alternatively, you can preview it as an **Admin**.)
- The **Change Plan** button should appear.
To test the feature, append `&change_plan=true` to the URL.
- **SubscriptionCloseFinish & SubscriptionCloseSelect:**
- Navigate to **Subscriptions app** → **Configuration** → **Recurring Plans**.
- Create a new plan or modify an existing one.
- In the **Recurring Plans** form, enable the **Closable** option under the **Self-Service** section.
This allows customers to close their own subscriptions via the portal.
- Open any subscription and click **Preview**.
- The **Close Subscription** button should now be visible on the left.
Clicking it will trigger the two widgets.This change updates internal mobile app tests to use a shared helper for preparing web request data. It keeps test behavior consistent with the main Odoo codebase and reduces maintenance effort, with no expected impact on day-to-day users.
Original PR description
- use `build_rpc_payload` helper function in `HttpCase`. Related PR: [#196819][1] [1]: https://github.com/odoo/odoo/pull/196819
Miscellaneous changes
Following a change of behaviour of the library, hidden headers are not considered in a chart data, and the pie chart of Cost Repartition was stripped of its data. Task-4687551 Forward-Port-Of: odoo/enterprise#82673
Original PR description
Following a change of behaviour of the library, hidden headers are not considered in a chart data, and the pie chart of Cost Repartition was stripped of its data. Task-4687551 Forward-Port-Of: odoo/enterprise#82673
Description ----------- The non-stored field `user_has_access` is the primary `ir.rule` used for a `knowledge.article` and is included in every query. As a result, the method `_search_user_has_access` is frequently called and quickly becomes a performance bottleneck. This is particularly noticeable when opening the Knowledge app, as it involves reading the displayed article along with loading the sidebar. This update optimizes the method as follows: - For generic article access, the opti
Original PR description
Description ----------- The non-stored field `user_has_access` is the primary `ir.rule` used for a `knowledge.article` and is included in every query. As a result, the method…
Description
-----------
The non-stored field `user_has_access` is the primary `ir.rule` used for a `knowledge.article` and is included in every query. As a result, the method `_search_user_has_access` is frequently called and quickly becomes a performance bottleneck. This is particularly noticeable when opening the Knowledge app, as it involves reading the displayed article along with loading the sidebar.
This update optimizes the method as follows:
- For generic article access, the optimization leverages the field `inherited_permission`, which already contains the propagated `internal_permission` of the article along the hierarchy. This removes the need to recompute these permissions dynamically with a complex query since the data has already been precomputed.
- For member access, the query logic has been revised while maintaining the same outcome: Previously, the process involved: `for all articles, append the member and their permission, recurse into child articles for all in-sync and permissionless articles, and propagate the member's permission. Finally, discard all articles without any set permission.`, The new approach reverses the logic to avoid the need for discarding at the end and iterating through all articles: `for the articles the member belongs to, propagate the member's permission to its child articles, provided the child is in-sync, has no explicit permission, and the partner is not already a member of that article.` Although the last condition may seem counterintuitive, the initial set of articles considered encompasses those the member is linked to already. This also avoids cases where a parent article's member permission would overwrite differing permissions on its child articles.
- Additionally, `set` manipulations are used to handle IDs, thereby preventing the injection of large ID lists into multiple domain leaves. This improves query parsing and avoids poor query execution plans that could be caused by excessively large ID lists.
Benchmark
---------
On odoo.com, opening the Knowledge app from the Apps dashboard:
| Request | Before | After | Speed-up |
|----------------------|--------|-------|----------|
| web_read | 1.69s | 160ms | **10x** |
| get_sidebar_articles | 1.64s | 160ms | **10x** |
In a shell, searching articles with `[('user_has_access', '=', True)]`:
| User Type | Before | After | Speed-up |
|-----------------------|--------|-------|----------|
| `sudo` | 251ms | 35ms | **7x** |
| regular internal user | 577ms | 58ms | **10x** |
Reference
---------
task-4633813
Notice
------
⚠️ Note to clients/partners that might read this: For the full benefits of the patch, deploy the indexes that were added in this PR. This can be done by Upgrading the module `knowledge`, or creating the indexes manually in database. The patch should still be a net-benefit even for database without the indexes deployed.
Forward-Port-Of: odoo/enterprise#82773
Forward-Port-Of: odoo/enterprise#80971When you uncheck the 'Other dependent' box, it keeps the value in the dependent fields. This leads to have values set on the employees that are not visible. To avoid this issue, we empty the 'dependent' fields when we uncheck the 'Other Dependent' checkbox. This is the same behaviour of what is done in the onchange on backend view. Forward-Port-Of: odoo/enterprise#82794
Original PR description
When you uncheck the 'Other dependent' box, it keeps the value in the dependent fields. This leads to have values set on the employees that are not visible. To avoid this issue, we empty the 'dependent' fields when we uncheck the 'Other Dependent' checkbox. This is the same behaviour of what is done in the onchange on backend view. Forward-Port-Of: odoo/enterprise#82794
We need to use the payment method linked to the biggest paid amount, not the payment method linked to the biggest order. Forward-Port-Of: odoo/enterprise#82693
Original PR description
We need to use the payment method linked to the biggest paid amount, not the payment method linked to the biggest order. Forward-Port-Of: odoo/enterprise#82693
`prevent_zero_price_sale` was not set according to the right prices for `website_sale_renting` and `website_sale_subscription` opw-4650460 See also: https://github.com/odoo/odoo/pull/202867 Forward-Port-Of: odoo/enterprise#82685 Forward-Port-Of: odoo/enterprise#82082
Original PR description
`prevent_zero_price_sale` was not set according to the right prices for `website_sale_renting` and `website_sale_subscription` opw-4650460 See also: https://github.com/odoo/odoo/pull/202867 Forward-Port-Of: odoo/enterprise#82685 Forward-Port-Of: odoo/enterprise#82082
Bug: When creating a new payslip for a salesperson with work entries of code LEAVE1731, we would get a traceback. Reason: Since we were creating the record and did not yet save, the code was calling a method that did an SQL query on ids of self which is empty. Fix: We created a new method that uses the orm instead to handle this specific case. Forward-Port-Of: odoo/enterprise#78269
Original PR description
Bug: When creating a new payslip for a salesperson with work entries of code LEAVE1731, we would get a traceback. Reason: Since we were creating the record and did not yet save, the code was calling a method that did an SQL query on ids of self which is empty. Fix: We created a new method that uses the orm instead to handle this specific case. Forward-Port-Of: odoo/enterprise#78269
This commit addresses post merge fixes in the UI after the big rework of the sidebar and UI improvements: - Fix alignment of the sign items when being dropped, as from now on sign items follow the pre-defined alignment and are not forced to be rendered in the center anymore. task-4555838 Forward-Port-Of: odoo/enterprise#79448
Original PR description
This commit addresses post merge fixes in the UI after the big rework of the sidebar and UI improvements: - Fix alignment of the sign items when being dropped, as from now on sign items follow the pre-defined alignment and are not forced to be rendered in the center anymore. task-4555838 Forward-Port-Of: odoo/enterprise#79448
Steps to reproduce ================== - Install knowledge,contacts,web_studio - Open a contact record - Open studio - Add a many2many pointing to a knowledge article - Save and exit studio - Link an article and open it => this.env.ensureArticleName is not a function Cause of the issue ================== The knowledge article view uses a js_class and contains widgets that except the custom subenv from the controller. As the js_class isn't used in x2many views, the view crashe
Original PR description
Steps to reproduce ================== - Install knowledge,contacts,web_studio - Open a contact record - Open studio - Add a many2many pointing to a knowledge article - Save and exit studio - Link an article and open it => this.env.ensureArticleName is not a function Cause of the issue ================== The knowledge article view uses a js_class and contains widgets that except the custom subenv from the controller. As the js_class isn't used in x2many views, the view crashes. Solution ======== We can simply blacklist that model when searching for relations to add opw-4513295 Forward-Port-Of: odoo/enterprise#81068
In the Knowledge editor, the "New Article" button uses a "pen" icon, while most buttons for creating a new record in Odoo use a "plus" icon. To ensure consistency across views, we are replacing the "pen" icon with a "plus" icon. task-4690444 Forward-Port-Of: odoo/enterprise#82741
Original PR description
In the Knowledge editor, the "New Article" button uses a "pen" icon, while most buttons for creating a new record in Odoo use a "plus" icon. To ensure consistency across views, we are replacing the "pen" icon with a "plus" icon. task-4690444 Forward-Port-Of: odoo/enterprise#82741
When the fulfilment channel changes from Amazon, the user currently must delete the offer to create a new one, as they can't change the amazon_feed_ref. (Please note that due to an API change, this field does in fact include a JSON containing the product type, fulfilment channel, and the feed reference.) Indeed, when the listing is changed, Amazon doesn't get the information. This means we will continue to update the inventory if that offer was in FBM. Or not updating the inventory of a no
Original PR description
When the fulfilment channel changes from Amazon, the user currently must delete the offer to create a new one, as they can't change the amazon_feed_ref. (Please note that due to an API change, this…
When the fulfilment channel changes from Amazon, the user currently must delete the offer to create a new one, as they can't change the amazon_feed_ref. (Please note that due to an API change, this field does in fact include a JSON containing the product type, fulfilment channel, and the feed reference.) Indeed, when the listing is changed, Amazon doesn't get the information. This means we will continue to update the inventory if that offer was in FBM. Or not updating the inventory of a now FBM offer. While that second case would only require the user to delete and recreate a new offer (which would be a bother but not that problematic), sending a quantity to a FBA offer would trigger a well known problem of ghost listing on Amazon, where Amazon will consider having both channels, and randomly set an order as either FBA or FBM, until that ghost listing quantity drop down to 0. When catching a discrepancy, we'll thus reset the value of the amazon_feed_ref, so that it'd be pulled again later if needed by the sync inventory with, this time, the correct value. This would also stop the inventory synchronization of a potentially FBA offer. As for any stock synchronization that might happen between the listing changes from Amazon side and the first order received in FBA, we decided against forcing the FBM quantity to 0 on all FBA offer every time, to avoid sending too many useless calls for a corner case. As the product was until now sold in FBM, in most cases, it can still be until the end of the ghost listing. If not, our support is aware of it and can force the quantity to 0 again. opw-4681035 Forward-Port-Of: odoo/enterprise#82754
Isuue: - When on a relatively slower network, if we double click the comments icon present on the social media post, the comments dialog box opens up twice. - Can be spotted easily on the runbot as well. Video of the issue https://drive.google.com/file/d/1abe7Cq3otsVNH4hGRHFV34jC3uIGHY6m/view?usp=drive_link Reason: - There is no existing mechanism present to prevent this kind of scenario. Fix: - We simply use a flag to prevent this. We set/reset the value as we desire. Task-418
Original PR description
Isuue: - When on a relatively slower network, if we double click the comments icon present on the social media post, the comments dialog box opens up twice. - Can be spotted easily on the runbot as well. Video of the issue https://drive.google.com/file/d/1abe7Cq3otsVNH4hGRHFV34jC3uIGHY6m/view?usp=drive_link Reason: - There is no existing mechanism present to prevent this kind of scenario. Fix: - We simply use a flag to prevent this. We set/reset the value as we desire. Task-4184968 Forward-Port-Of: odoo/enterprise#82717 Forward-Port-Of: odoo/enterprise#82411
After the refactor by https://github.com/odoo/enterprise/commit/84cc09959d82dbceb4fe673b85464ef3d8630606 the noCertificado field in the COA (Chart of Accounts) report became invalid. - On a Mexican company, generate the COA report from the Trial Balance. - In the generated XML, the noCertificado tag exceeds 20 characters. This tag should contain exactly 20 characters and match the noCertificado from the CFDI report. This commit applies the same string manipulation for the COA repoart a
Original PR description
After the refactor by https://github.com/odoo/enterprise/commit/84cc09959d82dbceb4fe673b85464ef3d8630606 the noCertificado field in the COA (Chart of Accounts) report became invalid. - On a Mexican company, generate the COA report from the Trial Balance. - In the generated XML, the noCertificado tag exceeds 20 characters. This tag should contain exactly 20 characters and match the noCertificado from the CFDI report. This commit applies the same string manipulation for the COA repoart as the cfdi report (in the _add_certificate_cfdi_values method in the l10n_mx_edi module) source: http://www.sat.gob.mx/esquemas/ContabilidadE/1_1/BalanzaComprobacion/BalanzaComprobacion_1_1.xsd opw-4644489 Forward-Port-Of: odoo/enterprise#82430
27 changes
Enhancements to existing features
A new testing helper makes it easier to open dropdown menus and choose matching items during automated checks. This is an internal improvement that helps developers write more reliable tests, with no direct change for end users.
Original PR description
This commit adds a new helper in dom_test_helpers' contains which allows to open a dropdown and select the first item which matches with the input value.
Resolved issues and error corrections
Fixed an issue in the HTML editor where adding an emoji from the picker could unexpectedly move the page upward. This keeps users in the right place while writing or editing content, reducing frustration and accidental context loss.
Original PR description
**Current behavior before PR:** - Inserting an emoji using the emoji picker caused the page to scroll up. **Desired behavior after PR is merged:** - The page no longer scrolls up when an emoji is inserted using the emoji picker. task:4686860
This fixes an error that could occur when creating a journal entry and clearing the date field. The accounting workflow now handles the missing date more gracefully, helping users avoid unexpected interruptions while entering financial records.
Original PR description
Description of the issue/feature this PR addresses: When creating a new journal entry, clearing the date field causes an error because the system tries to compute the placeholder name field using the date, which is missing. Current behavior before PR: An error is raised when the date field is cleared while creating a journal entry, as the computation of the name field relies on the date field being present. Desired behavior after PR is merged: The system will check if the date field is present before computing the name field. If the date field is missing, a default value will be used, or a clear validation error will be displayed to the user. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents unused Mail-related test data from being kept in memory between automated test runs. It improves test reliability and efficiency without changing customer-facing behavior.
Original PR description
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite…
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite `global_filter_editor.test.js` with 51 tests - make a snapshot of memory after test => observe that there's thousands of RecordList objects kept in memory (8976) instead of a few hundreds (176) These tests do not make use of any mail code, but the manifest has dependency on `@mail` thus it loads mail store. This test suite is a good candidate to show constant memory issue from discuss code: 51 tests each having 176 record lists result in 8976 record lists in total. The JS records are expected to be garbage collected after each test, thanks to store not being accessible from components and services (app is unmounted at end of test). However, `Rtc.iceServers` field was preventing this and leads to keeping store in memory. This is happening because the default value of this field is `DEFAULT_ICE_SERVERS`, which is defined on window object globally and is shared among all the different stores in the test suite. The field is computed too, so an internal `onChange` also contributed in keeping a reference to observing this shared object. This commit fixes the issue by providing a deep copy of this global variable as the default value of `iceServers`, allowing proper gc of store between tests of the suite.
A small layout issue in kanban views has been corrected so the top border of the first card no longer disappears when users zoom in or out. This improves visual consistency in apps such as Project without changing workflows or functionality.
Original PR description
Steps to reproduce ================== - Go to the project app - Open any project - zoom / dezoom a few times => At some point, the top border on the first kanban card will disappear. Cause of the issue ================== This is due to a negative margin on the bottom of kanban cards. This is made in order to have no duplicated border between cards. Solution ======== We can set a top margin for the first card. opw-4668595
This fixes an issue in the HTML editor where pasting a single paragraph could replace the formatting of the existing block. Now only the paragraph's contents are pasted, preserving the user's current text style and layout.
Original PR description
**Current behavior before PR:** - Before commit [1], when pasting a single paragraph node, only its content was inserted, and the paragraph tag was omitted. However, due to these changes, the entire paragraph node is now inserted instead of just its content, causing the target node to be replaced by the paragraph node. **Desired behavior after PR is merged:** - When pasting a single base container, only its content will be inserted. As a result,the base container will no longer replace the target block format. [1]: https://github.com/odoo/odoo/commit/fef32b42beb80eb27bd3c2cfa8c4c2f3c86ad12d task: 4585788
Microsoft Calendar now relies on the shared Microsoft account service to manage sign-in refresh tokens. This keeps authentication handling in the right place, reducing maintenance risk and helping calendar connections stay reliable.
Original PR description
Before this commit, the refresh_token handling was done in the calendar module, even though it relates to token management and should therefore be handled by microsoft_account, which manages tokens and requests to Microsoft. task-4653852
The file viewer now appears correctly when users open images from inside a dialog, such as previewing marketing emails. This prevents the viewer from being hidden behind the dialog and keeps image previews usable.
Original PR description
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. Steps to reproduce: - Open Marketing Card app - Open the form view for one of the campaign - Click "Send" button - A dialog opens and display the preview of the mail to send - Double-click an image in the Mail Body tab (or add one first, if none are present) => the file viewer appears behind the dialog and is not usable. task-4387904
A project module automated test was adjusted so it waits for a task form to finish saving before making further changes. This prevents false failures in slower network conditions, improving confidence in release testing without changing user-facing functionality.
Original PR description
To reproduce the issue run the tour in slow 4G mode in network of developer tools. The issue occurs due to the fact that changes are made during saving of form and which just refreshes due to the model being loaded and tour tries to save the changes which don't exist and cant find the save button thus failing tour. Now we add a step to make sure form is saved first and then changes are made. Pre saas-17.4 there was a legacy function which determines if element is visible or not and this was changed in the PR: https://github.com/odoo/odoo/pull/187894 it is replaced by hoot `isVisible`. task-4690327
The interface no longer shows a cog/settings menu when there are no actions available inside it. This avoids confusing users with an empty menu, especially on smaller screens such as when opening Field Service worksheets.
Original PR description
task-4313617
Fixes an issue in Studio where extra items in a Kanban card footer could overlap with the next card and become impossible to click. Users editing Kanban views can now reach and select those overflowing elements while preserving the normal view appearance.
Original PR description
In studio, editing a kanban, activate show invisible elements if needed Before this commit, when the footer had many items, those were not wrapped so, they overflew under the next card and were unreachable and unclickable. After this commit the overflowing elements are reachable and clickable, but still outside of the kanban box. They just have a z-index high enough to be visible and reachable. The motivation behind this choice is that we cannot really apply targetted visual rules as those would betray the actual visual on the view in normal mode. task-4609581
The barcode app now displays image previews and dialogs without them covering each other incorrectly. This prevents visual confusion and makes barcode-related workflows smoother when viewing attached files or images.
Original PR description
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. This is the counterpart of the related community change in FileViewer.
This update adjusts an internal Knowledge app test so it automatically uses the latest available HTML migration version. This reduces maintenance effort and helps prevent future test failures when new HTML versions are introduced.
Original PR description
Dynamically use the latest `html_migrations` version in the `knowledge_history_tour` to avoid having to update the test every time a new html version is deployed. task-4640490
The sales spreadsheet demo data was corrected so the Cost Repartition pie chart displays its values again. This prevents demo dashboards from appearing incomplete after a library behavior change around hidden headers.
Original PR description
Following a change of behaviour of the library, hidden headers are not considered in a chart data, and the pie chart of Cost Repartition was stripped of its data. Task-4687551
Miscellaneous changes
In a previous commit 4a6af867dd2eb13659c93e553d5e553cacb3048d, price was intended to be hidden when prevent zero sale is enabled. However the fix wrongly removed the outer div containing also the editable price that can be updated from the editor. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204524
Original PR description
In a previous commit 4a6af867dd2eb13659c93e553d5e553cacb3048d, price was intended to be hidden when prevent zero sale is enabled. However the fix wrongly removed the outer div containing also the editable price that can be updated from the editor. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204524
Since `purchase_price` depends on their `move_ids.picking_id.state`, we risk overwriting manual edits to the field at various points in an ordinary processing of a sale, here specifically during order confirmation. Prior to commit: e24d922 standard cost method product lines would not have their `purchase_price` recomputed, while non-standard product would (meaning manual edits will only be saved for standard cost lines). This is a partial revert of that commit to bring back the beha
Original PR description
Since `purchase_price` depends on their `move_ids.picking_id.state`, we risk overwriting manual edits to the field at various points in an ordinary processing of a sale, here specifically during order confirmation. Prior to commit: e24d922 standard cost method product lines would not have their `purchase_price` recomputed, while non-standard product would (meaning manual edits will only be saved for standard cost lines). This is a partial revert of that commit to bring back the behavior of non recomputed standard cost lines' `purchase_price` Additionally, we re-fix the use-case from the aforementioned commit by allowing `purchase_price` recomputation (and overwrites) when a line has no product qty but does have delivered qty (indicating it was added from the delivery rather than directly on the sale order itself. Forward-Port-Of: odoo/odoo#202854
Steps to reproduce: 1. Drop the website_form snippet. 2. Select name field & change with the many2one field having no record. 3. Switch the type: "dropdown list" => "radio" --> It will throw a traceback : This commit, fix the uncaught promise by adding validation before using variable. task-3932086 Forward-Port-Of: odoo/odoo#166108
Original PR description
Steps to reproduce: 1. Drop the website_form snippet. 2. Select name field & change with the many2one field having no record. 3. Switch the type: "dropdown list" => "radio" --> It will throw a traceback : This commit, fix the uncaught promise by adding validation before using variable. task-3932086 Forward-Port-Of: odoo/odoo#166108
**Problem**: When the text is long, the switch for "Autoconvert to Relative Link" is not visible also the "eCommerce Categories" refresh buttons shrinks. **Solution**: Adjust CSS to properly display them switch when the text is long. **Before**:   **After**:   **After**:   **Steps to Reproduce**: 1. Change language to **Dutch**. 2. Open the **website editor**. 3. Click on any **link**. 4. Copy your current link and paste it into the link input to trigger the "Autoconvert to Relative Link" switch. - **Issue**: The switch is not visible. **opw-4558476** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204286 Forward-Port-Of: odoo/odoo#204244
Serbia has implemented a mandatory e-invoicing system named eFaktura. This module utilizes the eFaktura API to enable users to submit their e-invoices. task-4004913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203483 Forward-Port-Of: odoo/odoo#186235
Original PR description
Serbia has implemented a mandatory e-invoicing system named eFaktura. This module utilizes the eFaktura API to enable users to submit their e-invoices. task-4004913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#203483 Forward-Port-Of: odoo/odoo#186235
**Problem:** In the purchase app, when selecting 2 Purchase Orders that have different currencies, and clicking Action then Accrued Expense Entry, a traceback will appear. It works as intended if the two Purchase Orders have the same currency, but if there is more than one currency, the traceback will be displayed. **Steps to reproduce:** - Go to the purchase app and select two Purchase Orders that have different currencies (you can make a group by Currencies). - Click on Action then
Original PR description
**Problem:** In the purchase app, when selecting 2 Purchase Orders that have different currencies, and clicking Action then Accrued Expense Entry, a traceback will appear. It works as intended if the…
**Problem:** In the purchase app, when selecting 2 Purchase Orders that have different currencies, and clicking Action then Accrued Expense Entry, a traceback will appear. It works as intended if the two Purchase Orders have the same currency, but if there is more than one currency, the traceback will be displayed. **Steps to reproduce:** - Go to the purchase app and select two Purchase Orders that have different currencies (you can make a group by Currencies). - Click on Action then Accrued Expense Entry. - The traceback appears. **Cause of the issue:** https://github.com/odoo/odoo/blob/a07a8589a8cb391a801ef1ffd60e02d83fc963f8/addons/account/wizard/accrued_orders.py#L246 The currency is given as a parameter to a function that requires only one parameter. With this code, if there are multiple currencies in orders, all of them will be given, which creates a traceback. **Fix:** After checking with a PO, the multiple currency use case is not supported. Hence make sure that there is only one currency in the quotations we are trying to work with. If there is more than one, we throw an error telling the user to only pick quotations with the same currency. opw-4562933 Forward-Port-Of: odoo/odoo#204007 Forward-Port-Of: odoo/odoo#202733
Steps to reproduce: 1. Create a survey with 'multiple choice: only one answer' question no.1 2. Go to the question's options Tab > enable these three options 'Show comment field' & 'Comment is an answer' & 'Mandatory answer'. (For question no.1) 3. Add a second question to that survey. (any type) 4. Test the survey. 5. Click on the continue button without selecting the answer. 6. The error message overlaps the comment field Technical reason: The height of the `<div>` containing the <te
Original PR description
Steps to reproduce: 1. Create a survey with 'multiple choice: only one answer' question no.1 2. Go to the question's options Tab > enable these three options 'Show comment field' & 'Comment is an answer' & 'Mandatory answer'. (For question no.1) 3. Add a second question to that survey. (any type) 4. Test the survey. 5. Click on the continue button without selecting the answer. 6. The error message overlaps the comment field Technical reason: The height of the `<div>` containing the <textarea> was not properly set. After this commit: The alert message should be displayed below the comment field. Task-4663115 Forward-Port-Of: odoo/odoo#203209
We encountered an error when trying to open `Furniture` or `Clothes` from the `Dashboard` if the Administrator has been assigned Admin rights to a new user. Step to Reproduce: - Install the Point of Sale module without demo data. - Navigate to `Settings` > `Users` and `create` a new user with `Admin rights` of POS. - Log in with the newly created admin user. - Try to load sample data for `Furniture` or `Clothes`. Traceback: ``` while parsing /home/odoo/src/odoo/saas-18.1/addons/pro
Original PR description
We encountered an error when trying to open `Furniture` or `Clothes` from the `Dashboard` if the Administrator has been assigned Admin rights to a new user. Step to Reproduce: - Install the Point of…
We encountered an error when trying to open `Furniture` or `Clothes` from the
`Dashboard` if the Administrator has been assigned Admin rights to a new user.
Step to Reproduce:
- Install the Point of Sale module without demo data.
- Navigate to `Settings` > `Users` and `create` a new user with `Admin rights` of POS.
- Log in with the newly created admin user.
- Try to load sample data for `Furniture` or `Clothes`.
Traceback:
```
while parsing /home/odoo/src/odoo/saas-18.1/addons/product/data/product_demo.xml:5, somewhere inside
<record id="base.group_user" model="res.groups">
<field name="implied_ids" eval="[(4, ref('product.group_product_variant'))]"/>
</record>
```
Error[2] generated when solving above problem :
Traceback :
```
while parsing /home/odoo/odoo/community/addons/point_of_sale/data/orders_demo.xml:86,
somewhere inside <function model="pos.session" name="update_closing_control_state_session" eval="[[ref('pos_closed_session_1')], '']"/>
```
This issue was occuring since new users does not have access right of `res.groups`.
This commit will fix the above errors by using Superuser environment to load data..
sentry-6239966848
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#195374- adding a field to set the coretax UoM code from UoM form view - raise error when country is not set on the customer - use the main customer's address in invoice as address in e-Faktur instead of the main customer's - fix calculation for tax incde in price configuration - adding CustomDocMonthYear to the XML by parsing month and year from invoice_date ticket-4622364 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#20
Original PR description
- adding a field to set the coretax UoM code from UoM form view - raise error when country is not set on the customer - use the main customer's address in invoice as address in e-Faktur instead of the main customer's - fix calculation for tax incde in price configuration - adding CustomDocMonthYear to the XML by parsing month and year from invoice_date ticket-4622364 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204256 Forward-Port-Of: odoo/odoo#203203
When the fulfilment channel changes from Amazon, the user currently must delete the offer to create a new one, as they can't change the amazon_feed_ref. (Please note that due to an API change, this field does in fact include a JSON containing the product type, fulfilment channel, and the feed reference.) Indeed, when the listing is changed, Amazon doesn't get the information. This means we will continue to update the inventory if that offer was in FBM. Or not updating the inventory of a no
Original PR description
When the fulfilment channel changes from Amazon, the user currently must delete the offer to create a new one, as they can't change the amazon_feed_ref. (Please note that due to an API change, this…
When the fulfilment channel changes from Amazon, the user currently must delete the offer to create a new one, as they can't change the amazon_feed_ref. (Please note that due to an API change, this field does in fact include a JSON containing the product type, fulfilment channel, and the feed reference.) Indeed, when the listing is changed, Amazon doesn't get the information. This means we will continue to update the inventory if that offer was in FBM. Or not updating the inventory of a now FBM offer. While that second case would only require the user to delete and recreate a new offer (which would be a bother but not that problematic), sending a quantity to a FBA offer would trigger a well known problem of ghost listing on Amazon, where Amazon will consider having both channels, and randomly set an order as either FBA or FBM, until that ghost listing quantity drop down to 0. When catching a discrepancy, we'll thus reset the value of the amazon_feed_ref, so that it'd be pulled again later if needed by the sync inventory with, this time, the correct value. This would also stop the inventory synchronization of a potentially FBA offer. As for any stock synchronization that might happen between the listing changes from Amazon side and the first order received in FBA, we decided against forcing the FBM quantity to 0 on all FBA offer every time, to avoid sending too many useless calls for a corner case. As the product was until now sold in FBM, in most cases, it can still be until the end of the ghost listing. If not, our support is aware of it and can force the quantity to 0 again. opw-4681035 Forward-Port-Of: odoo/enterprise#82754
Steps to reproduce ================== - Install knowledge,contacts,web_studio - Open a contact record - Open studio - Add a many2many pointing to a knowledge article - Save and exit studio - Link an article and open it => this.env.ensureArticleName is not a function Cause of the issue ================== The knowledge article view uses a js_class and contains widgets that except the custom subenv from the controller. As the js_class isn't used in x2many views, the view crashe
Original PR description
Steps to reproduce ================== - Install knowledge,contacts,web_studio - Open a contact record - Open studio - Add a many2many pointing to a knowledge article - Save and exit studio - Link an article and open it => this.env.ensureArticleName is not a function Cause of the issue ================== The knowledge article view uses a js_class and contains widgets that except the custom subenv from the controller. As the js_class isn't used in x2many views, the view crashes. Solution ======== We can simply blacklist that model when searching for relations to add opw-4513295 Forward-Port-Of: odoo/enterprise#81068
Isuue: - When on a relatively slower network, if we double click the comments icon present on the social media post, the comments dialog box opens up twice. - Can be spotted easily on the runbot as well. Video of the issue https://drive.google.com/file/d/1abe7Cq3otsVNH4hGRHFV34jC3uIGHY6m/view?usp=drive_link Reason: - There is no existing mechanism present to prevent this kind of scenario. Fix: - We simply use a flag to prevent this. We set/reset the value as we desire. Task-418
Original PR description
Isuue: - When on a relatively slower network, if we double click the comments icon present on the social media post, the comments dialog box opens up twice. - Can be spotted easily on the runbot as well. Video of the issue https://drive.google.com/file/d/1abe7Cq3otsVNH4hGRHFV34jC3uIGHY6m/view?usp=drive_link Reason: - There is no existing mechanism present to prevent this kind of scenario. Fix: - We simply use a flag to prevent this. We set/reset the value as we desire. Task-4184968 Forward-Port-Of: odoo/enterprise#82717 Forward-Port-Of: odoo/enterprise#82411
Relocated the get_fiscal_year_start_date method from l10n_in_reports_gstr to l10n_in_reports to ensure availability even if the GSTR module is uninstalled. This improves modularity and prevents dependency issues. Trace-back: ```RPC_ERROR Odoo Server Error Occured on 77578514-18-0-all.runbot143.odoo.com on model account.report and id 10 on 2025-04-01 13:02:27 GMT Traceback (most recent call last): File "/data/build/odoo/odoo/http.py", line 1962, in _transactioning return s
Original PR description
Relocated the get_fiscal_year_start_date method from l10n_in_reports_gstr to l10n_in_reports to ensure availability even if the GSTR module is uninstalled. This improves modularity and prevents…
Relocated the get_fiscal_year_start_date method from l10n_in_reports_gstr to l10n_in_reports to ensure availability even if the GSTR module is uninstalled.
This improves modularity and prevents dependency issues.
Trace-back:
```RPC_ERROR
Odoo Server Error
Occured on 77578514-18-0-all.runbot143.odoo.com on model account.report and id 10 on 2025-04-01 13:02:27 GMT
Traceback (most recent call last):
File "/data/build/odoo/odoo/http.py", line 1962, in _transactioning
return service_model.retrying(func, env=self.env)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/service/model.py", line 156, in retrying
result = func()
^^^^^^
File "/data/build/odoo/odoo/http.py", line 1929, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/http.py", line 2177, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/addons/base/models/ir_http.py", line 333, in _dispatch
result = endpoint(**request.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/http.py", line 727, in route_wrapper
result = endpoint(self, *args, **params_ok)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/addons/web/controllers/dataset.py", line 36, in call_kw
return call_kw(request.env[model], method, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/odoo/odoo/api.py", line 533, in call_kw
result = getattr(recs, name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 5225, in get_report_information_readonly
return self.get_report_information(options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports_cash_basis/models/account_report.py", line 17, in get_report_information
info = super().get_report_information(options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 5209, in get_report_information
'lines': self._get_lines(options, all_column_groups_expression_totals=all_column_groups_expression_totals, warnings=warnings),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 2544, in _get_lines
dynamic_lines = self._get_dynamic_lines(options, all_column_groups_expression_totals, warnings=warnings)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/account_reports/models/account_report.py", line 2996, in _get_dynamic_lines
rslt = self.env[self.custom_handler_model_name]._dynamic_lines_generator(self, options, all_column_groups_expression_totals, warnings=warnings)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/l10n_in_reports/models/l10n_in_report_handler.py", line 173, in _dynamic_lines_generator
self._get_out_of_fiscal_year_reversed_moves(options)
File "/data/build/enterprise/l10n_in_reports/models/l10n_in_report_handler.py", line 146, in _get_out_of_fiscal_year_reversed_moves
('reversed_entry_id.invoice_date', '<', AccountMove.get_fiscal_year_start_date(self.env.company, datetime.strptime(options['date']['date_to'], '%Y-%m-%d')))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'account.move' object has no attribute 'get_fiscal_year_start_date'
The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
RPC_ERROR
at makeErrorFromResponse (https://77578514-18-0-all.runbot143.odoo.com/web/assets/3b85f28/web.assets_web.min.js:3153:163)
at XMLHttpRequest.<anonymous> (https://77578514-18-0-all.runbot143.odoo.com/web/assets/3b85f28/web.assets_web.min.js:3158:13)```
Forward-Port-Of: odoo/enterprise#82681