Monday, July 28, 2025
34 changes · saas-18.4
Enhancements to existing features
This update adds automated checks to help ensure that devices stay properly synchronized in Point of Sale and Restaurant workflows. It reduces the risk of order or session information getting out of sync across tills, tablets, or restaurant devices, while noting that more synchronization coverage may be added later.
Original PR description
This commit add somes tests to ensure that the devices synchronisation works correctly in the Point of Sale and the Restaurant modules. This commit does not cover the entire synchronization code, so testing will need to be improved over time. Forward-Port-Of: odoo/odoo#219957
The certified scale integration now aligns its checksum expectations with updated Toledo scale error checks. This helps keep point-of-sale scale certification behavior consistent after related reliability improvements.
Original PR description
This PR adapts the scale checksum to the PR adding the error checks to Toledo scales: https://github.com/odoo/odoo/pull/217674 Forward-Port-Of: odoo/enterprise#90954 Forward-Port-Of: odoo/enterprise#89602
Resolved issues and error corrections
The website editor now shows saved carousel transition speeds using the correct unit when reopened. This prevents confusing values such as 1000 seconds appearing instead of 1 second, helping users confidently edit saved page settings.
Original PR description
This commit fixes a bug where the value of a BuilderNumberInput would not load with the assigned unit of measure. Steps to reproduce - add a carousel snippet - edit Transition/Speed to be 1s - save - the speed is correctly saved as 1000ms - reopen editor and check the carousel snippet again => the speed is 1000s instead of 1s
Documentation and clarification updates
A contributor has added their individual Contributor License Agreement documentation. This supports Odoo's contribution process by confirming the legal terms needed to accept their work.
Original PR description
This pull request adds my individual Contributor License Agreement (CLA) as required by the Odoo contribution guidelines. The file follows the structure described in doc/cla/sign-cla.md. Forward-Port-Of: odoo/odoo#219198
Miscellaneous changes
**Current behavior** Having multiple employees on a workorder with overlapping work intervals will result in an inaccurate valuation value. **Expected behavior:** Accurate valuation. **Steps to reproduce:** 1. Create a BOM with an operation (workorder) for a finished product which is valuated 2. Create an MO for that BOM, assign multiple employees on the workorder with various (overlapping) working intervals 3. Process the MO -> look at the valuation generated -> its value is
Original PR description
**Current behavior** Having multiple employees on a workorder with overlapping work intervals will result in an inaccurate valuation value. **Expected behavior:** Accurate valuation. **Steps to reproduce:** 1. Create a BOM with an operation (workorder) for a finished product which is valuated 2. Create an MO for that BOM, assign multiple employees on the workorder with various (overlapping) working intervals 3. Process the MO -> look at the valuation generated -> its value is too high (because it counted the overlapping work intervals) **Cause of the issue** A workorder's resource intervals are currently just naively summed. **Fix** Use the `Intervals` class to find the union of all resources in a workorder. opw-4430375 Forward-Port-Of: odoo/odoo#215216 Forward-Port-Of: odoo/odoo#205154
When a server action raises a warning, users will now see a clear, friendly dialog instead of a technical traceback. This makes the error easier to understand and helps users know what happened without needing developer support.
Original PR description
### Description of the issue/feature this PR addresses: https://github.com/odoo/odoo/commit/ef4c1350df10c186efec79b1414306e325707549 introduced a new exception `ServerActionWithWarningsError`:…
### Description of the issue/feature this PR addresses: https://github.com/odoo/odoo/commit/ef4c1350df10c186efec79b1414306e325707549 introduced a new exception `ServerActionWithWarningsError`: https://github.com/odoo/odoo/blob/851c46923332aa13c56fbce3a5ed3c5d37a70c92/odoo/addons/base/models/ir_actions.py#L486-L488 This was not registered as an error_dialog. This led to the frontend displaying the entire traceback instead of an error dialog similar to `UserError` when a `ServerActionWithWarningsError` is raised. This commit fixes it by correctly registering the error in `error_dialog` registry category so a more user friendly dialog is displayed with the error contents. Thanks @brboi for helping with the fix ### Current behavior before PR: A traceback error is thrown when a `ServerActionWithWarningsError` is raised. Example: <img width="1896" height="904" alt="image" src="https://github.com/user-attachments/assets/0bfee329-e6c5-4652-a2ac-d41b763e2bdb" /> Video reproducing it: https://drive.google.com/file/d/1C_aE0d_9bP27f388dB1NJLeWHBpsM7AW/view?usp=drive_link (credits: gavb-odoo) ### Desired behavior after PR is merged: An error dialog similar to UserError which is easier to understand is displayed <img width="1906" height="799" alt="image" src="https://github.com/user-attachments/assets/d57c5cab-14f2-4f39-9f0c-b8099e8b0089" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr opw-4885670 Forward-Port-Of: odoo/odoo#219977
The stock serial number generation wizard now only shows unit-of-measure information when that option is enabled. This prevents an error for users creating serial or lot numbers when unit-of-measure settings are not active.
Original PR description
Previous to this commit, the generating serial wizard would try to load the product uom in case that the product was lot-tracked, even if the UoM group was not activated. This led to an error when opening the wizard without activating the group. This commit makes sure the group is activated before showing that field. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Recruitment users can now refuse a newly created applicant even if no applicant name has been entered. This prevents an error from interrupting the refusal workflow and keeps application management running smoothly.
Original PR description
Currently, an error occurs when refusing an applicant. Steps to Reproduce: - Install the `hr_recruitment` module. - Go to `Recruitment` > `Applications` > `All Applications`. - Click `New`, then click `Refuse`. `TypeError: sequence item 0: expected str instance, bool found` This error occurs when refusing an applicant who does not have an applicant name. It tries to access partner_name or display_name, but since it is False, the join raise the error[1]. This commit ensures that if the partner name is present, it is added; otherwise, an empty string is added. [1]- https://github.com/odoo/odoo/blob/ca90fd17b2c50651d698e6e0e3065ba978b06d01/addons/hr_recruitment/wizard/applicant_refuse_reason.py#L52 sentry-6740479737 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The recruitment app now disables the copy email button until a new tracker record has been saved. This prevents users from encountering an error when creating recruitment source trackers and improves reliability during hiring setup.
Original PR description
Currently an error occurs when user try to copy email on a newly created record. Steps to reproduce: - Install `hr_recruitment`with demo data. - Add a random Alias Domain (`Settings > Technical >…
Currently an error occurs when user try to copy email on a newly created record. Steps to reproduce: - Install `hr_recruitment`with demo data. - Add a random Alias Domain (`Settings > Technical > Email > Alias Domains`). - Open `hr_recruitment` and on 'Experienced Developer', open the option dropdown (meatball) and click on 'Trackers'. - Now click on `New` and click the copy email button (without saving). Error: `ValueError: Expected singleton: hr.recruitment.source()` Cause: - Error occurs due to a recent change in this [commit](https://github.com/odoo/odoo/pull/198995/commits/f8cf1b70e28166c100558d2bf5cbc6d8d3513cc6) that introduced the new copy widget - The error occurs because the function was called even before the record was saved. This caused the function call to be made with empty recordset that causes the singleton error at line [1]. Solution: - Made the copy button disabled until record is saved. [1]: https://github.com/odoo/odoo/blob/679d99b8bd233a1046e3219ddb3e23e8465f6107/addons/hr_recruitment/models/hr_recruitment_source.py#L49 sentry-6753165441 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website charts now automatically assign a visible color when a new dataset column is added. This restores the expected editing behavior so users do not see transparent or missing chart colors after adding data.
Original PR description
Before [the refactoring of the html_builder], [0,0] cell was selected by default and the selected cell was kept when we switched the chart type. Now, this was lost in the refactoring. [the refactoring of the html_builder]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb Related to task-4367641
Website editors can now move the last block from one table of content into another without triggering an error. This prevents an editing interruption and makes page building more reliable.
Original PR description
Since [1], a traceback appears when we drag the last block of a table of content into another one. Drag and drop two tables of content on the website page One by one, drag and drop the blocks from the second table to the first one traceback for the last one... This commit resolves the issue [1]:https://github.com/odoo/odoo/commit/6cd9606e285741b59042b9674bf6682273c43a69 task-4144022 Forward-Port-Of: odoo/odoo#180039
This update removes an unnecessary database index for project collaborators because an existing uniqueness rule already supports the same lookup need. It reduces redundant database maintenance with no expected change to user-facing project behavior.
Original PR description
There is a unique constraint `_unique_collaborator`, whos first key is `project_id`, which will cover the necessity for an explicit index on `project_id` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220595
The Calendar app's “Attending?” filter now correctly finds events based on the current user's attendance status, such as declined invitations. This prevents empty search results and helps users reliably manage their calendar events.
Original PR description
The filter on an event's "Attending?" status was not working correctly. When filtering, the search would always return an empty result set because the underlying search implementation was logically flawed. It incorrectly compared calendar.event IDs with calendar.attendee data, which could never match. This commit corrects the `_search_current_attendee` method to properly query the `calendar.attendee` model. It now finds the intersection of attendees that both belong to the current user and match the filter criteria (e.g., state is 'declined'). It then uses these results to return the correct parent calendar events. A unit test has been added to verify the filter now works as expected. opw-4892386 Forward-Port-Of: odoo/odoo#218878
After users upload or drop documents in Expenses, the upload drop area is now hidden instead of remaining on screen. Users are also taken back to the expense list so they can see the created expenses, even if document recognition fails.
Original PR description
When dropping documents on Expense, the drop zones would stay being displayed. We now stop to display it when a file is uploaded / dropped. task-4942503 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218812
This update prevents errors when users replace an image with a caption and then edit that caption. It also avoids confusing editor tooltips appearing over images by keeping nearby content blocks properly formed when captions are added.
Original PR description
**Current behavior before PR:** - Replacing an image that has a caption, then editing the caption and clicking outside it, would result in a traceback. - When a caption was added to an image, the previous sibling block of the image became empty. As a result, the tooltip of that empty block could appear hovering above the image. **Desired behavior after PR is merged:** - A traceback no longer occurs when the image is replaced and the caption is edited before clicking outside. - If the previous sibling block is found to be empty when a caption is added, a `<br>` element is inserted into it. This ensures the block is no longer considered empty, preventing the tooltip from appearing above the image. task: 4876199
This fix lets website editors change or remove text animations even when their cursor is placed inside the animated text without selecting the whole word. It reduces repeated attempts and makes editing animated website content more predictable.
Original PR description
> [VBAL] Toolbar: Add an animation on some text > Try to remove it --> the animation stays on the end of the word, have to repeat x times to get rid of it Since 8c5e3d745b80c61332dbb814e622294d047e2576, it is possible to change an existing highlight when the selection is collapsed and inside it. The same thing is enabled for animated text, which allows to remove the animation options from the sidebar for animated text task-4367641
This update adjusts how background shape options behave in the website builder and adds test coverage for related builder controls. It helps ensure users can configure page backgrounds more reliably when editing website content.
Original PR description
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 fixes an issue where the website editor toolbar could leave unnecessary blank space below the page footer, even when the toolbar was hidden. The toolbar now stays correctly positioned outside the page layout, improving page rendering and avoiding confusing extra whitespace.
Original PR description
Description of the issue/feature this PR addresses: - Commit [189a7c96](https://github.com/odoo/odoo/commit/189a7c96e6e26825dc05c0c6466576fe63aa091e#diff-de0d67e89972b45b101a9c4b04f316824314b0d69aba6208528586f1edb4f01cL25-L40) moved scrollbar from `#wrapwrap` element to `<body>`, caused the space below the footer visible for the floating toolbar. Current behavior before PR: - Space below the footer was always visible, even when the toolbar was hidden. Desired behavior after PR is merged: - `top: 0;` is applied on `.oe-toolbar` to ensure it stays out of the layout flow. - This prevents unnecessary layout space and ensures correct toolbar positioning. task-4652202 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217270
This update makes an automated website builder test more reliable by ensuring test timing is fully controlled during execution. It reduces random test failures caused by high system load, helping maintain smoother development and release validation.
Original PR description
Hoot provides us with "time control" features such as "advanceTime", which is useful for testing scenarios where we want to wait for some events to happen (such as a debounced function), but without…
Hoot provides us with "time control" features such as "advanceTime", which is useful for testing scenarios where we want to wait for some events to happen (such as a debounced function), but without actually waiting too much. The way it works is that hoot simply override setTimeout and related functions to keep track of all handlers and their scheduled time. However, this is not enough, as the real setTimeout is still by default called, so it can happen in some tests that when we advance the time by some amount, say 500ms, if the cpu load is very high, then other handlers that are scheduled AFTER the 500ms may have run as well. To fix this, we can use the freezeTime feature from hoot. It simply give the full control to hoot, and do not call the real setTimeout function. 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
Invoices created from Point of Sale orders now include the order name in the Customer Reference field. This makes it easier for staff to match backend invoices with the original POS transaction and reduces manual lookup work.
Original PR description
## Short functional explanation of the error When selling items in the point of sale module with an invoice, when we check said invoice in the backend, the customer reference field is empty. ##…
## Short functional explanation of the error When selling items in the point of sale module with an invoice, when we check said invoice in the backend, the customer reference field is empty. ## Reproduction Steps 1. Go to Point of sale and open a shop interface. Add a random item to the basket and select a customer. 2. Click on payment, then check Invoice, select a payment method, and Validate. 3. Click on the hamburger menu on the top right and click on Backend. 4. Hover the box of the shop you opened with your mouse. In the top right corner of the box should appear a 3-dot menu. Click on it and click on Sessions. 5. Click on the latest session ID. On the top of the page, click on the "Orders" smart button. 6. Click on the order you just finalized. On the top of the page click on the "Invoice" smart button. 7. Click on "Other info" tab. ### Expected behavior The Customer Reference field should be filled with the name of the order. ### Unexpected behavior The Customer Reference field is left empty. ## Origin of the issue When setting the values for the invoice, the field 'Ref' was absent. opw-4732492 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218158
This update makes an automated live chat test more reliable by removing an unnecessary step that could randomly fail. It helps ensure browser back-and-forth navigation between live chat sessions and discussions is consistently validated without affecting day-to-day user behavior.
Original PR description
The `test_session_history_navigation_back_and_forth` test sometimes fail. The test ensures we can navigate between the session list view and discuss using the browser history. To do so, the tour first accesses the list view using the command palette. However, command palette sometimes doesn't open. The command palette part of the tour is useless as the view can directly be accessed by passing the correct url to the `start_tour` function. This commit removes the command palette part of the tour thus fixing the issue. fixes runbot-108129 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#220539 Forward-Port-Of: odoo/odoo#220345
Reception report PDFs with many products now print cleanly across multiple pages. The change prevents product rows from overlapping with section headers, making large reception reports easier to read and use.
Original PR description
## Short functional explanation of the error When printing a reception report containing a lot of products, the top row of the pages after the first one is overlapped with its corresponding header in…
## Short functional explanation of the error When printing a reception report containing a lot of products, the top row of the pages after the first one is overlapped with its corresponding header in the resulting PDF. ## Reproduction Steps 1. Open the settings. In the inventory section, enable "Reception Report". 2. Create a new quotation and add at least 40 different products. Each product should have at least 1 copy in stock, and the quantity to order must be greater than the quantity we have of this product in stock. 3. Confirm the sales order. 4. Create a new purchase order and add the exact same products you added in the quotation. 5. Confirm the order and click on the "Recept" smart button. 6. Click on the "Allocation" smart button and click on the "Assign all" gray button. 7. Click on print and open the PDF once it finishes downloading. ### Expected behavior Each row (corresponding to the reception of a product) and its corresponding header is printed properly, regardless of how many pages constitute the report. ### Unexpected behavior The PDF has more than one page, and on the top of the second page, the product row is overlapped with the header of its corresponding section. ## Origin of the issue It comes from an issue with WKHtmltopdf itself: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1524 The report uses the "thead" tag for the headers. However, in some cases, when the header is linked to a table dynamically (with for-each, for example), WebKit ignores or breaks the "Thead" behavior. ## Explanation of the fix I override the default behavior of thead, which repeats the header automatically at each new page, with a new style. Now, the "Thead" special behavior is ignored and treated like ordinary lines. The header isn't shown at each new page anymore, avoiding the overlapping of product rows. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215398
The keyboard shortcut shown while switching views now stays visible instead of overlapping the active view button. This makes the view switcher clearer and easier to use for users who rely on shortcuts.
Original PR description
Previously when switching views using the hotkey, the hotkey (SHIFT + V) was not properly visible, it was overlapping with the active view button. After this commit the hotkey (SHIFT + V) will be visible and not overlap with the active view. task-4828401 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217639
This update allows list views to correctly use settings for creating, editing, and deleting groups. It prevents errors when those options are configured, improving reliability for affected views without changing user workflows.
Original PR description
Forgot to add the attributes `group_create`, `group_edit`, and `group_delete` in the list `rng`, which was causing an
error when they are used.
In this commit added attributes.
https://github.com/odoo/odoo/commit/0c18c0ee29458ed4724dc4337d9f6a060d09165f
https://github.com/odoo/odoo/commit/224d592ca3093b0a79c5866a3845ea171252d4b4
task-4489162The self-ordering page now hides product categories when they only contain special internal products that customers cannot order. This prevents restaurants from showing confusing empty categories, improving the ordering experience for guests.
Original PR description
Steps to reproduce: - Install the pos_black_box_be module. - Configure a Belgian restaurant and enable self-ordering. - Open the self-ordering page. - The category 'Fiscal category' is displayed even though it does not contain any products. This commit ensures that categories containing only special products (which are not displayed) will no longer appear on the self-ordering page. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220419 Forward-Port-Of: odoo/odoo#217642
Fixes an issue where an employee’s current work location could show as “unspecified” after changing today’s work location before saving. The presence tooltip now reflects the selected daily work location, reducing confusion for HR users and managers.
Original PR description
Step to reproduce:
------------------
* Go on Employees
* Click on one Employee
* Change a today worklocation "office" (don't save, you need to have the little cloud)
* Hover over hr presence icon
This title will be "unspecified" and not "office".
Reason:
--------
name_work_location_display is computed but doesn't depends of daily worklocation field (monday_worklocation, tuesday...)
Solution:
---------
Depends of these daily worklocation field
task-4948488
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#220359
Forward-Port-Of: odoo/odoo#219222This fix makes an automated check in the Sales Project area wait correctly before selecting a newly created sales order line. It reduces false test failures when the app is installed without demo data, helping keep releases more stable without changing user-facing behavior.
Original PR description
Steps to reproduce the issue: 1- install sale_project without demo data 2- as the test is not deterministic, adding step_delay may help reproducing it The test was failing because the tour was not waiting for the modal to close before trying to click on the created sale order line. so accoding to this line https://github.com/odoo/odoo/blob/18.0/addons/sale_project/models/sale_order_line.py#L63-L63 the New Sale order line have in it a default product which doesnt open a modal build_error-163102 Forward-Port-Of: odoo/odoo#220179
This update makes an automated website builder test more reliable by ensuring time-based checks run consistently, even under heavy system load. It also removes unused website builder code, reducing maintenance overhead without changing user-facing behavior.
Original PR description
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
Website editors can no longer accidentally turn off a parallax effect by setting its intensity to zero. The zoom in and zoom out parallax options now behave as labeled, making page design controls more predictable.
Uploading an attachment from the Documents chatter no longer shows an unnecessary progress card or row in the main kanban or list views. This keeps the Documents workspace visually cleaner and avoids confusing users with temporary upload items in the wrong place.
Original PR description
Step to reproduce: - In Documents, open the chatter either on a folder or a document. - Upload an attachment through the chatter. - You will see the upload kanban card / list row showing the progression. There should be no visual in kanban/list views showing the progression. Task-4863051 Forward-Port-Of: odoo/enterprise#90836 Forward-Port-Of: odoo/enterprise#87410
Disallowed expense reports no longer fail when entries have a 0% or missing rate. The report now keeps those lines uniquely identified, preventing duplicate key errors and improving reliability for affected accounting reports.
Original PR description
Before this **PR**: When only the account_disallowed_expenses module was installed, the report failed with a duplicate key error if a line had a 0 rate or no rate at all. This was because such child lines were assigned the same line_id as their parent. After this **PR**: Lines with a 0 or no rate have the parent account appended to their line_id to ensure uniqueness and avoid key collisions. Forward-Port-Of: odoo/enterprise#90236
Customer statement emails now handle selected contacts that do not have a name. This prevents scheduled report sending from failing when customer selections include unnamed contacts, improving reliability for accounting workflows.
Original PR description
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install…
**PROBLEM** In the accounting app, when selecting multiples customers, if one of them doesn't have a name, the cron sending the report will traceback. **STEP TO REPRODUCE** - On a clean db, install the account_reports module - From the accounting app, create a new company customer (Customers/Customers) - From that new company customer form view, add a new contact of type "other" and don't specify a name for it. - Create an invoice for the company - From the customer list view, select all, and trigger the action "Open Customer Statements" - Send -> Print and Send - Check the console, the cron task should traceback on the template **CAUSE** In accout_report.py, we get the name of each selected partners, and we don't check if the name doesn't exist. In the template `pdf_export_filters`, we try to join all the name in a string, it fails because one of the name isn't a string (its value is False because it doesn't exist on the partner record). **FIX** When getting the partners names, filter out the partners without names. opw-4916660 Forward-Port-Of: odoo/enterprise#90154
Users can now clear date fields on existing commission plans without causing a save error. This prevents an unexpected crash and helps sales administrators update commission plan validity periods more reliably.
Original PR description
Currently, an error occurs when clear the date_to field from an already created record. Steps to Reproduce: - Install the `sale_commission` module. - Go to `Commission Plans` and create a record. -…
Currently, an error occurs when clear the date_to field from an already created record. Steps to Reproduce: - Install the `sale_commission` module. - Go to `Commission Plans` and create a record. - Now, clear the `date_from` field and save. `TypeError: '>' not supported between instances of 'bool' and 'datetime.date'` This error occurs when we clear the date_to field from an already created record. The error started occurring after https://github.com/odoo/enterprise/commit/926c8f041b51a04f0153be27cfcc8658a07be5b0 this commit that introduced the daterange widget for the date_from field. And when we clear the date_to field and try to save, it triggers the constraint [1] and raises the error. [1] https://github.com/odoo/enterprise/blob/377321fd7e7b1b2026734b75c79c74c8947e2e6c/sale_commission/model/commission_plan.py#L64 This commit ensures that the record is saved only if the date_to field is also present in the record. sentry-6710699656 Forward-Port-Of: odoo/enterprise#88769
Test coverage for community-side diff about calculating a workcenter's cost in a way that omits counting duration within a working interval that was previously counted. opw-4430375 Forward-Port-Of: odoo/enterprise#88159 Forward-Port-Of: odoo/enterprise#81701
Original PR description
Test coverage for community-side diff about calculating a workcenter's cost in a way that omits counting duration within a working interval that was previously counted. opw-4430375 Forward-Port-Of: odoo/enterprise#88159 Forward-Port-Of: odoo/enterprise#81701