Friday, February 27, 2026
44 changes · saas-19.2
New functionality added to Odoo
This update adds support for obtaining real-time exchange rates from the Central Bank of Cuba (BCC). This enhancement allows Odoo to accurately reflect the current value of Cuban currency for businesses operating in or with transactions involving Cuba, improving financial reporting and operational accuracy.
Original PR description
This commit introduces a new exchange rate provider for the Central Bank of Cuba (BCC). - Implement new exchange rate provider for Central Bank of Cuba (BCC) - Retrieve rates from official BCC source - Reference: https://www.bc.gob.cu/tasas-de-cambio (official published data and documentation) - Parse and normalize published currency values - Support multiple rate types (official, public, special)" Forward-Port-Of: odoo/enterprise#108789 Forward-Port-Of: odoo/enterprise#108367
Enhancements to existing features
This update clarifies the process for setting an out-of-office period by introducing separate start and end date fields. Previously, users could unintentionally create indefinite out-of-office periods due to a confusing workflow. This change simplifies the setup and reduces the risk of errors.
Original PR description
In the user preference panel, the end date of the out-of-office period is not displayed by default. To define an end date, users must first click the field and then select the "Range" option in the calendar picker. Because these steps are not intuitive, users may enter only a start date and omit the end date, inadvertently creating an unlimited out-of-office period. To address this issue, we will introduce two separate fields: one for the start date and one for the end date. The end date field will appear only after a start date has been selected. This approach clarifies the workflow, reduces the risk of incomplete entries, and keeps the form view concise. Task-5435466 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248651
Resolved issues and error corrections
This update fixes the XML templates used for Dutch SBR and ICP reports to align with the latest 2026 version of the Dutch taxonomy. This ensures accurate reporting for our Dutch clients, complying with local tax regulations and improving data consistency.
Original PR description
Fix the xml SBR and SBR ICP file template for the 2026 version of dutch taxonomy Documentation: https://www.sbr-nl.nl/werken-met-sbr/taxonomie/documentatie-nederlandse-taxonomie task-5974129
Features or functions removed from Odoo
This update removes a redundant model, `res.city`, from the `l10n_gt` localization module. This model was previously included but wasn't a necessary dependency for the GT version of Odoo. This change ensures a cleaner and more streamlined codebase.
Original PR description
This reverts commit 728465e0a4a9b651dd6e1059bd4788b0c13e2a52. The model `res.city` is defined in `base_address_extended` which isn't in `l10n_gt` dependencies. runbot-241066 Forward-Port-Of: odoo/odoo#250606
Documentation and clarification updates
This pull request updates the signature for Mega-ramo, a key partner within our Odoo ecosystem. This change ensures accurate identification and tracking of transactions related to this partner. It's a standard update to maintain data integrity and compliance.
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#250493
This update adjusts the website generator version to 2.4 to ensure compatibility with recent changes in the 19.2 release. This ensures the website continues to function correctly and reliably with the latest Odoo Enterprise features. It's a standard maintenance update.
Original PR description
Since some snippets changed in 19.2, we up the version to support them
This update resolves a build error in the Odoo Enterprise payroll accounting module. The previous test incorrectly counted employees triggering warnings, leading to inaccurate results. The fix now accurately checks for the presence of invalid employee IDs within the warning data, ensuring correct payroll calculations.
Original PR description
> To be FW'ed till `saas~19.1` only. issue: - the test written in commit 0653104 checks the employees' count in warning from `warning_data` dictionary - which will not work in case of multiple employees fulfilling that warning as the warning searches models' data, instead of just test data. fix: - instead of relying on `warning_data['count']` for invalid employee, checked how many times does the invalid employee's ID appear in the `warning_data`. runbot-240910 task-5958862 Forward-Port-Of: odoo/enterprise#108242
This update ensures that opening notes are consistently saved in the Point of Sale session, regardless of whether the cash payment method is enabled. Previously, notes weren't stored when the cash method wasn't configured, leading to potential data loss. This change improves the reliability of POS note-taking functionality.
Original PR description
Before this commit: -------------- - When the cash method was not available for config, opening notes values were not being stored in session data. After this commit: -------------- - Opening notes values will be stored in session data even when the cash method is not available for config. task-5474822 Forward-Port-Of: odoo/odoo#249953 Forward-Port-Of: odoo/odoo#243956
This update resolves an issue where products weren't automatically marked as 'published' on the website when assigned to a category. The fix ensures that the product's website visibility is correctly updated during the category assignment process, preventing products from being hidden.
Original PR description
Error: AssertionError: False is not true self.assertTrue(product.website_published) Cause: Commit https://github.com/odoo/odoo/commit/ca198cfc7c41a8c15b2734518016007aa1c16457 relies on _onchange_public_categ_ids to set website_published=True when a category is assigned. Two issues: 1. website_published was not in the dialog form view, so its onchange value was never tracked or sent to the server on save. 2. The tour clicks Save before the onchange response is received, so the product is saved without website_published=True. Fix: - Add website_published as an invisible field in the dialog form view so its value is tracked and sent on save. - Wait for the category badge to appear before submitting, ensuring the onchange has completed before save. runbot-237976 Forward-Port-Of: odoo/odoo#250596 Forward-Port-Of: odoo/odoo#249027
This update fixes an issue where input fields weren't resizing correctly in Safari and Firefox, leading to overflow. The fix dynamically calculates input widths, eliminating the need for browser-specific workarounds and ensuring consistent sizing across all supported browsers. This improves the user experience and prevents visual errors.
Original PR description
Before this PR, `autoresizeInput` used a fixed buffer of `5px` to compensate for input borders. This caused incorrect sizing when inputs had thicker borders, leading to overflow issues. Safari 16 and…
Before this PR, `autoresizeInput` used a fixed buffer of `5px` to compensate for input borders. This caused incorrect sizing when inputs had thicker borders, leading to overflow issues. Safari 16 and earlier versions did not include padding and border in `scrollWidth`. To work around this, browser detection via regex was used to add a hardcoded extra value. A similar issue appeared in Firefox 145, where scrollWidth also excluded padding and border, causing inputs to overflow again. After this PR, The buffer is no longer hardcoded. The border width is now calculated dynamically and applied correctly to the final width. Browser sniffing has been removed entirely. Instead, the logic detects at runtime whether scrollWidth includes padding; if not, the missing padding is added to the computed width. This makes the behavior consistent across browsers and prevents overflow without relying on user agent checks. task-[5412025](https://www.odoo.com/odoo/project/1519/tasks/5412025) Forward-Port-Of: odoo/odoo#250723 Forward-Port-Of: odoo/odoo#241315
This update resolves a potential data corruption issue that occurred when OCR processed CVs. Specifically, incorrect contact information was being written to applicant records and linked partners, particularly when CVs were forwarded or linked to existing company contacts. The fix adds safeguards to prevent this overwriting and maintain accurate data.
Original PR description
When OCR processes a CV, it writes extracted name/email/phone onto the applicant, which then propagates to the linked res.partner via the email_from inverse. This causes data corruption in two cases: - The CV was forwarded: the OCR email belongs to the candidate but email_from is the forwarder's address. Writing OCR data would overwrite the forwarder's partner with the candidate's details. - The existing partner is a company contact (parent_id set) or is linked to a user account (user_ids set). Writing OCR data would overwrite user/business partner with the candidate's details. Both guards are applied and added tests that check the flows. task-5949635 Forward-Port-Of: odoo/enterprise#108128
This update prevents archived subtasks from being duplicated when a parent task is copied. Previously, duplicated tasks incorrectly included inactive subtasks, leading to confusion and potential data inconsistencies. This change ensures that duplicated tasks only contain active subtasks, improving data accuracy and usability.
Original PR description
Currently, when duplicating a task that contains `archived subtasks`, the archived subtasks are also duplicated. **Steps to reproduce:** - Install the `project` module. - Open any `project` and create a task with a subtask. - `Archive` the subtask. - `Duplicate` the parent task. **Observation:** The duplicated task contains a copy of the archived subtask, even though it is inactive. **Root Cause:** At [1], subtasks are duplicated without checking their active status. As a result, archived (`active=False`) subtasks are also copied during duplication. **Fix:** This commit ensures that archived subtasks are not copied when duplicating a task. [1]: https://github.com/odoo/odoo/blob/531b887aec92c2fbf57495992be9fbc32d9ea20e/addons/project/models/project_task.py#L822 opw-5926009 Forward-Port-Of: odoo/odoo#250901 Forward-Port-Of: odoo/odoo#248167
This update enhances how Odoo recognizes structured bank transactions from Belgium (BE). Previously, transactions without a specific prefix (+ or *) weren't correctly identified. Now, Odoo can properly process transactions formatted as xxx/xxxx/xxxxx, ensuring accurate financial record keeping.
Original PR description
The aim of this commit is handling the case where the Belgian VCS-OGM is not starting with + or *. Before this commit, transactions without one of these 2 characters wasn't marked as structured. With this commit, we do handle this format as well: xxx/xxxx/xxxxx task-5403947 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250665
This update ensures that all chat windows display a subtitle for the agent, regardless of whether the agent's description is set. Previously, the subtitle was blank, which has now been corrected by adding a default message. This improves the user experience and consistency of the chat interface.
Original PR description
The chat subtitle is false, if the agent description is not set. This commit fixes the issues by adding a default message if subtitle is missing. Task-5916227 Forward-Port-Of: odoo/enterprise#106949
This update fixes an issue where payment advice reports weren't properly handling employees with multiple bank accounts. The team verified all bank accounts and BIC codes, ensuring that reports are now generated accurately, even when using secondary bank accounts with invalid information. This prevents reporting errors and ensures accurate financial data.
Original PR description
steps to reproduce: - install `l10n_in_hr_payroll` - create an employee, with multiple bank accounts - add invalid BIC in one of the bank accounts with isn't primary - notice that you will still be able create the advice report with invalid data. issue: - after the support of multiple bank accounts, the payment advice methods were not adapted with it. fix: - checked all the banks and their BIC. task-5890497 Forward-Port-Of: odoo/enterprise#107283
This update resolves an issue where action buttons on the work entry Gantt view would cause errors when no employees were assigned to selected entries. The fix now intelligently hides these buttons when there are no employees, preventing unexpected errors and improving the user experience.
Original PR description
On gantt view of work entries when user multi-selects entries, action buttons appears Ex. Set, Reset etc. When their are no employees in the column, on clicking these action buttons gives traceback. Ex:- `TypeError: Cannot read properties of undefined (reading '0')` or `KeyError: 'employee_id'` This fix will hide these buttons when there are no employees present. task-[5445718](https://www.odoo.com/odoo/project/1251/tasks/5445718) Forward-Port-Of: odoo/enterprise#108995 Forward-Port-Of: odoo/enterprise#105957
This update fixes an issue where Point of Sale orders would incorrectly display the wrong date if the PoS device had an outdated time setting. Now, orders are always created with the correct date as determined by the server, ensuring accurate order records and preventing potential discrepancies.
Original PR description
Before this commit, if the PoS device had a wrong date, the orders created while being online would have a wrong date_order. This commit prioritizes the server date for the order that is currently being processed when the PoS is online. opw-5884498 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248897
This update resolves a technical problem that was preventing users from correctly searching for products within the product catalog. The fix addressed a race condition and a broken configuration in the search panel, ensuring accurate and reliable search results. This improves the user experience and prevents potential errors.
Original PR description
- `PurchaseStockProductCatalogSearchModel._fetchSections()` was calling `super._fetchSections()` without `await`, causing `sectionsPromise` to resolve immediately before sections finished loading.…
- `PurchaseStockProductCatalogSearchModel._fetchSections()` was calling `super._fetchSections()` without `await`, causing `sectionsPromise` to resolve immediately before sections finished loading. This made `expandDefaultValue()`, `expandValues()`, and `updateActiveValues()` run with empty sections in `onWillStart`, leaving `state.expanded` and `state.active` uninitialized and causing a crash when the template accessed `state.expanded[section.id][valueId]`.
```
UncaughtPromiseError > OwlError
Uncaught Promise > An error occured in the owl lifecycle (see this Error's "cause" property)
Occured on 127.0.0.19:8069 on 2026-02-24 10:16:04 GMT
OwlError: An error occured in the owl lifecycle (see this Error's "cause" property)
Error: An error occured in the owl lifecycle (see this Error's "cause" property)
at handleError (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:762:101)
at App.handleError (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:1420:29)
at Fiber._render (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:787:19)
at Fiber.render (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:785:6)
at ComponentNode.initiateRender (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:855:47)
Caused by: TypeError: Cannot read properties of undefined (reading '1')
at PurchaseSuggestCatalogSearchPanel.template (eval at compile (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:1375:421), <anonymous>:25:69)
at App.callTemplate (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:1011:129)
at PurchaseSuggestCatalogSearchPanel.template (eval at compile (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:1375:421), <anonymous>:85:15)
at PurchaseSuggestCatalogSearchPanel.template (eval at compile (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:1375:421), <anonymous>:138:34)
at PurchaseSuggestCatalogSearchPanel.template (eval at compile (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:1375:421), <anonymous>:19:29)
at Fiber._render (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:786:96)
at Fiber.render (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:785:6)
at ComponentNode.initiateRender (http://127.0.0.19:8069/web/assets/9723d8e/web.assets_web.min.js:855:47)
```
- `purchase_stock.ProductCatalogSearchPanelContent` had a broken xpath: a `<t t-if>` element inside `<xpath position="attributes">`. OWL's `modifyAttributes()` silently skips non-`<attribute>` children, so the conditional class was never applied. Replaced with a proper `t-att-class` ternary binding.
Forward-Port-Of: odoo/odoo#250810This update corrects a problem in how Odoo handles extended sick leave in Belgium. Previously, different work entry types for consecutive sick days caused matching issues. The fix ensures accurate tracking of sick leave durations by specifically recognizing different types of sick leave, resolving a previous issue in the Hong Kong localization.
Original PR description
In Belgium, when more than a month of consecutive sick time of is taken, every day over the month is of a different type of work entry (sick time of without pay). This means that work entries relative to the same leave have different work entry types which was causing problems when checking the matching of the types. To fix this, a previous PR (https://github.com/odoo/odoo/pull/237829) made it so that if the internal_leaves computation returned empty, every leave was considered. Because of this some problems in the HK localization arose so we go back to the original code (see related Community PR) and we move the BE specific changes to the BE localization module. Here we override the check function to allow for the specific case described above, where LEAVE110 is the code for sick time off and LEAVE214 is the code for sick time of without pay. Task: 5472538 Community PR: https://github.com/odoo/odoo/pull/246116 Forward-Port-Of: odoo/enterprise#105776
This update corrects a minor issue in the Attendance module where duplicate field names were appearing in the attendance list view. The changes ensure that the 'in_location' and 'out_location' fields display correctly, preventing confusion for users. This resolves a technical detail that didn't impact core functionality.
Original PR description
Steps to reproduce: -------------------------------------- 1. Install the Attendance module 2. Go to the attendance list view 3. Click on the optional fields tray Observation: -------------------------------------- Duplicate field name Longitude (In) Issue: -------------------------------------- For the `in_location` field, a duplicate string was added in the list view Solution: -------------------------------------- Changed string to `Location (In)` for `in_location` field and changed string to `Location (Out)` for `out_location` field Before: <img width="348" height="511" alt="image" src="https://github.com/user-attachments/assets/109ff380-df4f-4dc6-ad01-a955d85436c7" /> After: <img width="330" height="503" alt="image" src="https://github.com/user-attachments/assets/894e6045-ec34-4296-8aff-f0e7bee32d9f" /> opw-5909500 Forward-Port-Of: odoo/odoo#249404
A technical error prevented managers without appraisal rights from scheduling meetings. This update corrects a flaw in how the system accesses employee information, ensuring managers can now successfully schedule meetings as intended. This resolves a potential disruption to workflow.
Original PR description
Steps to reproduce: - Create two employees: one as a manager and the other as a subordinate. - Ensure that the manager does not have any officer or appraisal rights. - Create an appraisal for the subordinate through the manager. - Confirm the appraisal and then click the Schedule Meeting button Issue: - The manager should schedule a meeting even though he does not have the rights, but a traceback error occurs due to access rights issues when trying to schedule a meeting. Reason: - The manager is unable to access the related_partner_id due to restrictions set by the officer/manager group, which results in a traceback error. Fix: - Replace the related_partner_id with the work_contact_id of the employee. Since related_partner_id is computed from work_contact_id, we can directly use work_contact_id task-5881127 Forward-Port-Of: odoo/enterprise#106106
This update fixes a bug preventing notifications from appearing when scrap orders are created from the shopfloor. Previously, users didn't receive confirmation of the order's creation. Now, users will receive a notification when a scrap order is successfully registered, improving workflow visibility.
Original PR description
Issue before this commit: ========================= Creating a scrap order from the shopfloor does not show any notification after it is created, which was shown in the previous version. Steps to…
Issue before this commit: ========================= Creating a scrap order from the shopfloor does not show any notification after it is created, which was shown in the previous version. Steps to Reproduce: ========================= - Install the mrp_workorder module. - Create a Manufacturing Order for any product (e.g. [FURN_7023] Wood Panel). - Open the shopfloor view. - Click the three-dot menu to access more options. - Create and confirm a scrap order. - No acknowledgement/notification is shown to the user. Cause of the issue: ========================= The method responsible for triggering the notification was renamed in [this PR](https://github.com/odoo/enterprise/pull/85706), but the notification condition was still referring to the old method name. As a result, the notification was never triggered. With This Commit: ========================= Align the method name used in the notification condition so that, when a scrap order is created from the shopfloor, the user correctly receives the notification: `The scrap order has been successfully registered.` Community PR: https://github.com/odoo/odoo/pull/250024 Task: 5958933
This update resolves an issue where checkboxes within product listings weren't updating correctly. The fix involves a change in how clicks are handled, ensuring the checkbox state is accurately toggled. This improves the user experience when managing products.
Original PR description
- Destructure `{ anchor }` from the `run` method arguments instead of using the `this` context.
- Swap `actions.click()` for native `anchor.click()` to ensure the checkbox state is toggled correctly.
runbot-234872
Note: backport of https://github.com/odoo/odoo/commit/6fdc329838ee099524e61eea9698373949881c1e
missed the 19.2 freeze.A recent update to web studio resolved a bug that prevented users from correctly saving approval rules with specific domain filters. The issue stemmed from how the system handled boolean values, leading to an error. This fix ensures that approval rules with domain filters, including those using 'not set', now function as expected.
Original PR description
Steps to reproduce ================== - Install web_studio,sale_management - Open a form view in sale - Open studio - Click on the "Send by email" button - Add an approval rule - Add a domain by clicking on the filter icon - Use the not set operator - Confirm - Click on the filter icon again - Confirm => ValueError: malformed node or string on line 1: <ast.Name object at 0x79ff4c7b7f50> Cause of the issue ================== JSON.stringify was used to pass the domain as a string to the DomainSelectorDialog. This doesn't work for boolean as they don't have the same representation in JavaScript as opposed to Python. Solution ======== Use the Domain().toString function opw-5923585 Forward-Port-Of: odoo/enterprise#108595 Forward-Port-Of: odoo/enterprise#107432
This update resolves an issue preventing the deletion of archived employee versions. Previously, a validation error would occur if an archived version was deleted, even if other active versions existed. Now, archived versions can be safely deleted without triggering this error, streamlining employee record management.
Original PR description
Version – saas-18.4 Issue: Deleting an archived version of an employee that has only a single version raises a `ValidationError` stating: `Employee %s must always have at least one active version.`…
Version – saas-18.4 Issue: Deleting an archived version of an employee that has only a single version raises a `ValidationError` stating: `Employee %s must always have at least one active version.` Steps to Reproduce: - Make an archived version of an employee which have exactly one version. - Try to delete that archived version - Validation Error will occur which states that `Employee %s must always have at least one active version.` Cause: The validation logic prevents deletion when the number of versions being deleted equals the total number of unarchived versions of the employee. Fix: Improved the ValidationError logic by ensuring that no error is raised when the version being deleted is archived. Impact: Archived employee versions can now be deleted without raising unnecessary errors. Task – 5347109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250557 Forward-Port-Of: odoo/odoo#238344
This pull request corrects a minor typo in the Combo Configurator module within the Odoo sale functionality. The fix ensures accurate data typing, preventing potential display issues and improving the overall user experience. This update ensures consistent and reliable configuration within the sales process.
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#249973
This update resolves a potential issue during Odoo database upgrades. Previously, removing a payroll rule could cause upgrade scripts to fail. This change ensures upgrade scripts continue to function correctly even if a rule has been deleted, improving the reliability of database updates.
Original PR description
This method is used in various places, including when upgrading a database. When doing so, it is done in a post upgrade script. If later one of the updated rules is removed, the pre-script removing it will run before the post script trying to update it, causing the migration to fail as the update method tries to browse a falsy value. This updates the `update_properties_definition_domain` method so that it ignores falsy values when browsing, allowing previous upgrade scripts to run even if the referred rule has been since deleted. Forward-Port-Of: odoo/enterprise#102964
This update clarifies the event booking process for existing partners. When booking with a known email, the system now suggests both 'Sign In' and 'Create an Account' options. This ensures partners receive the most relevant guidance, regardless of their portal access, leading to a smoother booking experience.
Original PR description
When booking with an email that belongs to an existing partner, a 'Sign in' link is shown to the booker. If the partner has no portal access, then it is not relevant as they could also need to create an account. Therefore, change the wording by adding 'or create an account'. This way, the use of the login page redirection is more complete. opw-5419532 Forward-Port-Of: odoo/odoo#250740 Forward-Port-Of: odoo/odoo#241445
This update quietly handles errors that occur during tour termination, specifically 'AssetsLoadingError' which represents lazy-loaded assets. Previously, these errors were flagged, but this change prevents them from disrupting the user experience after the tour is complete. This ensures a smoother experience for users.
Original PR description
Similarly to commit https://github.com/odoo/odoo/commit/493bab4f460dd4069d5cb6805933b8088067ff17 hiding "failed to fetch" errors, this commit adds AssetsLoadingError as those represents "just" another category of failed assets request (i.e. lazy loaded) after tour termination. runbot-233826 Forward-Port-Of: odoo/odoo#250839 Forward-Port-Of: odoo/odoo#248003
This update eliminates a warning generated during testing of document attachments. The team replaced the use of artificial PDF content with actual sample PDF files from the base code. This ensures consistent and reliable test results without unexpected errors.
Original PR description
While creating attachments/documents for testing, using a "fake PDF content" generates warning from PyPDF 5.4.0 (even with `strict=False`) when the said PDF is eventually parsed. This commit replaces those "fake PDF content" by reading the "minimal" PDF file provided for testing purposes in `base`. runbot-231278 Forward-Port-Of: odoo/enterprise#108779
This update allows businesses to use SVG images for their Point of Sale (POS) logos. Previously, POS logos were limited to specific image formats. This change expands the options for branding and visual customization within the POS system.
Original PR description
Fix the POS config logo URL computation to handle multiple image file formats. This change enables support for SVG images as POS logos. Task: 5951143
This update resolves a display issue in the Email Marketing app where test emails were incorrectly showing as 'removed' in Chatter. The fix ensures that test messages are automatically unlinked when sent, preventing this misleading display and maintaining accurate Chatter information. This improves the user experience when testing email campaigns.
Original PR description
**Steps to reproduce:** - Go to Email Marketing app - Create a mailing campaign - Set its recipients to Contact - Click on the test button to send a test mail to any mail - Go to the first contact…
**Steps to reproduce:**
- Go to Email Marketing app
- Create a mailing campaign
- Set its recipients to Contact
- Click on the test button to send a test mail to any mail
- Go to the first contact record
- Chatter will show `This message has been removed` message
**Issue:**
Previously, message created for testing were ignored by the Chatter as they were empty. As we now keep empty messages visible but with removed content display, they shows up on related records.
```py
record = self.env[mailing.mailing_model_real].search([], limit=1)
```
**Fix:**
Ensure the related messages are unlinked at the same time as the test mail in `send_mail_test` by setting `is_notification` to `False` to trigger the `unlink` logic.
```py
def unlink(self):
# cascade-delete the parent message for all mails that are not created for a notification
mail_msg_cascade_ids = [mail.mail_message_id.id for mail in self if not mail.is_notification]
res = super(MailMail, self).unlink()
if mail_msg_cascade_ids:
self.env['mail.message'].browse(mail_msg_cascade_ids).unlink()
return res
```
related: https://github.com/odoo/odoo/commit/21f92550f83cbd38df2c223c65c61bd16dc8e2b0
opw-5502787
Forward-Port-Of: odoo/odoo#247805This update resolves a bug where image sizes were being unintentionally reduced when rotating images within the website editor. The fix ensures that padding around images is correctly accounted for, preventing size distortions and maintaining consistent image appearance during transformations. This improves the user experience and visual accuracy of content.
Original PR description
**Current behavior before PR:** Steps to reproduce: - In website, drag and drop a `text - image` snippet. - Click on image, click on Transform button. - Try to rotate the image. - You will notice that the size of the image is reduced a bit. This issue happens because in `image_transformation.js`, `convertPixelWidthToPercentage` converts image width from `px` to percentage. In this case image's parentElement has padding, causing reduction in image's size. **Desired behavior after PR is merged:** This PR ensures that `paddingLeft` and `paddingRight` of image's parentElement is ignored from calculation so that image size doesn't get changed. task-5884679 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250709 Forward-Port-Of: odoo/odoo#246508
This update optimizes how Odoo handles locale data, reducing unnecessary file system access. Previously, the system checked for locale availability repeatedly without actually loading the data, leading to slower performance. This change adds a caching mechanism to prevent redundant checks and improve overall system responsiveness.
Original PR description
`babel.Locale.parse` checks if a locale is valid by calling `os.path.exists` on the resolved filename for the locale (this is done in `babel.localedata.exists`). Babel does have a locale cache which it checks, but currently that cache is only populated when the locale is actually loaded[^1], therefore in cases where we instantiate a significant number of locales but never actually need to load locale data (e.g. formatting a significant number of datetimes, in qweb, using only non-localised patterns) this results in severe FS traffic for no reason. [^1]: python-babel/babel#1254 has been submitted to fix this issue Forward-Port-Of: odoo/odoo#250888 Forward-Port-Of: odoo/odoo#249795
This update resolves a server error that occurred when saving worksheet templates with default values for new properties. The fix prevents the system from rejecting invalid data keys, ensuring templates can be saved correctly with their configured default settings. This improves template stability and usability.
Original PR description
Steps to reproduce: - Open any worksheet template - Add a new property of type Checkbox, Date, DateTime, or Selection - Set a default value and close the popover - Click Save Current behavior: Server error 'Some key are not allowed for a properties definition [value]' Expected behavior: Template saves successfully with the default value stored When closing a newly created property popover, the base widget copies `default` into `value` for runtime display. This is correct for properties (per-record values) but invalid for properties_definition (schema-only) since the backend validator rejects the `value` key. Skip this propagation for definition widgets task-5966665 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug where a POS order could incorrectly apply a pricelist even if it wasn't the customer's primary or available option. Previously, loading a pricelist from a past paid order would override the correct settings. This ensures that POS orders always use the appropriate pricelist based on the customer's current selections.
Original PR description
When changing the customer on a POS order, if the customer's pricelist is not in the list of available pricelists for the POS, but the pricelist was loaded due to loading a paid order, the POS would still set that pricelist on the order. opw-5461556 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251090 Forward-Port-Of: odoo/odoo#247029
This update corrects a visual issue in the call view's action list in light mode. Previously, active buttons lacked visual feedback. This commit ensures the same styling as the dark theme is applied, providing clear indication of which buttons are currently selected.
Original PR description
In light mode, the call view uses the same color palette than in dark theme. To do so, buttons are tweaked to force dark colors. However, active styles are not properly tweaked, leading to a lack of visual feedback for active buttons. This commit ensures the same styles than in dark theme are applied. task-5969686 <img width="304" height="73" alt="image" src="https://github.com/user-attachments/assets/d6ef089b-aba1-4fff-a7d5-f450ff345279" /> Forward-Port-Of: odoo/odoo#250644
This update makes the Gantt chart's date selection more immediate, allowing users to see changes instantly as they adjust the date range. Previously, the chart only updated after clicking 'Apply'. This change improves the user experience and provides quicker feedback during date range adjustments.
Original PR description
- Previously, the Gantt scale selector only updated the displayed date range after the "Apply" button was clicked. This was because the template was bound to the component props rather than the local state. - This commit binds the date picker display to the local pickerValues state. Now, when a user selects a date in the picker, the UI updates immediately, while the actual data fetch remains deferred until "Apply" is clicked. Task: 5932671 Forward-Port-Of: odoo/enterprise#107380
This update enhances the accuracy of payment reference checks by tailoring validation to the bank account's country. Previously, a single check applied to all countries could lead to incorrect validations. Now, the system verifies the reference format against the specific country of the bank account, with a backup to a standard format if needed.
Original PR description
Currently, when initiating a payment, we check if the reference is a structured one by using `is_valid_structured_reference` which checks the validity of the structure accross all supported countries. This can lead to issues when it matches formats accepted by other countries but not the one of the bank account. With this commit, we replace this check by a call to a new function that checks the structure validity according to the country of the bank account, with a fallback to the generic check (ISO 11649) if the country is not supported. opw-5387269 Forward-Port-Of: odoo/enterprise#107931 Forward-Port-Of: odoo/enterprise#107116
This update corrects a spacing issue that was causing the meeting chat bubble to appear too small. The previous fix unintentionally affected the dropdown menu, leading to this correction. The result is a cleaner and more usable meeting chat experience.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/249880 PR above made a fix where inline message actions were taking way too much space in meeting chat, making chat bubble too small. This fixed the issue by setting the padding of inline message actions, but due to a typo it also set the same padding in dropdown menu. This commit fixes the issue by properly limiting the fix of PR above to inline message actions. Before / After <img width="342" height="228" alt="Screenshot 2026-02-26 at 18 46 45" src="https://github.com/user-attachments/assets/1e6b4f13-24c0-43d7-8837-046bc04cd85b" /> <img width="353" height="255" alt="Screenshot 2026-02-26 at 18 46 30" src="https://github.com/user-attachments/assets/59e912b7-fe1f-4aa1-89ce-ef2c6dd88743" /> Forward-Port-Of: odoo/odoo#251007
This update corrects a technical error where order updates were incorrectly treated as new creations. It also resolves a bug that was repeatedly generating order tracking numbers during synchronization. These fixes ensure accurate order management within the Point of Sale module.
Original PR description
Before this commit, all lines even updated one were using Command.CREATE instead of Command.UPDATE. This commit fix the issued. Also fix another issue which was recreating the order tracking number at each sync. Forward-Port-Of: odoo/odoo#251222
This update removes outdated styling related to the website's cookie bar toggle. The toggle was redesigned, and these unused styles were previously still being loaded. This cleanup improves website performance and reduces unnecessary code.
Original PR description
After [1], the cookies bar toggle was reworked and is no longer an absolutely positioned button injected via interaction. The related SCSS became obsolete but was still loaded. This commit removes those unused styles. [1]: https://github.com/odoo/odoo/commit/7ffc121c777d36d1f62a61ca32838f2f18c2abc7 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251099
This pull request updates the contributor signature in the ‘elvisbegovic.md’ document to reflect the completion of a Contributor License Agreement (CLA). This ensures proper legal compliance and documentation for the contributor’s work within the Odoo project. The change has been verified.
Original PR description
Description of the issue/feature this PR addresses: Cla Current behavior before PR: No cla Desired behavior after PR is merged: Verified --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250200
This pull request updates the CLA record for ngochung207, confirming their agreement to the Odoo terms of use. This ensures compliance with Odoo's contribution guidelines and allows the developer to contribute code to the Odoo project. The changes are purely administrative and do not affect the Odoo software itself.
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#250278