Wednesday, May 20, 2026
30 changes · saas-19.1
Resolved issues and error corrections
This update resolves a technical bug that prevented users from correctly selecting table headers in the HTML editor. The fix ensures the table plugin now correctly identifies both table data (`td`) and header (`th`) elements, preventing an error that caused the application to crash. This improves the stability and usability of the HTML editor.
Original PR description
### Steps to Reproduce : - Add a table (e.g., /table). - Turn the first row into table header. - Select all the cells of the table header. - Traceback occurs. ### Purpose of this PR: - Selecting a table header row caused a `Cannot read properties of null (reading 'getBoundingClientRect')` error because the table plugin only looked for `td` elements. This PR replaces hardcoded `td` selectors with the `isTableCell` helper to handle both `td` and `th` elements. task-6220287 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264670
This update resolves an issue where the 'Create Ticket' action was unexpectedly appearing in the sidebar of WhatsApp conversations within Discuss. This removal prevents users from attempting to create tickets through this method, eliminating a potential error and improving the user experience. The change was implemented as a bug fix.
Original PR description
The 'Create Ticket' action was incorrectly visible in the sidebar actions of WhatsApp conversations in Discuss. Clicking it caused a traceback because `owner.root` is not defined in the sidebar action context. This commit removes the action from sidebar actions. Task-[6220037](https://www.odoo.com/odoo/project/1519/tasks/6220037) Forward-Port-Of: odoo/enterprise#117571
This update ensures that the price comparison strikethrough only appears on product pages when the compare price is higher than the regular sales price. Previously, it incorrectly displayed the strikethrough even when the prices were equal, leading to a confusing user experience. This change improves the accuracy and clarity of pricing information for customers.
Original PR description
Steps to produce: --- - Install website_sale module. - Enable `Comparison Price` from settings. - Create a product with sales price = 25 and compare price = 25. - Go to the shop page and search for…
Steps to produce: --- - Install website_sale module. - Enable `Comparison Price` from settings. - Create a product with sales price = 25 and compare price = 25. - Go to the shop page and search for the product. Issue: --- - The strikethrough appears on the compare price (25) even when the compare price equals the sales price. - The strikethrough should only appear when the compare price is strictly greater than the sales price. Root cause: --- - In `_search_render_results_prices` [1], the condition only checks for the presence of `compare_list_price` in `combination_info`, without verifying that it is actually greater than the sales price. This causes the strikethrough to render even when both prices are equal. Solution: --- - Added a strict greater-than check on compare price against the sales price, aligning with the existing behavior already implemented for the product page [2]. Before: --- <img width="537" height="98" alt="image" src="https://github.com/user-attachments/assets/a1524f0f-4a59-4daf-ac7d-834604710492" /> After: --- <img width="538" height="95" alt="image" src="https://github.com/user-attachments/assets/1e32269b-13c0-469b-9d1f-e6d6ced97fdd" /> [1]https://github.com/odoo/odoo/blob/4ca059731f97d0f9bce4863cf195fd68a755717e/addons/website_sale/models/product_template.py#L831-L834 [2]https://github.com/odoo/odoo/blob/4ca059731f97d0f9bce4863cf195fd68a755717e/addons/website_sale/views/templates.xml#L1340-L1346 opw-6178129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265004 Forward-Port-Of: odoo/odoo#262434
This update fixes a minor issue in the demo order system for point-of-sale and restaurant POS. Now, demo orders automatically generate sequential Order References instead of using a default '/'. This ensures demo orders are more clearly identifiable and consistent, improving the demo experience.
Original PR description
Before this commit: =================== - For demo orders, no proper Order Reference is displayed, by default, it is set to '/'. After this commit: =================== - All default '/' values are replaced with a sequential Order Reference, except for orders in the 'new' state . Task-6004716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253272
This update fixes an issue preventing subcontracted products from automatically generating manufacturing orders during the replenishment process. The change ensures the correct routes are suggested, improving the efficiency of production planning for subcontracted items. This resolves a technical limitation impacting how products are managed.
Original PR description
'product.replenish' default_get/_get_route_domain wrongly states that a manufacturing order can be created from a non-'normal' bill of material. This prevents the 'Manufacture' route from being proposed to subcontracted-only products. task: 6132290 Forward-Port-Of: odoo/odoo#260111
This update resolves an issue where PDFs containing JPG images were no longer readable after an upgrade to the pdf.js library. The team added OpenJPEG support, allowing Odoo to correctly process and display PDFs with JPG content. This ensures consistent PDF viewing functionality for users.
Original PR description
Following the update of pdf.js to v5.4, reading pdfs containing JPG files didn't work anymore: https://github.com/odoo/odoo/commit/5035107ef64a8c1ca1aae3a2b0de5bf8efa246f4 Taken from https://github.com/mozilla/pdf.js/blob/v5.4.394/external/openjpeg/openjpeg.wasm opw-6073568
This update fixes an issue where the displayed weekday for accrual plan levels was sometimes incorrect. The change involved updating the way Luxon handles weekday data to ensure accurate representation of the chosen day of the week, resolving a discrepancy between the stored value and Luxon's expected format.
Original PR description
**Steps to reproduce:** 1. Install Time Off 2. Go to Accrual Plans and create a new plan with a milestone 3. Set frequency to Weekly and choose a day other than Monday (e.g., Tuesday) 4. Save and…
**Steps to reproduce:** 1. Install Time Off 2. Go to Accrual Plans and create a new plan with a milestone 3. Set frequency to Weekly and choose a day other than Monday (e.g., Tuesday) 4. Save and check the displayed weekday in the accrual plan level **Issue:** The displayed weekday is incorrect (e.g., shows Monday instead of Tuesday). **Cause:** Previously, the weekday value was directly displayed using: https://github.com/odoo/odoo/blob/b40184ab371f7a4708621ecf7f25b4e2daaae38d/addons/hr_holidays/views/hr_leave_accrual_views.xml#L212-L214 so no conversion was involved. Now, the value is processed using Luxon. However, the week_day field stores values from 0 (Monday) to 6 (Sunday), while Luxon expects ISO weekday numbers from 1 (Monday) to 7 (Sunday). This mismatch causes an off-by-one error during conversion. https://github.com/odoo/odoo/blob/1b3d0a3c2f794324f8b230a9ae19f097454e3bdd/addons/hr_holidays/models/hr_leave_accrual_plan_level.py#L54-L62 **Solution:** Adjust the value before passing it to Luxon by adding +1 to match ISO format. opw-6112614 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259054
This update fixes a minor error in the data used for Mexican accounting within Odoo. The change corrects a typo in the account group CSV file, ensuring accurate reporting and compliance with Mexican tax regulations. This ensures the system correctly reflects financial data for Odoo users operating in Mexico.
Original PR description
Source: https://www.sat.gob.mx/minisitio/NormatividadRMFyRGCE/documentos2026/rgce/anexos/Anexo24delasRGCEpara2026.pdf opw-6174385 Forward-Port-Of: odoo/odoo#262549
This update resolves an issue where importing XML files with tab characters in their filenames caused download errors. The fix ensures the system correctly handles filenames according to industry standards (RFC 2616), allowing users to import files with properly formatted names.
Original PR description
**Steps to reproduce:** * Upload an XML file whose filename starts with a tab character (e.g. extracted from a ZIP that preserves the tab in the filename). * Go to Accounting > Vendor > Bills and import the XML file. * In the chatter, click the attached XML file to download it. **Observed behavior:** * A JavaScript error is raised in the browser console: `TypeError: invalid parameter format` * The file cannot be downloaded. **Cause:** * `PARAM_REGEXP` in `download.js` defines qdtext as `[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]`, which excludes `\x09 (HT/tab)`. * Per RFC 2616, `qdtext = any TEXT` except `"`, and `TEXT` includes `LWS` which includes HT `(\x09)`, making `filename="\ttest.xml"` a valid Content-Disposition header. * The JS parser was incorrectly rejecting a valid header value. **Fix:** * Add `\x09` to the qdtext character class in `PARAM_REGEXP` in `download.js`, making the parser `RFC 2616` compliant. opw-6052996 Forward-Port-Of: odoo/odoo#265176
This update ensures that all text within the MRP MPS component of Odoo Enterprise is properly prepared for translation. Previously, placeholder text was not translatable, now it is, allowing for localized versions of the software to be created. This improves the internationalization capabilities of the system.
Original PR description
Forward-Port-Of: odoo/enterprise#117750
This update resolves a visual issue where the SelectCreateDialog's control panel and list headers were disappearing. The problem stemmed from a previous change that removed a scrolling feature, and this fix restores the intended behavior for a better user experience.
Original PR description
This commit fixes an issue where the SelectCreateDialog's control panel and list headers would scroll out of view, restoring the intended behavior introduced in https://github.com/odoo/odoo/pull/206433. The feature was inadvertently broken by https://github.com/odoo/odoo/pull/219972, which removed the `overflow: auto` rule from `o_content` elements outside of actions. To resolve this, the `overflow: auto` rule has been explicitly reapplied to the SelectCreateDialog content area. task-6214232 Forward-Port-Of: odoo/odoo#264965
This update fixes a test in the HTML Editor that was unreliable due to its dependence on timing and browser behavior. The change makes the test more stable and predictable, ensuring consistent results across our CI systems. This improves the overall quality and reliability of the HTML Editor.
Original PR description
Description of the issue this PR addresses: Previously the test relied on real timers, animation frames and simulateArrowKeyPress(), making it sensitive to browser scheduling, native selectionchange timing and CPU slowness. The test now: - use advanceTime() instead of real setTimeout() - Replace simulateArrowKeyPress() with manual selectionchange dispatch to make debounce scheduling deterministic and avoid relying on the browser's asynchronous native selectionchange dispatch. - Add patchWithCleanup + verifySteps to test actual debounce execution rather than DOM visibility timing, which is sensitive to rendering and brwoser scheduling variance. This removes timing races and stabilizes the test on slow CI workers. runbot-242466 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264893
This update fixes a regression where the color picker in Odoo was failing to recognize colors defined using the `color()` function. The change restores this functionality, ensuring users can correctly set background colors within the HTML Builder and Editor tools. This resolves an issue impacting visual customization.
Original PR description
Following the website refactoring (commit 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2) `BuilderColorPicker` no longer recognizes colors defined using `color()`, introducing a regression. This commit restores support for `color()` values. Steps to reproduce: 1. Add the snippet `s_text_image`. 2. Manually, in the DOM, set the style of the first column to "background-color: color(srgb 0.4 0.2 0.8 / 0.4);". 3. In edit mode, click on the column to observe that the colorpicker does not recognize the background color. The same behavior can also be observed in the custom tab. Task: [5453922](https://www.odoo.com/odoo/project/974/tasks/5453922) Forward-Port-Of: odoo/odoo#265005 Forward-Port-Of: odoo/odoo#255331
This update resolves an issue where clicking on archived users in channel or group member lists caused errors. By preventing these users from being clickable, we align the behavior with other parts of the system and eliminate the technical problem. This improves the user experience and ensures stability.
Original PR description
Previously, clicking on an archived user from the channel or group member list triggered a traceback. This PR prevents archived users from being clickable, aligning the behavior with the message model where the popover is not opened for archived users, thus avoiding the traceback. enterprise: https://github.com/odoo/enterprise/pull/117480 task-6179486 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264949 Forward-Port-Of: odoo/odoo#262247
This update resolves a test failure in the Odoo WhatsApp app's discuss sidebar. The change ensures the test accurately reflects the new system behavior of only considering active users when determining available commands. This improves the reliability of the test and ensures the app functions correctly for users.
Original PR description
This PR updates the discuss sidebar testcase to match the new behavior where only active users are considered when computing main_user_id, reducing the number of available commands and fixing the failing assertion. community: https://github.com/odoo/odoo/pull/262247 task-6179486 Forward-Port-Of: odoo/enterprise#117579 Forward-Port-Of: odoo/enterprise#117480
This update corrects a bug where users couldn't edit dates within the blog translate mode. The fix ensures the `DateTimeFieldPlugin` is correctly included in Odoo's core components, allowing for proper date field editing and preventing potential save errors. This improves the user experience for content creators.
Original PR description
The plugin `DateTimeFieldPlugin` was only added in registry `builder-plugins`. But it should also be included in the lists `CORE_PLUGINS` of `html_builder` and `TRANSLATION_PLUGINS` of `website` (the same as `MonetaryFieldPlugin` and similar plugins) Steps to reproduce: - Open `/blog` in translate mode - Click on a date - Bug: you can edit the text (and it will likely cause an error on save) task-6226376 Forward-Port-Of: odoo/odoo#264943
This update prevents the system from wasting time attempting to create API keys for unreachable databases. Previously, errors would clutter the synchronization results and cause delays. Now, the system skips these databases, improving synchronization speed and reducing unnecessary processing time.
Original PR description
#### The aim of this commit is to: - avoid cluttering the user UI with "obvious" error. - avoid wasting up to 15s trying to create the key if we don't get any response. #### Context: When a db is unreachable, trying to create an api-key on it will result in an error. #### Before this commit: - The wizard showing the result of the synchronization would show the error for every single databases in which it encounters that error. If there are a lot, it would bloat the result. - An unresponsive db would waste 15s of our sync time in a synchronized process. If that happens multiple times, we could end up a lot of time waiting for no reason. #### After this commit: We don't try to create an api key for unreachable databases. task-id: [5945269](https://www.odoo.com/odoo/project.task/5945269) - follow up Forward-Port-Of: odoo/enterprise#117053
This update resolves an error that occurred when users removed the 'Source Entity Id Type' setting in the Super Contributions module. The fix ensures the system correctly handles this removal, preventing a data processing failure and maintaining accurate reporting. This improves the stability of the Australian payroll reporting.
Original PR description
Currently an error occurs when the user removes the Source Entity Id Type on Super Contributions. **Steps to Reproduce:** - Install `l10n_au_hr_payroll_account` with demo data. - Switch to an…
Currently an error occurs when the user removes the Source Entity Id Type on Super Contributions. **Steps to Reproduce:** - Install `l10n_au_hr_payroll_account` with demo data. - Switch to an `Australian` company. - Go to `Payroll` > `Reporting` > `Australia` > `Super Contributions`. - Open an existing record or create a new one. - Remove the `Source Entity Id Type` value and click anywhere. `ValueError: Compute method failed to assign l10n_au.super.stream(<NewId origin=1>,).source_entity_id` After [change] in the selection field behavior, when the user removes the Source Entity Id Type, the compute method is triggered to compute the Source Entity ID. However, the condition in the compute method is not match, so no value is assigned. As a result, the method fails and raises an error. This commit ensures that if the condition is not match, the Source Entity ID is explicitly set to False. [1]- https://github.com/odoo/enterprise/blob/9d523d7aabffda277e1ef734caf2b0e434545dca/l10n_au_hr_payroll_account/models/l10n_au_super_stream.py#L61-L65 [change]: https://github.com/odoo/odoo/pull/214422/changes/8d2a42ac419fdf7943a0c11beb8c5de6c6f85bef Forward-Port-Of: odoo/enterprise#115466
This update resolves a visual issue in the composer where adding text to a seemingly empty line would unintentionally hide the user's signature. The fix moves the formatting code to ensure consistent signature display, preventing user confusion and improving the overall composer experience. This change focuses on clarity and usability.
Original PR description
**Steps to reproduce:** - Go to the chatter of any record - Open the full composer - Empty line is present above the signature delimiter (`--`) - Adding text to this line will encapsulate it with the rest of the signature (and hide it by default in the message) **Issue:** Extra `<br>` was added to improve readability, but adding it this way (before the delimiter) can be confusing for the users as they can add text on what appears to be a normal empty line, that is actually hidden with the signature ellipsis. **Fix:** Moved the added `<br>` element outside the signature container for the full composer. The user can still find a way to modify the composer structure in a way that will hide part of the text (e.g. by typing just before the delimiter), but this limits the issue. related: https://github.com/odoo/odoo/commit/13a9c6f5010c3dee01aa0f66ed41b25f517a4a8c opw-6087042 Forward-Port-Of: odoo/odoo#257936
This update fixes a potential error message that could appear when spreadsheets are unavailable. The change prevents this traceback by handling server errors directly within the spreadsheet action, eliminating the need for complex template modifications. This improves the user experience and stability of the Enterprise edition.
Original PR description
The fix suggested in #81276 did not account for other spreadsheet models than a document as it required some modification in the component template. The same logic should then have been forwarded to other models (quality.check for instance] but that process is error prone. This revision changes the approach by handling the server error inside the abstract action so that no template modification is required. task-6208222 Forward-Port-Of: odoo/enterprise#117221
This update resolves an issue where archived sales teams were incorrectly appearing in the Sales Team dropdown when creating new opportunities. The fix removes a redundant setting that was causing this behavior, ensuring that dropdowns only display active teams. This improves the user experience and data accuracy within the CRM.
Original PR description
When you open a contact, click the Opportunities smart button, then click New and open the Sales Team dropdown, archived sales teams show up in the list. The same thing happens for the user, tags and…
When you open a contact, click the Opportunities smart button, then click New and open the Sales Team dropdown, archived sales teams show up in the list. The same thing happens for the user, tags and stage dropdowns. Creating an opportunity from the CRM app does not have this issue.
`res.partner.action_view_opportunity` sets `active_test: False` in the action context so archived opportunities show up in the list view. That context is passed down to the form opened from the action, and to every search the form runs to fill its dropdowns. So the dropdowns also return archived records.
The action's domain already has `('active', 'in', [True, False])`, which is enough to keep archived opportunities in the list on its own (the ORM only adds the "active = True" filter when `active` is not already in the domain). So we can just remove `active_test: False` from the context. This is what 18.0 was doing before https://github.com/odoo/odoo/commit/59feed9f26937ae8e2cab5cd7d2b6743ab6c0717 put the context flag back in.
The override in `website_crm_partner_assign` was setting `active_test: False` back on the action context for the same reason (so its extra search for assigned leads picks up archived ones). The flag is now applied locally on the `crm.lead` handle used for those searches, so archived leads are still found without polluting the action's context.
Steps to reproduce:
1. Archive a Sales Team in CRM > Configuration > Sales Teams
2. Open the Contacts app and pick any contact
3. Click the Opportunities smart button
4. Click "New" and open the Sales Team dropdown
=> Archived teams appear in the dropdown
Ticket [link](https://www.odoo.com/odoo/project.task/6134801)
opw-6134801
Forward-Port-Of: odoo/odoo#263283
Forward-Port-Of: odoo/odoo#261300This update fixes an issue where newly created projects weren't automatically using the stage defined in their project template. The fix ensures that projects created from templates correctly inherit the intended stage, streamlining project setup and reducing manual adjustments. This improves consistency and efficiency in project management workflows.
Original PR description
Steps to reproduce: - 1. Enable "Project Stages" in Project settings. 2. Create a project template and move it to a stage other than the first one (e.g., "Stage 2"). 3. Create a project from this template (manually or via a Sales Order). Issue: - The newly created project is always placed in the first stage instead of inheriting the stage defined in the template. Cause: - The `stage_id` field on the `project.project` model is defined with `copy=False` When a project is created from a template, this field is excluded from the copied values, causing the new project to fall back to the default first stage. Fix: - Override `copy_data` to explicitly include `stage_id` from the source project template. task-6019852 Forward-Port-Of: odoo/odoo#264827 Forward-Port-Of: odoo/odoo#253864
This update addresses a technical issue that prevented users from consistently interacting with the 'Test' button within the IoT driver application. The fix corrects a data processing error (specifically, an 'index out of range' error) that was causing the button to malfunction. This ensures reliable operation of the IoT driver.
Original PR description
This PR fixes the following traceback when using "Test" button in the iot app: ``` 2026-05-18 07:48:36,248 22727 ERROR ? websocket: error from callback <bound method WebsocketClient.on_message of <WebsocketClient(Thread-6, started daemon 3995071456)>>: list index out of range 2026-05-18 07:48:36,249 22727 ERROR ? odoo.addons.iot_drivers.websocket_client: websocket received an error: list index out of range ``` opw-6226014 Forward-Port-Of: odoo/odoo#264897
This update fixes a limitation in the sale commission report's query, allowing it to handle significantly larger sales order IDs. By removing an unnecessary bit shift, the report now supports a much wider range of data, improving performance and scalability. This change ensures the report continues to function correctly with growing sales volumes.
Original PR description
The combined query for sale.commission.achievement.report originally performs several bitwise shifts, starting with the max AML ID. This is done to create a composite number ID for the combined IDs.…
The combined query for sale.commission.achievement.report originally performs several bitwise shifts, starting with the max AML ID. This is done to create a composite number ID for the combined IDs. `MAX(aml.id)::bigint <<20) | max(rules.id)::bigint <<10 | rules.user_id <<10` This shifts the max aml.id 40 bits to the left. Example: Let's say MAX(aml.id) = 1; we will set the other variables to 1, as they often have little impact on the total size of the number. 1 << 20 = 1048576 1048576 | 1 = 1048577 1048577 << 10 = 1099512676352 1099512676352 | 1 = 1099512676353 1099512676353 << 10 = 1152922604119523328 With this format, the highest guaranteed AML ID this query can handle is under 838,861. The last 10-bit shift is unnecessary and increases the result. If we remove the last shift, the AMD ID this query can handle becomes much higher. `MAX(aml.id)::bigint <<20) | max(rules.id)::bigint <<10 | rules.user_id` | | AML Max | RULES.ID Max |RULES.USER_ID Max| | --------------------- | ------ | ------ | ------ | | Before | 838,861 | 1,048,576 | 1,024 | | After | 858,993,459 |1,048,576 | 1,024| opw-6124026 Forward-Port-Of: odoo/enterprise#114711
This update fixes a minor visual issue in the multi-currency popover. Previously, the display would include an unnecessary "on" keyword when a date wasn't available, creating an awkward appearance. This change ensures a cleaner and more professional user experience for currency conversions.
Original PR description
This commit fixes a formatting issue in the multi-currency popover when no currency exchange rate is available. Previously, the popover would awkwardly display the word "on" with no trailing date (e.g., "CHF 22.81 at $ 1.00 on"). The template now conditionally hides the "on" keyword when no date is present to ensure a clean UI. task-6227557
The Odoo tour feature was experiencing a technical glitch that caused it to repeatedly refresh, slowing down the user experience. This fix prevents an infinite loop of rendering, ensuring the tour operates smoothly and efficiently. This improvement enhances the overall user experience.
Original PR description
Before this commit, the tour pointer entered an infinite loop of rendering because one change in its state triggered DOM mutations on which the tour listen to update the pointer, triggering the rendering of the pointer. This was because of a reactive's state being update too early. After this commit, the number of renderings is limited to a reasonable minimum. 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 update resolves an issue where a technical error was incorrectly triggering a fallback mechanism in the IoT system. The fix ensures that errors related to longpolling requests are only flagged when the request genuinely fails, improving system stability and reliability. This prevents unnecessary switching to a websocket listener.
Original PR description
In odoo/odoo#260931, new logic was added to raise an 'unreachable' error in the case where a longpolling listen request failed. This error was then used by the IoT HTTP service to fallback to a websocket listener. However, due to an oversight this 'unreachable' error was also being triggered whenever the longpolling listen request was aborted, which happens whenever a new listener is added. This commit fixes the issue by checking the error type and only sending the 'unreachable' error if the request was not aborted. opw-6175686
This update clarifies the labels used for vehicle deductibility rates within the Enterprise accounting module. The previous labels were misleading, now they accurately represent the non-deductible portion of vehicle expenses. This ensures accurate financial reporting and aligns with standard accounting practices.
Original PR description
The "Deductibility Rates" and "Deductibility (%)" labels are wrong for vehicles as they are supposed to represent the non-deductible part. This commit fixes these labels. task-6121629 Forward-Port-Of: odoo/enterprise#116878
This update optimizes how bank statement details are recorded within Odoo, leading to faster processing times. By using a batch logging function, the system now handles transactions more efficiently without requiring a full message post. This results in a smoother and quicker experience for users.
Original PR description
There is no need for a full message post to get the details of the transaction. We can use the batched function instead `_message_log_batch`. Forward-Port-Of: odoo/enterprise#117742
This update optimizes the Point of Sale system by preventing unnecessary event triggers when updating existing records. Previously, a process triggered updates across multiple loyalty rewards even when no new products were created. This change improves performance and reduces redundant updates, leading to a smoother user experience.
Original PR description
Previously, `loadData` always fired the `"create"` event for every model in a batch, even when all records in that batch were updates (`createdIds = []`). Any listener registered on `"create"` would then be invoked with an empty ID list.
For example, `computeDiscountProductIdsForAllRewards` in pos_loyalty is subscribed to `product.product` "create". When called with `{ ids: [] }`, it still iterated over every `loyalty.reward` and rebuilt its `all_discount_product_ids` array — a no-op that triggered reactive updates across all rewards on every product scan.
The fix guards the `triggerEvents("create", ...)` call behind a `createdIds.length` check, so the event only fires when at least one record was actually created.
opw-6091501
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#264145