Daily updates from Odoo
Thursday, April 3, 2025
32 changes
8 changes
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
The sale stock renting module now keeps the standard information needed to show product availability on sales order lines. This restores the forecast widget for storable products, helping sales users see stock availability when preparing orders.
Original PR description
Steps to reproduce: - Create a sale order - Add a line using a storable product Issue: There is no forecast widget on the line. Previous commit [1] replaced the base `fieldDependencies` of the widget when patching it instead of replacing them. Thus, since none of the expected fields where in the props, the widget was not displayed at all. [1] b90bbde
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
Payslip calculations now use the same ordering as the lines shown to payroll users. This prevents cases where a salary rule appeared before Net Salary but was not included in that displayed total, improving consistency and confidence in payroll results.
Original PR description
Before this commit, the computation for hr.payslip.lines was done in a different order from how they are displayed, leading to UI inconsistencies. Steps to reproduce ----- 1. On the Salary Structure, add a new rule with the same sequence as Net Salary (200) but a lexicographically lower code (< NET) 2. Create a new payslip with this structure and select Compute Sheet 3. In the payslip lines list view, the line corresponding to the new rule will be before Net Salary but not factored into the Net Salary Cause ----- The `_order` of `hr.payslip.line` is by contract_id, sequence, code. But when they are computed from the rules in `_get_payslip_lines`, the rules are only sorted by sequence. This can result in a computation order different from the order displayed on the payslip, depending on the code and rule id. Solution ----- Update the sorting to match the payslip lines, and update `_order` of `hr.salary.rule` to reflect this as well. opw-4619598
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
Finance-related documents are now organized using folders instead of tags. This keeps automated finance actions aligned with the folder structure, making document handling more consistent for users.
Original PR description
Files inside Finance folder are now managed in folders instead of tags. Changed the server actions to use the created folders.
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
24 changes
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
Products in subcategories now appear correctly on the Point of Sale screen when category restrictions are enabled. This prevents cashiers from missing sellable items that should be available under permitted parent categories.
Original PR description
Before this commit, when the "restricted categories" setting was enabled, products belonging to subcategories of the allowed categories were not shown on the POS screen when no category was selected. opw-4700812 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Time Off app now handles employees who do not have a working calendar assigned, avoiding an error when opening or calculating time off. This makes leave balances and expiring leave information more reliable for fully flexible workers.
Original PR description
… flexible This commit aims to resolve critical error in time off when the user is fully flexible. - get_allocation_data is updated to handle the case when the employee is fully flexible. - Set duration_hours and duration_days in the dummy attendance to handle flexible time off requests and to avoid unintended zero division error in _get_attendance_intervals_days_data. P.S: Currently Fully Flexible resources do not support fully time offs, so this allows a fallback that prevents error while still setting a valid duration of a time off request. Steps to reproduce: 1. Install hr_holidays 2. Go to Mitchel Admin's employee profile > work information 3. Delete the working calendar > so that the employee is fully flexible 4. Try to open time off module -> Prior to this commit, it would raise a zero division error ticket-id: 4677726 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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 banner blocks in the HTML editor from being treated as changed after every save. Users keep their editing session and history intact, reducing disruption when working with rich text content.
Original PR description
Prior to this commit, using a `/banner` block would create elements that always have `contenteditable` attributes when saving, that are always different from the server value which removes these…
Prior to this commit, using a `/banner` block would create elements that always have `contenteditable` attributes when saving, that are always different from the server value which removes these `contenteditable` attributes, resulting in a new `Wysiwyg` instance being constructed after each `save`. Resolution: 1- Introduce new classes to handle the `contenteditable` attribute: `o-contenteditable-true` and `o-contenteditable-false` to avoid a namespace conflict with `website` specific features. They replace `o_editable` and `o_not_editable` for the `banner` block. 2- Ensure that `contenteditable` attribute handled by these classes are removed during `cleanForSave`, to create a value comparable to the server value. This is because the server sanitizes the `contenteditable` attribute. If both compared values are not equal, the current `Wysiwyg` and `Editor` instances would be fully replaced after each save, resulting in a loss of edition history. This should ideally never happen. 3- Ensure the attributes `role` and `aria-label` which are also sanitized by the server are removed during `cleanForSave` and maintained during `normalize` through `data-oe-role` and `data-oe-aria-label`. 4- Introduce a `o_editor_banner_content` class for the `banner` content, for ease of selector creation. 5- Ensure that the `baseContainer` created before the `banner` if it is the first element in the `editable` has the proper `tagName` based on the `HtmlField` configuration. A `html_migrations` version is added to adjust existing `banners` to the new classes usage. task-4640490
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 where customers using the portal's Pay Now button could hit a PayPal error instead of being redirected to complete payment. The PayPal payment request now excludes unsupported information, allowing the checkout flow to proceed correctly.
Original PR description
Description of the issue/feature this PR addresses: Currently, the payload contains unsupported data and due to this, payment with PayPal results in error. Current behavior before PR: Sending payment request to PayPal API via portal button "Pay Now" results in error: 'The communication with the API failed. Details: Request is not well-formed, syntactically incorrect, or violates schema.'. Desired behavior after PR is merged: After clicking "Pay Now" in portal, visitor is successfully redirected to PayPal for payment. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where percentage promo codes could incorrectly discount fixed shipping charges. Customers now receive discounts only on eligible order items, keeping delivery fees accurate during checkout.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have a promo code that applies a 50% discount; 2. have a fixed price delivery method; 3. apply code on an order with said delivery method. Issue ----- The 50% discount is applied to the shipping costs. Cause ----- When calculating the discountable amount in `_discountable_amount`, it uses the `_get_no_effect_on_threshold_lines` method to filter out sale order lines that shouldn't impact the amount discounted. This value gets stored in the `lines` recordset. Commit d0e7be7832672 overlooked the existence of this variable when modifying the `_discountable_amount` method, and instead used `self.order_line`, using all lines to calculate the discountable amount. Solution -------- Use the filtered recordset to calculate the discountable amount. opw-4658702
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
This fixes a multi-company inventory issue where validating a picking for one company could fail to create the next shipping step when another company was the main active company. Deliveries using two-step routes now continue correctly for the company that owns the warehouse, reducing manual corrections and missed shipments.
Original PR description
### Steps to reproduce: - In the settings: enable Multi-steps route. - Have two companies active (each with an existing warehouse): COMP 1, 2 - Put the warehouse of COMP 2 in delivery in 2 steps. - With COMP 1 as main active company, create and confirm an SO for COMP2 > A pick picking has been created for COMP2 - Validate The pick picking #### > The ship picking was not created ### Cause of the issue: During the `_action_done`of the pick move, we will run a `_push_apply` on the move and try to trigger any push rule related to its destination. However, since de destination location of tha move (COMP2 output) does not belong to the main active company, the warehouse for which we search the rule is set to False and the rule ends up not being found: https://github.com/odoo/odoo/blob/cc05d9d50ac668eaa26363e1127f914897a4b125/addons/stock/models/stock_move.py#L1058-L1066 opw-4670760 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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
When Inventory is installed after Sales in a multi-company setup, existing sales orders are now assigned to the warehouse belonging to their own company. This prevents orders from one company being grouped under another company's warehouse, improving accuracy for inventory and order operations.
Original PR description
Steps to reproduce: 1. create 2 companies, 2. install sales, 3. create SOs for both companies, 4. install Inventory, 5. Group SOs into warehouse for Company B Issue: All so's are under Warehouse A even though Warehouse B is created Cause: We take the first available company Solution: There should be only one warehouse defined per company https://github.com/odoo/odoo/blob/c045a5c9d6f6dd52271d9ab6b4265fd849cd53de/addons/stock/models/stock_warehouse.py#L32-L34 opw-4376078
Project profitability reports now include revenue from expenses that are reinvoiced through purchase orders or vendor bills. This makes project margins more accurate when costs are billed back to customers at cost or at a sales price.
Original PR description
### Issue: - in 18.0 when a product expence reinvoice configuration is st to 'at cost' or 'sales price', the expense is not added to the profitability. even tho we see it on the SO. ### Steps To…
### Issue: - in 18.0 when a product expence reinvoice configuration is st to 'at cost' or 'sales price', the expense is not added to the profitability. even tho we see it on the SO. ### Steps To Reproduce: - Create a product that can be expensed where type is `service`, add cost and sales price. - Set the product `Create on Order` to `project & task` and `Re-Invoice Costs` to `At cost` or `Sales price`. - Create a sales order for the product and confirm it. - Create a purchase order for the product and add the SO project to the PO project. - Confirm the PO and validate the bill. - Notice the expense is now added as a sol on the SO. - Notice the expense is missing in the project profitability. ### Solution: - in `_get_profitability_sale_order_items_domain` we used to remove the expense lines from the domain. however, since now we are adding them on the SO to be reinvoiced, we should keep them. ### opw-4398193 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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
Sales orders with combo products now create invoices with the expected combo lines and correct line order. The Create Invoice action also better reflects whether the related order lines can actually be invoiced, reducing confusion for sales and billing teams.
Original PR description
Steps: - Install sales app. - Create a combo type product with invoice_policy delivery. - Create a sale order with product. Issue: - 1) Combo line is not adding when creating invoice. - 2) Sequence of combo line always stays last even fro order policy - 3) If we change combo product policy to order then `Create Invoice` stays primary even all the actual line are not invoicable Cause: - Corner cases that left to handle for combo type products Fix: - Handle those cases. opw-4640087
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.
The manufacturing change process now counts engineering change orders separately for products and bills of materials. This prevents misleading counts and avoids showing empty results when users open the ECO smart button.
Original PR description
Steps to reproduce the bug: - Create a storable product “P1”: - Create a BoM - Go back to the product form and create an ECO: - Apply on: “Bill of Materials” - The created BoM will be selected…
Steps to reproduce the bug:
- Create a storable product “P1”:
- Create a BoM
- Go back to the product form and create an ECO:
- Apply on: “Bill of Materials”
- The created BoM will be selected automatically.
- Save.
- Return to the product form.
- The ECO count in the smart button is 1.
- Click on it.
Problem:
No ECO is displayed because the domain filters only ECOs applied to the product:
https://github.com/odoo/enterprise/blob/ec6b4717f49ccd5b651be80aed21494ed500f580/mrp_plm/models/product.py#L17-L20
Solution:
only ECOs of type "Product" should be counted in the product form.
Issue 2:
- Try updating the "Apply on" field of the ECO to “Product.”
Problem:
The "Bill of Materials" field becomes invisible but is not cleared. As a result, when counting the number of ECOs linked to the BoM, the count will be incorrect.
https://github.com/odoo/odoo/blob/f2923dec56b5ba2436bc244337c1e430a85e7e94/addons/stock/models/stock_move.py#L45-L48
opw-4653598This fixes how German balance sheets calculate profit or loss for the current and previous fiscal years. The correction helps ensure carried-forward profit or loss and net income figures are reported in the right period, improving financial statement accuracy.
Original PR description
Backport of https://github.com/odoo/enterprise/pull/82656 Profit and loss from previous year was not well calculated on the balance sheet. With this commit, we change the date scope for the `Net profit/loss for the year` line from `normal` to `from_fiscalyear`. We also change the way we calculate `Profit carried forward/loss carried forward` and `Net income/loss for the year` lines. opw-3663626
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