Thursday, March 5, 2026
156 changes
20 changes
Enhancements to existing features
This update enhances the Point of Sale (POS) system by adding a class name to the ticket screen, allowing for easier customization and future improvements. This change, stemming from a previous enterprise-level update, streamlines the development process and provides a more flexible foundation for future POS enhancements. It's part of a larger effort to improve the POS experience.
Original PR description
See odoo/enterprise#94390 Forward-Port-Of: odoo/odoo#226447
This update adjusts the salary scale parameters used in the Odoo Enterprise's Belgian payroll module. Specifically, the starting salary values for 2026 have been updated to reflect current Belgian tax regulations. This ensures accurate payroll calculations for our Belgian clients.
Original PR description
. Update cp200_salary_scale_first_year values for 01/01/2026 . Update cp200_salary_scale values for 01/01/2026 task-5485636 Forward-Port-Of: odoo/enterprise#107473
Resolved issues and error corrections
This update corrects a minor display issue with employee names in the HR module. Specifically, it ensures that the help text associated with employee name fields is correctly copied, improving the user experience and data consistency. This change is a simple fix to enhance readability.
Original PR description
Copy string and help field attributes for virually related employee fields. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251809
Features or functions removed from Odoo
This pull request removes a redundant widget from the account module. It was previously linked to an outdated commit and is no longer needed. This simplifies the system and reduces potential maintenance overhead.
Original PR description
After https://github.com/odoo/odoo/commit/fbbbd3314a1574b1196a59bd4229ee81aa932eb7 , this widget is useless --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
8 changes
Enhancements to existing features
This update refines the payroll schedule wizard for Belgian companies, restricting its use to only employees within Belgium. It removes a redundant field and improves the user interface with added spacing, resulting in a cleaner and more intuitive experience for HR staff managing Belgian employee schedules.
Original PR description
- Show the “Working Schedule Change” wizard only for employees belonging to Belgian companies. - Remove the “Post Change Contract Creation” field from the working schedule change wizard. - Add extra right padding to the warning alert in the time-off section for improved UI spacing. task-5367812 Forward-Port-Of: odoo/enterprise#101013
1 change
Resolved issues and error corrections
This update fixes an issue where users weren't seeing their ratings in helpdesk average rating views if they weren't directly listed in a helpdesk team's member list. The fix ensures that all ratings for tickets assigned to a user, regardless of team membership, are now accurately displayed. This improves the accuracy of customer feedback reporting.
Original PR description
Steps to reproduce: - Configure a helpdesk team to be viewable by the test user - Remove test user from member_ids of helpdesk team - With that team selected, create a helpdesk ticket assigned to test user - Submit a rating for the ticket as the customer - As the test user in the helpdesk app overview, click on today average rating or last 7 days average rating Current behavior: - In both views, the test user won't see ratings for tickets attached to helpdesk teams where they are not listed in member_ids Expected behavior: - In both views, the test user should see all ratings of assigned tickets regardless if they are included in a helpdesk team's member_ids Note: member_ids in helpdesk.team appear to be only used for auto assigning new helpdesk tickets, so checking member_ids doesn't account for all potential users working in a team opw-5949917 Forward-Port-Of: odoo/enterprise#109136
2 changes
Resolved issues and error corrections
This update removes a display field ('Visible Internally Only') from the customer rating form in the Helpdesk module. This field was no longer needed as customer ratings are no longer visible on the website. This change improves the user experience and reduces unnecessary data display.
Original PR description
**Steps to reproduce:** - Open a Helpdesk ticket with a customer rating. - View the rating form. - Observe the field ‘Visible Internally Only’ still showing. **Issue:** - The field is displayed even though ratings are no longer shown on the website. **Reason:** - The field is now irrelevant but still present in the view. **Fix:** - Invisible the ‘Visible Internally Only’ field from the customer rating form in the affected version. **Task id - 5359052** Forward-Port-Of: odoo/enterprise#100686
3 changes
New functionality added to Odoo
This update incorporates the latest city information recognized by the Mexican government into the Odoo Enterprise system. This ensures accurate reporting and compliance for Mexican businesses using the system's tax and invoicing features. It's a routine update to maintain data accuracy.
Original PR description
The Mexican government has recently introduced new cities. This pr adds those cities here as well. task-5883334 Forward-Port-Of: odoo/enterprise#108085 Forward-Port-Of: odoo/enterprise#107623
9 changes
New functionality added to Odoo
This update adds a new list view for audit reports, allowing users to easily manage and delete multiple records at once. This streamlines cleanup processes and significantly reduces the time spent managing large volumes of audit reports, improving efficiency.
Original PR description
This PR adds a list view for the `audit.report` model to enhance record management. With this new view, users can see multiple audit reports at once and perform bulk deletions, streamlining cleanup operations and significantly reducing the time needed to manage large sets of records. Task-5902500
6 changes
Enhancements to existing features
This update adjusts the salary scale parameters used in the Odoo Enterprise's Belgian payroll module. Specifically, the values for the first year of the salary scale (cp200_salary_scale_first_year) and the overall salary scale (cp200_salary_scale) have been updated to reflect the new minimum wage effective January 1st, 2026. This ensures accurate payroll calculations for Belgian employees.
Original PR description
. Update cp200_salary_scale_first_year values for 01/01/2026 . Update cp200_salary_scale values for 01/01/2026 task-5485636 Forward-Port-Of: odoo/enterprise#107473
6 changes
Resolved issues and error corrections
This update prevents Instagram posts from failing due to delays in media processing. By using a scheduled cron job to retry publication, the system now handles temporary processing lags gracefully, ensuring posts are successfully published without impacting server performance. This improves the reliability of Instagram content distribution.
Original PR description
With the current behavior the Instagram API sometimes requires time to process media containers, the media_id is not yet ready on Instagram side, leading to failed posts. To avoid this, we now use an asynchronous flow: If the media container is not immediately 'FINISHED', we store the container ID in `instagram_post_id` (prefixed with `containerIDs-`), set the state to 'posting', and trigger the scheduled cron to retry in 1 minute. The `_cron_publish_scheduled` method has been updated to detect these pending posts and resume the publication attempt so workers remain free while Instagram processes the media. opw-5081325 Co-authored-by: @ushyme
1 change
Documentation and clarification updates
This pull request adds a required Certificate of License Agreement (CLA) signature for Odoo version 17.0. This ensures compliance with Odoo's open-source licensing requirements and protects the Odoo community. The change is a standard legal update.
Original PR description
Added missing CLA for V17.0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where large company logos on customer documents were overlapping with important address information. By adding a maximum width constraint to the small company logo, the document layout is now cleaner and more professional, ensuring critical customer details are always visible. This improves the overall presentation of customer documents.
Original PR description
**Description of the issue/feature this PR addresses:** Similar issue described in: https://github.com/odoo/odoo/pull/249432 Since there is no `max-width` defined for `o_company_logo_small`, if a user uploads a large logo, the customer address overlaps with the company details. This can be tested by previewing the document with a large logo. <img width="684" height="449" alt="image" src="https://github.com/user-attachments/assets/aa2ac10b-cb0f-448a-ade3-6e7bb8b1fcff" /> **Current behavior before PR:** <img width="681" height="383" alt="image" src="https://github.com/user-attachments/assets/cf7d5740-db51-43e3-b8f6-70325e9e28c0" /> **Desired behavior after PR is merged:** <img width="505" height="307" alt="image" src="https://github.com/user-attachments/assets/b175a06a-cde0-4808-a1fb-276fd96272c3" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr cc @ForgeFlow Forward-Port-Of: odoo/odoo#251976
This update fixes a rounding discrepancy in early payment discounts, specifically when 'Always (upon invoice)' cash discount tax reduction is used. Previously, discounts were calculated line-by-line, leading to minor discrepancies. This change ensures discounts are rounded globally for accurate calculations, improving financial reporting.
Original PR description
**PROBLEM** There is a rounding issue with early payment discount when cash discount tax reduction is set to always (upon invoice). The move.line created for the discount is computed by applying the discount to each line, rounding each line individually. But the early payment discount is computed by rounding globally. **STEP TO REPRODUCE** 1. Create a payment term, with early discount of 1%, and cash discount tax reduction set to 'Always (upon invoice)'. 2. Create an invoice with 4 identical lines, unit price 4.76€ and tax 15%. 3. set the payment term on the invoice and save. 4. Go to journal item, early payment discount is 0.20€. 5. toggle discount_amount column on the the journal item tab. 6. notice on the last line, that balance - discount_amount = 0.19€ instead of 0.20€ opw-5865308 Forward-Port-Of: odoo/odoo#251138 Forward-Port-Of: odoo/odoo#247996
This update fixes an issue where SMS reminders weren't being sent for calendar events synced with Google or Microsoft. The fix ensures that Odoo correctly handles SMS notifications for these synced events, aligning with the intended behavior of email reminders being delegated to Google. This improves the reliability of reminders for all users.
Original PR description
SMS reminders are not sent for calendar events synced with Google, even though only email reminders should be delegated to Google. Reproduction steps: * Create a calendar event in Odoo with an SMS…
SMS reminders are not sent for calendar events synced with Google, even though only email reminders should be delegated to Google. Reproduction steps: * Create a calendar event in Odoo with an SMS reminder. * Sync the calendar with Google. * Wait for the reminder to trigger. * Observe that no SMS is sent by Odoo. Cause: The event reminder scheduled action groups events by alarm type and calls `_get_events_by_alarm_to_notify`. For Google-synced events, `_get_notify_alert_extra_conditions` blindly excludes any event with a `google_id`, assuming Google will manage all reminders. This exclusion is incorrect for non-email alarms (e.g. SMS), which must still be handled by Odoo. Fix: The alarm type is propagated through the context so Google-specific exclusions only apply to email reminders. This restores SMS notifications while preserving the existing behavior for emails. A context key is used for stability; a proper method argument will be introduced in master. opw-5172958 Forward-Port-Of: odoo/odoo#251742 Forward-Port-Of: odoo/odoo#241026
This update resolves a bug where the cursor would disappear when replying in the HTML composer, particularly in Firefox. The fix involves adding invisible characters around mentions to ensure proper cursor movement and text insertion, improving the user experience for composing messages.
Original PR description
In chatter, using "Reply" in HTML composer could focus the composer without giving a usable caret. The inserted partner mention is a non-editable link (`contenteditable="false"`), and selection could end up inside that node, so typing would not insert text. This also fix the related firefox issue: mentions are rendered as `a[contenteditable=false]`. Firefox is stricter than Chrome for carret positions around non-editable inline nodes, so clicking before a mention or moving left from its right edge could make stuck. so we register mention selectors as FEFF providers in the mention plugin. (a feature of html_editor FEFF plugin to add invisible boundary characters around mentions, which gives firefox what it need to move carret around. some tests had to be adapted to take the insertion of FEFFs in the composer text into account task-5262368 Forward-Port-Of: odoo/odoo#250711 Forward-Port-Of: odoo/odoo#250296
A technical issue was causing the Activity Logs report to appear incorrectly within the Sign Template list view, leading to errors. This update corrects a misconfiguration in the report's model settings, ensuring it now displays correctly within the Sign Request view and resolves the underlying error.
Original PR description
Version: - saas-18.2 Issue: - The "Activity Logs" report was showing in the Sign Template list view. When clicking it, a traceback occurred because the report tried to read a `sign.request` record from a `sign.template` context. Cause: - The report model was set to `sign.request`, but the`binding_model_id` was set to `model_sign_template`. - This mismatch caused the report to appear in the wrong place. Solution: - Updated the `binding_model_id` to `model_sign_request` so the report now appears in the Sign Request view, which matches the report model and prevents the error. task-5984137 Forward-Port-Of: odoo/enterprise#109171
This update corrects a bug where the system was incorrectly returning multiple bank records due to duplicate account numbers, particularly when dealing with child company contacts. The fix ensures that only one bank record is created, streamlining bank management and preventing data inconsistencies. This improves data accuracy and reliability.
Original PR description
The function `_find_or_create_bank_account` is expected to return one or no record at all. In the case of child contacts, it is possible that the same account number was set on multiple records, leading the function to return multiple banks. Forward-Port-Of: odoo/odoo#251733
This update fixes a technical issue within the mass mailing module that ensured the correct identification of editable elements. Previously, the system incorrectly interpreted a shared method, leading to potential inaccuracies. This change improves the reliability and accuracy of mass mailing operations.
Original PR description
Description of the issue/feature this PR addresses: This PR makes sure `isSelectionInEditable` is correctly checked in `EmptyNotEditableElementsPlugin`. `isSelectionInEditable` is a shared method previous code interpreted it as property. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251744
This update resolves an issue where US-specific reports were incorrectly appearing in Odoo databases set up for India. The fix ensures that the necessary US Payroll module is automatically installed when the base HR Payroll module is installed, preventing this unexpected report visibility. This improves the user experience for international clients.
Original PR description
**Version:** saas-19.1 **Steps to reproduce:** - Create a new database with India as country. - Install l10n_in_hr_payroll. - US company based reports are visible. **Issue:** Reports specific to us payroll localisation are visible for base hr_payroll module **Cause:** The l10n_us module was missing as the auto_install dependency. **Solution:** Added l10n_us as the auto_install dependency in the manifest file. **task-5948747** Forward-Port-Of: odoo/enterprise#108435
This update resolves a technical issue preventing the holiday calendar tour from functioning correctly in certain situations. The fix ensures the tour consistently displays and operates as intended, improving the user experience. This change was identified and addressed through automated testing.
Original PR description
This fix adjusts the tour in `test_hours_time_off_request_calendar_view` as it was failing in some cases. runbot error 237682 Forward-Port-Of: odoo/odoo#249458 Forward-Port-Of: odoo/odoo#249267
This update corrects a persistent warning message appearing after deleting a payslip in the HR payroll system. The fix involves canceling the payslip before deletion to ensure accurate duplicate checks, preventing unnecessary warnings. This improves the user experience and data integrity.
Original PR description
### Steps to reproduce: - Create two payslips for the same employee for the same period. - Delete one of them; the duplicate warning still appears on the other payslip. ### Fix: - Before deleting a payslip, first cancel it so the current payslip can be skipped while checking for duplicate payslips. - Then trigger recompute _compute_issues for duplicates payslips task: 5427473 Forward-Port-Of: odoo/enterprise#104124
This update fixes an inconsistent spacing issue in the Poll Result message displayed in the message list. Previously, there was extra space above the poll result box, which has now been removed. This ensures a cleaner and more professional look for all users.
Original PR description
Before this commit, Poll Result in message list had some unwanted spacing between the message header and the poll result box. The bottom spacing is fine but not the top. Before / After <img width="263" height="161" alt="Screenshot 2026-03-04 at 16 44 12" src="https://github.com/user-attachments/assets/b827bc1e-ee67-4f73-bea5-3bfc3ed7ed2d" /> <img width="271" height="150" alt="Screenshot 2026-03-04 at 16 43 57" src="https://github.com/user-attachments/assets/fc816b40-f375-48f3-a283-ea064d2b4cfb" /> Forward-Port-Of: odoo/odoo#252050
A test within the Odoo stock module was intermittently failing due to inconsistencies between the database and the test environment. This update adds a database refresh step to the test, ensuring accurate data and preventing these random failures. This improves the reliability of our stock management testing.
Original PR description
In Signal app, the test `test_set_inventory_quant_to_zero` was failing randomly when asserting that the quant no longer exists after calling `_unlink_zero_quants()`. All required conditions for deletion were met: - inventory_quantity == 0 - user_id is False - quantity == 0 - reserved_quantity == 0 The method `_unlink_zero_quants()` performs a raw SQL query to select zero quants. Since raw SQL does not trigger an automatic ORM flush, the quant state could be out-of-sync with the database at the time of the query, making the deletion non-deterministic. Add an explicit `flush_all()` before calling `_unlink_zero_quants()` in the test to ensure the database reflects the latest ORM state and avoid random failures. Runbot-241210 Forward-Port-Of: odoo/odoo#252006
This change corrects a visual issue where the 'invalid locators' warning was appearing incorrectly within a form due to an outdated XPath targeting a duplicate element. The fix ensures the warning now displays correctly after the 'Be aware' alert, resolving a potential user experience problem. This was caused by differences in database view ordering.
Original PR description
The XPath `//div[hasclass('alert-info')]` used to insert the invalid locators warning matches multiple elements since the website module has another `alert-info` div inside the visibility field:…
The XPath `//div[hasclass('alert-info')]` used to insert the invalid locators warning matches multiple elements since the website module has another `alert-info` div inside the visibility field: https://github.com/odoo/odoo/blob/31c199f3d19b8f9c54d582b6a5c4684e1ed38d0a/addons/website/views/website_pages_views.xml#L221
<img width="1065" height="633" alt="image" src="https://github.com/user-attachments/assets/dab8955c-d01b-4682-871a-b7499ed99297" />
<img width="1427" height="986" alt="image" src="https://github.com/user-attachments/assets/a05efb5d-254b-4e3a-ad14-530ae6718be6" />
On databases created before the invalid locators feature was added, the website inherited view has a lower ID than the web one, so it is applied first. This causes the XPath to match the wrong element and places the warning in the middle of the form fields instead of after the "Be aware" alert. This is not reproducible on runbot since fresh databases always have the correct ID ordering.
<img width="2291" height="956" alt="image" src="https://github.com/user-attachments/assets/fc7eee11-c66e-4d84-b827-f2ed61c76a97" />
We now target the correct alert div that is a direct child of the sheet element. Hence, the inheriting order no longer affect the location of the warning.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#251631This update resolves a rare issue in the Gantt view that could cause it to crash when users interact with search filters. The fix prevents a data loss scenario that occurred when a search filter removed a task pill while a hover event was still active, ensuring a more stable user experience.
Original PR description
This commit fixes a traceback in the Gantt view caused by a race condition during search operations. If a user clicks a search dropdown item located directly above a task pill, and that search filters out the underlying pill, a `pointerenter` event can fire on the pill just as the dropdown closes. Because the search amy already be applied, the renderer could lose track of the pill, causing the handler to crash when trying to access it. This commit adds a safety check to the event handler to exit early if the hovered pill is no longer found in the renderer. Forward-Port-Of: odoo/enterprise#109545
This update clarifies how Helpdesk articles are searched when a non-root article is selected as the main article. Previously, searching didn't include descendant articles. Additionally, a minor issue with the dropdown functionality has been addressed to prevent empty dropdowns. The team has opted to provide clearer guidance on this behavior rather than attempting a complex domain fix.
Original PR description
*: website_helpdesk_knowledge **Steps to reproduce:** - Install Helpdesk/Knowledge/Website apps - Go to Knowledge - Set up a Knowledge workspace root article with some child articles to it - Go to…
*: website_helpdesk_knowledge
**Steps to reproduce:**
- Install Helpdesk/Knowledge/Website apps
- Go to Knowledge
- Set up a Knowledge workspace root article with some child articles to it
- Go to Helpdesk > Configuration > Helpdesk Teams
- Open a Helpdesk team, and go to its Help Center config
- Check Knowledge and set a non-root article as main Article
- Go to Website > Help
First issue (non-root main article):
- Type a word which is present in both the article and one of its child articles
- Only the given article match the word
- If you use the root article it will match in any descendant
Second issue (in every case):
- Type a word in the search bar
- Wait for the dropdown to appear
- Click elsewhere, dropdown is properly hidden
- Try to change the search > Traceback
**Issue:**
The domain used to find the articles to match the search uses the current id as the `root_article_id`:
`['|', ('id', '=', team_article.id), ('root_article_id', '=', team_article.id)],` which was previously working in every case as it was not possible to set a non-root article in the team setting.
This was later changed to allow any article as the default website page. As a result, when a non-root article is selected, the search domain only applies to that specific article and no longer includes its descendants.
The other issue is related to the added boostrap attribute `data-bs-toggle="dropdown"` which is not properly reset when the dropdown is removed, and triggers the creation of an empty dropdown.
**Fix:**
Doesn't seem easy to fix to allow the search on all the descendants of the given article as we can't use the article `root_article_id` and filter out the unwanted results in a clean way (and it doesn't seem doable with a direct domain). Instead clarify the situation in the help of the article.
Also manually reset the attribute for `_onFocusOut`.
related: https://github.com/odoo/enterprise/commit/ed971d4d02624f8b864ab6c37c6e7db8ba3dfe11
opw-5258607
Forward-Port-Of: odoo/enterprise#109612
Forward-Port-Of: odoo/enterprise#107438This update resolves a tour test failure caused by a delay in order synchronization. The fix adds a waiting step to ensure the order is fully processed before initiating refunds, preventing a constraint error related to negative order amounts. This ensures refunds are handled correctly within the system.
Original PR description
In this commit: =============== - Fix the tour `test_mx_pos_invoice_order_and_refund` failing with **WARNING**: `The amount of the order must be positive for a sale and negative for a refund`. caused by an order sync issue with the backend. Cause: ====== - The tour started the refund immediately after validating the order, while the original order was still syncing with the backend. - Because of this, the constraint `_l10n_mx_edi_constrains_amount_total` was triggered since the order had `amount_total < 0` but `refunded_order_id` was not set yet. Fix: ==== - Add a waiting step in the tour to make sure the order is fully synced before starting the refund flow. Task: 5993576 Error: 237980
Resolved issues and error corrections
A minor bug causing test failures in the stock module has been resolved. The fix ensures the database is fully updated before deleting zero inventory quantities, preventing unpredictable test results. This improves the reliability of our stock management testing.
Original PR description
In Signal app, the test `test_set_inventory_quant_to_zero` was failing randomly when asserting that the quant no longer exists after calling `_unlink_zero_quants()`. All required conditions for deletion were met: - inventory_quantity == 0 - user_id is False - quantity == 0 - reserved_quantity == 0 The method `_unlink_zero_quants()` performs a raw SQL query to select zero quants. Since raw SQL does not trigger an automatic ORM flush, the quant state could be out-of-sync with the database at the time of the query, making the deletion non-deterministic. Add an explicit `flush_all()` before calling `_unlink_zero_quants()` in the test to ensure the database reflects the latest ORM state and avoid random failures. Runbot-241210 Forward-Port-Of: odoo/odoo#252006
A previous bug prevented users from correctly updating both the last month and last day of their fiscal year when managing multiple companies. This update corrects the underlying code to ensure constraints are checked after all changes have been applied, resolving the validation error and allowing for accurate fiscal year settings.
Original PR description
Having a parent company and a chid company selected, and changing both the last day and the last month of the fiscal year as the same time raises a ValidationError. This is because in this case, in the write we successively modify each changed delegated fields from root company to the branches. Then, when checking the constrains we loop through all delegated fields and check if the value of the branches are the same as the root company. This check triggers the error as all values are not set yet. By using a write on branches for all changed delegated fields instead of a simple assignation, the constrains check occurs once all the value have been updated. Steps: - Have a root company and a branch - Select both in company selector - Go to Accounting configuration - Change fiscalyear last month AND ast day at the same time - Save -> ValidationError in `_check_root_delegated_fields` opw-5431145 Forward-Port-Of: odoo/odoo#251941 Forward-Port-Of: odoo/odoo#241413
This update resolves a technical error that prevented users from correctly ordering stock when using the replenishment multiple feature. The fix corrects a calculation error within the stock management system, ensuring accurate order quantities are generated for replenishment rules. This improves the reliability of stock ordering processes.
Original PR description
Backport of: https://github.com/odoo/odoo/commit/fe806166968d55a70f5bf335dcb3633e18d8ecc7 Steps to reproduce: - Create a storable product “P1”: - UoM: Unit and Pack of 6 - Purchase tab: add any vendor - Go to Replenishment and create a new rule: - Product: P1 - Min: 10 - Max: 100 - Replenishment Multiple: Pack of 6 - Select the line and click “Replenish” → “Order to Max” Issue: A traceback is raised: “TypeError: unsupported operand types in: uom.uom(2,) - 4.0” In `_get_qty_to_order`, we compute the quantity to order and then adjust it according to the replenishment multiple, but we try to Subtract the rounded remainder from the uom (which is a recordset) instead of the quantity (which is a float). opw-5947919 Forward-Port-Of: odoo/odoo#251338 Forward-Port-Of: odoo/odoo#250608
This update resolves a technical issue preventing the holiday tour from functioning correctly within the calendar view. The fix ensures the tour consistently displays and operates as intended, improving the user experience. This change was identified and addressed through automated testing.
Original PR description
This fix adjusts the tour in `test_hours_time_off_request_calendar_view` as it was failing in some cases. runbot error 237682 Forward-Port-Of: odoo/odoo#249458 Forward-Port-Of: odoo/odoo#249267
This update fixes an issue where payslips weren't generating correct work entries for employees with no recorded working hours. The change ensures that all employees, including those with flexible work arrangements, receive accurate payslips. This improves payroll accuracy and reporting.
Original PR description
**Version:** - 19.0 **Steps to reproduce:** - Create an employee. - Leave the Working Hours field empty. - Set the contract dates and a wage. - Create a payslip using the smart button. **Issue:** - Worked day lines are empty for flexible employees when the payslip is created from the smart button. **Cause:** - Flexible employees were being skipped because their working hours were empty, which results in work entries not being generated. **Solution:** - Updated the condition to also generate work entries for flexible employees. Task-5431870 Forward-Port-Of: odoo/enterprise#103101
This update corrects a visual issue where the 'invalid locators' alert was appearing incorrectly within a form due to an outdated website view. The fix ensures the alert is displayed correctly after the 'Be aware' alert, resolving a potential user experience problem. This change improves the clarity and usability of the application.
Original PR description
The XPath `//div[hasclass('alert-info')]` used to insert the invalid locators warning matches multiple elements since the website module has another `alert-info` div inside the visibility field:…
The XPath `//div[hasclass('alert-info')]` used to insert the invalid locators warning matches multiple elements since the website module has another `alert-info` div inside the visibility field: https://github.com/odoo/odoo/blob/31c199f3d19b8f9c54d582b6a5c4684e1ed38d0a/addons/website/views/website_pages_views.xml#L221
<img width="1065" height="633" alt="image" src="https://github.com/user-attachments/assets/dab8955c-d01b-4682-871a-b7499ed99297" />
<img width="1427" height="986" alt="image" src="https://github.com/user-attachments/assets/a05efb5d-254b-4e3a-ad14-530ae6718be6" />
On databases created before the invalid locators feature was added, the website inherited view has a lower ID than the web one, so it is applied first. This causes the XPath to match the wrong element and places the warning in the middle of the form fields instead of after the "Be aware" alert. This is not reproducible on runbot since fresh databases always have the correct ID ordering.
<img width="2291" height="956" alt="image" src="https://github.com/user-attachments/assets/fc7eee11-c66e-4d84-b827-f2ed61c76a97" />
We now target the correct alert div that is a direct child of the sheet element. Hence, the inheriting order no longer affect the location of the warning.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#251631This update resolves a rare issue in the Gantt view that could cause it to crash when users interact with search filters. The fix prevents a race condition that occurred when a search dropdown closed while a pill was being hovered, ensuring smoother operation and preventing unexpected errors.
Original PR description
This commit fixes a traceback in the Gantt view caused by a race condition during search operations. If a user clicks a search dropdown item located directly above a task pill, and that search filters out the underlying pill, a `pointerenter` event can fire on the pill just as the dropdown closes. Because the search amy already be applied, the renderer could lose track of the pill, causing the handler to crash when trying to access it. This commit adds a safety check to the event handler to exit early if the hovered pill is no longer found in the renderer. Forward-Port-Of: odoo/enterprise#109545
This update fixes an issue where users weren't seeing all their ratings in helpdesk average rating views. The fix ensures that users associated with helpdesk teams, even if not directly listed in the team's member list, accurately reflect their ratings in these views. This improves the accuracy of performance data for helpdesk tickets.
Original PR description
Steps to reproduce: - Configure a helpdesk team to be viewable by the test user - Remove test user from member_ids of helpdesk team - With that team selected, create a helpdesk ticket assigned to test user - Submit a rating for the ticket as the customer - As the test user in the helpdesk app overview, click on today average rating or last 7 days average rating Current behavior: - In both views, the test user won't see ratings for tickets attached to helpdesk teams where they are not listed in member_ids Expected behavior: - In both views, the test user should see all ratings of assigned tickets regardless if they are included in a helpdesk team's member_ids Note: member_ids in helpdesk.team appear to be only used for auto assigning new helpdesk tickets, so checking member_ids doesn't account for all potential users working in a team opw-5949917 Forward-Port-Of: odoo/enterprise#109136
Resolved issues and error corrections
This update clarifies the behavior of Helpdesk article searches when using non-root articles as the main article. Previously, the search functionality didn't properly include descendant articles. Additionally, a minor issue with the Helpdesk dropdown functionality has been addressed to prevent empty dropdowns.
Original PR description
*: website_helpdesk_knowledge **Steps to reproduce:** - Install Helpdesk/Knowledge/Website apps - Go to Knowledge - Set up a Knowledge workspace root article with some child articles to it - Go to…
*: website_helpdesk_knowledge
**Steps to reproduce:**
- Install Helpdesk/Knowledge/Website apps
- Go to Knowledge
- Set up a Knowledge workspace root article with some child articles to it
- Go to Helpdesk > Configuration > Helpdesk Teams
- Open a Helpdesk team, and go to its Help Center config
- Check Knowledge and set a non-root article as main Article
- Go to Website > Help
First issue (non-root main article):
- Type a word which is present in both the article and one of its child articles
- Only the given article match the word
- If you use the root article it will match in any descendant
Second issue (in every case):
- Type a word in the search bar
- Wait for the dropdown to appear
- Click elsewhere, dropdown is properly hidden
- Try to change the search > Traceback
**Issue:**
The domain used to find the articles to match the search uses the current id as the `root_article_id`:
`['|', ('id', '=', team_article.id), ('root_article_id', '=', team_article.id)],` which was previously working in every case as it was not possible to set a non-root article in the team setting.
This was later changed to allow any article as the default website page. As a result, when a non-root article is selected, the search domain only applies to that specific article and no longer includes its descendants.
The other issue is related to the added boostrap attribute `data-bs-toggle="dropdown"` which is not properly reset when the dropdown is removed, and triggers the creation of an empty dropdown.
**Fix:**
Doesn't seem easy to fix to allow the search on all the descendants of the given article as we can't use the article `root_article_id` and filter out the unwanted results in a clean way (and it doesn't seem doable with a direct domain). Instead clarify the situation in the help of the article.
Also manually reset the attribute for `_onFocusOut`.
related: https://github.com/odoo/enterprise/commit/ed971d4d02624f8b864ab6c37c6e7db8ba3dfe11
opw-5258607
Forward-Port-Of: odoo/enterprise#107438This update corrects a bug where users weren't seeing all their ratings in the helpdesk average rating views. Previously, ratings were only displayed for tickets linked to teams where the user was a member. Now, users will consistently see all their assigned ticket ratings regardless of team membership, ensuring accurate reporting.
Original PR description
Steps to reproduce: - Configure a helpdesk team to be viewable by the test user - Remove test user from member_ids of helpdesk team - With that team selected, create a helpdesk ticket assigned to test user - Submit a rating for the ticket as the customer - As the test user in the helpdesk app overview, click on today average rating or last 7 days average rating Current behavior: - In both views, the test user won't see ratings for tickets attached to helpdesk teams where they are not listed in member_ids Expected behavior: - In both views, the test user should see all ratings of assigned tickets regardless if they are included in a helpdesk team's member_ids Note: member_ids in helpdesk.team appear to be only used for auto assigning new helpdesk tickets, so checking member_ids doesn't account for all potential users working in a team opw-5949917 Forward-Port-Of: odoo/enterprise#109136
Enhancements to existing features
This update simplifies the user interface by standardizing the term 'Audit Report' to 'Annual Report'. Previously, the use of both terms created confusion for users. This change improves clarity and user experience within the Enterprise module.
Original PR description
The user interface currently uses both the terms "Audit Report" and "Annual Report", which can be confusing for users. To eliminate this confusion, "Audit Report" will be renamed to "Annual Report". Task-5902500
This update enhances the way invoice activity summaries are generated during test runs. Specifically, the summary now automatically reflects the activity type, improving test accuracy and consistency. The changes also optimize database queries to reduce load, particularly during initial data access.
Original PR description
- When a recurring document request is created summary will be the name of the activity_type_id as per the new implementation here in this testcase. Added the default summary to the activity_type_id so that it will be taken in to account. - Cleaned the occurences of _onchange_activity_type_id as now we are using the stored/computed fields. - Increased query count as the field is stored computed, which will add an extra query to get field value when not present in cache for the first time when accessing them. Here, note field seems missing from cache, so it is being fetched from the database when `message_activity_done` template tries access it. Task-5269655
This update simplifies the payslip list view by removing redundant buttons and improving the user experience. The 'Compute' button now appears only when a payslip is in draft status, and the multi-selection behavior prioritizes actions based on the payslip's state, making it easier for users to manage payroll data. The tour has also been updated to reflect the new button functionality.
Original PR description
-* hr_payroll_account - Remove Confirm button from payslip list view since it duplicates Validate. - Remove Compute and Confirm buttons from the Action menu. - Show Compute button only when payslip is in draft state. - Improve multi-selection behavior in list view: when multiple states are selected, apply buttons by state priority: draft > validated > paid. - Update the tour to click the Validate button instead of Confirm. task-5456180
Resolved issues and error corrections
This update fixes an issue where document fields referencing related records weren't correctly identified. The change ensures that Odoo accurately represents and manages relationships between documents and other data, leading to more reliable data and improved system performance. This primarily impacts how documents are linked to other modules within Odoo.
Original PR description
See https://github.com/odoo/odoo/pull/196498
This update aligns the subscription checkbox label to the left within the product template form. This change improves the visual clarity and user experience of the subscription setup process, making it easier for users to understand and complete their subscriptions.
Original PR description
task-6007762
This update fixes a potential error in the Time Off Overview feature that could cause the system to crash if a user lacked specific permissions. The change uses 'optional chaining' to prevent errors when accessing data, ensuring a more stable and reliable user experience.
Original PR description
In hr.leave.report.calendar the work_entry_type_id field has a group group_hr_holidays_user and if the user doesn't have access this group it would lead to a traceback because work_entry_type_id in hr_holidays_gantt_popover will be undefined and we try to access one of its properties. This commit adds optional chaining to protect against this scenario. task-5940200
Code cleanup and technical improvements
This update adds the necessary `.this` syntax to template variables across several Odoo modules to align with upcoming OWL3 requirements. This change is a preparatory step for a larger upgrade, ensuring compatibility with newer features and improving the way components are referenced in templates. It primarily impacts modules like Marketing Automation, Quality Control, and Room Booking.
Original PR description
In preparation for OWL3, where template variables will need to use `.this` to target component variables, we add `.this` to template variables that are targetting the component. Script PR: https://github.com/odoo/odoo/pull/247965 THIS_TARGETS = [quality,room,marketing_automation] task: OWL3 prep - add this. to template variables
This update prepares Odoo for a future upgrade (OWL3) by automatically adding the `.this` syntax to template variables. This change ensures that variables referencing components will work correctly with the new syntax, preventing potential issues with future updates. It’s a proactive step to maintain compatibility.
Original PR description
In preparation for OWL3, where template variables will need to use `.this` to target component variables, we add `.this` to template variables that are targetting the component. Script PR: https://github.com/odoo/odoo/pull/247965 THIS_TARGETS = [purchase,resource,repair,rpc,rating] task: OWL3 prep - add this. to template variables
This update enhances logging for the Codabox integration within the Odoo Enterprise system. Specifically, it improves the tracking of transactions related to Codabox, providing the support team with more detailed information to quickly diagnose and resolve any potential issues. This will reduce troubleshooting time and improve the overall reliability of the integration.
Original PR description
This commit will improve the logs of _l10n_be_codabox_fetch_coda_transactions to help the support team to debug possible problem. task-5436868 Forward-Port-Of: odoo/enterprise#108213 Forward-Port-Of: odoo/enterprise#107779
Resolved issues and error corrections
This update corrects a display error in the Activity Logs report. Previously, the report was incorrectly appearing within the Sign Template list view, leading to an error. The fix ensures the report appears in the correct Sign Request view, improving usability and preventing technical issues.
Original PR description
Version: - saas-18.2 Issue: - The "Activity Logs" report was showing in the Sign Template list view. When clicking it, a traceback occurred because the report tried to read a `sign.request` record from a `sign.template` context. Cause: - The report model was set to `sign.request`, but the`binding_model_id` was set to `model_sign_template`. - This mismatch caused the report to appear in the wrong place. Solution: - Updated the `binding_model_id` to `model_sign_request` so the report now appears in the Sign Request view, which matches the report model and prevents the error. task-5984137 Forward-Port-Of: odoo/enterprise#109171
This update addresses a change in how Helpdesk articles are searched. Previously, setting a non-root article as the main article allowed searching across its entire family of articles. Now, searching only returns the selected article itself. Additionally, a minor issue with dropdown behavior has been fixed.
Original PR description
*: website_helpdesk_knowledge **Steps to reproduce:** - Install Helpdesk/Knowledge/Website apps - Go to Knowledge - Set up a Knowledge workspace root article with some child articles to it - Go to…
*: website_helpdesk_knowledge
**Steps to reproduce:**
- Install Helpdesk/Knowledge/Website apps
- Go to Knowledge
- Set up a Knowledge workspace root article with some child articles to it
- Go to Helpdesk > Configuration > Helpdesk Teams
- Open a Helpdesk team, and go to its Help Center config
- Check Knowledge and set a non-root article as main Article
- Go to Website > Help
First issue (non-root main article):
- Type a word which is present in both the article and one of its child articles
- Only the given article match the word
- If you use the root article it will match in any descendant
Second issue (in every case):
- Type a word in the search bar
- Wait for the dropdown to appear
- Click elsewhere, dropdown is properly hidden
- Try to change the search > Traceback
**Issue:**
The domain used to find the articles to match the search uses the current id as the `root_article_id`:
`['|', ('id', '=', team_article.id), ('root_article_id', '=', team_article.id)],` which was previously working in every case as it was not possible to set a non-root article in the team setting.
This was later changed to allow any article as the default website page. As a result, when a non-root article is selected, the search domain only applies to that specific article and no longer includes its descendants.
The other issue is related to the added boostrap attribute `data-bs-toggle="dropdown"` which is not properly reset when the dropdown is removed, and triggers the creation of an empty dropdown.
**Fix:**
Doesn't seem easy to fix to allow the search on all the descendants of the given article as we can't use the article `root_article_id` and filter out the unwanted results in a clean way (and it doesn't seem doable with a direct domain). Instead clarify the situation in the help of the article.
Also manually reset the attribute for `_onFocusOut`.
related: https://github.com/odoo/enterprise/commit/ed971d4d02624f8b864ab6c37c6e7db8ba3dfe11
opw-5258607
Forward-Port-Of: odoo/enterprise#107438This update corrects a problem with how leave periods are calculated, specifically addressing potential inconsistencies caused by different time zones. By updating the system to use 'request_date_from' and 'request_date_to' instead of 'date_from' and 'date_to', the system now accurately reflects leave periods regardless of user time zone settings.
Original PR description
This commit fixes the leaves work interruption constraint by replacing `date_from` and `date_to` with `request_date_from` and `request_date_to`, thereby resolving any inconsistencies that may arise from time zone differences. task-5966780 Forward-Port-Of: odoo/enterprise#109233 Forward-Port-Of: odoo/enterprise#108541
This update resolves an issue where duplicate labels were appearing for widget properties within the Odoo Studio. The fix involves adding temporary code to prevent the duplication of label content, addressing a known bug in the underlying OWL framework. This ensures a cleaner and more consistent user experience when creating and editing widget properties.
Original PR description
steps: - Install Project and Studio - Open studio, add a decimal field - Click on it - There are two "Minimum Digits" instead of "Digits" & "Minimum Digits" Add dummy `t-set` nodes before `t-esc` directives in property sub-templates to prevent label content from being rendered twice. This is a known OWL bug (https://github.com/odoo/owl/issues/1610) where `t-esc` inside a named slot gets duplicated. Since the issue lies in the OWL2 framework itself, a `<t t-set="__dummy"/>` is used as a workaround to break the duplication pattern in owl2. opw-5974611
This update fixes an issue where contacts incorrectly remained marked as blacklisted after being removed from the blacklist. The change ensures the displayed status accurately reflects the current blacklist state, preventing user confusion and improving data accuracy. This resolves a potential misunderstanding for users managing employee contacts.
Original PR description
### Issue before this commit: When removing an email address from the blacklist, the contact could still appear as blacklisted when accessed through the Employee>Contacts smart button. ### Steps to…
### Issue before this commit: When removing an email address from the blacklist, the contact could still appear as blacklisted when accessed through the Employee>Contacts smart button. ### Steps to reproduce the issue: 1. Install email marketing 2. Go to Blacklisted email addresses 3. Add a new email (ex. mark.brown23@example.com that is already an user and an employee for My Company (San Francisco)) 4. Check contact cart to see that email is blocked 5. Remove email from blacklist 6. Go through users > employee (with smart button) > contact (with smart button) 7. See that the email continues to be blocked even if it was removed 8. If you refresh it will temporarily fix the problem and also going from home page to contact direclty will display correctly the email that is not blocked ### Cause of the issue: The action opening the related contact inherited a context with active_test=False. As a result, archived records in mail.blacklist (i.e., entries with active=False created after unblacklisting) were still considered during the computation of is_blacklisted, causing the contact to incorrectly appear as blacklisted until the page was refreshed or the contact was opened through another navigation path. ### Reason to introduce the fix: This inconsistent behavior can confuse users and lead them to believe that a non-blacklisted contact is still blacklisted. The change guarantees that the displayed status accurately reflects the actual blacklist state. opw-5952301 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where printing basic receipts would fail if the POS name exceeded a certain length. The fix limits the receipt output to a maximum character count (46) to prevent errors and ensure reliable receipt generation. This improves the user experience for Italian POS users.
Original PR description
When printing a basic receipt, if the pos name is too long a traceback will occurs when printing the basic receipt. Steps to reproduce: * Create a pos with a name of 46 character or more * Setup the italian fiscal printer * Enable Basic Receipt printing * Open point of sale * Create an order and validate it * Try "Print Basic receipt" Traceback: RangeError: Invalid count value: -15 at String.repeat () If the data being printed is longer than the maximum number of character in a line (MAX_CHARS = 46), paddingLeft becomes negative which cause an error in repeat(). [Similar solution](https://github.com/odoo/enterprise/blob/18.0/l10n_it_pos/static/src/app/fiscal_printer/commands/print_rec_message/print_rec_message.js#L35) [opw-5270697](https://www.odoo.com/odoo/project/49/tasks/5270697)
This update ensures that the 'Insert in spreadsheet' action is only visible in list view menus for users with the necessary permissions for Documents and Dashboards. Previously, all users could see this option, regardless of their access rights, which has now been corrected for improved security and user experience.
Original PR description
Current behavior before PR: - The 'Insert in spreadsheet' action was always visible in the list view action menu, even when the user lacked access rights for Documents or Dashboards. Desired behavior after PR is merged: - The action is shown in the list view action menu only if the user has the required permissions. Task: 5930184
This update fixes an issue where users weren't seeing ratings for helpdesk tickets assigned through teams if they weren't directly listed in the team's member list. Now, all ratings for assigned tickets are displayed, ensuring accurate reporting and a better customer experience. The system now correctly accounts for users working within a team, regardless of direct membership.
Original PR description
Steps to reproduce: - Configure a helpdesk team to be viewable by the test user - Remove test user from member_ids of helpdesk team - With that team selected, create a helpdesk ticket assigned to test user - Submit a rating for the ticket as the customer - As the test user in the helpdesk app overview, click on today average rating or last 7 days average rating Current behavior: - In both views, the test user won't see ratings for tickets attached to helpdesk teams where they are not listed in member_ids Expected behavior: - In both views, the test user should see all ratings of assigned tickets regardless if they are included in a helpdesk team's member_ids Note: member_ids in helpdesk.team appear to be only used for auto assigning new helpdesk tickets, so checking member_ids doesn't account for all potential users working in a team opw-5949917 Forward-Port-Of: odoo/enterprise#109136
Code cleanup and technical improvements
This update simplifies how the geolocation module retrieves its API keys. The change moves this process to a separate method, improving the code's organization and maintainability. This enhances the stability and reliability of the geolocation service.
Original PR description
Move the api key retrieval to another method.