Monday, July 6, 2026
18 changes · saas-19.2
Resolved issues and error corrections
The invoice outstanding payments widget now displays payments in descending order by date, with a secondary ordering by ID. This makes it easier for users to understand the most recent payments first and reduces confusion when reviewing invoices.
Original PR description
Before this commit: The invoice outstanding payments widget was not sorted by date globally, which could lead to confusion for users when viewing the widget. After this commit: This commit adds a sorting mechanism to ensure that the payments are displayed in descending order based on their date and ID. opw-6254080 Forward-Port-Of: odoo/enterprise#121642
The recruitment reports app now correctly declares the component it needs to show cohort-style reporting views. This prevents installation failures in automated setups and helps keep deployment processes smooth.
Original PR description
installing hr_recruitment_reports with the --ski-auto-install flag causes an error. The error happens because it does not explicitly depend on web_cohort while displaying a cohort view. task-6352888 runbot_error-237854 Forward-Port-Of: odoo/enterprise#122432
Sales commission plans now reject salesperson start dates that fall outside the plan's effective period. This helps prevent incorrect commission setup and avoids downstream calculation issues caused by invalid dates.
Original PR description
Version: 18.0 Steps to reproduce: - open sale commission plans and create a new plan with an effective period - go to the salesperson tab and add a salesperson - set the salesperson from date after the plan end date issue: salesperson period start date was accepted even if it was set after the plan end date fix: added validation to raise an error when the salesperson start date falls outside the plan effective period task id: 6241188 Forward-Port-Of: odoo/enterprise#118289
The Timesheet Assistant now hides the Add option and avoids opening prefilled timesheet forms for projects that do not allow timesheets. This prevents users from trying to log time on projects where time tracking has been disabled.
Original PR description
Before this commit, the Timesheet Assistant would display the "Add" button and attempt to prefill timesheet forms for activities matched to projects where the `allow_timesheets` setting was set to `False`. This commit updates the Timesheet Assistant logic to evaluate the project's configuration. When an activity is matched to a project that has `allow_timesheets=False`: - The "Add" button is hidden from the suggestion list. - The system prevents prefilling the timesheet creation form. Task: 6306203 Forward-Port-Of: odoo/enterprise#120890
This fix prevents Belgian payroll setup from crashing when optional student payroll structure data has been removed or is unavailable. It helps administrators load demo data or continue configuration without encountering a blocking error.
Original PR description
This error occurs because the XMLID `structure_type_student` does not exist. Steps to reproduce: - Install `l10n_be_hr_payroll` module without demo data - Set Company `Country` to `Belgium` - Search `Structure Types` and delete `Belgian Student` and it's related `Structures` - Active debugger > Settings > load Demo data Traceback: `ValueError: External ID not found in the system: l10n_be_hr_payroll.structure_type_student` Solution: We pass `False` when the XMLID `structure_type_student` cannot be found. sentry-7323712470
This fixes issues that caused Sign-related automated checks to fail when demo data or prior activity existed in a local database. It makes the checks focus only on the records created for each test, improving reliability without changing customer-facing signing behavior.
Original PR description
Version: 19.0 `test_sign_request_notification`, `test_gc_removes_orphan_roles_and_dummy_items` ,`test_sign_tour` and `test_sign_tour_without_sign` fail locally when you run them on a db with demo…
Version: 19.0
`test_sign_request_notification`, `test_gc_removes_orphan_roles_and_dummy_items` ,`test_sign_tour` and `test_sign_tour_without_sign` fail locally when you run them on a db with demo data installed, after doing some manual testing/ operations on it.
- `test_sign_request_notification` builds `completion_mail_to_user` by searching `mail.mail` for any email addressed to the admin's address. If admin had received any other email before this test ran, it got counted too, so the assertion on `len(completion_mail_to_user)` became wrong. We now also filter by subject matching `sign_request.reference`, so it only counts the email this test's own sign request actually generated.
- `test_gc_removes_orphan_roles_and_dummy_items` relies on the helper `_get_signer_and_item_gc_context` to count dummy sign items (page < 0). That helper searched `sign.item` with no domain at all, so any dummy item left behind by a different template got added to `non_active_item_ids` and broke the `len(non_active_item_ids) == 4` check. We now scope that search to `template_id = sign_template.id`, so it only counts items belonging to the template created in the test.
- `sign_tour` had a step targeting `.o-autocomplete--dropdown-item:contains('Administrator')` in the signer autocomplete. After installing demo data the admin user is named `Mitchell Admin`, so the tour failed on databases using that name. Both contain 'Admin', so the trigger now matches on that instead.
taskid- 6329037
Forward-Port-Of: odoo/enterprise#121878Fixed an issue where printing the Journal Audit report could add a completely blank final page when the global tax summary was not included. This makes exported PDFs cleaner and avoids confusion for accounting users reviewing or sharing audit reports.
Original PR description
Steps to reproduce: 1. Set the active company as My Company (san francisco) 2. Navigate to Accounting > Review > Journal Audit 3. Remove all journals from the report except Bank and Misc. 4. Use the PDF action button to print the report. 5. The last page of the report is completely empty. https://drive.google.com/file/d/1otpniJgt1UNCe2hrUBwqIK58dGuXpu8T/view?usp=sharing This commit ensures that the Journal Audit report does not have blank pages when the global tax summary section is not present. It uses some features of QWeb outlined in the following docs article: https://www.odoo.com/documentation/19.0/developer/reference/frontend/qweb.html#loops opw-6224670 Forward-Port-Of: odoo/enterprise#121068
This update fixes an issue that prevented users from temporarily clearing the date field in the WIP Accounting Entry wizard. The fix ensures the wizard functions correctly when editing the date, improving user experience and data accuracy. This resolves a previous error that blocked the intended functionality.
Original PR description
Issue Before This PR: When clearing the Date field in the WIP Accounting Entry wizard, an error was raised during the re-computation of dependent fields. This prevented from temporarily emptying the…
Issue Before This PR: When clearing the Date field in the WIP Accounting Entry wizard, an error was raised during the re-computation of dependent fields. This prevented from temporarily emptying the date field while editing the wizard. Steps to Reproduce: - Open the list view of Manufacturing Orders. - Open the Post WIP Accounting Entry wizard by either: - Selecting one or more Manufacturing Orders and choosing Actions ,click Post WIP Accounting Entry - Or, opening a Manufacturing Order form and selecting Post WIP Accounting Entry from the Actions & Reports menu. - Clear the Date field. - Observe that an error is raised. Cause of the Issue: The compute methods _compute_reversal_date() and _compute_line_ids() assumed that wizard.date was always set. When the Date field was cleared, its value became False, but the compute logic still attempted to compare or use the date, resulting in an error. With This PR: The compute methods now verify that wizard.date is set before performing date-dependent computations. This prevents errors when the Date field is temporarily cleared, allowing the wizard to behave correctly during user input. Issue reference: https://github.com/odoo/odoo/issues/246547 Forward-Port-Of: odoo/odoo#273002
This update fixes a technical issue that prevented users from deleting certain website pages, specifically the 'Contact Us' page. The fix ensures that the system correctly handles access rights during page deletion, preventing an access error related to linked data. This improves website stability and prevents disruptions for users.
Original PR description
Steps to reproduce: 1. Install website_hr_recruitment and hr_appraisal modules. 2. Remove `Appraisals`'s rights from admin. 3. Create appraisal & add `contactus` link in employee feedback. 3. Go to Website > Site > Pages. 4. Delete the contact us page. > An access error is raised on the employee_feedback field. Employee_feedback has field level access rights so when preparing the list of records depending on a deleted page, the search was performed with sudo, but the records were later accessed without sudo. This could trigger an access error on related fields. Use sudo while preparing the dependency list, as we only search the records and read their names. No sensitive fields are being exposed. task-6267364 Forward-Port-Of: odoo/odoo#269790
This update resolves an issue where users couldn't add event reminders to their calendars (iCal/Outlook) due to an error in the generated ICS file. The fix involved switching to a compatible timezone library to ensure the ICS file was formatted correctly. This prevents a technical error and ensures reliable calendar integration for event reminders.
Original PR description
Steps to reproduce =================== 1. Open the Events page on the website. 2. Open the OpenWood Collection Online Reveal event. 3. Go to Talks. 4. Favorite a talk to receive the talk reminder email. 5. Try to add the event to an iCal/Outlook calendar from the email. => Internal Server Error With commit [1], while switching from pytz to zoneinfo, we mistakenly set the `created` value in the ICS file to `datetime.timezone.utc`, which is not supported by `vobject`. This commit now uses ZoneInfo instead. [1] https://github.com/odoo/odoo/commit/6fdb36716aac5d2b084fb0faa94ccb2f3ee7f99c Task-6288817 Forward-Port-Of: odoo/odoo#272159
This update fixes an issue where new eCommerce websites weren't automatically including the 'Shop' feature during setup. The team renamed a website type, but didn't update the related feature settings. The fix restores the original name, ensuring the 'Shop' feature is correctly preselected for new eCommerce websites, simplifying the setup process for users.
Original PR description
### Issue: When creating a website through the configurator and selecting the website type 'an eCommerce', the shop feature is not preselected as expected. ### Steps to reproduce: - Ensure that the…
### Issue: When creating a website through the configurator and selecting the website type 'an eCommerce', the shop feature is not preselected as expected. ### Steps to reproduce: - Ensure that the eCommerce module is not installed. - Navigate to Website > Configuration > Settings. - Click on the "New Website" button to create a new website. - Select the "eCommerce" option as the website type and proceed to the next step. - On the "Add Pages and Features" screen, observe that the "Shop" option is not selected by default. ### Reason: 0cb45457 renamed the website type from `online_store` to `eCommerce`, but the related feature was not updated and still references the old name. As a result, the preselection is not triggered. ### Fix: Restore the eCommerce website type's internal name to `online_store` in the configurator. This matches the value already stored in the database for existing installations, allowing the shop feature preselection to work for existing users as well, without requiring a data update. task-[6284263](https://www.odoo.com/odoo/project/974/tasks/6284263) [1]:https://github.com/odoo/odoo/pull/223724 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268829
This update fixes an issue where dialogs opened from Kanban quick creates would unexpectedly close when switching tabs. Now, dialogs remain open and functional, allowing users to seamlessly navigate between tabs and complete their tasks. This ensures a smoother user experience when creating records from Kanban views.
Original PR description
similar fix: https://github.com/odoo/odoo/pull/181220 - On a kanban view, click "New" to open a quick create record; - On a many2one field, type a value and click "Create and edit..."; - A dialog…
similar fix: https://github.com/odoo/odoo/pull/181220 - On a kanban view, click "New" to open a quick create record; - On a many2one field, type a value and click "Create and edit..."; - A dialog opens to create the related record; - From that dialog, open another many2one field the same way, so a second dialog opens on top of the first one; - Change tab in the browser. Before this commit, the quick create's `beforeVisibilityChange` handler unconditionally validated and closed itself as soon as the tab became hidden, with no regard for what was happening around it. Since the "Create and edit" dialogs are owned by the field widgets living inside the quick create (`useOwnedDialogs`), closing the quick create also close those dialogs, with no action from the user. This reuses the `formInDialog` counter already relied on by `FormController` for the same kind of issue: the quick create now listens to the same `FORM-CONTROLLER:FORM-IN-DIALOG` bus events, and only validates/closes itself on visibility change once every dialog opened from it has been closed. opw-6357255 Forward-Port-Of: odoo/odoo#274054
This update resolves a rare issue where the Glory cash machine occasionally sent incorrect data to Odoo, leading to errors. The fix ensures that all incoming data is properly formatted, preventing the system from crashing when receiving multi-element XML messages. This improves the reliability of the Glory cash integration.
Original PR description
Rarely, the Glory machine can send a websocket message containing 2 root XML elements, which causes the `parseXML` function to fail. This commit fixes the issue wrapping the message in a root element, and then returning the children. opw-6292925 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272040
This update fixes a problem where receipts sometimes printed blank or were cut prematurely. A small delay was added after sending the receipt image to allow the printer to fully process the data. The update also modernizes the printer software for better compatibility and future tracking.
Original PR description
Previously, printing a receipt could sometimes result in blank paper being dispensed or the paper being cut prematurely. This occurred because the sequence of line feeds and cut commands was dispatched immediately after sending the image payload, before the printer hardware had sufficient time to process and spool the bitmap. To resolve this, a 200ms delay is introduced after the bitmap is sent. Additionally, the arbitrary `printAndLineFeed` calls are replaced with a precise `printAndFeedPaper` and explicit `partialCut` command. This ensures the hardware has fully rendered the receipt before advancing the paper and engaging the blade. Finally, the internal imin SDK (`lib/imin-printer/imin-printer.js`) is updated to handle websocket connection timeouts gracefully and to expose new hardware APIs for future tracking. owp-6242801 Forward-Port-Of: odoo/odoo#270765
This update clarifies the descriptions for both User and Administrator groups within the Project module. The changes improve the clarity of their respective roles and responsibilities, specifically outlining task management capabilities for Users and project/stage management with reporting access for Admins.
Original PR description
This commit improves the grammar of the Project user group description. ### **For User:** **Before -** `User can user the your employees' schedule` **After -** `User: Can manage tasks in projects shared with them.` ### **For Admin:** **Before -** `Administrator can manage the employees' schedule` **After -** `Administrator: Can manage projects and stages, with access to reporting and configuration.` **opw-6340390** Forward-Port-Of: odoo/odoo#273061
This update ensures WIoT instances are properly configured for seamless upgrades to newer Odoo versions. Specifically, the `http_interface` setting has been adjusted to `0.0.0.0`, allowing WIoT to be accessible during the upgrade process. This prevents potential connectivity issues and simplifies the upgrade path.
Original PR description
WIoT are built in v19, but progressively upgrading to 19.1,2,3,... We need to set the `http_insterface` param to `0.0.0.0` so they are ready when upgrading, as `http_interface` changes to localhost by default in 19.1. Forward-Port-Of: odoo/odoo#271857
This update optimizes how Odoo forms respond to changes. Previously, opening a form triggered onchange methods repeatedly for each field that was updated. This fix reduces unnecessary calls, making forms load and update faster and more efficiently. It's a small change that improves the overall user experience.
Original PR description
When an onchange method depends on several fields that all change at once (for example two fields that both have a default value), opening the form triggers that method once per field, even though a single call would suffice. This adds a per-pass set of already-applied onchange methods so that, within the same batch of changed fields, each method is invoked only once. Note this does not guarantee a method is called exactly once overall: it may still run again in later onchange passes; we only remove the redundant calls within a single pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273843 Forward-Port-Of: odoo/odoo#251813
This update fixes a bug where email bounces from mailing campaigns weren't accurately recorded for contacts. Now, the system correctly updates bounce counts when emails fail to deliver, providing a more reliable view of mailing campaign performance. This ensures accurate reporting and helps optimize future campaigns.
Original PR description
Previously, when a mailing campaign sent out an email to a mailing.contact, and that email bounced, the bounce would not increment the contact's bounce count. This commit makes it so that the bounce count is correctly updated when a mailing campaign sends an email that bounces. task-4893615 Forward-Port-Of: odoo/odoo#226362