Friday, March 6, 2026
31 changes · saas-19.1
New functionality added to Odoo
This update incorporates recently added cities in Mexico into the Odoo Enterprise system. This ensures accurate reporting and compliance for Mexican businesses using the l10n_mx_edi_extended module. 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#109358 Forward-Port-Of: odoo/enterprise#107623
Enhancements to existing features
This update streamlines the setup process for testing across several core Odoo modules, including accounting and timesheets. By centralizing test setup, the team has improved the reliability and efficiency of our automated testing procedures, ensuring better quality and faster identification of potential issues.
Original PR description
Forward-Port-Of: odoo/enterprise#109570 Forward-Port-Of: odoo/enterprise#108739
Resolved issues and error corrections
This update clarifies the behavior of Helpdesk article searches when using non-root articles as the main article. Previously, searches didn't include descendant articles. Additionally, a minor issue with dropdown functionality has been addressed to prevent empty dropdowns. The team has opted to provide clearer guidance in the article help documentation instead of 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 enhances the accuracy of interest rate calculations for loans within the Enterprise module. Previously, interest rates were limited to two decimal places. Now, users can specify interest rates with up to ten decimal places, providing greater flexibility and precision for financial reporting.
Original PR description
Allowing more precision on the interest rate for loans. By default the display uses 2 decimals, but if a user decides to add more precision they can up to 10 decimals. task-5913175 Forward-Port-Of: odoo/enterprise#107163
This update enhances logging for transactions processed by the Codabox integration (_l10n_be_codabox). These improved logs will assist the support team in quickly identifying and resolving any issues related to transaction processing, leading to faster problem resolution. This change primarily benefits internal support operations.
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#109534 Forward-Port-Of: odoo/enterprise#107779
This update fixes a technical issue preventing internal users from accessing AI tools within the Odoo Enterprise platform. The fix removes a restriction on accessing tool data, allowing proper functionality of the voice transcript command. This ensures consistent and reliable AI tool performance.
Original PR description
Steps to reproduce: 1. Open any editor and use /voice transcript command. 2. Start recording, say some words, stop recording. 3. Observe the access error on `tool_ids`. The `tool_ids` field on `ai.topic` is restricted to `base.group_system`, preventing internal users from accessing it. The fix is to use sudo to retrieve the available tools. ticket task-5965009 Forward-Port-Of: odoo/enterprise#109366
A technical glitch was causing a crash when using the chatbot while the website editor was active. This update ensures the chatbot data is properly handled across all Odoo environments, preventing the error and improving stability.
Original PR description
Using a chatbot while the website editor is active triggers a traceback. The issue occurs because bus notifications containing `Chatbot` model data are also received by the backend bundle. In the backend bundle, the `Thread` model did not define the `chatbot` field, so the inverse thread relation on the `Chatbot` model could not be resolved, leading to a crash. This commit adds the chatbot field to the core bundle so it is available in all contexts and prevents the traceback. Steps to reproduce: - Goto localhost:8069/@/contactus - Start chatbot - Answer any question -> traceback task-5924295 Forward-Port-Of: odoo/odoo#252186 Forward-Port-Of: odoo/odoo#248216
This update fixes an issue where highlights within the settings page were difficult to see in dark mode. The team adjusted the text color to black, significantly improving contrast and readability for users. This ensures a better user experience for all customers, regardless of their chosen theme.
Original PR description
Before this commit, highlights were not readable when searching on the settings in dark mode. Now, we force the text color to black to improuve the contrast and redability. task-id 6003446 Forward-Port-Of: odoo/odoo#251979
This update fixes a potential data error that could occur when moving folders linked to accounting settings to the trash. The automated system cleaning process was incorrectly attempting to delete these folders, leading to database inconsistencies. This change ensures these folders are excluded from the cleanup process, maintaining data integrity.
Original PR description
When a workspace(folder) linked to a folder setting is moved to the trash and the ``Base: Auto-vacuum internal data`` cron runs, a traceback will generate. Steps to reproduce the error: - Install…
When a workspace(folder) linked to a folder setting is moved to the trash and the ``Base: Auto-vacuum internal data`` cron runs, a traceback will generate. Steps to reproduce the error: - Install ``documents_account`` module - Go to Documents > Configuration > Files Centralization > Enable Accounting > Select any workspace > Save > - Click on Journals > Create a new > Select any Journal > Create a Workspace A > Save - Go to Documents > Click on Workspace A > Actions > Move to trash - Run the ``Base: Auto-vacuum internal data`` cron Traceback: ```py ForeignKeyViolation: update or delete on table "documents_document" violates foreign key constraint "documents_account_folder_setting_folder_id_fkey" on table "documents_account_folder_setting" ``` solution: override the ``_get_gc_clear_bin_domain`` method to exclude folders linked to folder settings, preventing their deletion during the garbage collection. sentry-7193540869 Forward-Port-Of: odoo/enterprise#109636 Forward-Port-Of: odoo/enterprise#104875
This update fixes an issue where emails weren't automatically sent to candidates when they were refused through the recruitment process. The fix ensures that a rejection notification is properly delivered to the applicant's email address, improving communication and candidate experience. This was caused by a technical error in how email data was processed.
Original PR description
## Short functional explanation of the error When a candidate is refused, an email isn't sent to their email address. ## Reproduction Steps 1. Open Mailhog in a separate tab. 2. Go to the Recruitment…
## Short functional explanation of the error When a candidate is refused, an email isn't sent to their email address. ## Reproduction Steps 1. Open Mailhog in a separate tab. 2. Go to the Recruitment app and select any job position. 3. Click on new to create a new application. Enter an applicant name and an applicant email. 4. Check Mailhog: a job application has been sent to the applicant. 5. Go back on the Recruitment app and click on Refuse. In the wizard, make sure you toggle Send Email and click on Refuse. ### Expected behavior In Mailhog, a refusal mail has been sent to the applicant. ### Unexpected behavior Nothing is sent. ## Origin of the issue When refusing a candidate, we create a notification in the chatter but an email isn't sent. This is due to the `incoming_email_to` field, which is checked here: https://github.com/odoo/odoo/blob/bfc1c210eca65de1116aa09cdd62749ed9192407/addons/mail/models/mail_thread.py#L4040-L4053 but because this field is already retrieved here: https://github.com/odoo/odoo/blob/bfc1c210eca65de1116aa09cdd62749ed9192407/addons/mail/models/mail_thread.py#L4025 the last condition will always be true, preventing the recipient's data to be added to the message, thus preventing the message to be sent correctly. Note: as of 19.0, the field `outgoing_email_to` can be used to determine the recipient's email address. Note: we remove `'body_is_html': True` because this field is misused in this case: when set at true, the field is always considered as HTML __ opw-5980079 Forward-Port-Of: odoo/odoo#252036
This update adds a temporary field to the burndown chart's embedded actions to ensure a smooth upgrade process. Previously, a database constraint prevented changes to the chart's action ID, causing temporary issues. This fix provides a safe path for future updates and improvements to the burndown chart functionality.
Original PR description
Add an empty `python_method` field to the burndown chart embedded actions as a preparatory change for a safe upgrade path. Without this, replacing `action_id` with `python_method` in master would temporarily violate the SQL constraint on `ir.embedded.actions` that prevents both from being set simultaneously. references: #239000 task-5347524 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This pull request updates the core spreadsheet component (o_spreadsheet) to the latest version for the 19.1 release. It addresses several minor bugs and improves the dynamic pivot feature, ensuring a smoother user experience when working with spreadsheets within Odoo. This update contributes to overall stability and performance.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c7598b3a3e [REL] 19.1.9 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c7598b3a3e [REL] 19.1.9 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/f59db40bd3 [FIX] Dynamic pivot: header alignment [Task: 5922279](https://www.odoo.com/odoo/2328/tasks/5922279) https://github.com/odoo/o-spreadsheet/commit/1103dcbea7 [FIX] chart-panel: reset when changing panel [Task: 5926661](https://www.odoo.com/odoo/2328/tasks/5926661) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update adjusts the minimum and maximum amounts available for employee mobility budgets each year. These amounts are indexed annually to reflect changes in compensation and market rates. This ensures employees have access to the appropriate budget for relocation expenses.
Original PR description
Each year the minimum and maximum amount of mobility budget is indexed, here are the new values. Forward-Port-Of: odoo/enterprise#109641
This update fixes an issue where category images in the Point of Sale selector were too large and overwhelmed the category names. The change adjusts the layout to ensure images are appropriately sized, preventing overflow and improving the user experience. This ensures a cleaner and more organized display of product categories.
Original PR description
Before this commit, when a category image was too large, it would overflow and take all the space dedicated to the category name. Now we set the width of the image to 1/3 of the button and the name to 2/3, so that the image never takes too much space. task-id: 5462315 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249368 Forward-Port-Of: odoo/odoo#242054
This update resolves an issue causing unreliable test results for the HTML editor toolbar. The fix replaces excessive timeouts with a more robust mechanism that accurately waits for the toolbar to appear, ensuring consistent test outcomes. This improves the stability of the HTML editor functionality.
Original PR description
Because a timeout in js only ensures to wait at least for that amount of time while giving no upper bound to the actual awaited time, it was possible for advanceTime(100) to actually wait for more…
Because a timeout in js only ensures to wait at least for that amount of time while giving no upper bound to the actual awaited time, it was possible for advanceTime(100) to actually wait for more than 300ms when the runbot was slow enough. In that case, since enough time has elapsed between the action and checking that the toolbar hadn't opened yet, well it was actually already opened, since we had waited too much, and the test failed non-deterministically. This is actually a special case here. Usually we want to use `waitFor` or `expectElementCount` with the toolbar since it's a popover and is therefore affected by [1]. But we cannot use them to check if the toolbar hasn't opened too early, lest we find ourselves with the same problem than explained above. Using only advanceTime with a timeout of 100ms and a synchronous `expect` check ensures that, in the general case when the runbot is fast, the test will fail in case of a regression, since there would have been ample time to have multiple animation frames during 100ms. The regression will only be hidden when the runbot is very slow and no animation frame has happened during the 100ms timeout, which is an acceptable tradeoff. The same issue appeared in another test so I fixed it as well. Timeouts throughout this test file were excessive, with multiple uses of `advanceTime(500)` while OPEN_TOOLBAR_DELAY is 300ms. This is because the commit dates from before [1] and so it was hard to ensure that enough time and animation frames had passed before we could check with `expect`, which is synchronous. Now we are using `expectElementCount`, which uses `waitFor` under the hood which has a proper mechanism to wait for enough animation frames with an additional internal delay. With these, there is no more need for a manual timeout to exceed the value of OPEN_TOOLBAR_DELAY. Note that this only applies to the cases where we check that the toolbar should be displayed, since cases where it should NOT be displayed before a certain timeout should NOT use those utils, as explained above. runbot-238562 [1]: https://github.com/odoo/odoo/commit/54da715df84789f9a1acc0cfc91be41dcdbab140 Co-authored-by: Sébastien Geelen <sge@odoo.com> Forward-Port-Of: odoo/odoo#247551
This update streamlines testing by consolidating setup steps and reducing unnecessary logging within the Odoo test environment. By optimizing test setup and suppressing noisy logs, the team has lowered the cost of running tests, improving efficiency.
Original PR description
- move a bunch of expensive setUp to setUpClass - backport #152378 to avoid password keying in 17.0 also Forward-Port-Of: odoo/odoo#251905 Forward-Port-Of: odoo/odoo#250667
This update resolves an issue where duplicate labels were appearing for widget properties within the Odoo Studio. The fix involves a technical workaround to prevent the duplication of content rendered by the OWL2 framework, ensuring 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 Forward-Port-Of: odoo/enterprise#109694
This update prevents Instagram posts from failing due to delays in media processing. By using a scheduled cron job to retry, the system now handles temporary processing delays gracefully, ensuring posts are published reliably. This improves the overall user experience for Instagram integration.
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 Forward-Port-Of: odoo/enterprise#100313
This update resolves an issue where multi-page invoices in PDF format displayed with an empty first page. The fix adjusts how the PDF rendering engine handles tables, ensuring that invoice line items are correctly split across multiple pages. This improves the overall presentation and usability of invoices.
Original PR description
Steps to reproduce: 1. Create an invoice with enough lines to span at least two pages. 2. Print the Invoice PDF. Observation: The first page appears empty (except for the header), and the entire invoice lines table is pushed to the second page. Cause: The introduction of the 'table-responsive-sm' wrapper in saas-19.1 includes 'overflow-x: auto'. The wkhtmltopdf rendering engine treats elements with overflow properties as unbreakable atomic blocks. If the block's height exceeds the remaining space on the current page, the engine moves the entire container to the next page rather than splitting it. Solution: Apply 'overflow: visible !important' to the 'table-responsive-sm' div. This overrides the Bootstrap default for the reporting engine, allowing the internal table rows to break naturally across pages while retaining the responsive wrapper for web/portal views." opw-5937043
This update resolves an issue where users received an empty depreciation schedule report if customers had customized their accounting rules. The fix ensures accurate report generation by granting administrative access to verify asset data, addressing a potential reporting discrepancy.
Original PR description
Following odoo/enterprise@ece0405785, in case a customer modified the `account.move.line` record rules in a way which is incompatible with the AML shadowing, user will only get an empty deprecation schedule report. This commit as a sudo, to ensure we get a correct report, access rights being already check for `account.asset` records.
This update fixes an issue where link popovers in the preview mode were excessively large when titles were long. Now, the popover size is consistently maintained, ensuring a cleaner and more professional look for previews with longer titles. This improves the overall user experience.
Original PR description
Before this commit: the link popover is oversize when the preview has long title. After this commit: the link popover retains its size. task-6000052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refines the visual style of polls within the Discuss feature, enhancing readability and user experience. The changes include adjustments to spacing, text and icon sizes, and the removal of a misleading subtitle when a poll is closed. These improvements contribute to a cleaner and more intuitive interface.
Original PR description
- improved spacing (around card, between items, etc.) - small size and opacity / muted tweaks on text and icons - don't show "Select" subtitle when poll has closed Before / After <img width="1618" height="578" alt="Screenshot 2026-03-04 at 18 33 44" src="https://github.com/user-attachments/assets/bef827cd-d9f6-4067-8f77-4f3e17f6f73f" /> <img width="1581" height="571" alt="Screenshot 2026-03-04 at 18 32 51" src="https://github.com/user-attachments/assets/aeb9af94-5095-4784-8b87-d06876c52ba3" />
This update allows all live chat agents with access to modify the description of a channel, regardless of their membership status. Previously, only channel members could make these changes. This enhancement improves agent flexibility and efficiency in managing live chat conversations.
Original PR description
…cription **Before this PR**, only users who were channel members could edit the description of a live chat conversation. With this change, agents who have live chat access can now edit the channel description **even if they are not members** of that specific live chat channel. task-5046015 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update addresses instability in the HTML editor's automated tests. The issue stemmed from the toolbar being a popover, making it susceptible to timing inconsistencies during testing. The team adjusted timeouts and addressed dependencies to ensure more reliable test results.
Original PR description
Forward-Port-Of: odoo/odoo#252130 Forward-Port-Of: odoo/odoo#251122
This update resolves a JavaScript error that occurred when reloading the shopfloor app, specifically during MO process runs. The fix disables the automatic focus of the search bar, preventing the 'Cannot read properties of null' error and ensuring a smoother user experience. This improves stability and reliability of the shopfloor functionality.
Original PR description
Steps to reproduce:
- Open the shopfloor app
- Reload or duplicate the page where the MO process is running
Issue:
A JavaScript error occur during reload:
UncaughtClientError > TypeError
Uncaught Javascript Error > Cannot read properties of null (reading 'blur')
Occured on 101125414-19-0-all.runbot180.odoo.com on 2026-02-16 04:59:28 GMT
TypeError: Cannot read properties of null (reading 'blur')
at https://101125414-19-0-all.runbot180.odoo.com/web/assets
/9d8abcf/web.assets_web.min.js:36280:459
Cause:
This happens when the search bar component attempts to call `blur()` on `inputRef.el` while the element is not yet available or has already been destroyed during the component lifecycle.
Fix:
Disable the search bar autofocus in the shopfloor
`env.config.disableSearchBarAutofocus = true`.
opw-5902675
upg-3894728
Forward-Port-Of: odoo/enterprise#107491This update resolves an issue where avatars in collaborative list views (like 'To Do' notes) were consistently positioned on the first line, regardless of where the user focused within the list. The fix ensures avatars now dynamically follow the user's cursor movement, improving the visual experience and usability of collaborative lists. This enhancement was implemented as a bug fix.
Original PR description
Since [1] when using collaboration, the position of the avatar for list items is always displayed on the first line - instead of following the user's focus. This commit fixes this by only applying the patch of [1] when inside an embedded component. Steps to reproduce: - Go to a "To do" note - Add a checked list with indented items - Access the same note from another window - Move around the checked list and observe avatar in other window => Avatar remained on first line while moving around list items [1]: https://github.com/odoo/odoo/commit/9863cb25d6dfdba224897f21634bdaaf3eca91a7 task-5930388 Forward-Port-Of: odoo/odoo#248438
This update fixes an issue where negative values were appearing in tax reports for carried over amounts (specifically lines 81-88). The change ensures that tax report XML files accurately reflect tax calculations, preventing potential reporting discrepancies. This improves the accuracy of financial reporting.
Original PR description
When generating the xml for tax report, negative values should not be present in the xml for carried over lines (81, 82, 83, 86, 87, and 88) Steps: - Create a RBILL for today - 1 month, add an invoice line with tax using one of the following tags: -81, -82, -83, -86, -87 or -88 in its base refund repartition line - Open the tax report on the month of the RBILL - Generate the xml, either by the dedicated button, or by creating and posting the closing entry -> there is line(s) for negative amounts opw-5955323 opw-5428395 Forward-Port-Of: odoo/enterprise#109568 Forward-Port-Of: odoo/enterprise#108916
This pull request addresses a minor technical issue in the German localization (l10n_de) of Odoo. Specifically, a problem with how tags were being defined in the account account tags data file was corrected. This ensures accurate reporting and categorization of financial transactions for German-speaking users.
Original PR description
Commit db0d499952192ede0def2a070e103ba67952387c inverted some tags which is wrong opw-5415426 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250744
This update corrects a bug where tags in German financial reports were incorrectly sorted, preventing proper auto-completion functionality. The team has also improved testing to catch similar errors in the future. This ensures accurate reporting for our German-speaking customers.
Original PR description
Commit https://github.com/odoo/odoo/commit/db0d499952192ede0def2a070e103ba67952387c inverted some tags which is wrong Tags must be sorted for the auto complete to work properly Improving tests to catch more errors opw-5415426 Forward-Port-Of: odoo/enterprise#108848
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 simplifies the Helpdesk interface.
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#109287 Forward-Port-Of: odoo/enterprise#100686
This update fixes a technical problem that prevented Odoo from reliably sending messages to the Peppol network. Specifically, a backlog of messages caused a recurring cron job loop and token issues, leading to connection errors. This change ensures smoother and more consistent communication with the Peppol network, improving data synchronization.
Original PR description
Fix two issues observed on Odoo production. 1) When more than 50 messages from this odoo db/client are queued to be sent on peppol-ap, all client-side messages remain in `processing` If the send queue stays saturated, the retrigger logic repeatedly schedules the cron, causing an infinite `ir_cron_peppol_get_message_status` loop. 2) Each cron refreshes the authentication token, which allows concurrent threads to refresh it in parallel. Due to the `REPEATABLE READ` isolation level, a long-running cron may continue using the old token while another thread has already refreshed it. This leads to `invalid-signature` responses and incorrectly marks the connection as out of sync on one thread, even through the long-running transaction fails on trying to commit. Thus, simply flushing the cursor will block the transaction in such a situation no-task Forward-Port-Of: odoo/odoo#252177