Monday, September 22, 2025
32 changes · 19.0
Enhancements to existing features
Payslips that have reached the validated stage now display as "Done" instead of "Validated". This aligns the wording with pay runs, reducing confusion for payroll users reviewing payroll progress.
Original PR description
If the payslip status is "validated", the display status for the payslip is "Validated". The display has been changed to "Done" to match with the payrun's status.
Resolved issues and error corrections
Creating a field service task from a template now correctly keeps the template’s “Under Warranty” setting. This prevents service teams from losing warranty information when using task templates, helping avoid incorrect billing or follow-up handling.
Original PR description
**Steps to reproduce:**
- Install industry_fsm_sale
- Create a task template with "Under Warranty" enabled
- Create a task from that template
**Issue:**
The created task does not carry over the "Under Warranty" value from the task template.
**Cause:**
The `under_warranty` field has `copy=False`, so the value is not transferred.
**Fix:**
Updated the copy method to check for `copy_from_template` in the context. If the task template has "Under Warranty" enabled, the field is explicitly set on the new task.
task: 5083386
Forward-Port-Of: odoo/enterprise#95112
Forward-Port-Of: odoo/enterprise#94924Features or functions removed from Odoo
This change removes a temporary HR screen adjustment that is no longer needed because the alignment issue has been fixed properly elsewhere. Users should see the same corrected field layout, with less temporary customization to maintain.
Original PR description
This PR removes the hotfix for the alignment issue of the m2o field as it is fixed more properly by the PR https://github.com/odoo/odoo/pull/226214. Task-5078736
Documentation and clarification updates
ALUBENA TERRA has added its signed Contributor License Agreement documentation. This is a legal and administrative update that helps confirm contributions can be accepted under Odoo's contribution rules.
Original PR description
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
Spanish translations for Peruvian tariff fraction entries and withholding codes were corrected so users see clearer, consistent labels. This reduces confusion when working with Peruvian electronic invoicing and stock localization data.
Original PR description
## Issue: The latest `tariff_fraction` entries were not properly translated into Spanish There were also inconsistencies in the translation of some `withhold codes` ## Cause: The `.po` and `.pot` files were not correctly populated In addition, the translation of "Others" in `l10n_pe_withhold_code` conflicted with `l10n_pe_edi_reason_for_transfer__13`, because the `msgid` is the same but not the `msgstr` should be different opw-4741731 Forward-Port-Of: odoo/enterprise#95019 Forward-Port-Of: odoo/enterprise#92758
Event-related emails now use embedded image icons instead of website-only icon styling. This helps recipients see the intended visual elements consistently across email clients and external mail servers.
Original PR description
Font awesome classes must no be inserted into email as external servers do not use them so icons are not displayed. This commit replaces i tags with font awesome classes in mail by images. Task-5082165 Forward-Port-Of: odoo/odoo#226331
Website sitemaps now avoid listing the same page more than once when website controllers are customized or extended. This helps keep sitemap files cleaner for search engines without changing which pages are included.
Original PR description
When extending controllers (e.g. `WebsiteSale.shop`), sitemap entries were duplicated because deduplication relied on the endpoint function object. Overridden methods result in different function objects but identical sitemap URLs, leading to duplicates. This commit fixes the issue by deduplicating on the generated sitemap location (`loc['loc']`) instead of the function object, ensuring unique URLs in the sitemap even when controllers are extended. Fixes #224193 Forward-Port-Of: odoo/odoo#226810 Forward-Port-Of: odoo/odoo#224406
This fix corrects Philippine localization tax setup so VAT-exempt fiscal positions and taxes are classified properly. It helps businesses avoid incorrect tax labels or country restrictions when configuring Filipino company accounting.
Original PR description
### Steps to reproduce: - Install "l10n_ph" and switch to a Filipino company - Check the tax "0% Exempt", it has both "VAT Exempt" and "VAT Registered" ### Cause: The CSV was badly generated because of the fiscal position tax mapping before 18.3. ### Solution: Fix the CSV. Also delete the country for the fiscal position "VAT Exempt". This is a [recommendation from AYH on discord](https://discord.com/channels/678381219515465750/687337689988726949/1410930795329097880). opw-5044305 Forward-Port-Of: odoo/odoo#227261
The product comparison page layout has been adjusted so desktop visitors no longer see unnecessary horizontal scrollbars. This keeps the comparison table aligned with the page header and footer, improving the browsing experience without changing functionality.
Original PR description
This PR fixes an issue about the `website_sale_comparison` page showing an unwanted scrollbar on desktop. Since each `.o_wsale_compare_table_column` element comes with a padding on the left and right side, it was creating a misalignment between the page content and the page header and footer. With this commit, we fix the issue by assigning a new `width` to the container, based on those padding values. task-5076730 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Automation Rules trigger dropdown now uses the correct background color when dark mode is enabled. This fixes a visual inconsistency so users get a cleaner, more consistent experience while creating automation rules.
Original PR description
Steps: - Install `base_automation` - Enable dark mode - Open Automation rules - Create a new rule - open trigger dropdown - the dropdown background is still in light mode This commit apply $dropdown-bg on `o_field_base_automation_trigger_selection` opw-5064357 Forward-Port-Of: odoo/odoo#226666 Forward-Port-Of: odoo/odoo#226116
This fixes an automated test so it works correctly when demo data is present. It helps keep quality checks reliable and prevents false failures during development and release validation.
This update corrects a typo in internal documentation for a core Odoo operation. It does not change how the system works, but helps keep developer-facing guidance accurate and easier to understand.
Original PR description
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 fix updates an automated barcode inventory test so it waits for the correct step before continuing. It helps reduce false build failures and improves confidence in the stock barcode workflow validation.
Original PR description
The `test_put_packs_in_existing_pack` tour was using an erroneous trigger causing race condition. This commit replaces this trigger by another one to be sure previous step is completed before going forward. Runbot build error: [232638](https://runbot.odoo.com/odoo/runbot.build.error/232638)
A timing issue in an accounting guided test was fixed so product selection is properly recognized before the next check runs. This improves reliability of automated validation, especially when localization features take slightly longer to load.
Original PR description
Issue: The tour was failing because the product was not being selected in time. As a result, the subsequent step that checks whether the product is selected was consistently failing. Cause: In the Romanian localization, the `FetchInvoicesCogMenu` component uses an `isDisplayed` argument with async/await. This introduces a delay before the component is fully rendered. Meanwhile, the tour step was executing too early, before the product was actually selected. Fix: Increase the wait time to 1000ms to ensure the product is properly selected before the following step is executed.
This fixes an issue where subscription contracts with no amount due could still appear as needing an invoice. It helps keep billing queues cleaner and prevents staff from spending time reviewing contracts that should not generate invoices.
Original PR description
Forward-Port-Of: odoo/enterprise#94626
This update makes Malaysia electronic invoicing tests more consistent by using fixed tax settings in additional scenarios. It reduces the chance of test failures caused by unrelated default tax or product tax changes, helping maintain confidence in future updates.
Original PR description
follow-up on https://github.com/odoo/odoo/pull/227111 The fixes helped improve the stability of the tests, but a few using different ways of setting up their invoices (or SO) went through without the change. This adds the fixed tax to these as well, so that they should no longer fail if a side effect changes the default tax/product tax. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the website builder by delaying tooltip checks until they are actually needed. This reduces unnecessary work during page editing and should make builder rows render more quickly, especially on complex pages.
Original PR description
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#223945
The salary offer screen now uses theme-aware background colors instead of a fixed color. This improves readability and visual consistency for users working in dark mode.
Original PR description
With this commit the background-color is not hardcoded anymore; the background color is calculated with the bootstrap variable text-bg-secondary task-5089515
An unnecessary background log message was removed from the spreadsheet chart configuration area. This keeps browser tools cleaner for support and development without changing how users work with spreadsheets.
Original PR description
Task: 0
The account merge wizard now uses the full available space to show its list view. This fixes a display issue where the list became progressively narrower during repeated rendering, making the wizard harder to use.
Original PR description
Use the full width of the wizard to display the list view. It was even worse because the width of the view was being reduced in multiple renders with a few frames per second.
The website shop checkout test was made more reliable by waiting for page elements before continuing. This helps reduce false test failures and keeps quality checks aligned with the current "Add to Cart" button wording.
Original PR description
The add_to_cart_snippet_tour was unstable due to race conditions. some steps executed before their target elements were actually present, causing failures in subsequent steps. This commit ensures the tour runs reliably by adding explicit wait conditions between the affected steps, so the elements are guaranteed to exist before moving on. In addition, the tour is updated to reflect the recent change where the button label was renamed from "Continue Shopping" to "Add to Cart" [1]. [1] https://github.com/odoo/odoo/commit/786c6c00701bcc30c1f2aa04d7fd9ee7bd4c511b#diff-5ac64dbfc12558f048e995a7d75f91d915161063741ddf36281062b273598a51 runbot-231474
This fixes a crash in the website editor when resizing the title area of a newly added Floating Cards item. Users can now add and adjust these cards without encountering an error, improving reliability while editing website pages.
Original PR description
*: html_builder In the "Floating Cards" snippet, after adding a new card, when trying to resize its title column vertically, a traceback appears. It happens because this grid item does not have the `g-col-*` class, which is needed for the resize in grid mode to work. This commit adds this class. Steps to reproduce: - Drop a "Floating Cards" snippet. - Add a card. - Click on the new card title and resize the column vertically. => Traceback The issue was previously addressed in [1], but a refactor of the Floating Cards snippet in master introduced a duplicate template, and the fix was applied to the incorrect one. [1]: https://github.com/odoo/odoo/commit/78f6e70e0777f5b063524ead73ddaae93ba55f22 Forward-Port-Of: odoo/odoo#226260
Users can now open the debug Data view on records that include field properties without encountering an error. This helps administrators and support teams inspect record data reliably, including custom property fields.
Original PR description
Example Steps: - Install `crm` - Add a random field properties in a random form view - Enable debug mode - Open debug menu - Select Data - Traceback ```py raise ValueError(f"Invalid field…
Example Steps:
- Install `crm`
- Add a random field properties in a random form view
- Enable debug mode
- Open debug menu
- Select Data
- Traceback
```py
raise ValueError(f"Invalid field {field_name!r} on model {self._name!r}")
ValueError: Invalid field 'properties.xyz' on model 'x.y'
```
There are two causes for this problem.
First, we use orm.read to retrieve data from records, which does not directly handle sub-field properties. We only need to use `definition_property` (which contains the overall schema of the JSON field).
Second, when displaying the data, we use JSON.stringify with `replacer`:
```js
get content() {
const record = this.props.record;
return JSON.stringify(record, Object.keys(record).sort(), 2);
}
```
In this case, replace contains all the keys present in record, sorted. The problem is that the properties fields are themselves objects that contain the keys: `name`, `string`, `type`, `default`, `value`.
And giving an array to replace in `JSON.stringify` will filter the keys and keep only those that are whitelisted in it.
```js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
const foo = {
foundation: “Mozilla”,
model: “box”,
week: 45,
transport: “car”,
month: 7,
};
JSON.stringify(foo, [“week”, “month”]);
// ‘{“week”:45,“month”:7}’, only keep ‘week’ and “month” properties
```
This will ignore the keys of the properties fields.
The fix is therefore to sort the object before stringifying it, without using replace.
Thanks to these two fixes, the data is displayed as expected, regardless of whether there are field properties or not.
opw-5017425
Forward-Port-Of: odoo/odoo#225572
Forward-Port-Of: odoo/odoo#224084The website editor now correctly hides the image width setting when an image is placed inside a card. This restores the intended editing experience and helps prevent layout options that do not apply in that context.
Original PR description
When converting the options to Owl, the behavior from commit [1], which hid the image width option for images inside cards, was lost. We are reintroducing it here. [1]: https://github.com/odoo/odoo/commit/4dcd1f9607ecc1ea932e02128a3e6f01d652cba6 Forward-Port-Of: odoo/odoo#227444
The project budget demo data was updated to remove sample purchase information that no longer applies. This prevents demo environments from relying on an app connection that has been removed, keeping setup cleaner and more reliable.
Original PR description
Since 5cf91390dd7c320c3348d509d3f33a499e760259, `account_budget` doesn't depend on `purchase` anymore. Remove `purchase` related demo data.
This update ensures invoices for foreign customers in Saudi e-invoicing use an accepted alphanumeric Other Buyer ID value. It helps avoid ZATCA acceptance warnings and supports smoother invoice validation for affected businesses.
Original PR description
When an invoice is being issued to a Foreign Customer, the Other Buyer ID (Other Buyer ID (BT-46) <cac:AccountingCustomerParty / cac:Party / cac:PartyIdentification / cbc:ID>) should be OTH and filled accordingly to avoid an acceptance warning from ZATCA. According to ZATCA, the value needs to be in alphanumeric format, even if the value does not follow the specific country's VAT format Task-id: 5075005 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#227511 Forward-Port-Of: odoo/odoo#226593
This fixes an issue where the Project screen could fail when two independent modules used the same ordering value for stat buttons. The view now remains usable even when those values are duplicated, reducing disruption for users working with customized project setups.
Original PR description
Description of the issue/feature this PR addresses: If a sequence in function _get_stat_buttons in project.project is repeated, the view view fail because we are using the sequence as key Current behavior before PR: If we repeat a sequence in two independent modules, the view fails. Desired behavior after PR is merged: The view works as expected --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227382
This fixes an error that could occur when calculating external taxes for point-of-sale orders using AvaTax. The change removes an outdated internal reference so affected orders can process tax data correctly.
Original PR description
Since [this PR](https://github.com/odoo/enterprise/pull/82623), defination of `_get_lines_eligible_for_external_taxes` was removed but a reference to it still remained, causing the following error when calling the `_get_line_data_for_external_taxes` method:. `AttributeError: 'pos.order' object has no attribute '_get_lines_eligible_for_external_taxes'` Fix: Removed reference to `_get_lines_eligible_for_external_taxes` from `_get_line_data_for_external_taxes` at [1]. [1]- https://github.com/odoo/enterprise/blob/9a1544d19c1f5f3546c04022a11601df43199d10/pos_avatax/models/pos_order.py#L15-L18 sentry-6843827499 Forward-Port-Of: odoo/enterprise#93490
Mobile shoppers now see clearer visual feedback when browsing secondary product images. This removes confusing duplicate dot indicators so the image area feels intentional and less like a broken carousel.
Original PR description
This pr fixes a confusing behavior when interacting with products' secondary images on mobile. The previous implementation showcased two dots for each image (4 tot.), one of which "active". The…
This pr fixes a confusing behavior when interacting with products' secondary images on mobile. The previous implementation showcased two dots for each image (4 tot.), one of which "active". The attempt was of emulating carousel indicators. Unfortunately, since dots were absolute positioned, the design failed to correctly communicate the user the actual behavior, leading to confusion and to the impression that the element itself was affected by a bug. This commit simply toggle a class, triggering the right design when necessary. Note that this implementation doesn't need to be scoped for specific resolutions, since cards are scroll-able only on mobile. Debouching is not required neither since the events are fired when the user intentionally interact with the element only. task-5082527 --- Before https://github.com/user-attachments/assets/8cbe6040-2e5d-48d6-951a-65f8fe0aae6c ---- After https://github.com/user-attachments/assets/9f3671ec-77eb-478b-840f-676f91bf50e2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Restaurant POS orders no longer appear as needing preparation when no preparation printer or display category is configured. This prevents unnecessary prompts during payment and keeps the ordering flow clear for staff.
Original PR description
Steps to reproduce: - Open a pos restaurant config that has no prep printer/display. - Add an orderline. - The order button appear and if you try to pay the popup ask for send to preparation is shown. Issue: If there is no preparationCategories for a config getOrderChanges consider that all the available categories are the preparationCategories. Fix: If there is no preparationCategories, set the orderline uiState hasChange to false. Note: When no preparation printer category is defined, no categories is to be return by default. For the preparation display, if no preparation categories is selected preparationCategories will return all the available categories. Task-5016231 Forward-Port-Of: odoo/enterprise#92541
This fixes cases where selecting text inside editor buttons or adjacent links could accidentally include too much content. Users editing website or HTML content can now double- or triple-click more predictably without replacing an entire button or selecting text from the next link.
Original PR description
Commit 1: Reproduction: 1. triple click in a button and input something 2. the whole button is replaced Before this commit: On triple click we select the whole block by default After this commit: For…
Commit 1: Reproduction: 1. triple click in a button and input something 2. the whole button is replaced Before this commit: On triple click we select the whole block by default After this commit: For buttons, when we triple click, we select the content of the button node Commit 2: [FIX] html_editor: limit word selecting of double click inside link Before this commit: when two links or buttons are next to each other without a space, double clicking the last word of the first link will spread the selection over the second link's first word. This is the default of browser's behavior. Reproduction: 1. create 2 links with different urls, one with label `test one`, second with `test two` 2. double click the `one` of the first link, the selection will spread to the second link. so `one` and `test` are both selected After this commit: We seperate the double click selection correction to the link plugin. Because now we have the selection properly set inside the link without including the feff characters, the previous fix of the selection isn't needed anymore. task-4897848 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219278
A Dutch balance sheet label had the wrong language code, causing it to be treated as Dutch instead of German. This fix assigns the correct German language code so the report displays the intended translated term consistently.
Original PR description
One term in the Dutch balance sheet was having the `nl` language code instead of `de`. This commit corrects that. Forward-Port-Of: odoo/enterprise#95118