Friday, February 27, 2026
36 changes · saas-19.1
Resolved issues and error corrections
This update resolves a build error in the payroll accounting module related to how warning tests are run. The previous test incorrectly counted employees, failing when multiple employees triggered the same warning. The fix now accurately checks for the number of times an invalid employee ID appears in the warning data, ensuring the test functions correctly.
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 resolves a technical error that prevented the generation of Dutch tax reports. The issue stemmed from a misunderstanding of how data was being processed, specifically related to a boolean flag within the report's data structure. This fix ensures accurate report generation for Dutch users.
Original PR description
After this [commit](https://github.com/odoo/enterprise/commit/402ec47),…
After this [commit](https://github.com/odoo/enterprise/commit/402ec47), [ec_sales_list_tag_ids](https://github.com/odoo/enterprise/blob/c6b8727b9c926a4f817249b94cfc24dcbd66147f/l10n_nl_reports/models/account_return.py#L21) is built by flattening the values of `ec_sales_list_tags_info` using `chain(*values())`.
The tag IDs are fetched from[ _get_tax_tags_for_nl_sales_report()](https://github.com/odoo/enterprise/blob/c6b8727b9c926a4f817249b94cfc24dcbd66147f/l10n_nl_reports/models/account_sales_report.py#L75), which returns a dictionary containing:
- a flag (`use_taxes_instead_of_tags = False`)
```.py
(Pdb) ec_sales_list_tags_info
{'goods': [67], 'services': [71], 'triangular': [69], 'use_taxes_instead_of_tags': False}
```
When flattening the dictionary values, `chain` expects all values to be iterable. While the boolean flag is not iterable,
which results in a `TypeError: 'bool' object is not iterable`.
```.py
Traceback (most recent call last):
File "/home/odoo/src/odoo/19.0/odoo/service/server.py", line 1510, in preload_registries
registry = Registry.new(dbname, update_module=update_module, install_modules=config['init'], upgrade_modules=config['update'], reinit_modules=config['reinit'])
File "/home/odoo/src/odoo/19.0/odoo/tools/func.py", line 88, in locked
return func(inst, *args, **kwargs)
File "/home/odoo/src/odoo/19.0/odoo/orm/registry.py", line 199, in new
load_modules(
File "/home/odoo/src/odoo/19.0/odoo/modules/loading.py", line 493, in load_modules
migrations.migrate_module(package, 'end')
File "/home/odoo/src/odoo/19.0/odoo/modules/migration.py", line 220, in migrate_module
exec_script(self.cr, installed_version, pyfile, pkg.name, stage, stageformat[stage] % version)
File "/home/odoo/src/odoo/19.0/odoo/modules/migration.py", line 257, in exec_script
mod.migrate(cr, installed_version)
File "/tmp/tmpzg7oi478/migrations/account_reports/saas~18.3.1.0/end-account-returns.py", line 341, in migrate
generate_or_refresh_all_returns(company)
File "/home/odoo/src/enterprise/19.0/account_reports/models/account_return.py", line 232, in _generate_or_refresh_all_returns
self._generate_all_returns(fiscal_country.code, company, domestic_tax_unit)
File "/home/odoo/src/enterprise/19.0/l10n_nl_reports/models/account_return.py", line 22, in _generate_all_returns
ec_sales_list_tag_ids = list(chain(*ec_sales_list_tags_info.values()))
TypeError: 'bool' object is not iterable
```
In this fix, the boolean flag is removed before chaining since only tag ID lists are needed and the flag causes an error.
Forward-Port-Of: odoo/enterprise#107213This update ensures that opening notes are consistently saved to the system's session data, regardless of whether the cash payment method is enabled. Previously, this functionality was missing when the cash method wasn't configured, leading to potential data loss. This change improves the reliability of POS note recording for all users.
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 fixes an issue where the 'Packages' report combined all package details onto a single page, causing confusion and potential mislabeling. Now, each package's information is printed on a separate page, allowing for clear and accurate handling during packing and logistics.
Original PR description
Issue before this PR: ========================= - Currently, when printing a `Packages` report that contains `multiple packages` all `Package with Content` reports are printed as a `single continuous…
Issue before this PR: ========================= - Currently, when printing a `Packages` report that contains `multiple packages` all `Package with Content` reports are printed as a `single continuous document` without any line or page separation between packages. - This leads to issues because each `Package with Content` report is meant to be printed individually and physically attached to its corresponding package during packing and logistics operations. It creates `confusion and a risk of mislabeling`, as users must `manually interpret and separate package boundaries` when handling printed documents. Steps to Reproduce: ========================= 1. Install the `Inventory` app. 2. Go to Configuration → Settings and enable the `Packages` option. 3. Create a new transfer with multiple product lines and click `Mark as Todo`. 4. In Detailed Operations, assign `different packages` to at least two different product lines and `Validate` the transfer. 5. Open the `Actions` menu, select `Print → Packages`. 6. Open the generated PDF. All packages are printed on the same page, without any page or line separation. **Packages report before this PR:** <img width="500" height="300" alt="combined" src="https://github.com/user-attachments/assets/6a6b8cb5-bcf3-488e-b95a-7670db8fc6ad" /> Cause of the issue:- ========================= In the file `report_package_barcode.xml`, a `t-foreach` loop is used to iterate over the packages included in the report. However, the report template does not define any `page break or visual separation` between iterations. As a result, each package is rendered consecutively in a single, continuous page instead of being split into separate pages. After this PR:- ========================= This PR ensures that, when printing a `Packages` report containing `multiple packages`, each `Package with Content` starts on a new page. This clear separation allows users to easily identify and handle `individual package details`, reducing confusion and the risk of mislabeling, while preserving the existing report layout and content. **Packages report after this PR:** <img width="491" height="500" alt="breaked (1)" src="https://github.com/user-attachments/assets/d87a52e5-8b54-49d4-911a-2e07e487c0d8" /> TaskID-5025192 Forward-Port-Of: odoo/odoo#241762
This update corrects a bug where archived subtasks were unintentionally copied when duplicating a task. Previously, the system didn't check if a subtask was inactive before duplication, leading to unnecessary data duplication. Now, archived subtasks are excluded from the duplication process, streamlining task management.
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 fixes an issue where payment advice reports weren't properly handling employees with multiple bank accounts. The fix ensures that invalid bank information (BICs) in non-primary accounts no longer allows the creation of incorrect payment advice reports, improving data accuracy and compliance.
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 fixes an issue where input fields would overflow due to inconsistent sizing calculations across different browsers, particularly Safari and Firefox. The change dynamically adjusts for padding and borders, ensuring correct sizing and preventing visual glitches for users.
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 prevents incorrect data from being written to applicant records when CVs are processed via OCR. Specifically, it corrects data corruption that occurred when forwarding emails or linking applicants to existing business partners. This ensures accurate applicant information within the system.
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 enhances how Odoo recognizes structured bank transactions from Belgium (VCS-OGM). Previously, transactions without a leading '+' or '*' were not correctly identified as structured. Now, Odoo can properly process transactions formatted as 'xxx/xxxx/xxxxx', ensuring accurate financial reporting and 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 addresses several technical issues within the Hoot component of Odoo, enhancing its reliability and performance. Specifically, it corrects a problem with how blob responses are handled, resolves an issue with test results, and limits a potentially problematic configuration option. These changes ensure smoother operation and data integrity.
Original PR description
### [FIX] web: Hoot - backport fixes This commit backports the following fixes that have been applied in further versions: - add correct mime type to XHR blob responses [1]; - fix missing diff from failed test results [2]; - wrap 'raw' value option in a dictionnary to limit unintended use, use 'raw' as a default for text-based matchers [3]. [1] 9156bf1 [2] 2216a0b [3] 3080362 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250929
This update resolves an issue where action buttons on the work entry Gantt view would cause errors when no employees were assigned. The fix now automatically hides these buttons when there are no employees present, 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#105957
This update corrects a minor issue in the Attendance module where duplicate field names were appearing in the attendance list view. Specifically, the 'in_location' and 'out_location' fields had redundant names. This change ensures a cleaner and more user-friendly experience when managing attendance data.
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
This update ensures that Point of Sale orders always use the correct date from the server, regardless of the date displayed on the POS device. Previously, incorrect date settings on the POS could lead to inaccurate order timestamps. This change improves data accuracy and reliability for all Point of Sale transactions.
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 glitch in the product catalog search panel that was causing the system to crash. The fix addressed a race condition in how data was loaded, preventing errors when users searched for products. This ensures the search functionality operates reliably.
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 prevents employees from checking in through the attendance app when location tracking is enabled and a location cannot be determined. This ensures accurate attendance records and avoids incorrect check-in data, improving the reliability of our time tracking system.
Original PR description
When a user is trying to check in on the attendance app with the setting Device tracking enabled and the location cannot be determined, it should raise an error to prevent the check-in without a valid location. Task: 5486178 Forward-Port-Of: odoo/odoo#249753
This update fixes a technical error preventing managers without specific permissions from scheduling meetings related to appraisals. The fix replaces a restricted data field with a simpler one, ensuring managers can now correctly schedule meetings as intended. This improves the user experience for all managers.
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
A bug was preventing users from correctly saving approval rules within the web_studio interface. This was due to a mismatch in how boolean values were represented between Python and JavaScript. The update corrects this by using the appropriate method to convert Domain objects to strings, ensuring approval rules are saved reliably.
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 fixes 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 causing errors, 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, which ensures consistent and accurate display of product information. This resolves a potential confusion for sales staff and customers, improving the overall user experience. The fix was made to maintain data integrity and a professional presentation.
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 bug where work entries weren't being generated when multiple resource calendar attendances were close together in time. The fix prevents attendances from being incorrectly combined, ensuring accurate work entry creation for employees. This improves the reliability of payroll and time tracking.
Original PR description
When you have two resource calendar attendances that are stuck together, and you generate work entries, the second one doesn't appear: Bug is caused when having two attendances stuck together: In a resource.calendar, change the time of a resource.calendar.attendance to finish at 15.36 and create a new one that begins at 15.36 and finished at 16.36 with a work entry type of Credit time. Go and regenerate work entries and you can see that no work entries are generated for credit time. Fixed by adding keep_distinct in an interval to not fuse them together. Also added extra checks to another test to not pass with incorrect values. task-5894994 Forward-Port-Of: odoo/enterprise#105981
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 are guided to the most appropriate action, regardless of their portal access, improving the overall 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 fixes an issue where salary inputs configured for employees weren't appearing on their payslips. The fix ensures that any salary input enabled for a payslip is now correctly reflected, providing a more complete view of employee compensation. This improves data accuracy and reporting.
Original PR description
### Issue: When a salary input is already configured at the employee level and later enabled for payslip , it does not appear on the payslip. ### Fix: Fixed the domain to show the salary input in the payslip. ### Impact: Now the salary input if enabled for payslip can also be viewed in the payslip. --- task:5951414
This update quietly handles errors that occur during tour termination, specifically 'AssetsLoadingError', which represents lazy-loaded assets. Previously, these errors were handled differently, and this change ensures a smoother experience by consistently ignoring these types of failed requests after a tour ends. This improves stability and prevents minor errors from disrupting the user experience.
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 resolves a warning generated during testing related to fake PDF content. The team replaced the problematic 'fake PDF content' with actual sample PDF files from the base directory, ensuring consistent and reliable test results. This improves the stability of the testing process.
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 fixes an issue where POS receipts incorrectly showed the standard 21% tax label, even when a fiscal position (like 6%) was applied. The change ensures that the POS receipt accurately reflects the tax group based on the selected fiscal position, improving accuracy and compliance.
Original PR description
Steps: - Install l10n_be_pos_restaurant. - Create a restaurant POS configuration with presets. - Assign a fiscal position to one preset that replaces 21% tax with 6%. - Open a POS session and process an order using that preset. Issue: - The POS receipt still displays the 21% tax's tax group label, even though the 6% tax is correctly applied. Cause: - Fiscal position was not taken into account when computing the tax group label for POS receipt orderlines. Fix: - Apply the fiscal position when determining the POS receipt tax group label. Task-5899938 Forward-Port-Of: odoo/odoo#250832 Forward-Port-Of: odoo/odoo#248571
This update corrects a previous fix that unintentionally increased the size of the message actions dropdown in the meeting chat. The change ensures the chat bubble remains appropriately sized and provides a better user experience. This resolves a visual issue impacting meeting conversations.
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" />
This update clarifies how combo products are displayed in Odoo. Previously, 'free' items within combos were confusing users. Now, the backend shows 'item' and the POS frontend displays 'included' to accurately reflect that these products are part of the combo price.
Original PR description
Description of the issue/feature this PR addresses: combo choice products are not free products. They are included in the combo product price. Therefore it creates misunderstanding for our users Current behavior before PR: Desired behavior after PR is merged: Change the "free" string into "item" in the backend and into "included" in pos frontend to align with the display in self --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245279
This update corrects a visual bug where product attributes with a single custom value were incorrectly displayed in product specifications and single value lists. The fix prevents redundant display of these attributes, ensuring a cleaner and more accurate presentation of product information on the website. This improves the user experience for customers browsing products.
Original PR description
### Issue: Due to this bug, an attribute with a single custom value will be shown in specifications and single value attributes. #### Steps to reproduce: 1- Create a product. Add a `Free text`…
### Issue: Due to this bug, an attribute with a single custom value will be shown in specifications and single value attributes. #### Steps to reproduce: 1- Create a product. Add a `Free text` attribute. 2- Navigate to product page on the website. 3- From website editor, style tab, switch `specification` style. 4- With specification style set to `None`, you can see this attribute in single value attributes list. 5- With other 2 styles you can see this attributes in specifications. Expected: In both steps 4 and 5, this attributes shouldn't be displayed there because it is already displayed in main attributes where you can set the value. Initially fix was to filter `ProductTemplateAttributeLine` in `_prepare_single_value_for_display`, however it would cause empty specification sections. To avoid that we also need to filter out single custom value attributes in `_prepare_categories_for_display`. opw-5484721 Forward-Port-Of: odoo/odoo#250755 Forward-Port-Of: odoo/odoo#244234
This update restores the warning message displayed when users attempt to cancel paid or posted orders in the Point of Sale system. Previously, this warning was removed, causing users to unknowingly cancel orders. The fix ensures the warning appears when appropriate, preventing accidental order cancellations.
Original PR description
From 18.2, the warning to prevent users to cancel paid or posted orders from backend was no longer displayed. It's caused because it was handled in the write() method from pos.order model. But, since a recent change, we call write() method only on draft orders. So, if there is no draft orders selected, the warning doesn't appear. task: 5959917 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250205 Forward-Port-Of: odoo/odoo#250074
This update optimizes how Odoo handles locale data, reducing unnecessary file searches. Previously, the system repeatedly checked for locale files even when the data wasn't being used, leading to slower performance. This change improves efficiency and reduces resource consumption.
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 corrects a bug where timesheets weren't automatically marked as billable when linked to a project or task. The fix ensures that timesheet entries correctly reflect the associated project or task, accurately tracking billable hours for clients. This improves the accuracy of invoicing and reporting.
Original PR description
Steps to reproduce: - Open Timesheet Assistant - Add new Timesheet - Choose a project or task so so_line of timesheet become True - is_billable is still False Source of the bug: - compute_is_billable was missing depends decorator task-5956059
This update fixes a minor typo within the Helpdesk module's result page. The change ensures consistent naming conventions after a recent update to the core Odoo system. This resolves a potential display issue and maintains data accuracy.
Original PR description
Before this commit and since the merge of https://github.com/odoo/odoo/pull/156878, `date_published` has been replaced by epublished_date` field but the changes have not been made in website_helpdesk_slides module. This commit replaces `date_published` occurrences by `published_date`. task-[5945377](https://www.odoo.com/odoo/project/4105/tasks/5945377)
This update fixes an issue where text within monospace banners was misaligned due to the use of tabs. The code has been updated to replace tabs with four spaces, ensuring consistent character spacing and improved readability within these banners. This enhances the user experience when working with formatted text.
Original PR description
Tabs are aligned on 40px boundaries. This leads to misalignment of characters when using the monospace banner. This commit fixes this by replacing all tabs inside monospace banners by four spaces. Steps to reproduce: - Go to a "To do" note - Insert a monospace banner - Type some text on several lines - Type tab at the begin of some lines => Character columns were misaligned. task-5916747 Forward-Port-Of: odoo/odoo#248227
This update resolves a bug where tests were failing due to a module activating the EUR currency, causing unexpected behavior in the OCR process. The fix ensures the USD currency is consistently used, making the tests reliable and preventing disruptions. This improves the stability of the account invoice extraction feature.
Original PR description
When the tests are run with all modules installed and demo data, some of them fail. One of the other modules activates the EUR currency, which causes the OCR to select it instead of leaving the default USD currency. - Test `test_bank_account` fails because, when the `currency_id` field is set, it triggers a re-computation of `partner_bank_id` which will reset its value to `False`. Runbot build error [240759](https://runbot.odoo.com/odoo/runbot.build.error/240759). - Test `test_invoice_ocr_note_author` fails because it's not expected that the `currency_id` is modified and logged in the tracking message. Runbot build error [238512](https://runbot.odoo.com/odoo/runbot.build.error/238512) (only in saas-19.2 and up, but it is mentionned here as the fix is the same). To make the tests more reliable, we now ensure only the USD currency is active. Forward-Port-Of: odoo/enterprise#108770
This update makes the Gantt chart's date selection more responsive, updating the displayed date range immediately as the user adjusts the picker. Previously, changes required clicking 'Apply'. This enhancement provides a smoother and more intuitive user experience when setting the chart's date scale.
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 corrects a technical error where new changes to point-of-sale orders were incorrectly treated as new creations instead of updates. Additionally, a bug that repeatedly generated order tracking numbers during synchronization has been resolved. This ensures accurate order management within the self-order functionality.
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