Tuesday, May 26, 2026
27 changes · saas-19.1
Resolved issues and error corrections
This update fixes a visual issue in the website builder where users couldn't change the color of images with shapes. The fix adds the necessary configuration to allow users to select colors for these images, enhancing the design flexibility within the builder. This ensures consistent and visually appealing website designs.
Original PR description
Steps to reproduce: 1. Go to the website and enter edit mode. 2. Drop `s_cta_mockups` or `s_closer_look` snippet. 3. Click on any image that has a shape. Issue: The color picker option is missing for images with shapes in these snippets. Reason: These snippet templates do not include the `shapeColors` dataset on the image elements. task-5880905 Forward-Port-Of: odoo/odoo#265465 Forward-Port-Of: odoo/odoo#246249
This update fixes an issue preventing employers from correctly managing multiple MPF account numbers under the same registration. The change allows for valid multi-account configurations by validating duplicates based on the combination of registration and employer account numbers, ensuring accurate payroll processing for Hong Kong businesses.
Original PR description
An employer can legitimately hold multiple employer account numbers under the same MPF registration number. The previous constraint rejected any two MPF schemes sharing the same registration number, blocking valid multi-account configurations. Fix the validation to only restrict the duplicate based on the combination of registration number and employer account number. task-6232561 Forward-Port-Of: odoo/enterprise#118109
This update resolves a visual bug where horizontal padding was lost in email banners after saving and reloading. The issue stemmed from how the system processed CSS styles, specifically when using variable references for padding. By replacing shorthand padding with explicit longhand properties, the banner now displays correctly across email templates.
Original PR description
Problem: In email templates, adding a banner/info block and saving then reloading causes the horizontal padding to be lost and the icon to become misaligned. Cause: During save, `convert_inline`…
Problem: In email templates, adding a banner/info block and saving then reloading causes the horizontal padding to be lost and the icon to become misaligned. Cause: During save, `convert_inline` processes the content via `_normalizeStyle`, which iterates over `CSSStyleDeclaration` using index-based iteration. This only yields longhand properties (e.g. `padding-left`, `padding-top`), never shorthands like `padding`. When the shorthand contains `var()` references (e.g. `padding: var(--y) var(--x)`), the browser cannot resolve the longhands and leaves them empty, so they are silently dropped during style extraction. Adding shorthand support to the iterator was not viable, as the rest of the pipeline expects longhand-only styles, and safely converting `padding: var(--y) var(--x)` to longhands is not possible without first resolving the variables. Solution: Replace the `padding` shorthand in the banner template with explicit longhand properties (`padding-top`, `padding-bottom`, `padding-left`, `padding-right`). Steps to reproduce: 1. Open an email template 2. Add a banner/info block 3. Save the template 4. Reload the page 5. Observe horizontal padding is lost and icon is misaligned task-6230530 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265756
This update resolves an issue where inserting a prompt banner using the `/prompt` command prevented users from undoing the action. The fix ensures that history commands function correctly even when a prompt banner is present, improving usability and preventing data inconsistencies.
Original PR description
Problem: After inserting a prompt banner, undo does not remove it. Cause: History commands were ignored when the selection was inside the prompt banner, preventing undo from handling banner insertion. Solution: Handle history commands even when the selection is inside the prompt banner. Steps to reproduce: - Insert a prompt banner using `/prompt` + Enter. - Press Ctrl + Z. - Observe that the banner is not removed. task-6230530 Forward-Port-Of: odoo/enterprise#117845
This update ensures that deleting a Cashdro payment line now correctly removes it from the system after cancellation. Previously, canceled payments remained in a 'retry' state. This change improves data accuracy and simplifies Cashdro payment management.
Original PR description
Before this commit, if you tried to cancel and delete a Cashdro payment line by clicking the x, the payment would be cancelled but the line would not be deleted, just left in the 'retry' state. After this commit, the payment line is deleted after being cancelled 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#265772
This update resolves an issue where the undo function wouldn't work correctly after inserting a table of contents. The fix prevents unnecessary history steps from being added, ensuring that users can reliably undo actions like inserting a table of contents without impacting other text editing features.
Original PR description
Problem: Undo does not work correctly after inserting a table of content when no paragraph follows it. Cause: `SelectionPlaceholderPlugin.onSelectionChange` clears attributes from the next base…
Problem: Undo does not work correctly after inserting a table of content when no paragraph follows it. Cause: `SelectionPlaceholderPlugin.onSelectionChange` clears attributes from the next base container and adds a history step whenever the selection changes. In the table of content case, this creates a loop: - Attributes are cleared and a history step is added. - Undo restores only the cleared attributes. - The selection falls back into the empty paragraph after the table of content. - `SelectionPlaceholderPlugin.onSelectionChange` runs again and adds another history step. As a result, undo never reaches the previous user action. Solution: Avoid adding a history step in `SelectionPlaceholderPlugin.onSelectionChange` when the current step is not modified by any user interaction. Steps to reproduce: - Write some text. - Insert a table of content using `/toc`. - Press Ctrl + Z. - Observe that nothing happens and the previously typed text cannot be undone. task-6216910 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264743
This update resolves an issue where the VIES validation process was incorrectly triggered during tax return creation, leading to errors. The fix ensures that VIES validation only occurs for tax returns associated with invoices that require a VAT number. This improves the accuracy of tax reporting and prevents unnecessary errors.
Original PR description
Vies validation should only occurs with moves having fiscal position with vat required Steps: - With base_vat, and european l10n like BE installed - Make a bill for a partner with no vat or invalid vat - Create a tax return - Open the return -> the 'check_partner_vies' fails opw-6200246 Forward-Port-Of: odoo/enterprise#117913
A recent test failed because the system wasn't correctly assigning user permissions for displaying production lot information. This change ensures that the necessary user group (`stock.group_production_lot`) is automatically included in test environments, preventing similar errors and improving test reliability. This primarily impacts the MRP module.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Run `test_reservation_method_for_outgoing` without demo data. Issue ----- > AssertionError: 'lot_id' was not found in the view Cause ----- The `lot_id` field is only rendered if the current user has the `stock.group_production_lot` group. This is only default when demo data is installed. Solution -------- Add the group to the current user in `setUpClass`. runbot-243588 Forward-Port-Of: odoo/odoo#266164 Forward-Port-Of: odoo/odoo#266052
This update resolves an issue where the 'Caption' button within the HTML editor was not properly localized for different languages. This ensures consistent and accurate translations across all Odoo SaaS environments, improving the user experience for international users.
Original PR description
Currently the "Caption" button in the HTML editor is not translatable. This commit fixes that. Forward-Port-Of: odoo/odoo#266002
This update ensures that conversations hidden until new messages are received accurately reflect the 'Hide Until New Message' feature. Previously, unread messages remained unread on hidden conversations. The fix updates the system to mark the user as read before applying the unpin date, maintaining consistent behavior and improving the user experience.
Original PR description
When hiding a Discuss conversation until new messages arrive, the conversation is unpinned but the user remains a member. Existing unread messages could therefore stay unread on a hidden conversation. Mark the current member as read before applying the unpin date when handling `/discuss/channel/pin` with `pinned: false`. This keeps the "Hide Until New Message" behavior consistent: only future messages should bring the conversation back.
This update resolves an issue where stock transfer records with missing package information incorrectly displayed 'No package' tags. The fix ensures accurate package tagging, particularly for recently upgraded databases that may lack historical package data. This improves the reliability of stock transfer reporting.
Original PR description
# The bug When accessing a done transfer with two lines where one line has a result package ID and the other does not, the computed field `has_lines_without_result_package` returns `True`. This field…
# The bug When accessing a done transfer with two lines where one line has a result package ID and the other does not, the computed field `has_lines_without_result_package` returns `True`. This field is used in the `stock_package_m2m` widget to append a `No package` tag when a move has this field set. https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock/models/stock_move.py#L266-L269 https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock/static/src/widgets/stock_package_m2m.js#L9-L24 This works fine when package history exists, as it accesses the `package_ids` field to generate the tags. However, for recently upgraded databases, no package history is available. When the `_compute_package_ids` method runs, it attempts to access data from an undefined history record, triggering a traceback. https://github.com/odoo/odoo/blob/eaa6c4352aec2be8519360c282f3f6504a2f263c/addons/stock/models/stock_move.py#L271-L278 # The fix The fix is straightfoward: in `_compute_package_ids`, if a move is in the `done` or `cancel` state and has no package history, we fallback and populate `package_ids` using the same logic applied to states other than `done` or `cancel`. This behavior specifically targets and fixes issue for databases recently upgraded to v19. task: 6070541 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265032
This update resolves an issue where Odoo branches were incorrectly inheriting VAT settings from the parent company, leading to manual VAT adjustments and potential key management problems. The change now defaults branches to no VAT, ensuring the parent company remains the key provider and simplifies operations. Key settings are also restricted to the base group system.
Original PR description
Branches copied the parent's VAT, which made them their own signing entity and forced users to clear the VAT so the branch would reuse the parent's keys. Default branches to no VAT so the parent remains the key provider. Setting a VAT on a branch still exposes the key settings for the rare case separate keys are needed. Also restrict the key settings to base.group_system task_id - 6087168 Forward-Port-Of: odoo/enterprise#117986
This update resolves an issue preventing translations from appearing in the HTML editor's move tooltip. The fix moves a key translation call outside of the template literal, allowing the exporter to correctly identify and translate the text. This ensures all users see translated tooltips.
Original PR description
Currently the move tooltip in the HTML editor is not translated because the exporter can't see `_t()` calls in tagged template literal. This commit fixes the issue by moving the call outside of the template literal. Forward-Port-Of: odoo/odoo#266186 Forward-Port-Of: odoo/odoo#265991
This update resolves an issue where the system incorrectly flagged deductions on receipts, such as those made by self-employed individuals. The change removes a validation error, allowing users to accurately record deductible expenses on receipts. A new test has been added to ensure consistent behavior.
Original PR description
As using deductions on receipts is a plausible accounting situation, such as in the case of self-employed person booking a ticket, there shouldn't be a validation error raised in this case. task-6037582 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254371
This update fixes a technical issue where Odoo experienced errors during Google Calendar synchronization when recurring events were modified with new attendees or start time changes. The fix prevents these errors from occurring, ensuring smoother and more reliable syncing of events between Odoo and Google Calendar. This improves the overall stability of the integration.
Original PR description
When a recurrence is updated in Google Calendar simultaneously with a new attendee and a changed start time, Odoo silently logs MissingError during the post-commit Google API callback Steps to reproduce: 1. Have a recurring event already synced between Odoo and Google Calendar 2. In Google Calendar, open the recurrence and edit "all events": - Add a new attendee - Change the start time 3. Trigger a Google Calendar sync 4. MissingError exceptions appear in server logs, one per event in the recurrence opw-6024835 Forward-Port-Of: odoo/odoo#265247
This pull request addresses minor inconsistencies in the Polish e-invoice (PL_EDI) export functionality. Specifically, it ensures that a single '1' value is required for certain flags and clarifies that the 'KursWaluty' (currency course) field is optional when it matches the standard PLN currency. This update aligns with regulatory requirements for e-invoice formatting.
Original PR description
Legal ref: https://ksef.podatki.gov.pl/media/4u1bmhx4/information-sheet-on-the-fa-3-logical-structure.pdf
- KursWaluty is optional and doesn't need to be included if it's the same as PLN.
- The following flags accept only "1" as a valid value.
See their type being etd:TWybor1:
http://crd.gov.pl/wzor/2025/06/25/13775/schemat.xsd
http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2020/07/06/eD/DefinicjeTypy/ElementarneTypyDanych_v7-0E.xsd
```xsd
<xsd:simpleType name="TWybor1">
<xsd:annotation>
<xsd:documentation>Pojedyncze pole wyboru</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:byte">
<xsd:enumeration value="1"/>
</xsd:restriction>
</xsd:simpleType>
```
Forward-Port-Of: odoo/odoo#262462This update optimizes how Odoo tracks subscription usage, leading to faster reporting and a smoother experience for users managing subscription data. The change addresses a performance bottleneck related to query counts, ensuring the system remains responsive even with a large number of subscriptions. This improves overall efficiency and reduces potential delays in key subscription-related processes.
Original PR description
runbot-163667 Forward-Port-Of: odoo/enterprise#117266
This update fixes an issue where combo product prices were incorrectly duplicated in sales orders when all component prices were zero. The fix ensures the combo price is accurately distributed across its items, preventing double-reporting and improving order accuracy. This improves the user experience and prevents potential pricing discrepancies.
Original PR description
**Problem:** When a combo product has a price but all of its combo components have a zero list price, the quotation shows the combo's price twice: once on the combo line itself and once on the last…
**Problem:** When a combo product has a price but all of its combo components have a zero list price, the quotation shows the combo's price twice: once on the combo line itself and once on the last combo item line. **Steps to reproduce:** 1. Create a combo product with a non-zero price and two or more combo groups whose component products have a zero list price. 2. Create a sale order, add the combo, pick one item per group. 3. Look at the quotation/order: the combo line total and the last combo-item line both show the full combo price. **Current behavior:** The full combo price ends up on the last combo item line; the other combo items show 0. The combo line then displays the same total via `_get_combo_totals`, so the same amount appears twice. **Expected behavior:** The combo's price is spread across its combo items so no single line duplicates the combo total. **Cause of the issue:** `_get_combo_item_display_price` prorates the combo price by each combo's base price. When every base price is 0, every prorated price is 0, so `combo_price_delta` equals the full combo price and is added to the last combo as a rounding correction, concentrating the whole price there instead of spreading it. **Fix:** Treat an all-zero base case as "no proration signal" and split the combo price evenly across combos before the delta adjustment runs. The delta correction then only handles rounding, as intended. opw-6217945 Forward-Port-Of: odoo/odoo#265010
This update fixes an issue where users could repeatedly click the 'release table' button while an order was being processed, potentially causing errors. The change now blocks the UI during table unbooking and redirects the user to the correct screen, ensuring a smoother and more reliable experience. This prevents data inconsistencies and improves usability.
Original PR description
When unbooking a table, the UI was not blocked, allowing the user to potentially spam the button or perform other actions while the order was being deleted. It also lacked a proper redirection. task-id: 5859460 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246741
This update resolves an issue where the 'Load a Template' feature incorrectly displayed template names as 'Unnamed'. The fix ensures that the correct template label is shown when selecting a template from the search view, improving the user experience. This change corrects a data display problem within the HR module.
Original PR description
Version: - saas-19.1 Steps to reproduce: - Open an employee form. - Click "Load a Template". - Use "Search More" and select a template. Issue: - The selected template label is displayed as "Unnamed" after selecting a template from the search view. Cause: - When selecting a record through "Search More", the returned value only contains the record `id` and does not include `display_name`. As a result, the many2one field cannot render the correct label and falls back to "Unnamed". Fix: - Perform an ORM read to fetch the missing `display_name` using the selected record id, then update `selectedTemplate` with the complete value so the correct template name is displayed. Task-6186635
A recent update to the l10n_be_coda module incorrectly commented out a test instead of updating it. This fix ensures that the test runs properly, verifying the functionality of the module. This resolves a minor issue that could have prevented future testing.
Original PR description
Test was commented instead of updated in this commit https://github.com/odoo/enterprise/commit/f1fafe0060c221e4a268c897af30455cc3d029ef task-none Forward-Port-Of: odoo/enterprise#118068 Forward-Port-Of: odoo/enterprise#117924
This update fixes a limitation in our stock delivery process. Previously, when shipping consumables internationally, users couldn't easily record the required HS code. This change now displays the HS code field only when tracking is enabled and the product is suitable for stock management, ensuring compliance with international shipping regulations.
Original PR description
Commit 20c3aa9b618b3 moved the fields `hs_code` and `country_of_origin` to a view block only visible if Lots/Serial setting is activated and if the product is tracked (is_storable=True). This is an issue as we may want to delivery a consumable abroad. An HS code may be required but there is no possibility to fill it. 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#266371
This update resolves an issue where generating a lot in a manufacturing order would reset the 'quantity to produce' field to zero. The fix ensures the quantity is saved before lot generation, preventing this unexpected reset and maintaining accurate production tracking. This improves the reliability of the manufacturing process.
Original PR description
Step to reproduce: - Create a MO with a lot tracked product (enable it in settings) and a work center - Put the quantity to produce to more than 1 - Confirm the MO - Use the smart button to go to the Shop floor - Click on the three dots and click on "Register production / serial" - Put the quantity to produce to 1 and click on "Generate lot" - The quantity to produce is updated to 0, which is not correct, it should stay to 1 Cause: The quantity to produce was not saved before generating the lot, so after the reload triggered by the generation of the lot, the quantity to produce was reset to the last saved value, which is 0. Task-6158833 Forward-Port-Of: odoo/enterprise#117067
This update fixes an issue where the address autocomplete feature wasn't working correctly for certain countries that use an extended address format. The fix ensures the system correctly identifies and utilizes the appropriate city information, improving address completion accuracy.
Original PR description
Some countries uses the extended version of address, which in particular uses a model to store city information instead of a simple char. In that case, the autocomplete does not work properly as it will try to set that char "city" instead of the Many2one "city_id". task-4588240 Forward-Port-Of: odoo/odoo#265060
This update resolves an issue where report totals were incorrectly duplicated in headers when comparison mode was enabled. The change ensures that values are only displayed in the line item when the section is expanded, improving report clarity and accuracy for users.
Original PR description
Right now when you expland a section in comparison mode like in the Balance Sheet and P&L, if "Add total below sections" is enabled in the report then it shows in both the header and totals sections. This commit clears up that by only showing the value in the line when it's unexpanded, but once it is expanded it is hidden. task-6190986 Forward-Port-Of: odoo/enterprise#116479
This update corrects an issue where child contacts linked to a company were incorrectly flagged as companies themselves. The fix prevents inherited data from triggering a false 'company' status, ensuring accurate contact categorization. This resolves a reporting discrepancy impacting company data.
Original PR description
### Issue: When creating a company with CUIT 30999003156, any child contact added under it is incorrectly considered as a company ### Cause: In `l10n_ar`, `_compute_is_company()` relies on: `l10n_ar_afip_code` and the prefix of `l10n_ar_vat` However, these fields are propagated to child contacts As a result, child contacts inherit the same values as the parent company and are incorrectly computed with `is_company = True` ### Note: This same fix also fix the issue on `l10n_latam_base` and `l10n_co` ### Steps to reproduce: - Install `l10n_ar` and switch to an AR Company - Create a Partner in Contacts (Name: Test Company, Country: Argentina, Identification Number: CUIT 30999003156) - Add a Contact (Name: Test Contact) - Go in Contacts and add a Filter for Name: Test ### Before the fix: The Contacts are: Test Company and Test Contact ### After the fix: The Contacts are: Test Company and Test Company, Test Contact opw-6140921
This update fixes a potential issue during Odoo deployments by logging missing module dependencies. When a module fails to load, a warning is now displayed, making it easier to identify and resolve deployment problems. This improves stability and simplifies the process of ensuring all necessary modules are present.
Original PR description
Log the issue as a warning, and add the missing module dependencies. This should ease managing such deployment issue. Forward-Port-Of: odoo/odoo#266030