Thursday, January 8, 2026
55 changes · 19.0
Enhancements to existing features
This update enhances the point-of-sale system by displaying a modal notification to users when a print job has already been processed. This prevents duplicate printing and provides clearer feedback to the user. It's a small improvement that streamlines the printing workflow.
Original PR description
In order to inform the user if a print job has already been processed we now display a modal when such event occurs. see odoo/odoo#242827
This update enhances the Odoo IoT drivers by sending notifications when an action is repeated. This ensures users receive timely information about completed actions, improving transparency and preventing potential confusion. The change addresses a previous issue (odoo/enterprise#103682) to provide a better user experience.
Original PR description
In order to inform the user if an action has already been processed we now send an event for duplicated actions. see odoo/enterprise#103682
This update enhances the restaurant POS system by allowing businesses to more flexibly control the redirection to floor plans when orders are removed. The change extracts this logic, providing greater customization options and aligning with a previous enhancement. This improves the user experience for restaurant staff.
Original PR description
To allow overriding the condition to redirect to the floor plan when removing an order, we extract it in its own method. see odoo/enterprise#102992 Task: 5433405 Forward-Port-Of: odoo/odoo#241542
This update translates the error descriptions displayed when receiving data from the Nilvera API, making them understandable for Turkish-speaking users. The underlying error details, which are dynamically generated, remain in Turkish for accuracy. This improves the user experience and reduces confusion.
Original PR description
Before this commit: - Nilvera errors were shown exactly as received from the API, which was in Turkish and could be confusing for non-Turkish users. After this commit: - The error descriptions have been translated. Error details remain in Turkish, as they are dynamic and reliably translated at this stage. task-5003543
This update enhances the handling of UBL (Universal Business Language) documents. It now allows users to omit the required tax exemption reason code, relying instead on a pre-defined default reason based on the tax category. This simplifies the process for users and ensures compliance with UBL documentation.
Original PR description
According to the ubl documentation the tax exemption reason code is not always required on the document. But when no exemption reason code is given, we have a default exemption reason for the appropriate tax categories. task: 5223145 Forward-Port-Of: odoo/odoo#242588 Forward-Port-Of: odoo/odoo#233770
Resolved issues and error corrections
This update resolves an issue where project billing amounts were incorrectly displayed as 'To Bill' instead of 'Billed' after confirming a vendor bill. The fix ensures accurate accounting by properly handling analytic distribution keys, specifically addressing a problem caused by commas in those keys.
Original PR description
### Steps to reproduce: - Create a billable Project - Create a Purchase order and set the created project and a department in analytic distribution - Create a Vendor Bill with the same analytic distribution and match with the PO - Confirm the Vendor Bill - Check the project dashboard - Notice the amount is under To Bill not Billed ### Cause: When checking the invoice lines we check if the AA in the distribution is the same as the one in the project. The problem comes when we have a Project and a Department set in the distribution as the keys in the JSON dict will be 'account_id,department_id' so the comma will trigger an incosistency so the invoice_line will be filtered out so we will consider this line as still waiting to be invoiced ### Fix: Make sure we cover the case of the comma presence in one of the JSON keys. opw-5350246
Features or functions removed from Odoo
This update removes a feature that automatically generated vendors from Stripe Issuing based on French vendor data. The system incorrectly used SIREN numbers instead of VAT numbers, leading to validation errors. Since this feature was only triggered in a specific scenario and lacked a suitable field, it has been removed for stability and accuracy.
Original PR description
In the original Stripe Issuing implementation, it was believed that in the specific case where a vendor is located in France, the `tax_id` received from Stripe in the authorizations and transactions would be the VAT number. In reality, the number received is the SIREN which fail VIES validation. As we only try to create a vendor in that very specific case, and there is no field for the SIREN (`company_registry` is the SIRET), we simply remove the feature altogether. NOTE: Remove method in master
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 setting an invalid video link in course slides would cause a system error. The fix ensures that the system gracefully handles incorrect links, preventing disruptions to the user experience. This improves the reliability of the course presentation feature.
Original PR description
When a user sets an invalid video link for a slide, a traceback occurs. Steps to reproduce the error: - Install ``website_slides`` module with demo data - Go to Website > Courses > Open Taking care…
When a user sets an invalid video link for a slide, a traceback occurs. Steps to reproduce the error: - Install ``website_slides`` module with demo data - Go to Website > Courses > Open Taking care of Trees course - Add Content > Video > Add valid video link (ex. https://www.youtube.com/shorts/SXHMnicI6Pg) > Save and Publish > Delete - Repeat above step - Add content > Video > Add any text in video link > Save and Publish Traceback: ```py AssertionError: Could not find all values of slide.slide(12,) to flush them ``` https://github.com/odoo/odoo/blob/7bbfb207f8699973f8580ea18821f82b1a83e149/addons/website_slides/controllers/main.py#L1363-L1372 New record is created using ``new()`` to fetch external metadata for the slide. This record only exists in memory and is not stored in the database. When the video link is invalid, ``video_source_type`` is False, and the code attempts to ``unlink()`` the slide. Unlinking the record triggers field recomputations, and it will lead to the above error when flushing the new record. ref: https://github.com/odoo/odoo/commit/71233fa2cb8984b65f8e7ac55405fdbc054756a0 sentry-6964031088 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235099
This update resolves a validation error in the Time Off settings module that prevented users from creating new leave requests. The issue stemmed from incorrect default settings in the demo data, specifically a missing reference to the correct leave type. The fix ensures this reference is properly set, allowing users to create leave requests without errors.
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 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 fixes a potential confusion in the sales details report by ensuring payment orders are consistently displayed. Previously, the report's ordering could be misleading, especially when comparing cash register lines. This change improves the report's readability and accuracy for users reviewing sales data.
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 resolves a problem preventing the correct installation of the Mauritius localization module for Odoo. The issue stemmed from a missing configuration setting, which has now been added to ensure proper module functionality and compatibility. This ensures users in Mauritius can correctly utilize the accounting features.
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 a potential issue where duplicate keys were generated for report templates, regardless of their active status. This ensures consistent and accurate report generation across all customizations, preventing conflicts and maintaining data integrity. It improves the reliability of report views within the Enterprise module.
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 grouped Kanban cards in the Knowledge Articles module were displaying incorrectly due to a change in the Kanban templates. The fix simply removes a no-longer-needed CSS class, ensuring consistent and correct card heights are displayed.
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 resolves a bug that prevented users from assigning statements to multiple bank lines within the Bank Reconciliation widget. The fix ensures the system handles multiple selections correctly, preventing a technical error that occurred during the statement assignment process. This improves the usability of the Bank Reconciliation feature.
Original PR description
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank…
An error occurs when a user tries to assign a Statement to multiple selected lines in the Bank Statement list view. Steps to reproduce: 1) Install Accounting with demo data. 2) Open the Bank Reconciliation widget. 3) Switch to the List view. 4) Select multiple statement lines. 5) Click on the 'Statement' field to assign a statement to the selected lines. Error: `TypeError: Cannot read properties of undefined (reading 'root')` Root Cause: The `BankRecMany2OneMultiID` component attempts to access `active_ids` through `this.env.model.root` (see [1]). During re-rendering, the value of `this.env.model` becomes undefined, which leads to the error. Fix: Add a check for the existence of `this.env.model` in the getter to avoid accessing `root` on an undefined model. [1]- https://github.com/odoo/enterprise/blob/c194bee0e48db407288e3c402e71840af299568d/account_accountant/static/src/components/bank_reconciliation/list_view/list_view_many2one_multi_edit.js#L14 opw-5403564 Forward-Port-Of: odoo/enterprise#103338 Forward-Port-Of: odoo/enterprise#101792
This update resolves a technical glitch that prevented the 'add to cart' tour for subscription products, specifically when selecting certain product variants. The change ensures all product variants are consistently available during the tour, improving the user experience.
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 fixes a visual issue where product images didn't smoothly transition on the shop page's list views. By adding a specific CSS class, the hover effect now correctly replaces images with animations, providing a better and more professional user experience. This ensures consistent image behavior across different product view types.
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
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 field configurations within the studio interface.
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 gray color selections in the website builder's color picker weren't updating correctly after adjusting gray hues and saturations. Now, customized gray swatches accurately reflect the changes made, ensuring a consistent and accurate design experience for website builders.
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 the wrong manager was sometimes assigned to approval requests. The change ensures that the correct manager, based on the request's origin, is always selected, improving approval accuracy and preventing potential delays. This resolves a previously reported bug (Ticket #5185449).
Original PR description
The previous code added the manager by searching for the first employee that matches the request_owner_id. If there are multiple such employees, it's possible that an employee from a different company than the approval can be selected. Ticket: [5185449](https://www.odoo.com/odoo/project.task/5185449) Forward-Port-Of: odoo/enterprise#99978
This update resolves an issue where recruitment officers couldn't move applicants to the qualified stage, causing errors in email notifications. The fix uses a security override to bypass access restrictions, ensuring smooth applicant movement and correct email generation.
Original PR description
Problem: Recruitment officers don't have the rights to create `appointment.type` nor `appointment.interview`, Hence when they move an applicant to the qualified stage an error is raised during the rendering the body of the qweb mail template. Fix: Override the controller to use sudo and pybass the access check. Task-5262936 Forward-Port-Of: odoo/enterprise#100648
This update corrects a visual issue where a duplicate dropdown menu appeared in social stream post management. The fix ensures consistency by correctly integrating the existing dropdown from the social_crm module, maintaining a streamlined user experience. Additionally, the 'is_author' field has been re-introduced to manage button visibility for user-owned posts.
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 a bug that prevented users from successfully canceling the selection of an employee photo within the Salary Configurator. The fix ensures the system correctly handles image cancellation, preventing errors and improving the user experience. This ensures smooth operation of the offer 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#102410
This update resolves an issue where duplicating an invoice from a sales order incorrectly copied the original sales order information into both the original and duplicated invoices. The fix prevents the automatic copying of the source document, ensuring that duplicated invoices accurately reflect the new invoice without the original order's details. This improves data consistency and simplifies invoice management.
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 the appraisal plan start date wasn't being correctly set. A recent change removed duplicate code, but this PR restores the necessary logic to ensure employees' appraisal plans begin on the intended date. This ensures accurate appraisal scheduling.
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#102022
This update fixes an issue where changing the animation speed for image shapes would reset their colors. The fix ensures that color settings remain consistent when adjusting animation speed, improving the visual experience for users. This enhancement provides a more reliable and predictable user interface.
Original PR description
Before this commit, changing the animation speed would reset the colors applied to the image shape. This was due to the code always considering the shape as new because the current shape id wasn't retrieved. Therefore, the colors would be reset to the default ones. Steps to reproduce the issue: - Drop a snippet with an image - Click on the image - Add an image shape. It should be animated. - Change the image shape color - Change the image shape animation speed => The image shape color was reset. task-5375497 Forward-Port-Of: odoo/odoo#239451
This update corrects a small typographical error in the order payment validation process within the Enterprise module. The fix ensures consistent and accurate payment processing, preventing potential minor disruptions to transactions. It's a routine maintenance update to maintain the stability of the system.
Original PR description
Fix small typo introduced here: https://github.com/odoo/enterprise/pull/99202
This update resolves a bug where quickly typing in the Helpdesk Forum's input field would erase the entered text due to the popover opening. The fix ensures the popover appears before text input, preventing data loss and improving the user experience.
Original PR description
if you write too fast, the opening of the popover erases the text in the input. In this commit, we add a step to ensure the popover is shown before writing in the input
This update addresses a warning message that appeared when searching for payment tokens. The change adds a field to the payment token model to ensure accurate searching by name, preventing the warning and improving data reliability. This ensures consistent and correct payment token identification.
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 corrects a display issue within the Odoo Enterprise spreadsheet edition. Specifically, when adding a dimension (like 'country_id.name') to a pivot table, the display name was incorrectly showing the technical relation instead of a user-friendly label. This ensures pivot tables present data in a clear and understandable format for users.
Original PR description
Steps to reproduce:
- Insert an Odoo pivot
- Click on "defer update"
- Add a dimension with a relation ("country_id.name") => The dimension is added but marked as invalid and the display name is incorrect ("country_id.name" instead of "Country > Name")
Task: 5411336This update resolves an error that occurred when signing documents with non-mandatory selection fields. Previously, the system would fail to validate documents if a selection field was left blank. The fix ensures that the system correctly handles selection fields, preventing validation errors and allowing users to complete the signing process without issues.
Original PR description
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to…
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to a document template and define at least one option. Make sure the field is not mandatory. 3. Click **"Sign Now"**, then **"Validate & Send Completed Document"** without modifying the selection field. **Error:** `ValueError - invalid literal for int() with base 10: 'Selection125340'` Cause: After this commit [1], `textareaApplyLineBreak()` is executed for all item types. For selection type, this updates the item value from `undefined` to a generated string (e.g. **Selection132**), which later causes an invalid integer conversion during validation. **Fix:** This commit ensures `textareaApplyLineBreak` is only applied to textarea items and not to other field types. [1]: https://github.com/odoo/enterprise/commit/c1bfc84505ca8053a073c23b6a7b569021e9ca0c sentry-7089120038 opw-5402249
This update resolves an issue with the demo data for the Account Transfer module. Previously, demo records were created incorrectly, leading to inaccurate reporting. This change ensures demo data is properly configured using company-specific settings, improving the reliability of the demo environment.
Original PR description
This commit fixes demo data of account_transfer module by using company_xmlid to create account.transfer.model records. opw-5391764
This update resolves an issue where images with transparent backgrounds in email marketing campaigns were appearing with a black background. The fix changes the default image type handled during processing to PNG, ensuring transparency is preserved and images look as intended across popular email clients like Outlook and Gmail.
Original PR description
Problem: When adding an image with a transparent background in email marketing, the image ends up with a black background once processed. Cause: During image processing, a default `defaultImageMimetype` is applied. If the original image is a PNG and the default mimetype is set to `image/jpeg`, the transparency information is lost, resulting in a black background. Solution: Use `image/png` instead of `image/jpeg` as the `defaultImageMimetype` to preserve transparency. This was tested successfully in both Outlook and Gmail. Steps to reproduce: - Go to Email Marketing and add an image block. - Add an image with a transparent background (usually a PNG). - Observe that once added to the email, the image loses its transparency. opw-5422685 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes a misleading caret symbol from the icon creator within the web_studio module. Previously, clicking the caret had no effect, creating a confusing user experience. This change simplifies the icon creator and improves usability for all users.
Original PR description
Before this commit: the caret is rendered outside the button and clicking it had no effect. After this commit: the caret is removed from the icon creator. task-5470025
This update resolves an issue that caused Facebook statistics refreshes to fail on older versions of Python. The problem stemmed from a difference in how the datetime library handles timezones, specifically the format of time strings. This change ensures compatibility across different Python versions and prevents errors during data 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 clarifies the call settings interface for users who have muted their microphones. Previously, the interface was confusing, showing the deafen icon with an unmute label. Now, the interface only displays the 'undeafen' button and label when muted, streamlining the user experience and eliminating redundancy.
Original PR description
Before this commit, the hint in the call settings was not taking into account if it was deafen or mute. On top of that the icon in the menu was showing the deafen icon but with the unmute label. When deafened, this was redundant with the undeafen button as well since unmute and undeafen are practically doing the same thing. Now, when deafen is activated, only the undeafen button is shown in the call menu and the hint in the call actions is undeafen not unmute. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a problem that prevented users from installing the 'stock_account' module. The issue stemmed from incorrectly attempting to create stock accounts for branches, which should inherit accounts from their parent companies. The fix utilizes a more efficient method to retrieve existing account records, ensuring smooth module installation.
Original PR description
**Repro steps:** 1. Install a localization module with defined account_stock_expense_id or account_stock_variation_id 2. Add a branch to that localization company 3. Attempt to install stock_account **Problem:** A traceback shows preventing the user from installing stock_account ERROR: null value in column "account_type" of relation "account_account" violates not-null constraint **Root cause:** In stock_account post init hook, stock related fields data are attempted to be added from localizations. The problem is that branches don't have accounts by default, they own their parent company accounts. **Solution:** This commit fixes this issue by using AccountChartTemplate.ref in _load_data. This ref would find the record (i.e., account.account record) instead of attempting to create a new one for child companies. Ticket [link](https://www.odoo.com/odoo/project.task/5391764) opw-5391764
This update fixes an issue where applying full amounts to bank statement lines was incorrectly triggering tax calculations. This change ensures accurate financial reporting for invoices and payments processed through bank statements, preventing potential errors in accounting records. It resolves a bug introduced in a previous commit.
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#103334
This update automatically clocks employees in before they use the point-of-sale system. Previously, users were prompted to clock in manually, which has now been automated. This streamlines the POS process and reduces potential delays for customers.
Original PR description
Instead of telling the user he must clock in before using its pos, we now do it for him. see odoo/odoo#241542 Task: 5433405 Forward-Port-Of: odoo/enterprise#102992
This update fixes a technical error that prevented the system from correctly updating SSL certificate status information. The issue stemmed from incorrect timezone handling during data conversion, which caused a system error. This change ensures certificate updates run smoothly and reliably.
Original PR description
Currently an error occurs when the `iot/box/update_certificate_status` controller tries to write `ssl_certificate_end_date` as `cert.not_valid_after_utc`. Error: `ValueError: unconverted data remains: +00:00` This is because when we convert `cert.not_valid_after_utc` to a string, it will convert the UTC date as ` "2026-03-08 13:06:39+00:00"` and while the system converts this string date with +00:00, it will throw an error. This commit fixes the issue by using a `timezone-naive` value derived from `cert.not_valid_after_utc`. Applying `replace(tzinfo=None)` removes the `+00:00` timezone information and converts the datetime to a `timezone-naive` object. sentry-7016111455 Forward-Port-Of: odoo/odoo#241631 Forward-Port-Of: odoo/odoo#241592
This update prevents users from seeing the 'Move to Trash' option in the document menu when the document is already in the trash. This simplifies the user experience and avoids unnecessary actions, particularly for documents that have already been permanently deleted.
Original PR description
### Description Do not show the "File > Move to trash” menu entry when the document is already archived (in trash). Task: [5253608](https://www.odoo.com/odoo/project/2328/tasks/5253608)
This update fixes an issue where the HTML editor would incorrectly display extra lines when multiple text selections were highlighted. The change filters out empty text nodes to prevent unnecessary font wrapping and ensure a cleaner, more accurate display of selected text.
Original PR description
**Current behavior before PR:** - When multiple lines were selected within a block, any empty text nodes between them would also receive a font wrapper when applying a color. - As a result, it appeared as though an extra line was being inserted when the color was applied. **Desired behavior after PR is merged:** - Empty text nodes that are not visible and are not zero-width space or line-break nodes are now filtered out before the font tag is created. - This prevents font wrappers from being created around those nodes. task-5344051 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a visual issue in the upsell subscription quotation preview where section columns were incorrectly aligned. Recent improvements to the sale module impacted how subscription columns were calculated, leading to this misalignment. The fix ensures that all sections display correctly in the preview.
Original PR description
Steps to Reproduce: - Create an upsell subscription quotation with sections - Click on the `Preview` button Issue: - Sections colspan is misaligned compared to the rest of the lines Cause: - After recent section improvements in sale, upsell subscription columns were not taken into account while computing the section colspan Solution: - Adjust the colspan when the subscription is an upsell subscription opw-5476669 Affected Version: 19.0 Before: <img width="1920" height="932" alt="image" src="https://github.com/user-attachments/assets/2321d7d7-cb6f-465f-a1af-b143d7a8ccd3" /> After: <img width="1909" height="934" alt="image" src="https://github.com/user-attachments/assets/991eef3f-d3dd-4ee3-8316-b2370009435f" />
This update resolves an issue where unnecessary tax authority partners were automatically loaded into new databases, causing confusion for users in industries like restaurants. The change now only activates these partners when a tax return is first created, streamlining the reporting process and improving user experience.
Original PR description
New DBs are preloaded with tax authority partners, it makes users uncomfortable in some sectors(e.g restaurants). Archive these partners and activate them on the first return requiring them is created. task-5391773
This update fixes a discrepancy in the tax report carryover tests to align with recent changes in the VP14 VAT payable computation. Ensuring the tests accurately reflect the latest accounting logic improves reporting reliability and data consistency. This ensures accurate tax reporting for Italian businesses.
Original PR description
Update the tax report carryover tests to reflect the recent changes in the VP14 VAT payable computation. These adjustments ensure the test suite remains consistent with the updated community-side logic.
This update resolves a bug that occurred when all equity transactions were deleted. The dashboard attempted to load sample data, leading to a JavaScript error due to incorrect partner ID assumptions. This fix ensures the dashboard functions correctly after data resets, preventing errors and maintaining stability.
Original PR description
**PROBLEM** If you delete all the equity transactions, the equity dashboard will try to load the sample data. Depending on the id of the current company, there is a js traceback. **STEP TO REPRODUCE** - On runbot, go to the equity app and delete all transactions. - Select a company. - Goes to the dashboard, there should be a js traceback (if not, try with another company). **ISSUE** The sample data create a partner data for the current company, but it assumes its id is 1. If the current company id is not present in the partner_data ids we will try to get the display_name of an undefined object, leading to a traceback. opw-5364100
This update ensures that downpayment accounts are correctly applied when calculating taxes externally (like Avatax). Previously, invoices always used the default income account, even with a specified downpayment account. This change aligns with standard downpayment behavior and improves accuracy in tax calculations.
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 related to a specific date used in the l10n_mx_edi module. The fix adjusts the test environment's date to a more standard time, preventing failures that only occurred on January 1st. This ensures consistent and reliable test results for the Mexican VAT reporting functionality.
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 corrects outdated file paths used in the IoT driver upgrade process, which were previously incompatible with the saas-18.4 environment. The changes ensure the upgrade scripts function correctly and remove a legacy version from the system. This improves the stability and reliability of the IoT driver functionality.
Original PR description
The PR https://github.com/odoo/odoo/pull/242110 used paths with "hw_drivers" which don't exist anymore in saas-18.4. This PR adapts the paths and moves the upgrade scripts to the correct modules accordingly It also removes the deprecated v16 upgrade Forward-Port-Of: odoo/odoo#242507
This update fixes a visual issue where module information pages didn't allow users to switch between tabs, mirroring the functionality in the Odoo apps store. Now, users can seamlessly navigate between tabs when viewing module details, providing a more consistent and user-friendly experience.
Original PR description
* Before: if we have a block contain multiple tab in index.html file we can not click on it to switch between tab, unlike the behiviour in odoo apps store description https://github.com/user-attachments/assets/ab7f8213-2112-46e2-bb72-5e01cc1f7883 * After: Make the nav tabs work as it should be https://github.com/user-attachments/assets/12c05abc-84f6-495e-ae5b-b6eca4d81a92 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#186568
This update resolves a minor issue that caused a checkout error when selecting a delivery method for the first time. The fix adds a check to ensure the necessary webpage element exists before attempting to modify it, preventing a technical error that interrupted the checkout process. This ensures a smoother experience for users.
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 fixes an issue where invoice names weren't correctly linked to Avalara transactions. The team reverted to a previous method of recreating transactions after posting to ensure Avalara receives the necessary invoice information. While a longer-term solution is planned, this change ensures accurate tracking of 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
This pull request addresses visual issues in the website editor, specifically preventing blurry countdown displays and text overlaps with icons. The fixes improve the overall user experience by ensuring sharp visuals and proper spacing, particularly when zooming or using features like the Unsplash photo option.
Original PR description
## [FIX] website: prevent blurry countdown canvas and text on zoom [Commit 1] Steps to reproduce: - Go to Website -> Edit Mode - Add a Countdown snippet (size: "Small") - Save and zoom in/out, the…
## [FIX] website: prevent blurry countdown canvas and text on zoom [Commit 1] Steps to reproduce: - Go to Website -> Edit Mode - Add a Countdown snippet (size: "Small") - Save and zoom in/out, the countdown canvas and text appears blurry The countdown was rendered at a low resolution, which caused it to blur when zooming. This fix updates the canvas to draw at the proper resolution so the countdown remains sharp at any zoom level. ## [FIX] web_editor: prevent text overlap with icon [Commit 2] Steps to reproduce: - Go to Website -> Edit Mode - Add a Image snippet - Enter a long text in search bar: Issue: 1. Text overlaps with search icon. 2. Selecting the "Photos (via Unsplash)" option causes the text to overlap the dropdown icon. The fix adjusts the end padding to provide sufficient spacing between the text and the icons. task-[4771268](https://www.odoo.com/odoo/project/974/tasks/4771268) Forward-Port-Of: odoo/odoo#242706 Forward-Port-Of: odoo/odoo#213373
This update removes temporary fields added during testing of the l10n_at_pos module. These fields were mistakenly left in place after a previous update. This ensures the module functions correctly and aligns with standard Odoo configurations.
Original PR description
Some fields were temporarily added or made editable to easily test all possible flows. They were mistakenly left in place during the merge. This commit removes them or restores the proper readonly behavior. [PR #100583](https://github.com/odoo/enterprise/pull/100583)