Friday, December 5, 2025
22 changes · saas-18.4
Enhancements to existing features
This update clarifies the labeling of a field used during salary adjustments within the HR payroll module. The change ensures users understand exactly where this input type is accessible, improving the overall user experience. This is a minor improvement focused on usability.
Original PR description
This change ensures the label accurately reflects where the field is accessible and providing better clarity for users when working with salary adjustments. Task: 5375187 Forward-Port-Of: odoo/enterprise#101065
Resolved issues and error corrections
This update ensures Odoo automatically updates remaining modules in the database, regardless of how Odoo is started. Previously, this only worked when Odoo was launched with specific command-line arguments. This change adds a configuration setting to trigger the automatic update process, improving database consistency and stability.
Original PR description
In https://github.com/odoo/odoo/pull/216025, we force auto upgrade of modules remaining in the database when `preload_registries` is called. However, this strategy doesn't work if Odoo is not started with the `-d` argument, because `preload_registries` is only called for databases specified in the `-d` argument. This commit fixes the issue by adding a special record in `ir_config_parameter` with key `base.partially_updated_database` to indicate that the next time `Registry.new` is called, it should force auto upgrade of modules remaining in the database. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238748 Forward-Port-Of: odoo/odoo#238320
This update fixes an issue where the 'Journal Items' link in the General Ledger Report was incorrectly displaying items not associated with the selected account group. The fix ensures that users see the correct journal items linked to their account groups, improving report accuracy and data reliability.
Original PR description
Repro steps: 1. Create account groups 2. Go to general ledger report 3. Click on 'Journal Items' of one of the account groups lines Problem: The journal items shown don't belong to the account group that it should belong to. Fix: This commit fixes this issue by adding the correct action_domain of account_id.group_id. opw-5180867 Forward-Port-Of: odoo/enterprise#100191
This update fixes an issue where application refusal emails weren't sent promptly, relying solely on a delayed queue. Now, emails are sent immediately upon refusal and a log entry is created in the applicant's chat, improving communication and transparency in the recruitment process. This ensures candidates receive timely updates.
Original PR description
**Steps to reproduce:** 1. Install `hr_recruitment` 2. Create a job position and then an application with an email address for it 3. Refuse the application with "Send Email" enabled **Issue:** 1. Refusal emails are not sent right away; they are only queued and delivered later by the scheduled action. 2. No log entry is created in the chatter. **Cause:** - During the recruitment refusal flow refactoring, mail handling was not properly adapted. The code prepared the refusal mail but never explicitly sent it, resulting in it being added to the queue only. **Solution:** - Ensure refusal mails are sent immediately instead of waiting for the queue. Log the refusal mail in the applicant’s chatter at the time of refusal. opw-5058709
This update corrects a technical issue in the Danish Nemhandel integration by ensuring that Denmark-specific document type checks are applied only to Danish partners. This prevents conflicts with standard Peppol processes and ensures consistent data flow, improving the reliability of the system.
Original PR description
Before: - The l10n_dk_nemhandel override of _check_document_type_support replaced the generic Peppol logic and did not accept process_type, causing errors when other localizations relied on the base method. After: - Aligned the method and applied the DK-specific logic only for Danish partners, falling back to the generic Peppol behavior otherwise. Impact: - Prevents unintended overrides towards standard Peppol flow. Forward-Port-Of: odoo/odoo#238543
This update prevents the creation of duplicate reversal and deferral entries when generating deferred entries from invoices. The change corrects a calculation issue introduced with a new method for handling monthly accounting dates, ensuring cleaner and more accurate journal entries.
Original PR description
When generating deferred entries from invoice lines, certain scenarios led to the creation of both a reversal and a deferral for the same amounts. These entries would effectively cancel each other out, creating unnecessary noise in the journal entries. This issue primarily occurred when the start date, end date, and accounting date all fell within the same calendar month. The problem was exacerbated by the introduction of the `full_months` computation method in https://github.com/odoo/enterprise/commit/5dca9c0c2691cba2335e110ad63a2dcc8bbf6d57. To correctly handle this method and prevent the erroneous paired entries, the end date must now be adjusted by subtracting one month when calculating the deferral period. opw-5000337 Forward-Port-Of: odoo/enterprise#101258 Forward-Port-Of: odoo/enterprise#100507
This update corrects a visual issue in the bank reconciliation widget where the activity badge was misaligned. The fix removes unnecessary styling classes, ensuring the badge now appears correctly positioned on the icon. This improves the user experience and visual consistency of the bank reconciliation process.
Original PR description
Current behavior before PR: The activity badge inside the bank reconciliation widget was misaligned, <img width="55" height="60" alt="image" src="https://github.com/user-attachments/assets/0f99ea55-fedd-401a-a65e-226296070e32" /> Desired behavior after PR is merged: The activity badge now sits in the correct position on the icon. <img width="62" height="55" alt="image" src="https://github.com/user-attachments/assets/abf96aed-73d4-4153-8e0a-56937d4ff08a" /> Changes implemented: - Removed `fa-fw` class. - Removed the unnecessary 'fa-fw' class from comment and paperclip icon. task-5354994 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#100573
This update resolves an issue where switching between different media types (like images and icons) in the HTML editor didn't correctly remove outdated class names. Previously, an image might retain a class that wasn't valid for icons. This fix ensures that the HTML editor consistently removes irrelevant classes, improving the editor's functionality and preventing unexpected styling.
Original PR description
Before this commit, switching the media type would not properly remove the classes of the element. For example, images can have the class "w-100" while icons cannot. If an image had the class "w-100", switching to an icon would keep the class "w-100", even though this class isn't valid for icons. This commit fixes the code to properly remove all invalid classes. Forward-Port-Of: odoo/odoo#238501
This update fixes an issue where debit notes generated in the Uruguayan localization were incorrectly assigned as e-invoices (type 111). The fix ensures debit notes automatically use the correct document type (113), streamlining invoice processing for Uruguayan customers. This improves data accuracy and compliance.
Original PR description
**Steps to reproduce:** * Install and activate the **Uruguayan Localization** for the company. * Create a contact located in Uruguay. * Create an invoice for this customer and set **Document Type =…
**Steps to reproduce:** * Install and activate the **Uruguayan Localization** for the company. * Create a contact located in Uruguay. * Create an invoice for this customer and set **Document Type = 111 (e-Invoice)**. * From the invoice's gear icon, create a **Debit Note**. **Observed behavior:** * The debit note is automatically assigned **Document Type 111 (e-Invoice)**, even though it should use **113 (e-Invoice Debit Note)**. * Attempting to change the document type manually only shows 113 as an option, confirming the debit note should not have been set to 111. **Cause:** * `_compute_l10n_latam_document_type()` applies a rule that assigns Document Type **111** to all Uruguay electronic invoices with RUT identification. * This logic does **not** check whether the move is a **debit note** (`m.debit_origin_id`), and therefore incorrectly overrides the expected debit note document type. * The override prevents the correct selection (internal_type == *debit_note*) from being applied. **Fix:** * Add a condition in the automatic e-Invoice assignment logic. * Debit notes now bypass the e-Invoice assignment and fall through to the parent method, which correctly assigns **Document Type 113**. opw-5154599 Forward-Port-Of: odoo/enterprise#100938
This update increases the time allowed for sending log data from the IoT box to the database, resolving previous issues that caused frequent errors. By extending the timeout to 10 seconds and increasing the log sending frequency to 12 seconds, the system is now more reliable in capturing and transmitting important data.
Original PR description
Currently the request to send logs to the db from the iot box is at 0.5s timeout. This leads to many exceptions and failed requests. This commit sets the timeout for such requests to 10s (previously 0 5s) and the frequency of sending logs to every 12s (previously 0.5s) Forward-Port-Of: odoo/odoo#238648
This update removes outdated services automatically added when connecting to the Peppol network. These services were irrelevant due to restrictions on user registration from Australia, New Zealand, and Singapore, and were likely causing confusion. This change simplifies the system and reduces potential errors.
Original PR description
When creating a new connection to the Peppol network, we add multiple services by default. This commit remove from the default (they can still be manually enabled): - the ANZ BIS3 Invoice &…
When creating a new connection to the Peppol network, we add multiple services by default. This commit remove from the default (they can still be manually enabled): - the ANZ BIS3 Invoice & CreditNote that is deprecated in favor of the PINT version, - the SG BIS3 Invoice & CreditNote that will also be deprecated soon by its PINT version. Note that anyway for the moment we don't allow to register user from AU/NZ/SG on Peppol, so we were in any case registering those services for all participants, and none of them were relevant for those two local formats ... In the future we would like to handle the received services(formats) on IAP directly to handle change better. https://github.com/odoo/odoo/blob/0af9d32e305c1f1afb51e126c1e6747879e78225/addons/account/models/company.py#L35-L50 I checked on our AP, and only 8-10 invoices were sent with these formats, between Belgians... so it is most likely errors. Let's reduce the confusion. <img width="1283" height="65" alt="image" src="https://github.com/user-attachments/assets/208bbd7e-f836-4bc9-a594-795313b06be9" /> Source: https://docs.peppol.eu/edelivery/codelists/v9.4/Peppol%20Code%20Lists%20-%20Document%20types%20v9.4.json Forward-Port-Of: odoo/odoo#238674
This update fixes an issue where short feedback messages were incorrectly wrapping the last word, creating a messy layout. The change ensures that feedback messages display cleanly, especially when combined with the rating image, resulting in a better user experience. This backport addresses a minor visual inconsistency.
Original PR description
**Current behavior before PR:** - Short feedback wraps the last word unnecessary.  **Desired behavior after PR is merged:** - Short messages wrapped unnecessarily due to block-level element conflicting with floated rating image. This fix ensures cleaner inline layout.  Backport of this: [Commit](https://github.com/odoo/odoo/commit/52a1913ea7082655009c9eca1201c8c42e4e4037) task-[4788428](https://www.odoo.com/odoo/project/1519/tasks/4788428) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215577
This update resolves an issue where users were unexpectedly redirected back into the sign flow after completing a document signature. The fix ensures users return directly to the correct record form without lingering 'Sign' breadcrumbs, improving the user experience and preventing confusion.
Original PR description
Issue:
- After signing a document, the user is redirected to the correct
record form (e.g., Offer, Invoice) but an extra "Sign" breadcrumb
remained in the navigation.
- Clicking that breadcrumb sent the user back into the sign flow,
creating confusion and breaking the expected navigation behavior.
Fix:
- Updated the close flow in the thank you dialog to use
`stackPosition: "replacePreviousAction"` when a reference document
exists, ensuring the sign dialog controller is removed cleanly.
- Fallbacks use `clearBreadcrumbs` when no reference document is
linked (standalone sign documents).
- This restores correct breadcrumb generation across all sign flows.
Impact:
- Users return to the proper parent record without leftover sign
breadcrumbs.
- Prevents unexpected navigation back into the sign request.
Task: 5175992
Forward-Port-Of: odoo/enterprise#99525This update simplifies the process of creating new signature templates in Odoo Enterprise. Now, newly created templates automatically default to the standard 'Sign' folder, eliminating the need for users to manually set this option each time. This streamlines workflow and reduces potential errors.
Original PR description
Assign a default document folder to sign templates so that each newly created template automatically points to the default "Sign" folder. task-5023107
This update resolves a technical issue that prevented the printed receipt tour from working correctly after installing the `l10n_se_pos` module for Swedish Point of Sale. The fix corrects a programming error, ensuring the receipt tour functions as expected for users.
Original PR description
in this commit: - Fixed TypeError: this.get_order is not a function raised during the `test_printed_receipt_tour` in POS after installing `l10n_se_pos`. runbot-233248 Forward-Port-Of: odoo/enterprise#97355
This update corrects a problem where email templates were not rendering correctly due to differences in how HTML is processed. The fix ensures that all HTML elements, except for specifically allowed 'void' elements, have proper closing tags, resulting in consistent and accurate email formatting. This prevents errors and ensures emails display as intended.
Original PR description
**Step to Reproduce:** - install Subscription (with demo data) - try to edit `Subscription: Payment Reminder` email template **Observation:** - Traceback for faulty template **Cause** For outgoing…
**Step to Reproduce:**
- install Subscription (with demo data)
- try to edit `Subscription: Payment Reminder` email template
**Observation:**
- Traceback for faulty template
**Cause**
For outgoing mails, we are using output_method = 'xml' when normalizing html content
https://github.com/odoo/odoo/blob/cb5176df98490ef04c0aac481f010bd2ac2f2424/odoo/orm/fields_textual.py#L580-L587
when this content is parsed using DOMParser in browser,
https://github.com/odoo/odoo/blob/cb5176df98490ef04c0aac481f010bd2ac2f2424/addons/html_editor/static/src/html_migrations/html_upgrade_manager.js#L61-L63
we might get different result.
For a very basic template like this:
```
<div>
<t t-if="ctx.get('error')">
<pre t-out="ctx['error'] or ''" />.
</t>
<t t-else="">
<span>some text</span>
</t>
</div>
```
when parsed using Domparser(), return a faulty template:
```
<div>
<t t-if="ctx.get('error')">
<pre t-out="ctx['error'] or ''">.
<t t-else="">
<span>some text</span>
</t>
</pre>
</t>
</div>
```
Issue roots because of use of self-closing tags, which are valid for xml but not for html
**Fix:**
- we forcefully replace all self-closing tags(which are not void elements) with a closing tag.
- see list of void elements https://developer.mozilla.org/en-US/docs/Glossary/Void_element
opw-5234345
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#235924This update corrects a bug where 'Other Activities' were incorrectly grouped, leading to inaccurate counts in the systray. By separating these activities, the system now correctly identifies and displays overdue, today, and planned activities, ensuring users have a precise view of their tasks. This improves the reliability of the activity tracking feature.
Original PR description
Activities without a resource model (displayed as "Other Activities") were previously grouped together. This caused the counter logic, which splits activities into 'overdue', 'today', and 'planned', to fail. It would evaluate the entire group of activities and assign all of them to the first state it encountered (e.g., all 5 activities would be marked 'overdue' even if only 1 was). This commit changes the grouping key for these "mail.activity" records so that each "Other Activity" is processed individually, allowing its state to be correctly counted and displayed in the systray menu. Task-5226403 Forward-Port-Of: odoo/odoo#234899
A test related to payroll accounting was failing when run on a database without the standard demo data. The fix added a default account to the test environment, resolving the error and ensuring the test now runs correctly. This ensures consistent test results regardless of the database setup.
Original PR description
Steps to reproduce: Install hr_payroll_account on a fresh db without demo data. Run the test test_payment_hr_payslip. The test fails. Cause: With demo data, the us payroll was installed and with it, the payroll accounts were configured. Without demo data, default account is missing. Fix: Add a default account in the test and fix the amount balance with a new debit rule to balance the credit one. Task: 5386528 Runbot Error: 161615 Forward-Port-Of: odoo/enterprise#101299
This update addresses a technical issue where form changes were causing confusing error messages. The team has implemented a fallback to gather more information about these errors, improving stability and reducing disruption for users. This change focuses on internal technical improvements.
Original PR description
Related to https://runbot.odoo.com/odoo/error/234669: somewhere somehow an onchange warning is malformed (it's not a mapping) and the Form is unable to cope with it, leading to a rather unhelpful error. TBH I don't understand how it can happen as `onchange` has a rewriting layer between the `warning` out of onchange methods and the one it sends to the client. And most of the `onchange` overrides are preprocessing not post. And the two overrides which do postprocess modify `values` in place. Add a fallback to attempt to get more insight into this error. Forward-Port-Of: odoo/odoo#238705
This update resolves a test failure in the l10n_eg_hr_payroll module caused by incorrect calculations for employee leave balances in 2026. The fix incorporates a 'freeze_time' setting to ensure accurate calculations, preventing the test from incorrectly reporting zero balances. This ensures accurate leave tracking for employees.
Original PR description
Before this commit, the test `test_get_annual_remaining_leaves_with_allocation` was checking the balance of an employee with an allocation for 2025. As no freeze_time was set, the test would fail in 2026 as the allocation would be invalid and the employee balance would fallback to 0. Same issue for the test `test_get_annual_remaining_leaves_after_leave_taken` The PR https://github.com/odoo/enterprise/pull/98223 was targetting the wrong test and thus, the error was not fixed. This commit merges all 3 tests in one using freeze_time runbot error 231559
This update resolves a visual issue on the Odoo website's mobile preview, specifically eliminating a distracting shadow effect appearing in the corners of the device image. The fix corrects a misalignment in the border-radius property, ensuring a cleaner and more professional look for mobile users. This improves the overall user experience on smaller screens.
Original PR description
This PR aims to fix an issue about the shadow around the device in the mobile preview, specifically in the corners, when the height of the viewport is bigger than 1080px. Prior to this, the border-radius property was not correctly aligned with the radius of the mobile device image (in `.o_mobile_preview_layout`). | Before | After | |--------|--------| | <img width="468" alt="image" src="https://github.com/user-attachments/assets/1d8aaba4-2e8f-45fd-a6b8-853c82051a51" /> | <img width="468" alt="image" src="https://github.com/user-attachments/assets/b3a10e9b-ac53-429d-8780-a03120316df4" /> | task-4795450 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214853
This update fixes an issue where toggling block elements in product descriptions caused unwanted page reloads. By explicitly setting the button type to 'button', the change prevents this behavior, resulting in a smoother and more reliable user experience for customers viewing product pages.
Original PR description
**Context** If you add a toggle block element in the ecommerce description of a product in your backend, it will be rendered inside a `<form />` element on your website's product page. **Before this commit** The button controlling the toggling of this element does not have an explicit "type" attribute set. This has the effect that these buttons will act as "submit" buttons for the form element on the website, causing a page reload. https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type **After this commit** Explicitly set the "type" attribute to be "button" so that toggling a block doesn't reload the user's website. opw-5369171