Daily updates from Odoo
Thursday, January 8, 2026
105 changes · master
New functionality added to Odoo
This update adds a 'country_code' field to the resource calendar model. Previously, calendar displays were not tailored to specific countries, leading to potential inconsistencies. Now, calendars will display dates and times in the correct format for each user's location, enhancing the user experience and ensuring accurate scheduling.
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
Enhancements to existing features
This update makes the payment report wizard more user-friendly by adjusting the layout of fields. The change prevents fields from stretching across the entire wizard width, improving readability and ease of use. This is a minor UX enhancement.
Original PR description
-Minor UX change in the payment report wizard so that fields don't extend to full wizard width. -See https://github.com/odoo/enterprise/pull/101664 Task: #5388635
This pull request ensures that accounts used for receivables and payables are consistently configured across all Odoo localization modules (l10n_*) to avoid discrepancies. This update streamlines financial reporting and improves data accuracy for international business operations. The changes involve updating configuration files for various localization modules.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies the theme editor by arranging font names alphabetically. This change reduces user confusion and makes it easier to find the desired font, ultimately improving the user experience and making it quicker to customize the look of Odoo.
Original PR description
To avoid cognitive load, and improve usability, this commit lists font alphabetically on the theme tab. task-5410041 Forward-Port-Of: odoo/odoo#240968
This update enhances the user experience by adding keyboard navigation to the many2many tags dropdown field within Odoo. Previously, users could only interact with this field via the mouse. Now, keyboard users can easily select tags, improving accessibility and efficiency.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update streamlines how Odoo handles data, primarily shifting from using 'datas' to 'raw' formats. This change improves efficiency and reduces the amount of data stored, leading to potential cost savings and faster performance. The team has focused on simplifying data exports and imports, ensuring data is handled more effectively.
Original PR description
https://github.com/odoo/odoo/pull/238171 See referenced PR: - Mostly use `raw` instead of `datas`. - `pdf_rotate` does not work as it uses inexisting fields (just removing it from the code). - web_studio exports raw - ...
This update enhances how Odoo tests filter activity records, particularly within the 'web' module. By extending support for filtering on related 'x2Many' fields, developers can now test activity scenarios more effectively without needing to modify existing business code. This improves testing efficiency and stability.
Original PR description
For the activity view, the following domain is used to retrieve all records with activities completed (active=False) or not: [["activity_ids.active", "in", [true, false]]] To avoid having to patch business code when testing activities, we extend a bit what is supported for filtering records in tests by supporting filtering on x2Many nested fields. Note that not everything is supported, see the test. Co-authored-by: Pierre-Yves Dufays <pydu@odoo.com> Task-5089173
This update enhances the visual consistency of section, subsection, and combo lines across Odoo's portal, reports, and sales order views. The change addresses a font size discrepancy between the Odoo portal and website, ensuring readability and accessibility for users. This improves the overall user experience and presentation of key information.
Original PR description
Improve consistency of the section, subsection and combo lines on portal, reports and SO. Note: website has a different font-size-base than portal, thus using small on the table in portal will render 12.25px without website but 14px when website is installed. 12.25px is barely accessible, which is why `max()` is used, ensuring the font-size of portal SO preview doesn't get too small. [task-5439762](https://www.odoo.com/web#id=5439762&cids=1&menu_id=4720&action=333&active_id=1695&model=project.task&view_type=form) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the visual representation of account review states within the Odoo system. The changes refine the badges displayed during account reconciliation, providing clearer and more consistent indicators for users. This improves the overall user experience and accuracy of account reconciliation processes.
Original PR description
task-5266305 Forward-Port-Of: odoo/odoo#240930
This change simplifies the process for updating taxes and accounts on invoices. Previously, a confirmation popup appeared after changing a partner, which was disruptive. This update removes that popup, streamlining the workflow for users and reducing potential user friction.
Original PR description
This commit removes the confirmation popup when pressing "update taxes and accounts" in invoices after changing the partner. task-5324619 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236277
Resolved issues and error corrections
This update resolves an issue where touch screen scrolling was interfering with the preparation display on iOS devices (small and medium). The change prevents unwanted scrolling, resulting in a smoother and more reliable user experience for iOS customers.
Original PR description
This commit introduces a small fix for IOS (small and medium) devices to prevent touch screen gesture in the pos preparation display. Task : 5113851
This update enhances the way payroll categories are defined and utilized within the system. The change allows for multiple category IDs to be associated with a payslip, providing greater flexibility and accuracy in calculating payroll amounts. This improves the system's ability to handle complex payroll scenarios.
Original PR description
task-5431460
This update corrects an issue where payroll views were incorrectly referencing the wrong module. The changes ensure that the correct Odoo module is used for these views, improving the accuracy and reliability of payroll calculations, particularly for our Belgian clients. This resolves a previously reported task.
Original PR description
fix related to Task-5136867
This update ensures that new Odoo users automatically have access to VoIP groups (admin and officer) during upgrades. Previously, these groups were only added to new databases. This change enforces a consistent approach, simplifying administration and preventing potential access issues.
Original PR description
Commit [1] introduced new groups for VoIP: admin and officer. Before that, the related rights came with the base admin group of Odoo. With that in mind, it made the new groups implied by the base…
Commit [1] introduced new groups for VoIP: admin and officer. Before that, the related rights came with the base admin group of Odoo. With that in mind, it made the new groups implied by the base admin group, but put them in a noupdate area of the security XML file, meaning only new databases would get the new groups assigned to the admin group. There were two possibles solutions: - An upgrade script to add the new groups to admin users (and/or the fact it is implied by the admin group). - Move the group definitions to a non-noupdate area, which re-forces the fact the VoIP groups are implied by the admin group at each upgrade, to any Odoo version. There is no guideline about this in Odoo and it is left to a per-app per-group choice. After consultation, the second solution was chosen: we prefer to enforce the fact that each new VoIP codebase, each version, relies on the fact admins are supposed to have those VoIP rights; forcing any customization of that fact to re-check it is working at each Odoo upgrade (and/or make a proper customization with custom apps instead of user manipulation). [1]: https://github.com/odoo/enterprise/commit/88b8de95e1a28a8037a386fc8fb6a044a98217e7 task-5440305 Forward-Port-Of: odoo/enterprise#103348
This update corrects a bug that prevented certain website-related modules, like 'ai_website', from receiving translations. Previously, only modules starting with 'website' were added to the translation list. Now, all website modules are correctly included, ensuring consistent translations across the platform.
Original PR description
Current behavior before PR: Only the modules with names starting with 'website' were added to the website translated modules. Causing modules such as 'ai_website' to miss translations. Desired behavior after PR is merged: All the modules related to 'website' are selected and added. task-5375210 parent support task-5210084 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242229
This update fixes an issue where attachments added to chatter activity notes wouldn't show their overview (the blue box). The team decided to maintain static rendering for these overviews to ensure consistent functionality. This change ensures that users can easily see the attachments associated with their chatter activity.
Original PR description
--- ## Short functional explanation of the error When in the chatter, we can create an activity. If we add an attachment to the notes of this activity and save it, the overview of the attachment won't show in the chatter. ## Reproduction Steps 1. Open an app that gives you access to the chatter, for instance, an invoice in Accounting. 2. Click on Activity. Click on Log a Note... and on the button Upload a file. Upload an attachment and save. ### Expected behavior The overview of the file (blue box with the name of the attachment) should appear. ### Unexpected behavior The overview doesn't appear ## Origin of the issue Since 19.0, we want to replace static rendering with embedded components everywhere for rendering attachments, but this creates issues for the rendering of the overview in the chatter. Therefore, after internal discussion, we agreed to keep rendering overviews statically. opw-5356016 Forward-Port-Of: odoo/odoo#240114
This update corrects a visual issue in the Enterprise module's Gantt chart where the hours view would overlap when work entries were activated in 'sparse mode'. This ensures a cleaner and more functional user experience for managing work entries and project timelines. It's a minor improvement focused on usability.
Original PR description
When the work entry is activated in sparse mode prevent the hours view from overlapping. task-5410789 Forward-Port-Of: odoo/enterprise#101939
This update prevents Odoo from creating duplicate bank accounts during the bank reconciliation process. Specifically, it avoids creating a new account if the same account number is already used by another active partner. This reduces confusion and simplifies bank statement management.
Original PR description
When using the bank reconciliation widget, avoid creating a new bank account on the selected partner if the same account number already exists on another active partner. This change is intentionally limited to the reconciliation flow only, to reduce noise caused by duplicate bank accounts, and does not affect other partner or bank account creation use cases. task- 5236503 Forward-Port-Of: odoo/odoo#242459 Forward-Port-Of: odoo/odoo#234531
This update corrects an issue with how invoices are formatted for electronic delivery to ECPay in Taiwan. The change removes the company name from the EDI address and formats the address as a single, comma-separated line, ensuring compliance with ECPay requirements. This ensures accurate invoice transmission and avoids potential delivery problems.
Original PR description
In this commit: --- Update EDI address formatting to remove the company name and send a comma-separated single-line address. task-5410619 Forward-Port-Of: odoo/odoo#242287 Forward-Port-Of: odoo/odoo#241108
This update fixes a limitation in the HTML editor where code blocks with syntax highlighting couldn't be easily converted back to regular paragraphs. A new button has been added to allow users to seamlessly switch between highlighted code and standard text, improving the overall note editing experience. This ensures users can format their code effectively without workarounds.
Original PR description
When syntax highlighting is activated on code blocks, neither the powerbox nor the toolbar is available inside the block, making it impossible to convert it back into a paragraph. This commit adds a button to convert such code blocks back into paragraphs. Steps to reproduce: - Go to a "To Do" note - Insert a code block with `/code` => There was no way to convert it back to a paragraph task-5241467 Forward-Port-Of: odoo/odoo#240692
This change corrects a technical issue in the Planning/Attendance Analysis report where a monetary widget was incorrectly applied to numeric fields. Removing this widget resolves a traceback error that occurred when selecting certain cost measures. This ensures the report functions correctly and provides accurate attendance cost data.
Original PR description
### Steps to reproduce: - Navigate to Planning > Reporting > Planning / Attendance Analysis - From measure select Attendance Cost or Cost Difference or Planned Cost - A traceback will pop up ### Cause: We are using widget monetary for the three fields in the view while their field type is float and there is no currency field defined in the model ### Fix: Remove the monetary widget from the view In master we will do something like this commit https://github.com/odoo/enterprise/pull/99059/commits/17f05bef0dad3e9645b6e0ed8df14d3308440812 opw-5438221 Forward-Port-Of: odoo/enterprise#103067
This update fixes a bug in the holiday pay calculation for Belgian employees. Previously, the system incorrectly skipped processing commission loss calculations when specific contract end conditions or public holidays were met. Now, the system correctly handles these scenarios, ensuring accurate commission loss deductions.
Original PR description
When we enter in the conditions regarding the the end of a contract and the public holidays, it return and does not enter in the part of the code that handle the loss of commission on public holidays. So instead of returning the res, we just continue to the next condition. Forward-Port-Of: odoo/enterprise#103352 Forward-Port-Of: odoo/enterprise#102963
This update corrects a visual inconsistency in Odoo's chatter messages. Previously, paragraphs added in the composer didn't maintain the same bottom margin when posted to the chat. This change ensures that messages displayed in the chatter match the formatting in the composer and sent emails, improving overall communication clarity.
Original PR description
Problem: When adding a paragraph in the composer and sending the message, the paragraph posted in the chatter has a `margin-bottom` of 0. Cause: Paragraphs in the chatter rendering override the default bottom margin, resulting in inconsistent spacing compared to the composer and the sent email. Solution: Update selector to only target the last `p`. Steps to reproduce: - Open the chatter composer. - Add a paragraph using "/Paragraph". - Add some text. - Send the message. - Observe that the message posted in the chatter has no bottom margin, unlike in the composer. opw-5378129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240082
This update resolves an issue preventing users from selecting different test types when adding quality checks within the Shop Floor workflow. Previously, a field was restricted, limiting flexibility in quality control processes. This change ensures users can accurately define test types, improving the efficiency and accuracy of quality checks.
Original PR description
This commit fixes the problem where the `test_type_id` of the `quality_check` is readonly when adding a step in Shop Floor. Task-5404503 Forward-Port-Of: odoo/enterprise#103351 Forward-Port-Of: odoo/enterprise#102810
This update corrects a bug where reimbursement amounts for public/train transport benefits didn't reset to zero when the option was unchecked in the salary configurator. The fix ensures that the amount field automatically resets to zero when the benefit is removed, improving data accuracy and simplifying salary management.
Original PR description
Issue: public and train transport reimbursed amounts not reseting after unchecking them Steps to reproduce: - open salary configurator - check public(train) transportation - change the value in the input field - uncheck public(train) transportation - the value for the reimbursed amount doesn't reset to 0 Fix: - made the value reset for public and train transport to 0 in the ui of the configurator - made the employee amount reset to 0 in the employee form if the benefit is unchecked task-id: 5386766 Forward-Port-Of: odoo/enterprise#103374 Forward-Port-Of: odoo/enterprise#101592
This update resolves an issue where arrow keys didn't function properly when adjusting range values (like intensity) in certain Odoo features. The fix replaces a flawed conversion method with one that correctly handles fractional numbers, ensuring accurate control over these settings. This improves usability for users adjusting scroll effects and other range-based parameters.
Original PR description
**Problem** Arrow-keys don't work properly on `BuilderRange` if the `step` value is fractional. **How to reproduce** The problem is present on every `BuilderRange` having fractional `step`. For example: snippet `s_parallax` -> set "Scroll Effect" to "Parallax to Top" -> "Intensity" range. **Why the problem happens** The method `BuilderRange.onKeydown` retrieves the range value as a string, converts it to a number using `parseInt`, and then adds or subtracts the step value. Of course, `parseInt` is inappropriate when the value is expected to be fractional. **Fix** `parseInt` has been replaced by `parseFloat`. task-5405036 Forward-Port-Of: odoo/odoo#241141 Forward-Port-Of: odoo/odoo#239428
This update ensures that IoT Box records are correctly updated during upgrades from older Odoo versions. Specifically, the IoT Box now needs to provide its MAC address alongside its serial number, allowing the system to transition from using the MAC address to the serial number as the primary identifier in the database. This resolves an issue impacting data consistency.
Original PR description
When upgrading from <v19.0 to v19.0+, the IoT Box needs to provide its mac address along with its serial number in order for the IoT Box record in the db updates the identifier from mac to serial no. see odoo/enterprise#103331 Forward-Port-Of: odoo/odoo#242356 Forward-Port-Of: odoo/odoo#242212
This update fixes an issue where the IoT Box identifier wasn't correctly updated after a database upgrade. Previously, the identifier was based on the device's MAC address, but now it uses the serial number, ensuring accurate tracking of IoT Boxes. This improves data consistency and reliability.
Original PR description
After upgrading a db, the IoT Box updates. Before v19.0, the IoT identifier was its mac address, after it's the serial number. We now search boxes idenfied by both mac address or serial number and update accordingly. see odoo/odoo#242212 Forward-Port-Of: odoo/enterprise#103398 Forward-Port-Of: odoo/enterprise#103331
This update ensures that the 'Create on Order' field is now visible when a product is designated for rental within Odoo. Previously, this field was hidden for rental products, which created a usability issue. This change simplifies the process for users managing rental products.
Original PR description
Currently, the "Create on order" field is not visible when a product is just to rent. This commit ensures that it is visible in such a case. Enterprise PR: https://github.com/odoo/enterprise/pull/103255 Upgrade PR: https://github.com/odoo/upgrade/pull/9214 task-4886404
This update optimizes how grouped lists and kanban views retrieve data, reducing unnecessary data transfer. Previously, the system sent data even when a user simply navigated between views, impacting performance and potentially causing issues with the offline feature. Now, opening information is only sent when a user actively interacts with a group, improving efficiency and reliability.
Original PR description
Grouped list and kanban views perform a web_read_group call to fetch their data. This call returns the groups, and if some groups are opened, the records (or groups if grouped by several fields)…
Grouped list and kanban views perform a web_read_group call to fetch their data. This call returns the groups, and if some groups are opened, the records (or groups if grouped by several fields) inside those groups. For subsequent loads (e.g. after opening a record in form view and coming back), an `opening_info` param is provided to web_read_group, for the python to know which groups are opened, and what is the limit/offset inside opened groups, to return the correct data to display inside opened groups. This didn't map very well with the cache system, which simply uses the the stringified version of rpc params as cache key. As a consequence, from a grouped kanban view, clicking on a record to open it in form view and coming back wouldn't benefit from the cache, because the web_read_group params were different. Whether this isn't really an issue with the cache, because it's only a matter of speeding up the navigation, it's more problematic for the offline feature, as the view would simply not be accessible again, even though we just left it. This commit thus fixes the issue by only sending opening_info when it is necessary, that is, when the user opened/closed a group or used the pager inside a group. If he didn't do any of that, there's no point providing opening_info, as the server already knows which groups are opened and which aren't. Task~5473450 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update optimizes the account accounting module by preventing unnecessary transmission of opening information. This change improves system performance and reduces data transfer, leading to faster processing times. It aligns with efforts to streamline Odoo's efficiency.
Original PR description
This commit is the enterprise counterpart of odoo/odoo#242493 Task~5473450
This update fixes a bug where the 'Space' key wasn't functioning correctly on the 'Edit' and 'Trash' buttons within Odoo's Kanban quick create records. Now, users can utilize the 'Space' key (and 'Shift+Space') to perform these actions, improving usability and efficiency.
Original PR description
In kanban's quick create record, the 'Space' key is not working on 'Edit' and 'Trash' buttons as earlier versions. After this commit 'Space' key will work as expected. Task-5319051 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239478
This update resolves an issue where the 'View Reactions' button in the customer portal was causing errors when clicked. Now, users can reliably access and view reactions associated with messages, improving the overall customer experience.
Original PR description
Before this PR: - Clicking the 'View Reactions' button from the message right-click menu was throwing an error. After this PR: - Clicking the 'View Reactions' button from the message right-click menu now opens the reactions list correctly without errors. task-5449199 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242025
This update fixes a bug that caused confusing error messages when using QWeb with `etree` nodes. Now, error messages include surrounding code snippets, providing immediate context and making it much easier for developers to quickly identify and resolve QWeb issues.
Original PR description
This PR fixes the error logging when QWeb is used with an `etree` node instead of a standard xmlid or id, to display the path of the directives (xml node) crossed. I have also improved the logging output when running with `--dev=qweb`: the error message now includes the generated code snippet surrounding the line that caused the error. This should make debugging much more intuitive by providing immediate context for the failure. Forward-Port-Of: odoo/odoo#242251
This update resolves an issue where UI tours were failing to display the product column on invoices and bills. The change makes the column visible by default within the tours, ensuring they function as intended. This improves the user experience for training and onboarding.
Original PR description
Commit 9c8e012 changed the visibility of the product column on invoices and bills. This caused several tours to fail as they expected the column to be visible by default. This commit fixes the failures by explicitly toggling the column visibility within the affected tours when required. runbot-234710 runbot-234871 runbot-234872 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242247
This update resolves a technical issue that was causing duplicate test runs due to how data was being pre-fetched. The fix ensures tests run correctly and reliably, improving the stability of the base Odoo system. This change doesn't impact users directly but contributes to a more robust and dependable platform.
Original PR description
Forward-Port-Of: odoo/odoo#242574
This update fixes a recurring test failure in the MRP planning module. The change creates the planning leave manually instead of calculating it, making the test more reliable and consistent. This improves the overall stability of the MRP system.
Original PR description
Before this commit: Introduced in https://github.com/odoo/odoo/commit/d06dcfbca96273b540c87252b9188603879ac1b4, the test was failing on runbot in some cases. The issue is deterministic, but requires a specific set of modules installed to fail. After this commit: Use a more robust approach in the test, by creating the leave manually instead of computing the number of operations needed. runbot-234638 Forward-Port-Of: odoo/odoo#242067 Forward-Port-Of: odoo/odoo#239717
This update resolves a redundant permission check within the voip_crm module. Previously, the system was unnecessarily verifying user group membership, which has now been simplified to only check for the necessary 'group_sale_salesman' role. This improves system efficiency and security.
Original PR description
`group_sale_manager` implies `group_sale_salesman`[1] [2]. Just checking `group_sale_salesman` is enough. [1]: https://github.com/odoo/odoo/blob/54681272e9f00a171fe49f690979e2a8353ff5fb/addons/sales_team/security/sales_team_security.xml#L25-L33 [2]: https://github.com/odoo/odoo/blob/54681272e9f00a171fe49f690979e2a8353ff5fb/addons/sales_team/security/sales_team_security.xml#L17-L23i Task-5461729 Forward-Port-Of: odoo/enterprise#103537 Forward-Port-Of: odoo/enterprise#103378
This update fixes an issue where the item name sent to the SInvoice system was incomplete, missing descriptions or failing to include product details. The change ensures that all line item information, including descriptions and default units, are correctly transmitted, improving data accuracy for invoicing.
Original PR description
Currently, the item name in the data sent to the SInvoice system is comprised only of the product name on the line. This brings a few issues that should be corrected: - Any description set on the line on top of the product won't be sent - If there is no product, the required item name will be set to False - If there is no product, the required unit name will be set to False too To fix these issues, we will: - Use the line name directly and not the product name and; - Default to 'Units' for the unit name in all cases where it wouldn't be set. task-5438691 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241503
This update fixes an issue where URLs containing commas were not correctly recognized in email content. Now, URLs with commas, like those used for tagging, will be properly identified and handled. This ensures accurate link tracking and display in emails.
Original PR description
Currently a valid url like: `https://www.odoo.com/1,2,3/test` Will only be matched up to the first comma: `https://www.odoo.com/1` As we use commas quite often for tag urls, they should be supported. Additionally one should be able to write: "For more info, go to `https://www.odoo.com/`." without the url containing a random dot. We can assume commas and dots should only be matched if they're not followed by spaces or the end of the line. task-4876650
This update corrects a minor issue in the Web Studio module where the input type for a property was incorrectly defined as 'string'. The change simplifies the configuration by reverting to the default 'text' type and removing an unused class. This ensures consistent behavior and improves the overall stability of the Web Studio interface.
Original PR description
Before this commit, the input type was set to `string` instead of `text`. Since the default type is `text`, we simply removed this line. We also removed the class, as it seems to be unused.
This update resolves an issue where the pivot table export feature would fail when no data was provided. The system now returns a standard error message (422) to indicate invalid data, ensuring a smoother user experience and preventing unexpected errors during export operations.
Original PR description
Currently an exception is generated when controlled `/web/pivot/export_xlsx' tries to export xlsx with empty data. `KeyError: 'title'` This PR resolves the issue by raising an `UnprocessableEntity` exception when empty data is provided. The resulting 422 response indicates that the server understood the request and its syntax, but cannot process it because the data is invalid. sentry-6321555617 Forward-Port-Of: odoo/odoo#242511 Forward-Port-Of: odoo/odoo#241415
This update resolves an issue where users without administrator permissions encountered errors when opening duplicated reports within the Studio feature. The fix prevents a traceback by ensuring the system handles permission errors gracefully, improving the user experience for all users.
Original PR description
When a user opens a duplicated report in Studio after their administrator rights are removed, a traceback is raised. Steps to reproduce the error: - Install ``account`` and ``web_studio`` - Login as…
When a user opens a duplicated report in Studio after their administrator rights are removed, a traceback is raised. Steps to reproduce the error: - Install ``account`` and ``web_studio`` - Login as Mitchell Admin > grant Administrator and Invoicing Administrator rights to Mark Demo - Login as Mark Demo in incognito tab > Open invoices > Open studio > Reports > duplicate any report - Login as Mitchell Admin, remove administrator right of Marc Demo - In Mark Demo, Open the duplicated report Traceback: ```py UnboundLocalError: cannot access local variable 'studio_view' where it is not associated with a value ``` https://github.com/odoo/enterprise/blob/58dc97cb5a7185dc2acd801bb3af0e6c35add0b6/web_studio/controllers/report.py#L379 The bug occurs because ``_get_and_write_studio_view()`` method performs a search on ``ir.ui.view`` before returning ``studio_view``. For users without the required permissions, this ``search()`` raises an AccessError. https://github.com/odoo/enterprise/blob/58dc97cb5a7185dc2acd801bb3af0e6c35add0b6/web_studio/controllers/report.py#L393-L400 Since this exception is raised before the assignment completes, the local variable ``studio_view`` is never bound. However, the finally block of ``deactivate_studio_view`` is always executed and attempts to access ``studio_view.active``, resulting in an ``UnboundLocalError``. sentry-7149350379 Forward-Port-Of: odoo/enterprise#103017
This update simplifies vendor bill emails by removing the unnecessary 'Preview on Portal' button, which previously caused issues with the portal payment process. Additionally, a minor UI adjustment was made to improve the visibility of the input field for email notifications. This ensures vendor bills contain the original PDF and streamlines the email experience.
Original PR description
Vendor bill emails are meant to include the vendor’s original PDF rather than an Odoo-generated invoice. The "Preview on Portal" button was hidden to avoid facing errors in the portal payment page. Additionally, remove the CopyClipboardChar widget from the "incoming_einvoice_notification_email" field to make the input placeholder visible. task-5438315 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a visual bug where long date ranges in task planning caused the Kanban card layout to break. The fix ensures the date range widget stays within the card boundaries, maintaining a clean and consistent user interface. This improves the overall usability of the Field Service module.
Original PR description
Steps to reproduce: ---------------------------- 1. Install Field Service module 2. Open any task from Field service module 3. In the Planned date field set a wide range spanning years, for example:…
Steps to reproduce: ---------------------------- 1. Install Field Service module 2. Open any task from Field service module 3. In the Planned date field set a wide range spanning years, for example: Dec 16, 2024, 1:30 PM → Oct 13, 2026, 6:00 PM. 4. Go back to kanban view 5. Adjust display to around 360 px Observation: ---------------------------- The planned date daterange widget overflows and extends outside the kanban card, breaking the card layout and visual containment. Issue: ---------------------------- The daterange widget's parent container did not enforce a width, so the widget could grow beyond the kanban card boundary when a long date range was used. Solution: ---------------------------- Add the w-100 class to the daterange container div to enforce full-width layout within the kanban card. Before: <img width="584" height="529" alt="before_css" src="https://github.com/user-attachments/assets/e89302b0-975c-47eb-91ec-89dbfe813493" /> After: <img width="561" height="528" alt="after_css" src="https://github.com/user-attachments/assets/48b60a78-18da-4504-98ef-a9c4013b107b" /> opw-5219941 Forward-Port-Of: odoo/enterprise#102093
This update corrects a technical issue where duplicate keys were generated for report templates, potentially causing customization conflicts and data inconsistencies. The fix ensures unique keys across all report templates, improving the reliability and accuracy of report generation and preventing unexpected behavior.
Original PR description
Before this commit: ------------------------- The sequence used in the template key was computed based only on the last active template. If the next sequence number corresponded to an inactive…
Before this commit: ------------------------- The sequence used in the template key was computed based only on the last active template. If the next sequence number corresponded to an inactive template, the system could end up generating duplicate template keys — one for the inactive template and one for the newly created active template. After this commit: ----------------------- The sequence for the template key is now computed based on the last template, regardless of whether it is active or inactive. This ensures that template keys remain unique across all report templates. Why this commit: ----------------------- if a template is inactive, the report engine should raise an error. However, because duplicate template keys were being generated, the inactive template could silently fall back to the active template with the same key, preventing the expected exception and bringing customization of one report to another. Additionally, if the inactive template is later corrected and reactivated, both reports would still reference the same template (the one with the smaller ID) because they shared identical template keys. This fix prevents such conflicts by ensuring unique template key generation. Forward-Port-Of: odoo/enterprise#101894
This update resolves an issue where the Company Paid Time Off field in the Time Off settings was blank. The fix ensures that the 'l10n_fr_reference_leave_type' field is correctly populated in the demo data, preventing validation errors when creating new leave requests. This ensures accurate leave management.
Original PR description
**Steps to reproduce:** - Install l10n_fr_hr_holidays module. - Go to Time Off > Configuration > Settings. - Company Paid Time Off field should blank. - Employee `resource_calendar_id` is not same as company's. - Create new leave > a validation error will occur. **Cause:** - The demo data for 'res.company' did not correctly set the `l10n_fr_reference_leave_type` field. - 'l10n_fr_reference_leave_type' field should be required. **Fix:** - Updated demo record to correctly assign `l10n_fr_reference_leave_type` field. - Set the `l10n_fr_reference_leave_type` field as required. Task - 5139488 Forward-Port-Of: odoo/odoo#242390 Forward-Port-Of: odoo/odoo#231385
This update resolves a problem preventing correct installation of the 'accountant' module for several localized versions of Odoo (e.g., Mauritius). The issue stemmed from a missing configuration setting, which has now been added to ensure proper module setup and functionality across these localized environments.
Original PR description
Steps to reproduce: 1. Install 'accountant' 2. Create a new company without a country and switch to that company 3. Accounting > Configuration > Fiscal Localization 4. Select Mauritius and save Issue: It gives a traceback: KeyError: 'mu' Cause: 'auto_install' is not present in the manifest file. Solution: Add 'auto_install': ['account'] in the manifest as it is done in other localization modules. opw-5231064 Forward-Port-Of: odoo/odoo#240170 Forward-Port-Of: odoo/odoo#236207
This update fixes inconsistencies in the Point of Sale discount dialog and number popup appearance. The dialog title has been simplified for clarity, and the number popup styling has been standardized. Additionally, the width of the number pop-up dialogs has been adjusted to match previous versions, ensuring a consistent user experience.
Original PR description
Before this commit: =================== - The dialog title was `Discount Percentage`, even though the global discount can be applied either as a fixed amount or as a percentage. - The NumberPopup has double primary buttons (Type and Confirm buttons), which leads to an inconsistent UI - Also, since this commit https://github.com/odoo/odoo/commit/01741aa2619998078bd19aca848146ac75c027fc, the PoS NumberPopup dialogs have some extra width. After this commit: ================== - We renamed the dialog title to `Discount` to make it more generic. - We updated the NumberPopup type selector styling to make UI consistent. - Also reduced the width for the number pop-up dialogs, same as the previous version. Task: 5424805 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241074
This update fixes a cluttered appraisal form view when a large number of appraisal templates are used. The change simplifies the form by reverting to a standard, searchable dropdown, enhancing usability and reducing visual confusion for users.
Original PR description
Steps to reproduce: - Install the hr_appraisal module. - Open the form view of an appraisal when more than 100 appraisal templates exist. Issue: When the appraisal form view is opened with a large number of templates, the view becomes cluttered because all templates are displayed at once. Fix: This PR removes the widget and reverts to a standard related field with a searchable dropdown, improving readability and usability. task-5438146 Forward-Port-Of: odoo/enterprise#102866
This update fixes a potential confusion in the sales details report by ensuring payment order is consistent and predictable. The report now sorts by payment method and session, making it easier for users to understand sales transactions and improve reporting accuracy. This change enhances the reliability of sales data analysis.
Original PR description
Before this commit, payment order was not guaranteed and could confuse users reviewing sales details report, especially as the cash register lines are ordered before. This commit orders the results by payment method and session to make the output more readable. opw-5240864 Forward-Port-Of: odoo/odoo#242387 Forward-Port-Of: odoo/odoo#237040
This update improves the self-order experience by ensuring the order note input field maintains a consistent size across all devices, particularly in kiosk mode. Previously, resizing the text area could cause UI shifts, leading to a less reliable user experience. This change ensures a stable and predictable layout for self-ordering transactions.
Original PR description
In this commit - ------------- - Make the self order note textarea non-resizable and enforce a fixed size to avoid UI shifts in self/kiosk mode Task-5469804 Forward-Port-Of: odoo/odoo#242269
This update enhances the HTML editor's `/separator` command to split text blocks more intuitively, placing the separator at the cursor position instead of after the entire block. Additionally, a bug was fixed where the 'Toggle List' command created empty toggle blocks, now correctly using the existing line's content. This improves the overall user experience and consistency within the HTML editor.
Original PR description
When using the `/separator` command, the separator used to be added after the current block. In this commit this is changed towards a more intuitive behavior that splits the block at the current cursor position. task-5367766
This update simplifies the process of displaying available registration slots on the website. Previously, slots were filtered repeatedly, leading to maintenance challenges. Now, slots are filtered once within the registration modal, improving code clarity and reducing the risk of errors.
Original PR description
* = event, event_booth, event_exhibitor, event_track, event_track_quiz This PR cleans this fix (https://github.com/odoo/odoo/pull/226635). The open slots were filtered in each route displaying the slots modal. However, this solution makes the code difficult to maintain as the slots must be added in the return of the new routes, which is easy to forget. A better solution is to filter the slots once and for all inside the slots modal. That solution was not doable in stable as it required the update of the XML records. Task-5083175
This update improves the HTML Editor by allowing users to cancel ongoing file uploads. Previously, uploads couldn't be stopped, leading to potential delays and frustration. A trash icon has been added to the upload progress notification, providing a simple way to interrupt the process.
Original PR description
Currently upload_service doesn't support cancel an ongoing upload. This PR aims to add a fa-trash button in upload progress toast. Clicking on it will cancel the ongoing upload for corresponding file. task-5262931 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a grammatical error in the action helper text for the Gift Cards & ewallets feature within the Odoo Sales module. The change ensures consistent and professional communication for users managing loyalty programs and gift card transactions. This improves the user experience and overall clarity.
Original PR description
Steps to produce: - Install `Sale` module without demo data. - From the settings, enable `Discounts, Loyalty & Gift Card`. - Go to `Sales > Products > Gift Cards & ewallets`. Observation: - Observed that the action helper text contained incorrect English grammar. Solution: - The changes were made according to the PO’s requirements. Before: <img width="400" height="400" alt="image" src="https://github.com/user-attachments/assets/ac4d2461-000e-4979-b956-5cf0cc24419d" /> After: <img width="400" height="400" alt="image" src="https://github.com/user-attachments/assets/ab41ed14-8933-493d-8803-b8834371bf9d" /> opw-4859713 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical issue that prevented the Enterprise POS list view from loading correctly when in debug mode. The fix addressed a mismatch in data types within the POS settings, ensuring the list view now functions without errors and improving overall system stability.
Original PR description
In this commit, --- - Removed the color option from the Stages field. - The color_field option only supports Integer fields, while the stage color field was of type Char. - This mismatch caused a traceback when opening the list view in debug mode. Fixing this ensures the list view loads correctly without errors. task-5446781 Forward-Port-Of: odoo/enterprise#103018
This update resolves an issue where images weren't appearing in email marketing campaigns. The fix ensures images are fully loaded before their dimensions are determined, preventing them from being rendered as invisible. This improves the visual quality of email campaigns and ensures recipients receive the intended content.
Original PR description
Problem: When sending an email marketing, some images are not visible in the received email. Cause: After 354b8f60dbabcfac690d90bf657592e1347e4f86, we clone the `editable`, append it to…
Problem: When sending an email marketing, some images are not visible in the received email. Cause: After 354b8f60dbabcfac690d90bf657592e1347e4f86, we clone the `editable`, append it to `processingContainer`, and call `toInline` on it. During `toInline`, images with the `.card-img-top` class are queried and their size is fixed using `getComputedStyle`. Because the editable is freshly cloned, images may not be loaded yet. Calling `getComputedStyle` on an unloaded image returns a height of `0`, which results in images being rendered as invisible. Solution: After cloning the editable, wait for all images inside it to finish loading before running `toInline`. This ensures `getComputedStyle` returns the correct dimensions. Steps to reproduce: - Open Email Marketing. - Add a Columns snippet with images. - Send the email. - Observe that the received email is missing some images. opw-5215534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240530
This update resolves an issue where grouped Kanban cards were displaying incorrectly due to a change in the Kanban templates. The PR simply removes a no-longer-needed CSS class, restoring the correct card heights and visual appearance. This ensures a consistent and functional user experience.
Original PR description
Since commit https://github.com/odoo/enterprise/pull/70460 and the reworking of the Kanban templates, the h-100 class was no longer correct. This PR fixes the issue by removing this class. task-5439265 Forward-Port-Of: odoo/enterprise#102801
This update fixes an issue where gray color selections in the website builder didn't update correctly. Now, changes to gray hues and saturation in the color picker are accurately reflected, ensuring a consistent and professional look for customer-facing websites. This improves the visual consistency of Odoo websites.
Original PR description
Steps to reproduce: - Open Website Builder. - Go to Theme > Advanced. - Change the grays hue or saturation. - Open a color picker and check the gray swatches. Before this commit, gray swatches kept using the default palette after changing the grays hue or saturation. After this commit, gray swatches reflect the customized grays. Forward-Port-Of: odoo/odoo#242562
This update fixes an issue where string values entered in the web_studio field editor were incorrectly formatted with extra quotes and slashes. Now, string values are correctly displayed and saved, ensuring accurate configuration of fields within the studio interface. This improves the usability and reliability of the web_studio tool.
Original PR description
Have a field widget with an option of type "string" (supportedOption meta field of the widget) In studio, change the value for that option. Before this commit, the value appeared in the input as escaped: there were supplementary quotes and slashes After this commit, the string value is correctly displayed. Forward-Port-Of: odoo/enterprise#103476 Forward-Port-Of: odoo/enterprise#103364
This update resolves an issue where duplicating an invoice from a sales order would incorrectly link both the original and duplicate invoices with the same source document. The fix prevents the automatic copying of the source document during the duplication process, ensuring each invoice has its own unique link.
Original PR description
### Issue: When opening an invoice from a Sale Order and duplicating it, the Source Document (invoice_origin) was also copied As a result, both the original and duplicated invoice showed the same…
### Issue: When opening an invoice from a Sale Order and duplicating it, the Source Document (invoice_origin) was also copied As a result, both the original and duplicated invoice showed the same Sale Order in the Source Document field ### Cause: The `action_view_invoice` method adds `default_invoice_origin` in the context, causing the `copy` function to set `invoice_origin` The field invoice_origin was already set with copy=False in this PR: https://github.com/odoo/odoo/pull/236656 The default context was introduced in PR: https://github.com/odoo/odoo/pull/34561 ### Steps to reproduce: - Create a sales order (SO) - Create and confirm an invoice from the SO - Click on the `Invoices` smart button to access the invoice (SO is visible at the top) - Duplicate and confirm the invoice (The SO is not linked) - Go to the invoices list view and make the `Source Document` visible - Observe that both invoices show the same SO as their `Source Document` opw-5360172 Forward-Port-Of: odoo/odoo#239676
This update resolves an issue where stat buttons appearing within bottom sheets were sometimes displaying incorrectly, particularly in modules like Sale Project and Timesheet. This fix ensures that stat buttons function as expected within bottom sheet displays, improving the user experience and data accuracy.
Original PR description
when a stat button is displayed inside a bottom sheet, it can appear broken (e.g., in sale_project, sale_timesheet). task-5359751 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238162
This update fixes a bug that caused duplicate work orders to be created when a manufacturing order's BoM was modified after the order was saved. The fix ensures that work orders are only generated once, streamlining the production process and preventing errors.
Original PR description
Steps to reproduce:
- Create a storable product "P1"
- Create a BoM with one operation
- Create a manufacturing order for product "P1"
- Do not set any BoM
- Save
- In draft state:
- Set the BoM
- Without saving, update the quantity to produce
Problem:
The same operation is added twice, resulting in duplicate work orders.
Cause:
Work orders are recomputed multiple times when BoM and quantity are changed before saving, and existing (not yet saved) work orders linked to the same BoM are not properly filtered out.
Fix:
Ensure that work orders linked to the current BoM are only created once during recomputation.
opw-5404686
Forward-Port-Of: odoo/odoo#241475
Forward-Port-Of: odoo/odoo#240757This update fixes a potential issue where archiving or reassigning employees with multiple versions could cause problems with how Odoo generates key reports. The change ensures that only relevant employee versions are updated, preventing data inconsistencies and improving the stability of the HR module.
Original PR description
Currently, it is possible to archive or reassign all versions of an employee if there exists more than 1. This leads to issues with generating the necessary SQL views for the `hr.employee.public` model. To rectify this issue, we check whether the versions of each employee is a subset of the records being written to. opw-5289226 Forward-Port-Of: odoo/odoo#241142 Forward-Port-Of: odoo/odoo#238358
This update ensures that point-of-sale order lines can only be merged if they have identical discounts and unit prices. Previously, merging worked inconsistently, leading to potential errors. This change provides a more reliable and predictable process for managing order lines in the POS system.
Original PR description
Only allow merging lines if they have the same discount and unit price. Before this commit, you were able to merge lines with different discounts or unit prices only if the source order contained the line with the discount/price change. It was not working the other way which was inconsistent. task-id: 5189949 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241903 Forward-Port-Of: odoo/odoo#232963
This update resolves a technical glitch that prevented users from consistently selecting product variants during the subscription add-to-cart process. The team switched to a click action instead of a selection check, ensuring a reliable experience for customers adding subscription products to their carts.
Original PR description
In this commit we fix undeterministic error in tour sale_subscription_add_to_cart. We can see on https://runbot.odoo.com/odoo/error/234505 that variant white can not be always selected. For that we prefer use click action instead of check action. Forward-Port-Of: odoo/enterprise#103458
This update corrects a technical issue within the IoT Box image build process. The fix ensures the necessary Bluetooth package (`gatt`) is included, preventing a potential error that could disrupt device functionality. While primarily impacting internal operations, this resolves a stability concern.
Original PR description
As the image is built on a "non-RPI" linux machine, gatt isn't installed at build time. It requires the image to update itself to get the package. Even if the gatt package is only used for bluetooth caliper devices that are not widely used, this fix avoids a traceback. Forward-Port-Of: odoo/odoo#242599
This update fixes a visual issue where a duplicate dropdown menu appeared when editing or deleting social stream posts. The change ensures the existing 'social_crm' dropdown is correctly integrated, maintaining a consistent user experience. Additionally, the 'is_author' field was re-introduced to manage button visibility for post editing and deletion.
Original PR description
Following https://github.com/odoo/enterprise/commit/c9ddf1c a new dropdown has been added to "social" to allow the edition and deletion of a social stream post. This new dropdown didn't take into account the one already existing in "social_crm" resulting in a duplicated dropdown menu. Fixing the issue by making sure the dropdown from "social_crm" is correctly extending the one from "social". As the "Create Lead" action is set above the "Edit" and "Delete" ones, making sure it's also the case for the stream post comments dropdown menu for consistency. Re-inserting the "is_author" field (removed here https://github.com/odoo/enterprise/pull/69650) in the kanban view to make sure the "Edit", "Delete" and "Create Lead" buttons visibility are correctly managed for your own posts. Task-5270180 Forward-Port-Of: odoo/enterprise#103409 Forward-Port-Of: odoo/enterprise#101679
This update resolves an issue where creating a new spreadsheet template within the Quality Control app would trigger a validation error due to a missing default name. The fix provides a pre-populated name, streamlining the template creation process and preventing user frustration.
Original PR description
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control…
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control Points. 3. Click "New". 4. Set the type to "Spreadsheet". 5. Click on Spreadsheet Template > Search More. 6. Click "New". -> A validation error is raised. **Cause** In `quality_view`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/quality_control/views/quality_views.xml#L840C17-L845C19 the `many2one_spreadsheet` widget (see [`many2one_spreadsheet_field.js`](https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L36)) overrides "Create and Edit" to create a new spreadsheet through `Many2XSpreadsheetAutocomplete`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L11C9-L14C51 This flow does not set a default value for the required `name` field, nor does `action_open_new_spreadsheet`:https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/spreadsheet_edition/models/spreadsheet_mixin.py#L348 Since `name` is required: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/quality_control/models/quality_spreadsheet_template.py#L12 validation fails. **Solution** Provide a default value for the `name` field, using the same default as in `documents_document.py`: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/documents_spreadsheet/models/documents_document.py#L321 opw-5340710 Forward-Port-Of: odoo/enterprise#101671
This update resolves an issue where email invitations in Discuss channels were incorrectly displayed as 'this message has been removed'. The change ensures the correct message type is used, preventing misleading notifications and improving the user experience. This fix ensures invitations are handled properly within the Discuss platform.
Original PR description
Steps to reproduce: * Open a public Discuss channel. * Invite an external user by email. * Refresh the page. An email-related message is fetched and displayed as `this message has been removed`. This happens because the message is created with `message_type = 'email_outgoing'`, even though it is conceptually a user notification and not meant to be rendered as an email in Discuss channels. This commit fixes the issue by setting the correct `message_type` (`user_notification`) instead of `email_outgoing`, ensuring the message is not displayed in Discuss, avoiding a misleading removed message. Task-5438936 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242568 Forward-Port-Of: odoo/odoo#241112
This update resolves an issue that caused Facebook statistics refresh to fail on older versions of Python. The problem stemmed from a difference in how date/time formats were interpreted, specifically with the '+0000' versus '+00:00' timezone notation. This change ensures consistent data retrieval and reliable Facebook statistics updates.
Original PR description
Bug
===
When refreshing the statistics of a Facebook account, an error can happen, depending on the datetime library version.
The following work in python 3.11, but not on python 3.10 and earlier, due to `+0000` instead of `+00:00`.
```py
import datetime
datetime.datetime.fromisoformat('2025-11-16T08:00:00+0000')
```
Task-5473117
Forward-Port-Of: odoo/enterprise#103456This update addresses a warning message appearing during payment token searches. The change adds a field to the payment token model, allowing searches to be performed using the record's name instead of the display name, preventing the warning and ensuring consistent search functionality. This improves the stability and reliability of the payment processing system.
Original PR description
address this warning: `2026-01-07 04:53:23,985 3407309 WARNING v18c_... odoo.models: Cannot search on display_name, no _rec_name or _rec_names_search defined on payment.token` Forward-Port-Of: odoo/odoo#242477
This update ensures that downpayment accounts are correctly applied when calculating taxes externally (like Avatax). Previously, invoices always used a default income account, even with a downpayment account set. Now, the system checks for a product category's downpayment account or falls back to the company's default if no category exists, aligning with standard downpayment behavior.
Original PR description
**Problem:** When calculating taxes externally (such as Avatax) and a downpayment is made, the line on the invoice will always use the default income account, regardless of the downpayment account set as a company default. This is inconsistent with the standard behavior of downpayments, which will use the downpayment account set on the product's category instead of the income account (which themselves may come from company defaults). **Solution:** Check if there's a company default for downpayment account on product category and use this account for the downpayment line instead of the income account. opw-5171067 Forward-Port-Of: odoo/enterprise#101860 Forward-Port-Of: odoo/enterprise#101524
This update resolves a recurring test failure caused by an outdated date used in the l10n_mx_edi module. By setting a more standard test date, the tests are now consistently passing, ensuring reliable development and preventing disruptions.
Original PR description
Some tests are making "self.frozen_today - timedelta(days=1)". It means some tests are failing only the first of January. To avoid that, let's make "frozen_today" to be in the middle of the year. Forward-Port-Of: odoo/enterprise#102827 Forward-Port-Of: odoo/enterprise#102772
This update resolves a potential crash in the mass mailing module that could occur when the ThemeSelectorIframe component was removed before its resources were fully loaded. The fix ensures the system can reliably handle situations where the iframe is destroyed during the loading process, improving stability and preventing unexpected errors.
Original PR description
Prior to this commit, if the `ThemeSelectorIframe` component was destroyed in the time it took to get its bundle and load its CSSSheets, there could be a crash because the iframe would not be in the dom anymore and it would not be possible to use the `iframeRef.el`. Forward-Port-Of: odoo/odoo#242757
This update resolves an issue where users without attendance access rights were encountering errors when attempting to view employee attendance data. The fix restricts access to sensitive information and ensures only authorized personnel can view attendance records, improving data security and usability.
Original PR description
Steps to reproduce: - Log in as a user without attendance access rights - Open the current user's employee record (public view) - Click the "Monthly Hours" smart button Issue: - Public users cannot access the `attendance_manager_id` field, which was used to group records by employee in the Gantt view. Fix: - Add a permission check before accessing `attendance_manager_id` - Restrict non-attendance officers to viewing only their own attendance task-5440612 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241796
This update fixes a crash that occurred when deleting an employee hierarchy element (like a department) while a default filter was applied. The change ensures the system correctly handles record relationships, preventing the 'Missing Record' error and improving stability for employee management.
Original PR description
Reproduce the crash: 1- Create departement in Employees. 2- Create a default filter with child_of or parent_of on the previously created departement. 3- Delete the departement. 4- Go back to Employees => Crash 'Missing Record' This commit adds a check for record exitence in `child_of_domain` and `parent_of_domain` in the case where `_parent_store` is True. This change prevents the `Missing Record` Error. task-5217722 Forward-Port-Of: odoo/odoo#242667 Forward-Port-Of: odoo/odoo#240013
This update ensures Odoo's internal crawler, Odoobot, behaves responsibly when fetching data from external websites. By checking a website's robots.txt file, we now respect the site's rules about which parts of its content can be accessed, preventing unnecessary data retrieval and improving the reliability of our data collection.
Original PR description
### Purpose Add `robots.txt` compliance to the `_fetch_url` helper. Before fetching any URL, we now check the site's `robots.txt` and ensure that our user agent (`Odoobot/1.0`) is allowed to access the requested path. ### Changes - Added `robots.txt` validation using `urllib.robotparser` - Respect disallow rules for the `Odoobot/1.0` user agent ### Why This ensures that our crawler behaves politely, avoids fetching disallowed resources, and provides more transparent failure reporting. --- **Task-ID:** 4779962 Forward-Port-Of: odoo/enterprise#103603 Forward-Port-Of: odoo/enterprise#96369
This update fixes an issue where applying full amounts to bank statement lines was incorrectly triggering tax calculations. This change ensures that tax calculations are only applied to lines that require them, improving the accuracy of financial reporting. It resolves a problem identified after a previous code update.
Original PR description
Since this commit: https://github.com/odoo/enterprise/commit/5893005187fd67613baaae38e58e126dc9e28544 It could happens that on lines that come from an invoice or a payment (so lines with reconciled_lines_ids. Applying the full amount would trigger the edit_tax_line function which shouldn't be the case since those lines cannot have tax set on them. no task id Forward-Port-Of: odoo/enterprise#103422 Forward-Port-Of: odoo/enterprise#103334
This update resolves an issue where copying content from the Knowledge editor resulted in a loss of plain text formatting. The commit restores the ability to copy and paste plain text, ensuring users can accurately transfer information to other applications. This improves the usability of the Knowledge feature for common tasks.
Original PR description
Since [1] when `vnd.odoo.odoo-editor` was added to the `HtmlViewer` clipboard, the `text/plain` mimetype was lost. This commit restores the plain text version of the clipboard. Steps to reproduce: - In knowledge, lock a page - Select some content - Copy - Paste into a plain text editor => No content was pasted [1]: https://github.com/odoo/odoo/commit/62a7c50b434e3f47ad58e20e96970cbd90b979b6 task-5449435 Forward-Port-Of: odoo/odoo#241741 Forward-Port-Of: odoo/odoo#241642
A visual bug causing a horizontal cursor to appear between cards in the website builder has been resolved. This change disables a plugin that was incorrectly enabling cursor editing and also prevents editing of image figures, ensuring a cleaner and more professional card layout experience.
Original PR description
Since [1] when the selection placeholder plugin was introduced, a horizontal cursor is displayed between cards in website, while that area is not supposed to be editable. This commit disables the `SelectionPlaceholderPlugin` inside the `html_builder`. It also makes the `<figure>` element around images non editable - in order to be able to write a test that does not enforce it to be wrong. Steps to reproduce: - Drop an `s_cards_grid`` block - Put the cursor in a card - Move the cursor with the arrow keys until you leave the card => The cursor was displayed between cards. [1]: https://github.com/odoo/odoo/commit/edf7f7bb0c62978640c181eccb4934855d5d872d task-5383957 Forward-Port-Of: odoo/odoo#242668 Forward-Port-Of: odoo/odoo#240591
This update resolves a bug that caused an error when users canceled image selection in the Salary Configurator. The fix ensures the system correctly handles image uploads and deletions, preventing unexpected errors and improving the user experience. This ensures smooth operation of the employee contract generation process.
Original PR description
**Version:** - 17.0 **Steps to reproduce:** - Install the hr_contract_salary module. - Go to Employee contract and click the Generate Offer. - Click on 'Send By Email' button and open Salary Configurator. - Upload an employee photo the first time. then cancel the image selection the second time. **Issue:** - Error occurs when canceling the image selection on Salary Configurator page. **cause:** - The condition to check whether the file exists properly was missing. **solution:** - Added the missing condition to properly check that file exist. Task-5423390 Forward-Port-Of: odoo/enterprise#103421 Forward-Port-Of: odoo/enterprise#102410
This update fixes a visual issue on the shop page where product images were stacked instead of smoothly transitioning when hovering. By adding a specific CSS class, the system now ensures consistent and animated image replacement across all product list views, improving the user experience. This ensures a more professional and engaging look for product browsing.
Original PR description
Before this commit : --- when the none type hover effect selected on the shop page product hover is supported by default but in this hover transition images are stacked instead of replacing. https://github.com/user-attachments/assets/04801451-842d-4072-bfcf-249767962823 Why this commit : --- adding 'o_wsale_products_opt_img_hover_none' class to manage this image stacking issue The none type is default for all the list layout views hence the image stacking issue observed in all the list views where product image is uploaded in the png without background image. https://github.com/user-attachments/assets/8ad8832f-f2e8-486c-a638-32ea3595493a OPW: 5406434 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241698
This update resolves an issue where the appraisal plan start date wasn't being correctly calculated. The previous change removed a key logic piece, and this PR reintroduces it to ensure accurate appraisal scheduling. This ensures appraisals are initiated on the correct dates.
Original PR description
**Issuee:** A recent change (https://github.com/odoo/enterprise/pull/100599/changes) was made to remove duplicate mehtod, but we need to maintain the main logic of setting the `appraisal_plan_start_date` field. This PR reintroduces this logic. Task:5408846 Forward-Port-Of: odoo/enterprise#103385 Forward-Port-Of: odoo/enterprise#102022
This update optimizes how the Point of Sale system calculates product prices for paid orders. Previously, the system unnecessarily recomputed prices even after payment, leading to wasted processing time. This change improves the efficiency of the POS system and reduces unnecessary calculations.
Original PR description
Before this commit, the POS system would recompute product prices even for orders that were already paid. This led to unnecessary calculations. opw-5263663 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238838
This update resolves an issue where dynamic snippet templates didn't fully reset container widths after a change. The fix ensures all container classes are cleared, preventing outdated styles from persisting and improving the consistency of website layouts when snippets are updated. This results in a cleaner and more predictable user experience.
Original PR description
Steps to Reproduce: 1. Drop a dynamic snippet from debug block. 2. Set the fetched elements to 1. 3. Set the content width to Thin (o_container_small). 4. Change the template of the snippet. When changing a dynamic snippet's template, previously set container widths (e.g., "Thin") could persist even though the option resets. Issue: Only template defined containerClasses were removed, leaving manually set classes like "o_container_small" behind. Fix: All container classes are cleared before applying the new template's containerClasses or falling back to "container". Forward-Port-Of: odoo/odoo#241804
This update resolves a technical issue that prevented users from correctly selecting a delivery method during checkout on the first interaction. The fix adds a simple check to ensure the necessary webpage elements are loaded before attempting to modify them, ensuring a smooth checkout experience. This improves stability and prevents a frustrating error for customers.
Original PR description
**Description:** - This error occurs when the code attempts to access the classList of a DOM element that has not yet been rendered. Specifically, amountDelivery.querySelector(...) returns null…
**Description:**
- This error occurs when the code attempts to access the classList of a DOM element that has not yet been rendered. Specifically, amountDelivery.querySelector(...) returns null during the first selection of the delivery method, and calling .classList on this null value triggers the traceback.
- The issue is observed only on the first interaction when selecting the delivery method. After refreshing the page, the required DOM element is available, and the checkout flow works as expected.
- To resolve this issue, a conditional check was added to ensure that the DOM element exists before accessing its classList.
- [Reference](https://github.com/odoo/odoo/pull/204358/files#diff-ecbd12f8bbcc7e08a87d7edba111301bb0ca5197137d193323d156809651fcb6R353)
**Steps to reproduce:**
1) Create a fresh database on version saas-18.4.
2) Install the website_sale module.
3) Create a product and add it to the cart.
4) Proceed to the checkout page.
5) Add two delivery addresses for the customer.
6) Configure a delivery method for only one of the delivery addresses.
7) During checkout, select the delivery address that has a delivery method configured.
8) When selecting the delivery method for the first time, a traceback occurs.
- Video [video.webm](https://github.com/user-attachments/assets/b9146fef-cef8-4d16-8556-bbeac9ef6119)
**Traceback:**
```.py
Odoo Client Error
UncaughtPromiseError > TypeError
Uncaught Promise > Cannot read properties of null (reading 'classList')
Occured on 51.test.upgrade.odoo.com on 2026-01-07 12:09:06 GMT
TypeError: Cannot read properties of null (reading 'classList')
at Class._updateCartSummary (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11024:437)
at https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11025:355
at NodeList.forEach (<anonymous>)
at Class._updateCartSummaries (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11025:337)
at Class._updateDeliveryMethod (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11022:2353)
at async Class._selectDeliveryMethod (https://51.test.upgrade.odoo.com/web/assets/1/beaafe8/web.assets_frontend_lazy.min.js:11022:54)
```
- opw-5427215
- upg-3715707
Forward-Port-Of: odoo/odoo#242578This update resolves an issue where the product comparison bar was obscured by banner categories on certain pages. The fix removed unnecessary z-index settings that were causing overlapping content. Now, the comparison bar consistently appears correctly, ensuring a better user experience.
Original PR description
Description of the issue: The banner categories snippet (s_banner_categories) had hardcoded z-index values (1, 2, 3, 4) on its grid items. This caused a stacking context issue where grid items with z-index 3 and 4 would overlap the product comparison bottom bar, which uses z-index 3 (default) and 4 (when expanded). Solution in the PR: The z-index values on the grid items were unnecessary since they are positioned using CSS Grid and don't overlap with each other. Removing these inline z-index declarations allow the comparison bar to properly display above all snippet content. After this PR: The comparison bar now consistently appears on top, ensuring users can interact with it without visual interference from page snippets. opw-5426163 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242751
This update fixes an issue where invoice names weren't correctly linked to Avalara transactions. The system now recreates transactions after posting to ensure accurate references, maintaining compatibility with Avalara's reporting. This ensures proper tracking of sales transactions with Avalara.
Original PR description
In the external tax refactor [1] I wanted to use the commit endpoint to commit transactions in Avalara after posting. It works, but now transactions on Avalara's side are missing the Odoo invoice name references. It's still possible to cross-reference transactions using avatax_unique_code, but it's less convenient. The reason is that we create transactions for draft invoices. They don't have a name yet. Avalara doesn't have a way to update just the code so we revert back to the pre-refactor approach of recreating the entire transaction right after posting with `'commit': True`. `account_external_tax` calculates the taxes right before `_post()`, so we're reasonably sure they should remain the same. In master we can remove all the commit-specific methods and code. [1] https://github.com/odoo/enterprise/pull/82623 opw-5382268 Forward-Port-Of: odoo/enterprise#103570
Code cleanup and technical improvements
This update modernizes the Odoo codebase by incorporating recent Python typing improvements introduced in versions 3.11 and 3.12. These changes enhance code readability and maintainability, particularly in how data types are defined, ultimately contributing to a more robust and efficient system.
Original PR description
Description of the issue/feature this PR addresses: Various typing additions in python 3.11, 3.12 than can simplify some declarations. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refactors how WhatsApp channel expiration dates are managed within Odoo Enterprise. Specifically, the date used to determine channel validity is now correctly integrated into the channel model. This ensures accurate channel management and prevents potential issues related to outdated channel access.
This update enhances the WhatsApp integration by utilizing a dedicated channel for managing contact threads. This change streamlines the process of viewing and interacting with conversations, leading to a more organized and efficient user experience within WhatsApp. It's a refinement of the existing WhatsApp functionality.
This update refactors how WhatsApp channels are managed within Odoo, specifically addressing a technical detail related to account identification. This change enhances the stability and efficiency of the WhatsApp integration, ensuring smoother communication flows for users. It's an internal technical update focused on improving the core functionality.
This update refactors how WhatsApp channels handle new messages, streamlining the process for users. Specifically, the automatic opening of a chat window when a new message arrives has been moved to the channel itself, enhancing efficiency and reducing potential conflicts. This change improves the overall WhatsApp experience within Odoo Enterprise.
Original PR description
PR community: https://github.com/odoo/odoo/pull/242275
This update refactors how new messages automatically open chat windows within Odoo channels. Previously, this feature was available across all chats, but now it's specifically tied to channel conversations. This change streamlines the chat experience and ensures new messages are linked to the relevant channel discussions.
Original PR description
PR enterprise: https://github.com/odoo/enterprise/pull/103360
This update refactors how important messages are tracked within WhatsApp channels. Previously, this information was scattered; now, it's consolidated within the channel itself, leading to a more organized and efficient system for managing channel activity. This change enhances the overall WhatsApp experience for users.
Original PR description
PR community: https://github.com/odoo/odoo/pull/242234
This update refactors how commands are executed within live chat channels. Moving command execution to the channel ensures commands are handled more efficiently and reliably, improving the overall chat experience. This change focuses on internal improvements to the Odoo platform.
This update refactors how the 'isDisplayed' flag is managed within Odoo's live chat and email channel systems. Moving this tracking to the channel itself improves data accuracy and consistency, ensuring more reliable channel status reporting. This change enhances the overall reliability of messaging functionality.
This update removes an outdated function used to determine user display names within the Odoo system. The change improves code clarity and aligns with best practices by converting a previous implementation into a getter. This ensures consistent and accurate user name presentation.
Original PR description
*: im_livechat Method `ResPartner._computeDisplayName` has been flagged as deprecated. This is not really "deprecated", but more like an important consideration of previously a `field.Attr()` that has been intentionally turned into a getter. This commit removes the deprecated function and moves all relevant code in the getter `ResPartner.displayName`. The docstring of getter has been tweaked to clarify the intention of getter instead of a record field.