Daily updates from Odoo
Wednesday, April 22, 2026
90 changes
13 changes
Resolved issues and error corrections
This change restores the expected workflow when submitting the French tax filing package. It ensures the normal processing step still runs, preventing a test failure and keeping the report status updated correctly.
Original PR description
When merging the sending of the liasse fiscale, super() wasn't called anymore in action_submit and led to an assertError in test_state_progression() test
```
FAIL: Subtest TestAccountReturn.test_state_progression (return_type=account.return.type(186,))
Traceback (most recent call last):
File "/data/build/enterprise/account_reports/tests/test_account_returns.py", line 2087, in test_state_progression
self.assertEqual(account_return.state, 'paid')
AssertionError: False != 'paid'
```
runbot-275061This change makes an age-based payroll warning test use a fixed point in time instead of the current date. It prevents random failures in nightly builds and keeps test results consistent over time.
Original PR description
The test was failing intermittently in nightly builds that run at a date in the next year (e.g.: 2027-04-20). The issue was that the student's age is calculated at runtime using : - When the student is age 19 (2026): min wage = 2057.87 < 2100 → PASS - When the student is age 20 (2027): min wage = 2136.84 > 2100 → FAIL task-6144986
This update corrects several internal query counters used by automated performance tests, especially in mail-related areas. It helps the test suite reflect the real system behavior more accurately, improving confidence in performance reporting and preventing misleading results.
Original PR description
Update various (main mail-related) counters according to runbot state. 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 change fixes unstable automated tests around the field service geolocation feature. It reduces unnecessary test work so the test suite runs more reliably without affecting day-to-day user behavior.
Original PR description
This commit fixes the undeterministic test failures for the geolocation service. We reduce the [workload](https://github.com/odoo/enterprise/blob/master/planning_field_service/static/src/services/field_service_geolocation_service.js#L26) of the `startWatch` method by mocking the `has_group` calls.
There were some translation overrides for `fr_BE` and `fr_CA` that were incorrect or unnecessary. We are deleting these files so they use the correct translations in `fr` instead. In the `nl_BE` translation, we are fixing a menu item so it is shorter, but still correct. task-5921458 Forward-Port-Of: odoo/enterprise#114373 Forward-Port-Of: odoo/enterprise#106998
Original PR description
There were some translation overrides for `fr_BE` and `fr_CA` that were incorrect or unnecessary. We are deleting these files so they use the correct translations in `fr` instead. In the `nl_BE` translation, we are fixing a menu item so it is shorter, but still correct. task-5921458 Forward-Port-Of: odoo/enterprise#114373 Forward-Port-Of: odoo/enterprise#106998
This change updates an internal compatibility check for the lxml library so Odoo correctly recognizes when an older workaround is no longer needed. It helps keep the system aligned with the latest lxml release behavior, reducing the risk of unnecessary patches being applied.
Original PR description
Whitelisting of ARIA attributes is now part of the milestone for LXML 6.1. This commit updates monkey patch's obsolescence detection accordingly. Forward-Port-Of: odoo/odoo#258910
This change fixes an unreliable automated test in the HTML editor, making test results more consistent. It helps ensure future builds are less likely to fail randomly, improving confidence in the editor’s quality without changing the user experience.
Original PR description
My last desperate fix attempt did not fix the issue so here is yet another desperate fix attempt. I have seen issues related to the use of `setContent` just to set the selection in the past so I hope it might be that. It's the only noticeable change between this test and the others, be it icon tests or color selector ones. runbot-242333 Forward-Port-Of: odoo/odoo#259978 Forward-Port-Of: odoo/odoo#259544
The call menu now includes the Picture-in-Picture option, making it faster to keep a call visible while moving to another conversation. The menu also fixes the appearance of Fullscreen and Picture-in-Picture so these options display normally instead of looking faded.
Original PR description
Before this commit, Call Menu did not have the "Picture-in-Picture" action. This is unfortunate because this is one of the most valuable action to have it available there, as a frequent usage of…
Before this commit, Call Menu did not have the "Picture-in-Picture" action. This is unfortunate because this is one of the most valuable action to have it available there, as a frequent usage of Discuss is to join a call, switch to another conversation or chatter, and then wanting to keep an overlay of the call. Without the "Picture-in-Picture" in Call Menu, this forces user to access the Discuss conversation again and then click on "Picture-in-Picture" there, when clicking on the call menu would be faster. This commit adds the "Picture-in-Picture" action in the call menu to ease using this feature. Also fixes an issue where "Fullscreen" and "Picture-in-Picture" actions have reduced opacity in the Call Menu. This comes from opacity hover effect that should be limited to their inline visual in the Call view but was mistakenly also present in the dropdown. Before / After <img width="440" height="369" alt="Screenshot 2026-04-17 at 14 15 58" src="https://github.com/user-attachments/assets/2accb779-28f5-4930-a101-db5e52b029b7" /> Forward-Port-Of: odoo/odoo#260512 Forward-Port-Of: odoo/odoo#259866
This change makes an automated test for the editor’s power buttons more reliable on slower systems. It avoids false failures caused by timing differences, so test results are more stable without changing the product behavior.
Original PR description
Waiting for a full animation frame is too dangerous. In the general case, an animation frame happens every 16ms, in which case the power buttons haven't been updated yet since they have a debouncing timeout of 30ms. However, when the runbot is slow, more than 30ms may very well have elapsed between two animation frames. When that is the case, the power buttons are displayed and the test fails. This commit changes the forced awaiting of an animation frame to a waiting pased on the time passed. In the general case, an animation frame will have happened in 20ms, so the test will still catch a regression. When the runbot is slow however, more time might have passed, but not necessarily an animation frame, so the power buttons should still be invisible, making this test more reliable. runbot-242466 Forward-Port-Of: odoo/odoo#259854 Forward-Port-Of: odoo/odoo#259654
When a subcontractor resupply picking is created through a stock-triggered route, it now correctly displays the originating purchase order. This makes it easier for users to trace the supply flow and understand which order the picking belongs to.
Original PR description
### Steps to reproduce: - In the settings enable: Subcontracting, Multi-Step Routes - Inventory > Configuration > Warehouse Management > Routes - Edit the 'Resupply Subcontractor on Order' route,…
### Steps to reproduce: - In the settings enable: Subcontracting, Multi-Step Routes - Inventory > Configuration > Warehouse Management > Routes - Edit the 'Resupply Subcontractor on Order' route, rules supply method to: Take from stock, if unavailable, trigger another rule (mtso) - Create a subcontracted bom For a product P with a component COMP - Create and confirm a PO for 1 unit of P with your subcontractor - Use the Resupply smart button to access the resupply picking #### > The resupply picking does not refer to the source PO ### Cause of the issue: The link is currently computed based on `move_dest_ids` which are only set for mto moves. However, moves created from mtso rules are `make_to_stock`. ### Fix: Since 19.0 2713876dbc70d3984e584a9037a2206dcda4e84a, we can rely on references to rebuild the link between the resupply picking and the source PO even in mtso. Note that this will also add the source PO link to each other picking of the reference. opw-6079680 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256689
This fix ensures return documents show the correct year in their date range labels. It prevents cases where a January 2023 date was incorrectly displayed as January 2022, which could cause confusion when reviewing reports or records.
Original PR description
Steps to reproduce: - Create a return from Jan 2023 to April 2023 -> the dates displayed in the name will be Jan 2022 - Apr 2023 The display is incorrect because we used the wrong date format, and therefore switch from using YYYY to yyyy as the first one is the ISO standard year and the second the calendar year. They might differ on the result here because 01 Jan 2023 falls on a Sunday, but ISO week starts on Monday, so it took the previous year (2022) Forward-Port-Of: odoo/enterprise#114428
This update fixes a small wording mistake in website and mass mailing text snippets, changing “am” to “pm” where needed. It helps ensure opening hours and related customer-facing content are accurate and less confusing.
Original PR description
am to pm Forward-Port-Of: odoo/odoo#260577
This update fixes a typo and improves the visual styling in the VoIP dashboard used with spreadsheets. It does not change how the feature works, but it helps make the interface clearer and more polished for users.
Original PR description
task-6132220 Forward-Port-Of: odoo/enterprise#114324
20 changes
Resolved issues and error corrections
Approval request printouts now fall back to the request owner’s language when no contact is set, instead of losing translations. This ensures printed approvals appear in the expected language even when the contact field is optional.
Original PR description
Steps to reproduce: ------------------ 1. Install Approvals. 2. Select an approval type from Approvals > Configuration and ensure the 'Contact' field is not required. 3. Install a second language (e.g., Arabic) and switch the user's language. 4. Create a new approval request with this approval type and set user as the request owner. 5. Try to print the approval request. Current behavior: ----------------- The report is only translated when partner is present because it translates using `partner_id.lang`. Since the partner is not required in all cases, `lang` can evaluate to False when it is missing, causing the report to bypass translations. Expected behavior: ------------------ The report should fall back to the request owner's language or the system's default language if the partner is not available. opw-6010222 Forward-Port-Of: odoo/enterprise#112476
This fix ensures return names show the correct calendar year when a return spans the start of a year. As a result, users will no longer see labels like "Jan 2022 - Apr 2023" for periods that actually start in January 2023.
Original PR description
Steps to reproduce: - Create a return from Jan 2023 to April 2023 -> the dates displayed in the name will be Jan 2022 - Apr 2023 The display is incorrect because we used the wrong date format, and therefore switch from using YYYY to yyyy as the first one is the ISO standard year and the second the calendar year. They might differ on the result here because 01 Jan 2023 falls on a Sunday, but ISO week starts on Monday, so it took the previous year (2022) Forward-Port-Of: odoo/enterprise#114428
Generating a W-2 CSV now works even when the End Date is left blank. If no end date is provided, the system automatically uses the current year for the file name instead of failing, which avoids a blocking error for users.
Original PR description
Currently, an error occurs when user tries to create a csv for w2 form with no end date defined. Steps to replicate: - Install `l10n_us_hr_payroll`. - Open Payroll > Reporting > W2 Report. - Click…
Currently, an error occurs when user tries to create a csv for w2 form with no end date defined.
Steps to replicate:
- Install `l10n_us_hr_payroll`.
- Open Payroll > Reporting > W2 Report.
- Click `New` > Remove value from `End Date` and click Generate.
Error:
```
File '/home/odoo/odoo19/enterprise/l10n_us_hr_payroll/models/l10n_us_w2.py', line 249, in action_generate_csv
self.csv_filename = f'form_w2_{self.date_end.year or date.today().year}.csv'
^^^^^^^^^^^^^^^^^^
AttributeError: 'bool' object has no attribute 'year'
```
Cause:
- As the user did not give any value for `End Date`, False was passed and when the execution flow reached [here] `self.end_date` is False and attempting to access `self.end_date.year` results in this error.
Solution:
- If we do not receive the `self.end_date` while generating the CSV, we will use the current year to generate the CSV file name.
[here]: https://github.com/odoo/enterprise/blob/01be8d6e9384bcb340559847d529b4887e073519/l10n_us_hr_payroll/models/l10n_us_w2.py#L248
No ID
Forward-Port-Of: odoo/enterprise#114363
Forward-Port-Of: odoo/enterprise#113408This update adjusts the width and layout of grid columns in monthly timesheet views. It prevents icons and overtime values from overlapping or wrapping awkwardly, making the display clearer and easier to read.
Original PR description
# [FIX] web_grid: column width with new time widget in month This commit increases the default width of the grid columns. Prior to this, the magnifying glass in Timesheets overlapped with the times in month scale, because the columns were too small. # [FIX] timesheet_grid: column overtime layout Without this commit, the overtimes were spanning two lines because the columns were too small. This commit changes the layout so that it spans one line to be consistent with the grid values. task-6121017
When users type an email address in the editor, it now automatically becomes a clickable email link as soon as they add a space. This makes it easier to create correctly formatted contact links without extra manual steps.
Original PR description
Before this commit: when typing an email address, it's not converted to a mailto link after spacing. After this commit: the mailto link is created after spacing. task- 6053993 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258736 Forward-Port-Of: odoo/odoo#257497
This change stabilizes an automated test in the HTML editor so it no longer fails unpredictably. It helps ensure more reliable quality checks without changing the user-facing editor behavior.
Original PR description
My last desperate fix attempt did not fix the issue so here is yet another desperate fix attempt. I have seen issues related to the use of `setContent` just to set the selection in the past so I hope it might be that. It's the only noticeable change between this test and the others, be it icon tests or color selector ones. runbot-242333 Forward-Port-Of: odoo/odoo#259978 Forward-Port-Of: odoo/odoo#259544
This update fixes an unstable automated test in the HTML editor by waiting based on elapsed time instead of a fixed animation frame. It makes the test more dependable on slower systems and reduces false failures without changing the product’s behavior.
Original PR description
Waiting for a full animation frame is too dangerous. In the general case, an animation frame happens every 16ms, in which case the power buttons haven't been updated yet since they have a debouncing timeout of 30ms. However, when the runbot is slow, more than 30ms may very well have elapsed between two animation frames. When that is the case, the power buttons are displayed and the test fails. This commit changes the forced awaiting of an animation frame to a waiting pased on the time passed. In the general case, an animation frame will have happened in 20ms, so the test will still catch a regression. When the runbot is slow however, more time might have passed, but not necessarily an animation frame, so the power buttons should still be invisible, making this test more reliable. runbot-242466 Forward-Port-Of: odoo/odoo#259854 Forward-Port-Of: odoo/odoo#259654
This update corrects the appearance of contract-related buttons on the employee form. It keeps the "New Contract" label from wrapping on narrow screens and makes the contract template button match the surrounding interface more closely.
Original PR description
- Add `text-nowrap` to the "New Contract" button to prevent text from splitting at narrow viewport widths - Fix contract template button styling: remove incorrect classes and align font-size and border with the surrounding UI task-6068488 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#256017
The button used to manage contract templates on the employee form now matches the surrounding interface better. This fixes inconsistent spacing and border styling so the page looks cleaner and more polished for users.
Original PR description
Fix contract template button styling: remove incorrect classes and align font-size and border with the surrounding UI task-6068488 Forward-Port-Of: odoo/enterprise#112113
This update adjusts an internal compatibility check so it recognizes the newer milestone for lxml 6.1. It helps keep accessibility-related HTML handling aligned with the updated library behavior and prevents the patch from being treated as outdated too early.
Original PR description
Whitelisting of ARIA attributes is now part of the milestone for LXML 6.1. This commit updates monkey patch's obsolescence detection accordingly. Forward-Port-Of: odoo/odoo#258910
This change prevents dropdown text from spilling out of bottom sheet panels or overlapping the selected checkmark. It also keeps long device names in voice and video settings from causing horizontal scrolling on small screens, improving the experience on mobile devices.
Original PR description
**Purpose of this PR:** Before this commit, in the bottom sheet, dropdown labels could overflow their active container or overlap with the checkmark icon when selected. In voice/video settings, long…
**Purpose of this PR:**
Before this commit, in the bottom sheet, dropdown labels could overflow their active container or overlap with the checkmark icon when selected. In voice/video settings, long selected device names could cause horizontal
scrolling on small screens.
This commit:
- Allows dropdown labels in bottom sheets to wrap on small screens.
- Reserves space for the checkmark icon in all bottom sheet dropdowns if any item is selected, ensuring consistent alignment.
- Constrains the selected device label within the available space voice/video settings to prevent layout overflow.
<table>
<tr>
<td><b>Before</b></td>
<td><b>After</b></td>
</tr>
<tr>
<td><img src="https://github.com/user-attachments/assets/8f347abc-fe26-427a-95ec-97ace3a0c5a2" width="300"/></td>
<td><img src="https://github.com/user-attachments/assets/6d6104b5-46c3-404b-be09-1cfa55209a96" width="300"/></td>
</tr>
</table>
task-[6095602](https://www.odoo.com/odoo/project/1519/tasks/6095602)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe call menu now includes the Picture-in-Picture action, making it easier to keep a call visible while switching to another conversation or chatter. It also corrects the visual styling of Fullscreen and Picture-in-Picture in the menu so they display at normal opacity.
Original PR description
Before this commit, Call Menu did not have the "Picture-in-Picture" action. This is unfortunate because this is one of the most valuable action to have it available there, as a frequent usage of…
Before this commit, Call Menu did not have the "Picture-in-Picture" action. This is unfortunate because this is one of the most valuable action to have it available there, as a frequent usage of Discuss is to join a call, switch to another conversation or chatter, and then wanting to keep an overlay of the call. Without the "Picture-in-Picture" in Call Menu, this forces user to access the Discuss conversation again and then click on "Picture-in-Picture" there, when clicking on the call menu would be faster. This commit adds the "Picture-in-Picture" action in the call menu to ease using this feature. Also fixes an issue where "Fullscreen" and "Picture-in-Picture" actions have reduced opacity in the Call Menu. This comes from opacity hover effect that should be limited to their inline visual in the Call view but was mistakenly also present in the dropdown. Before / After <img width="440" height="369" alt="Screenshot 2026-04-17 at 14 15 58" src="https://github.com/user-attachments/assets/2accb779-28f5-4930-a101-db5e52b029b7" /> Forward-Port-Of: odoo/odoo#260416 Forward-Port-Of: odoo/odoo#259866
The grouped list pager now uses the actual total number of records when that total is already known, instead of falling back to the configured display limit. This makes record counts more accurate and avoids confusing users when browsing grouped lists with many records.
Original PR description
When a pager is needed in a grouped list view and if the total number of record is greater than the `count_limit` (by default equal to 10000); opening the group or pressing the "Next" button will display the `count_limit` in the Pager.
This behavior can be optimized since the `web_read_group` call already computed the total count.
This commit allow the grouped list pager to display the total record count if it was already computed.
Steps to reproduce:
in a list view with 10 records, all in the same group for simplicity:
```xml
<list limit="2" count_limit="8">
<field name="foo"/>
</list>
```
- group the view by "foo" => The pager displays: `"1-2 / 10"`
- click on the 'next' button of the pager => The pager displays: `"3-4 / 8"`
8, the `count_limit` is shown instead of 10, the number of records in the group.
task-6053705
Forward-Port-Of: odoo/odoo#259858
Forward-Port-Of: odoo/odoo#259562Discuss now correctly displays complex emoji combinations as a single symbol instead of splitting them into parts. This improves message readability and prevents emoji from appearing incorrectly in chat conversations.
Original PR description
Prior to this commit, emoji sequences were rendered incorrectly in Discuss. The existing regex failed to match multi-codepoint sequences, splitting complex emojis (like ❤️🔥) into separate individual emojis (❤️ and 🔥). Steps to reproduce: 1. Post a message in Discuss containing "🤷♂️" 2. Notice the message displays "🤷♂" instead This commit refines `EMOJI_REGEX` to match complete emoji sequences. [Task-6128638](https://www.odoo.com/odoo/project/1519/tasks/6128638)
This update corrects a typo and improves the dashboard’s styling for a cleaner user experience. It does not change how the feature works, but it helps make the interface look more polished and consistent.
Original PR description
task-6132220
This update makes AI chat messages easier to read by reducing oversized headings and cleaning up table borders in the chat layout. It also fixes a formatting issue that could cause stray asterisks to appear in AI responses, making the content display more consistently for users.
Original PR description
- The font-size of h1/h2 headers is large given the small size of chat channels which makes it harder to read the rest of the text. So, the font-size of h1/h2 headers is reduced in ai chat channels. - This commit removes the double border at the bottom of tables and updates the table borders by using table-bordered bootstrap class instead of border. - This commit also fixes an error where markdown2 2.4.11 doesn't detect the boundaries of bold markup properly causing asterisks to appear randomly inside AI responses. For example, "The **dog**, the **cat** and the **rat**" becomes "The <strong>dog<em>*, the *</em>cat<em>* and the *</em>rat</strong>" where it should only use <strong>dog/cat/rat</strong> task-6109286
Resupply pickings for subcontracted products now correctly display the source purchase order, even when the replenishment route uses the alternate stock-based flow. This makes it easier to trace where the resupply came from and reduces confusion for users managing subcontracting operations.
Original PR description
### Steps to reproduce: - In the settings enable: Subcontracting, Multi-Step Routes - Inventory > Configuration > Warehouse Management > Routes - Edit the 'Resupply Subcontractor on Order' route,…
### Steps to reproduce: - In the settings enable: Subcontracting, Multi-Step Routes - Inventory > Configuration > Warehouse Management > Routes - Edit the 'Resupply Subcontractor on Order' route, rules supply method to: Take from stock, if unavailable, trigger another rule (mtso) - Create a subcontracted bom For a product P with a component COMP - Create and confirm a PO for 1 unit of P with your subcontractor - Use the Resupply smart button to access the resupply picking #### > The resupply picking does not refer to the source PO ### Cause of the issue: The link is currently computed based on `move_dest_ids` which are only set for mto moves. However, moves created from mtso rules are `make_to_stock`. ### Fix: Since 19.0 2713876dbc70d3984e584a9037a2206dcda4e84a, we can rely on references to rebuild the link between the resupply picking and the source PO even in mtso. Note that this will also add the source PO link to each other picking of the reference. opw-6079680 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256689
This update corrects an automated performance test so it matches the current demo data setup. It helps keep test results reliable and prevents false failures during validation.
Original PR description
Query counts were updated for demo data. runbot-242325 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260297
This update prevents the system from creating accounting entries when a physical inventory adjustment results in no actual quantity change. It reduces clutter in the books by avoiding zero-value journal items that do not reflect any real stock movement.
Original PR description
**Issue**: Applying a physical inventory adjustment with a 0 quantity difference creates an account move with 0 debit/credit, resulting in accounting noise. **Steps to reproduce**: - Configure a product with perpetual valuation - Go to Inventory > Configuration > Warehouse Management > Locations - Remove the internal filter and open the "Inventory adjustment" location - Set a Loss Account - Go to physical inventory - Create and apply for this product with counted quantity of 0 - Go to Journal Items -> An item is created **Cause**: While checking whether an `account.move` should be created: https://github.com/odoo/odoo/blob/9dfd673465e4a3326a6caa64c8d61fe7319cbc44/addons/stock_account/models/stock_move.py#L613-L620 The quantity of the `stock.move` is not taken into account. opw-5957406 Forward-Port-Of: odoo/odoo#254331
This update fixes a small wording error in website and mass mailing snippets, changing “am” to “pm” where needed. It helps ensure displayed opening hours and related content are accurate and less confusing for visitors.
Original PR description
am to pm Forward-Port-Of: odoo/odoo#260577
10 changes
Resolved issues and error corrections
This fix ensures approval request printouts are translated even when no contact is linked to the request. If a contact language is unavailable, the system now falls back to the request owner's language, or to the default language when needed.
Original PR description
Steps to reproduce: ------------------ 1. Install Approvals. 2. Select an approval type from Approvals > Configuration and ensure the 'Contact' field is not required. 3. Install a second language (e.g., Arabic) and switch the user's language. 4. Create a new approval request with this approval type and set user as the request owner. 5. Try to print the approval request. Current behavior: ----------------- The report is only translated when partner is present because it translates using `partner_id.lang`. Since the partner is not required in all cases, `lang` can evaluate to False when it is missing, causing the report to bypass translations. Expected behavior: ------------------ The report should fall back to the request owner's language or the system's default language if the partner is not available. opw-6010222 Forward-Port-Of: odoo/enterprise#112476
This fixes the displayed name of return periods so the starting year now matches the actual calendar year. Previously, some dates could be shown as the prior year because the system used the wrong year format, which could confuse users reviewing reports.
Original PR description
Steps to reproduce: - Create a return from Jan 2023 to April 2023 -> the dates displayed in the name will be Jan 2022 - Apr 2023 The display is incorrect because we used the wrong date format, and therefore switch from using YYYY to yyyy as the first one is the ISO standard year and the second the calendar year. They might differ on the result here because 01 Jan 2023 falls on a Sunday, but ISO week starts on Monday, so it took the previous year (2022) Forward-Port-Of: odoo/enterprise#114428
The W-2 report can now generate a CSV file even when the End Date is left blank. If no end date is provided, the system uses the current year for the file name instead of failing with an error.
Original PR description
Currently, an error occurs when user tries to create a csv for w2 form with no end date defined. Steps to replicate: - Install `l10n_us_hr_payroll`. - Open Payroll > Reporting > W2 Report. - Click…
Currently, an error occurs when user tries to create a csv for w2 form with no end date defined.
Steps to replicate:
- Install `l10n_us_hr_payroll`.
- Open Payroll > Reporting > W2 Report.
- Click `New` > Remove value from `End Date` and click Generate.
Error:
```
File '/home/odoo/odoo19/enterprise/l10n_us_hr_payroll/models/l10n_us_w2.py', line 249, in action_generate_csv
self.csv_filename = f'form_w2_{self.date_end.year or date.today().year}.csv'
^^^^^^^^^^^^^^^^^^
AttributeError: 'bool' object has no attribute 'year'
```
Cause:
- As the user did not give any value for `End Date`, False was passed and when the execution flow reached [here] `self.end_date` is False and attempting to access `self.end_date.year` results in this error.
Solution:
- If we do not receive the `self.end_date` while generating the CSV, we will use the current year to generate the CSV file name.
[here]: https://github.com/odoo/enterprise/blob/01be8d6e9384bcb340559847d529b4887e073519/l10n_us_hr_payroll/models/l10n_us_w2.py#L248
No ID
Forward-Port-Of: odoo/enterprise#114363
Forward-Port-Of: odoo/enterprise#113408This change updates the Windows packaging setup so it includes optional dependencies required for a smoother installation and runtime experience. It helps avoid missing-component issues for Windows users and makes the packaged product more reliable.
Original PR description
Forward-Port-Of: odoo/odoo#258320 Forward-Port-Of: odoo/odoo#258128
When someone types an email address in the editor, it is now automatically turned into a clickable email link as soon as they press space. This makes it easier to create email links correctly and improves the editing experience.
Original PR description
Before this commit: when typing an email address, it's not converted to a mailto link after spacing. After this commit: the mailto link is created after spacing. task- 6053993 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258736 Forward-Port-Of: odoo/odoo#257497
This change fixes an unstable automated test in the HTML editor so it no longer fails randomly on slower systems. It does not change customer-facing behavior, but it makes the test suite more dependable and reduces false alarms during validation.
Original PR description
Waiting for a full animation frame is too dangerous. In the general case, an animation frame happens every 16ms, in which case the power buttons haven't been updated yet since they have a debouncing timeout of 30ms. However, when the runbot is slow, more than 30ms may very well have elapsed between two animation frames. When that is the case, the power buttons are displayed and the test fails. This commit changes the forced awaiting of an animation frame to a waiting pased on the time passed. In the general case, an animation frame will have happened in 20ms, so the test will still catch a regression. When the runbot is slow however, more time might have passed, but not necessarily an animation frame, so the power buttons should still be invisible, making this test more reliable. runbot-242466 Forward-Port-Of: odoo/odoo#259854 Forward-Port-Of: odoo/odoo#259654
This update automatically removes Timesheets assistant suggestions older than 30 days. It prevents unused data from piling up in the browser storage, helping keep the feature lightweight and reliable over time.
Original PR description
In the Timesheets assistant, we store the suggested events taken or dismissed by the user to avoid suggesting them again. However, there is no mechanism to remove them from the localstorage, so it currently grows infinitely. With this PR, we now delete events older than 30 days, to avoid filling the localstorage with useless data. Task-6131640
This update fixes a typo in time-related text shown on website and mass mailing snippets, changing the wording from “am” to “pm” where appropriate. It helps ensure opening hours and scheduled times are displayed correctly and avoids confusion for customers.
Original PR description
am to pm
The system now only fills in supported document information when a partner is actually a valid Nemhandel participant. This avoids unnecessary processing and prevents test failures caused by running the lookup when no Nemhandel setup exists.
Original PR description
The method to fill the supported documents of a partner was called even if it was not a valid Nemhandel participant. This would cause some test to fail as the call was unexpectedly done on tests without any setup for it. Forward-Port-Of: odoo/odoo#259117 Forward-Port-Of: odoo/odoo#258704
This update fixes the number shown in the pager for grouped list views. When the system already knows the full record total, it now displays that true total instead of a capped placeholder, making counts more accurate for users.
Original PR description
When a pager is needed in a grouped list view and if the total number of record is greater than the `count_limit` (by default equal to 10000); opening the group or pressing the "Next" button will display the `count_limit` in the Pager.
This behavior can be optimized since the `web_read_group` call already computed the total count.
This commit allow the grouped list pager to display the total record count if it was already computed.
Steps to reproduce:
in a list view with 10 records, all in the same group for simplicity:
```xml
<list limit="2" count_limit="8">
<field name="foo"/>
</list>
```
- group the view by "foo" => The pager displays: `"1-2 / 10"`
- click on the 'next' button of the pager => The pager displays: `"3-4 / 8"`
8, the `count_limit` is shown instead of 10, the number of records in the group.
task-6053705
Forward-Port-Of: odoo/odoo#259858
Forward-Port-Of: odoo/odoo#2595623 changes
Resolved issues and error corrections
When an approval request does not have a contact linked, the printed report now falls back to the request owner’s language instead of stopping translation. This ensures the document is shown in the expected language even when the contact field is optional.
Original PR description
Steps to reproduce: ------------------ 1. Install Approvals. 2. Select an approval type from Approvals > Configuration and ensure the 'Contact' field is not required. 3. Install a second language (e.g., Arabic) and switch the user's language. 4. Create a new approval request with this approval type and set user as the request owner. 5. Try to print the approval request. Current behavior: ----------------- The report is only translated when partner is present because it translates using `partner_id.lang`. Since the partner is not required in all cases, `lang` can evaluate to False when it is missing, causing the report to bypass translations. Expected behavior: ------------------ The report should fall back to the request owner's language or the system's default language if the partner is not available. opw-6010222 Forward-Port-Of: odoo/enterprise#112476
This update corrects a test for Mexican electronic invoices so it matches the current rounding behavior again. It helps keep invoice validation reliable after the rounding mode was changed back to mixed.
Original PR description
https://github.com/odoo/odoo/pull/255574 change the rounding mode back to mixed. This break the test modified in this PR. opw-5963855 Forward-Port-Of: odoo/enterprise#114081
The tax return list opened from the Accounting dashboard now expands all expected groups, instead of stopping after the first few and showing blank sections. This makes the list easier to read and ensures users can review all tax return entries from the dashboard view.
Original PR description
When navigating to the tax return list view from the accounting dashboard, only the first few groups were expanded, leaving subsequent groups appearing empty with only a date header visible. Steps to reproduce: - Generate several tax returns. - Open the main Accounting dashboard. - On a Tax Return card, click one of the generated buttons. - Scroll down the resulting list view. Issue: After 10 groups, following sections appear empty, showing only the header Analysis: By default, the web client limits the number of automatically opened groups. This change adds 'max_number_opened_groups' to the buttons context, aligning the behavior with the primary 'Tax Return' button action. https://github.com/odoo/enterprise/blob/1a2afda205c41773747ed5f174d75843effbbe9f/account_reports/views/account_return_views.xml#L183 opw-5769978
8 changes
Resolved issues and error corrections
When users type an email address in the editor and then press space, it is now automatically turned into a clickable email link. This makes it easier to create contact links quickly and helps keep content formatting consistent.
Original PR description
Before this commit: when typing an email address, it's not converted to a mailto link after spacing. After this commit: the mailto link is created after spacing. task- 6053993 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258736 Forward-Port-Of: odoo/odoo#257497
When a vendor bill is created from a UBL XML file, the chatter now shows the proper import message instead of displaying an empty or incorrect entry. This makes the document history clearer and helps users understand how the invoice was imported.
Original PR description
[FIX] account_edi_ubl_cii: Print right message in chatter at import When a UBL XML invoice is imported in vendor bills and no logs are collected, a message 'None' is printed in the chatter and the message 'Format used to import the invoice: ...' is not printed This commit fixes both issues no-task 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#260374
This change updates the Windows packaging setup to include optional dependencies that were missing before. It helps ensure Windows installations have the needed components available, reducing setup issues for users on that platform.
Original PR description
Forward-Port-Of: odoo/odoo#258320 Forward-Port-Of: odoo/odoo#258128
This change fixes an unstable automated test for shared activity updates across browser tabs. It prevents an internal data route from interfering with the test, making the test results more reliable and reducing false failures in development and CI.
Original PR description
The `@mail/activity/activity/activity updates are shared between tabs` fails in a non-deterministic fashion. It occurs because the `/mail/data` route can interfere with the test. runbot-242616 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#260265
This update corrects the placement of the power buttons in Knowledge so they appear next to the intended content block. It improves the visual layout and makes the editor behave more consistently for users.
Original PR description
Current behavior before PR: - In knowledge, the power buttons were displayed at the wrong position. They were displayed before the block hint instead of after it. Desired behavior after PR is merged: - In knowledge, the editable has a margin applied to it. As a result, the block does not start at the editable's left position but slightly inside it, causing the power buttons to be displayed at the wrong position. Now, the power buttons' position is set using the block's left position so that they are displayed correctly. task-6102944
This update corrects an automated test for Mexico electronic invoices after the rounding behavior was changed back to the expected mode. It helps ensure the system continues to validate invoice totals properly and avoids test failures during maintenance and future updates.
Original PR description
https://github.com/odoo/odoo/pull/255574 change the rounding mode back to mixed. This break the test modified in this PR. opw-5963855 Forward-Port-Of: odoo/enterprise#114081
Grouped list views now keep showing the actual number of records when the pager is used, instead of switching to a fixed limit value. This makes record counts more accurate and avoids confusion when users browse through grouped data.
Original PR description
When a pager is needed in a grouped list view and if the total number of record is greater than the `count_limit` (by default equal to 10000); opening the group or pressing the "Next" button will display the `count_limit` in the Pager.
This behavior can be optimized since the `web_read_group` call already computed the total count.
This commit allow the grouped list pager to display the total record count if it was already computed.
Steps to reproduce:
in a list view with 10 records, all in the same group for simplicity:
```xml
<list limit="2" count_limit="8">
<field name="foo"/>
</list>
```
- group the view by "foo" => The pager displays: `"1-2 / 10"`
- click on the 'next' button of the pager => The pager displays: `"3-4 / 8"`
8, the `count_limit` is shown instead of 10, the number of records in the group.
task-6053705
Forward-Port-Of: odoo/odoo#259858
Forward-Port-Of: odoo/odoo#259562This change ensures partner document details are only filled in when the partner is a valid Nemhandel participant. It prevents unnecessary processing and avoids test failures caused by the update being triggered in cases where no setup was expected.
Original PR description
The method to fill the supported documents of a partner was called even if it was not a valid Nemhandel participant. This would cause some test to fail as the call was unexpectedly done on tests without any setup for it. Forward-Port-Of: odoo/odoo#259117 Forward-Port-Of: odoo/odoo#258704
4 changes
Resolved issues and error corrections
This update corrects an automated test for Mexican electronic invoicing after a related rounding change was reverted to its expected behavior. It helps ensure the invoice rounding logic stays reliable and prevents false test failures during development and delivery.
Original PR description
https://github.com/odoo/odoo/pull/255574 change the rounding mode back to mixed. This break the test modified in this PR. opw-5963855 Forward-Port-Of: odoo/enterprise#114081
The Sendcloud delivery tests were reclassified so they now run in regular automated checks instead of only nightly testing. This helps catch issues earlier and makes the delivery integration more reliable. A related test was also adjusted to match the current package-weight behavior.
Original PR description
Test class was tagged as external although calls are mocked. This means errors were only caught in nightly and not by CI. Removing the tag requires fixing some of the tests. For `test_multicollo`, we send the average weight of packages instead of the total since 97f82442c9fee7dcb3e8c5e9bacddcd6bb864e11. Forward-Port-Of: odoo/enterprise#111660
This update removes the transaction ID shown next to payment amounts in Point of Sale for Worldline transactions. It helps avoid confusion for cashiers, since the ID could look like a negative amount, while removing information they do not need.
Original PR description
This PR removes the transaction id shown next to the amount in point of sale for transactions used with Worldline. The transaction id preceded by a "-" was confusing for some cashiers and interpreted as a negative amount. Since the transaction id isn't useful for cashiers it's removed from the xml. Before: <img width="705" height="422" alt="image" src="https://github.com/user-attachments/assets/19ebfe49-e16d-45ea-b770-e445fe8b473d" /> After this PR: <img width="1182" height="353" alt="image" src="https://github.com/user-attachments/assets/f7cd1b7c-75fa-4fe9-ae20-7c5e6d834488" /> opw-6085975 Forward-Port-Of: odoo/enterprise#113782
This update fixes a display issue in Documents where certain XML email attachments that can be previewed as PDF were opening in two preview panes at once. Users now see a single correct preview, improving readability and avoiding confusion when reviewing incoming documents.
Original PR description
**Steps to reproduce:** - Install documents_account - Set up alias to catch incoming mails - Receive a mail with xml attachement which can be previewed as pdf - Go to Documents app - Click on the…
**Steps to reproduce:** - Install documents_account - Set up alias to catch incoming mails - Receive a mail with xml attachement which can be previewed as pdf - Go to Documents app - Click on the document preview - Preview is split in two iframes, both with the same content (pdf) **Issue:** Due to the `isPdf` patch the attachment can match multiple types for the preview (pdf and text) as both getter return `true`. ``` <iframe t-if="state.file.isPdf" ... <iframe t-if="state.file.isText" ... ``` It also seems that xml received by mail are imported as text, which is why the issue doesn't happen when manually uploading the same xml file. **Fix:** Ensure that if the document is matching `isPdf`, it doesn't trigger the second iframe with `isText`. Also it seems fixed in 19.0 as the text iframe is replaced by this xpath: `<xpath expr="//iframe[@t-if='state.file.isText']" position="replace">` which was added for https://github.com/odoo/enterprise/commit/de614ee5e9a087d49939c65c0118ae6164c7b31b related patch: https://github.com/odoo/enterprise/commit/ffcdd2275c8bf564e15151ccbcaf3965ed968450 opw-6018536 Forward-Port-Of: odoo/enterprise#112041
13 changes
Resolved issues and error corrections
Approval request reports now still translate correctly when no contact is selected. If the contact language is unavailable, the report uses the request owner’s language or the system default, ensuring users receive printed approvals in the expected language.
Original PR description
Steps to reproduce: ------------------ 1. Install Approvals. 2. Select an approval type from Approvals > Configuration and ensure the 'Contact' field is not required. 3. Install a second language (e.g., Arabic) and switch the user's language. 4. Create a new approval request with this approval type and set user as the request owner. 5. Try to print the approval request. Current behavior: ----------------- The report is only translated when partner is present because it translates using `partner_id.lang`. Since the partner is not required in all cases, `lang` can evaluate to False when it is missing, causing the report to bypass translations. Expected behavior: ------------------ The report should fall back to the request owner's language or the system's default language if the partner is not available. opw-6010222 Forward-Port-Of: odoo/enterprise#112476
The UAE financial audit report test data was updated to match the latest account codes from the new chart of accounts. This keeps automated checks aligned with the current accounting setup and helps avoid false test failures.
Original PR description
in the odoo PR we changed a lot of the account codes. in this pr we are just fixing a test where the csv was still comparing old account codes in the CSV task-5455978
This fix makes an age-related Belgian payroll test use a fixed date so results no longer change as time passes. It prevents intermittent nightly build failures and improves confidence in payroll validation checks without changing customer-facing payroll behavior.
Original PR description
The test was failing intermittently in nightly builds that run at a date in the next year (e.g.: 2027-04-20). The issue was that the student's age is calculated at runtime using : - When the student is age 19 (2026): min wage = 2057.87 < 2100 → PASS - When the student is age 20 (2027): min wage = 2136.84 > 2100 → FAIL task-6144986 Runbot error: https://runbot.odoo.com/odoo/runbot.build.error/242589
The accounting reports return name now shows the correct calendar year for date ranges that start near the beginning of January. This prevents confusing labels such as showing January 2022 for a return that actually starts in January 2023.
Original PR description
Steps to reproduce: - Create a return from Jan 2023 to April 2023 -> the dates displayed in the name will be Jan 2022 - Apr 2023 The display is incorrect because we used the wrong date format, and therefore switch from using YYYY to yyyy as the first one is the ISO standard year and the second the calendar year. They might differ on the result here because 01 Jan 2023 falls on a Sunday, but ISO week starts on Monday, so it took the previous year (2022) Forward-Port-Of: odoo/enterprise#114428
The deduplication screen now correctly hides the discard button when users are viewing records that have already been discarded. This avoids confusion and prevents users from trying to discard records again, including when only some records in a duplicate group are discarded.
Original PR description
Ensure the discard button is hidden in the deduplication view when displaying discarded records, including cases where only part of a duplicate group is discarded and shown through the archive/discarded filter. task-6124494
Signed files added from a project or task now automatically select the project's configured Documents folder instead of defaulting to My Drive. This keeps signed project paperwork organized in the same place as other project attachments and reduces manual filing.
Original PR description
Steps to Reproduce --- - Request a signature from a project task or project and complete the signing process. - In the chatter, click "Add to Documents" on the signed attachment. Issue --- Signed documents attached to projects or tasks default to "My Drive" when added to Documents, instead of using the project's configured Documents folder. Current Behaviour --- - Regular task/project attachments correctly preselect the project Documents folder. - Signed attachments fall back to "My Drive". Expected Behaviour --- Signed documents linked to projects or tasks should preselect the project's Documents folder, consistent with regular attachments. Fix --- Extend get_documents_operation_add_destination to handle sign.request attachments linked to project.task or project.project, resolving to the corresponding project Documents folder. task - 5226770 Forward-Port-Of: odoo/enterprise#105600
Restarting an IoT box no longer resets a printer subtype that a user manually selected. This prevents unwanted configuration changes and keeps device settings aligned with business preferences.
Original PR description
Steps to reproduce: 1. Connect a printer to the IoT box and pair with a DB 2. Manually change the subtype of the printer in the DB 3. Restart the IoT box so it resends its devices. **Expected behaviour**: Subtype remains as the user-set value. **Actual behaviour**: Subtype is reset to the original value. To fix this issue, we simply remove any check for subtype in the device updating condition. Now, a device will only reset if its type changes. Forward-Port-Of: odoo/enterprise#114416
The W-2 report CSV export no longer fails when the End Date field is left blank. In that case, the file name now uses the current year, allowing payroll users to generate the report successfully.
Original PR description
Currently, an error occurs when user tries to create a csv for w2 form with no end date defined. Steps to replicate: - Install `l10n_us_hr_payroll`. - Open Payroll > Reporting > W2 Report. - Click…
Currently, an error occurs when user tries to create a csv for w2 form with no end date defined.
Steps to replicate:
- Install `l10n_us_hr_payroll`.
- Open Payroll > Reporting > W2 Report.
- Click `New` > Remove value from `End Date` and click Generate.
Error:
```
File '/home/odoo/odoo19/enterprise/l10n_us_hr_payroll/models/l10n_us_w2.py', line 249, in action_generate_csv
self.csv_filename = f'form_w2_{self.date_end.year or date.today().year}.csv'
^^^^^^^^^^^^^^^^^^
AttributeError: 'bool' object has no attribute 'year'
```
Cause:
- As the user did not give any value for `End Date`, False was passed and when the execution flow reached [here] `self.end_date` is False and attempting to access `self.end_date.year` results in this error.
Solution:
- If we do not receive the `self.end_date` while generating the CSV, we will use the current year to generate the CSV file name.
[here]: https://github.com/odoo/enterprise/blob/01be8d6e9384bcb340559847d529b4887e073519/l10n_us_hr_payroll/models/l10n_us_w2.py#L248
No ID
Forward-Port-Of: odoo/enterprise#114363
Forward-Port-Of: odoo/enterprise#113408Rental planning now correctly applies calendar leave entries that are not tied to a specific resource to all resources. This helps prevent availability and scheduling errors when company-wide unavailable periods are configured.
Original PR description
Before this commit, any `Resource Calendar Leave` created with no `Resource` related to it was ignored, while it should have been applied to all `Resources`. This commit makes sure that any `Resource Calendar Leave` with no related `Resource` is applied to all `Resources` as intended. task-5798796 Forward-Port-Of: odoo/enterprise#114274 Forward-Port-Of: odoo/enterprise#112575
Self-ordering now loads only the point-of-sale configuration and session information it actually needs. This reduces unnecessary data handling, helping the self-ordering experience run more efficiently without changing how users interact with it.
Original PR description
This commit optimizes pos_config and pos_session data loading by only loading the fields required for self-ordering. X-original-commit: ce78609b368e541a70c17141ee5b51543c73c1d0 Forward-Port-Of: odoo/enterprise#113801 Forward-Port-Of: odoo/enterprise#113661
The employee form in Swiss payroll now shows the contract template button with styling that matches the surrounding interface. This removes visual inconsistency and makes the form look more polished for users.
Original PR description
Fix contract template button styling: remove incorrect classes and align font-size and border with the surrounding UI task-6068488 Forward-Port-Of: odoo/enterprise#112113
This update stabilizes the geolocation service tests used by Field Service planning. It reduces unnecessary test work so the checks run consistently and no longer fail at random, which helps keep development and releases more reliable.
Original PR description
This commit fixes the undeterministic test failures for the geolocation service. We reduce the [workload](https://github.com/odoo/enterprise/blob/master/planning_field_service/static/src/services/field_service_geolocation_service.js#L26) of the `startWatch` method by mocking the `has_group` calls. Forward-Port-Of: odoo/enterprise#114572
This change updates several internal counters used by mail and related performance checks so they match the expected system state. It helps ensure automated checks stay reliable and prevents incorrect error handling when rendering content with a missing field.
Original PR description
> > Update various (main mail-related) counters according to runbot state. Forward-Port-Of: odoo/enterprise#114603
4 changes
Resolved issues and error corrections
This change fixes a timing issue in the shop floor test flow so popups are fully closed before the tour ends. It reduces flaky test failures and helps keep the shop floor experience more stable during automated checks.
Original PR description
**Issue** Currently, there is an async issue with the test `test_shop_floor_disable_serial_create`that may fail with the following error: "Tour finished with a dirty form view being open. Dirty form views are automatically saved when the page is closed, which leads to stray network requests and inconsistencies." **Cause** Although the tour explicitly closes all popups, the last click on the discard button may not be processed before the tour ends: https://github.com/odoo/enterprise/blob/859e65e8c267701bb19dbff9d24a8c80774dbaa6/mrp_workorder/static/tests/tours/tour_shopfloor.js#L332-L333 runbot-242504
Discarding changes in Sign Templates now happens without reloading the page, so users no longer see a flicker. The template resets in place, which makes the experience faster and more seamless when abandoning edits.
Original PR description
Before this commit, clicking Discard in Sign Template reloaded the action/PDF iframe, which caused flicker. The discard flow was also more complex than needed and field normalization was noisy. After this commit, discard now happens in place: we fetch fresh sign items/radio sets, reset fields inside the existing iframe, and keep the page mounted with no reload. task-6121560
The subscription portal now shows only the product lines that are actually invoiceable. This keeps the displayed lines consistent with the tax totals at the bottom, reducing confusion for customers reviewing their subscription details.
Original PR description
Previously, the portal view for subscriptions displayed all un-collapsed products from the sales order, ignoring whether they were actually invoiceable lines. This caused a visual mismatch where the displayed lines did not correspond to the calculated tax totals at the bottom of the view. This commit updates the visibility logic to ensure that product lines are only included if they are invoiceable. task-6128619
This update corrects a test for Mexican electronic invoicing so it matches the current rounding behavior again. It helps prevent false failures in the validation checks used to keep this localization working properly.
Original PR description
https://github.com/odoo/odoo/pull/255574 change the rounding mode back to mixed. This break the test modified in this PR. opw-5963855 Forward-Port-Of: odoo/enterprise#114081
10 changes
Resolved issues and error corrections
This fix ensures that when users cancel a confirmation prompt in the spreadsheet app, the expected cancel action is actually triggered. It improves reliability of user interactions and prevents workflows from continuing as if the dialog had been accepted.
Original PR description
The `cancel` callback of the `env.askConfirmation` method was not called when the user clicked on the cancel button. task-6074948 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 fix ensures that when users cancel a confirmation dialog in Documents Spreadsheet, the cancel action is properly executed. It improves reliability by making sure the application responds as expected when a user chooses not to proceed.
Original PR description
The `cancel` callback of the `env.askConfirmation` method was not called when the user clicked on the cancel button. task-6074948 Forward-Port-Of: odoo/enterprise#112304
This update adjusts an internal test check so it correctly handles new Python 3.14 class attributes introduced by lazy annotation evaluation. It prevents false failures in the test suite and helps keep Odoo compatible with the latest Python version.
Original PR description
Since Python 3.14 (PEP 649), class annotations are evaluated lazily. This introduces two new internal attributes to the class namespace: - `__annotate_func__`: The function that computes the annotations. - `__annotations_cache__`: The cache for the computed annotations. This commit adds these attributes to the TransactionCase's ignored internal attributes checker. Note: this PR is a follow-up of https://github.com/odoo/odoo/pull/247151 Reference: - https://peps.python.org/pep-0649/
This update fixes a small wording typo in the website opening hours snippet, changing "am" to "pm" where appropriate. It improves the accuracy and professionalism of the information shown to visitors.
Original PR description
am to pm
This change stops linked Sales Order status updates from automatically creating chatter messages on Projects and Tasks. It helps keep the activity history cleaner and avoids extra notifications that were not adding business value.
Original PR description
Before this commit: - The chatter on the Project record tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `project.project`, `project.task` models. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809
The contact list view now shows child contact type labels in the user’s language instead of English. This brings it in line with the Kanban view and improves readability for multilingual users.
Original PR description
Problem: When the contact type is set for a related (child) contact, the contact type is shown in English next to the contact name in the contact list view. It should be translated to the user language. It is correctly translated in the Kanban view. Steps to reproduce: 1. Install the Contacts app. 2. Create a contact or go to an existing contact 3. Add a related (child) contact and set its contact type to any type (i.e. Invoice Address) 4. Change the user language to any language other than English 5. Go back to the contact list view and check the name of the related (child) contact. See how the contact type appearing in the name is in English instead of being translated, while it is correctly translated in the Kanban view. Cause: The list view uses the 'complete_name' field which is not translated, while the Kanban view uses the 'display_name' field which is translated. Solution: Use the 'display_name' field instead of 'complete_name' in the list view. opw-5947987
This change updates a manufacturing test so it no longer depends on an Enterprise-only feature. It helps ensure the test suite runs correctly in community installations, reducing false failures during validation.
Original PR description
The test `test_multi_lot_component_consumption` relies on `move_raw_line_ids`, which is initialized by the `stock_barcode_mrp` module. This module is only available in enterprise, causing the test to fail in community setups. https://github.com/odoo/odoo/blob/0ce5baf2918960591284eb494d82dfef07043af0/addons/mrp/tests/test_consume_component.py#L481 runbot-242612
Helpdesk tickets will no longer automatically post chatter messages when the linked Sales Order status changes. This reduces unnecessary message noise and helps teams focus on updates that are directly relevant to the ticket.
Original PR description
Before this commit: - The chatter on Helpdesk Tickets tracked and logged changes to the linked Sales Order's status. After this commit: - Explicitly set `tracking=False` on the related `sale_order_state` field in `helpdesk.ticket`. - Status updates to linked SOs will no longer automatically post tracking messages in chatter. task-6079809
This fix prevents a rare crash that could happen when one drag action was interrupted by another started almost immediately afterward. It improves the stability of the web interface during fast user interactions.
Original PR description
### [FIX] web: fix crash when cancelling drag sequence Before this commit: drag sequences could be aborted by new drag sequences; the way this worked is that a new sequence would register its "cancel" callback in a global variable, and when another sequence is started, it calls that variable to cancel the previous one. The issue was that the variable was assigned too early; before the actual "cancel" callback was available. This means that in edge cases where 2 sequences would be triggered in less than (effectively) a resolved promise, the callback would not be available and a crash would occur. This commit moves the variable assignment *after* the "cancel" callback is made available, ensuring there is no crash. Runbot [243113](https://runbot.odoo.com/odoo/error/243113) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change corrects how the Spanish Point of Sale sends pricelist information to the payment screen. Instead of passing only the record ID, it now passes the full pricelist data, matching the behavior used in later versions and helping avoid mismatches during payment validation.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: pass id Desired behavior after PR is merged: pass object, same that 19.0 https://github.com/odoo/odoo/blob/2e20e9a1a328757cc8a19261af3ba2287fb23558/addons/l10n_es_pos/static/src/app/utils/order_payment_validation.js#L44 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
5 changes
Resolved issues and error corrections
This update fixes an issue in the online shop where long category names could push buttons off the page on smaller screens. Category names are now shortened when needed, keeping the layout usable and avoiding horizontal scrolling.
Original PR description
Scenario: - go to /shop - click on long category (eg. Furnitures) - reduce browser width (might need to use developer tools mobile size) - horizontal scroll to the right Result: the buttons are overflowing the page with Cause: from 17.0 to saas-18.2 (after which the category name is removed from the filter button line) the category name is a fixed min-size with overflow:visible, so that and being flex-nowrap, it overflows the page width if it doesn't fit. Fix: truncate category name if it is too long opw-6065145
The Time Remaining value in shared project views now matches the warning color shown on its label when the remaining hours are below zero. This makes it easier for users to quickly spot overdue time and understand project status at a glance.
Original PR description
**Steps to reproduce:** - Open project shared form view. - Go to the Timesheets tab. - Observe the Time Remaining value. **Issue:** - The Time Remaining label is red properly but its value does not becomes red even when the value is negative. **Fix:** In hr_timesheet, the remaining_hours field has a decoration-danger applied In sale_timesheet_enterprise, this field is overridden as portal_remaining_hours So, Added the corresponding decoration-danger on portal_remaining_hours. task-5404009
This update makes the Time Remaining value in shared project forms display in red when it is negative. It improves visibility so users can quickly spot overdue time at a glance.
Original PR description
**Steps to reproduce:** - Open project shared form view. - Go to the Timesheets tab. - Observe the Time Remaining value. **Issue:** - The Time Remaining label is red properly but its value does not becomes red even when the value is negative. **Fix:** - Adjusted the logic to ensure the Time Remaining value is highlighted in red when value is negative **Task-id: 5404009**
The PDF sidebar in Sign now opens on the right side of the viewer instead of overlapping the signing guidance area. This makes the signing flow clearer and helps prevent important buttons like “Next” from being hidden.
Original PR description
The PDF sidebar is left-aligned, causing the panel to overlap sign guidance elements like the “Next” button when opened. This commit moves the sidebar to the right of the PDF viewer. task-6065586
The French tax setup was updated so the “17” tax tag is no longer applied to the 8.5% EU Service tax. This helps ensure service taxes are classified correctly and avoids misreporting meant only for goods.
Original PR description
**Issue:** In French localization, a tax tag (i.e. "17") was wrongly added on "8.5% EU Service" tax. This tax tag should only be applied on taxes for goods, not service. opw-5871998 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr