Tuesday, November 25, 2025
58 changes · 19.0
New functionality added to Odoo
This update introduces a new reporting feature for Ireland, specifically the Return of Trading Details (RTD). This allows Irish businesses using Odoo to accurately track and report their trading activity as required by local regulations. This change supports compliance and provides essential reporting capabilities for Irish users.
Original PR description
WIP This PR adds a new report for Return of Trading Details (RTD) for Ireland task-5184653 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds support for Local Network Access (LNA) in our Point of Sale (POS) and self-ordering systems. With Chrome 142, LNA allows direct communication with devices like Epson printers and the internal ‘black box’ without requiring secure certificates, simplifying setup and improving reliability. This change enhances the user experience and ensures seamless operation.
Original PR description
*: pos_self_order, pos_epson_printer Feature: https://chromestatus.com/feature/5152728072060928 Since Chrome 142, a new feature called “Local Network Access” has been added, allowing local IPs to be contacted via HTTP without mixed content errors. This means that certificates are no longer required to contact Epson printers or the black box. Forward-Port-Of: odoo/odoo#236916 Forward-Port-Of: odoo/odoo#235702
Enhancements to existing features
- `-g 0` turns out to significantly increases file size without increasing quality (apparently it makes every frame an i-frame) - lossless video seems useful for comparing different runs, and while it *is* costly it's pretty reasonable for screencasting (5~6 times the size of a normal output, but a third the size of current outputs) - "lossless h264" (per ffmpeg) does not seem to actually be lossless - lossless av1 does work (and is slightly smaller than h265), but the libsvtav1 shipped by ub
Original PR description
- `-g 0` turns out to significantly increases file size without increasing quality (apparently it makes every frame an i-frame) - lossless video seems useful for comparing different runs, and while it *is* costly it's pretty reasonable for screencasting (5~6 times the size of a normal output, but a third the size of current outputs) - "lossless h264" (per ffmpeg) does not seem to actually be lossless - lossless av1 does work (and is slightly smaller than h265), but the libsvtav1 shipped by ubuntu does not support it, and libaom is *extremely* slow, so that might be something to revisit in a few years Testing on the main flow tour (desktop), - the current setting generates a 40MB file - removing `-g 0` generates a 2.6MB file, quality seems about the same - h264 pseudo-lossless yields a 9.4MB file - h265 lossless is 16.9MB - av1 (libsvtav1) is 2.5MB - av1 lossless (libaom) is 13.2MB Forward-Port-Of: odoo/odoo#236710
Resolved issues and error corrections
This update resolves a problem in the avatar card test that was caused by pre-existing activities set up when the demo data was installed. By removing these activities during the test setup, the test now runs reliably and accurately, ensuring the multi-company activities function correctly.
Original PR description
Before this commit, the admin user had some pre-defined activites when installed with demo data, this was interfering with the test since it is using the count of activities to ensure the correct functioning of the multi-company activities. Now, we simply unlink all activities in the setup of the test to ensure its stability. fixes-runbot-234343 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies the Peppol Registration Wizard by removing unnecessary warnings and placeholders. Specifically, the outdated 'in' migration process has been removed, streamlining the registration experience for users. This change focuses on clarity and efficiency within the wizard.
Original PR description
In the Peppol Registration Wizard: - ~Warning banner should only show up when endpoint as been filled~ - Remove placeholder - ~Remove the "in" migration~ Ref PR for master: odoo/odoo#234088 Task [link](https://www.odoo.com/odoo/project/967/tasks/5170831?debug=assets) task-5170831 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235982 Forward-Port-Of: odoo/odoo#234087
This pull request optimizes how Odoo handles employee data, resulting in faster loading times and improved responsiveness when working with employee records. The changes enhance the performance of the HR module, leading to a smoother user experience. This is a general performance improvement.
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 ensures that the same optional fields related to vehicle assets are consistently shown on both Receipts and Vendor Bills within the Enterprise module. This improves data clarity and simplifies processes for users managing fleet assets. The change aligns field visibility across related documents.
Original PR description
This commit ensures that the same optional fields are displayed consistently on both Receipts and Vendor Bills. Updated the visibility of the following fields: - vehicle_id (Vehicle) task-5349202
This update ensures that key optional fields – like deductible amounts, vehicle IDs, landed costs indicators, and purchase order references – are consistently displayed on both Receipts and Vendor Bills. This improves data clarity and simplifies processes for users managing financial transactions across multiple modules.
Original PR description
Modules modified - account, account_fleet, stock_landed_costs, purchase This commit ensures that the same optional fields are displayed consistently on both Receipts and Vendor Bills. Updated the visibility of the following fields: - deductible_amount (Professional %) - vehicle_id (Vehicle) - is_landed_costs_line (Landed Costs) - purchase_order_id (Purchase Order) task-5349202
This update resolves a test failure related to leave requests, specifically during weekends. The fix ensures the test accurately reflects the system's behavior by using a consistent, non-weekend date for leave calculations. This improves the reliability of our leave management process.
Original PR description
In this commit, we fixed the failed runbot test test_reset_leave_work_entries. The test is failing during weekends since we are requesting and approving leaves using datetime.now(). As a fix, we choose a specific date for the leave (non weekend date). task-5353513. Related to 247070 (runbot errorr) 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 fixes an issue where code blocks within the HTML editor's syntax highlighting weren't properly aligned with their surrounding code blocks. By applying the same styling to the textarea as the pre element, the alignment is now consistently maintained, improving the user experience for writing and viewing code.
Original PR description
When writing in a code block, we need to ensure its textarea's contents are aligned with its pre's. This could get broken when the textarea's contents would wrap and the pre's wouldn't. To fix this, we set the css property `white-space` of the textarea to 'pre' (as is done for the pre element), so that both elements behave the same way. task-5354848 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a potential issue with how images were loaded and resized within the HTML editor. The change ensures that image listeners are properly cleaned up, preventing performance problems and ensuring the editor functions smoothly. It replaces a custom listener with Odoo's built-in `t-on-load` for improved stability.
Original PR description
In `AutoResizeImage`, a listener for the load of an image was made with a `useEffect`, but it was not correctly cleaning. It should return a function that remove the listener not directly call `removeListener`, and it should remove the same listener that was added. This commit uses the `t-on-load` in the template instead. task-5190618 Forward-Port-Of: odoo/odoo#232987
This update resolves a technical issue that could have caused the Point of Sale system to become unresponsive (freeze) when certain settings were empty. The fix prevents an infinite loop triggered by a specific condition, ensuring smoother operation and preventing potential disruptions to sales transactions. This improves system stability and reliability.
Original PR description
The condition `config.default_preset_id.id not in config.available_preset_ids.ids` is equivalent to True when both default_preset_id and available_preset_ids are empty. This triggers an infinite loop as assigning with `|=` triggers a nested write. 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#231649 Forward-Port-Of: odoo/odoo#231378
This update resolves an error that prevented users from sending messages in Chatter when using the Arabic localization (ar_001). The issue stemmed from a mismatch in date formatting expectations, specifically requiring Latin numerals. This change ensures proper message sending functionality for all supported languages.
Original PR description
Currently, an error occurs when a user tries to send log notes or messages in a localization that uses a non-Latin numbering system. **Steps to produce:** * Install `accountant` with demo data and…
Currently, an error occurs when a user tries to send log notes or messages in a localization that uses a non-Latin numbering system. **Steps to produce:** * Install `accountant` with demo data and language `ar_001` * Open `General Ledger` report in accounting * Click the chat bubble on any item to open Chatter and type a message. **Error:** `ValueError: time data '٢٠٢٥-١٢-٣١' does not match format '%Y-%m-%d'` **Root cause:** * This error happens because field [1] is a date field and expects a format using Latin numerals (as seen in [2]). Using Arabic numerals makes the text display right-to-left, causing an error when stripping the string at [3]. **Solution:** * Change the datetime object to use Latin numbers, as the system expects. [1]: https://github.com/odoo/enterprise/blob/5a7cf0f8c3817b5b0fafb798e55f290a53478dfb/account_reports/wizard/mail_compose_message.py#L11 [2]: https://github.com/odoo/odoo/blob/47e561bd1f6bc14724d60ebf09a66e458dfd4799/odoo/tools/misc.py#L536 [3]: https://github.com/odoo/odoo/blob/47e561bd1f6bc14724d60ebf09a66e458dfd4799/odoo/orm/fields_temporal.py#L158 sentry-7015787743
This update resolved a bug where the 'whiteboard pen' product and gift cards were not appearing correctly on the POS screen. By assigning a standard product category, the system now correctly displays these items, preventing tour tests from failing and ensuring a smooth user experience.
Original PR description
Before this commit: ======================= The `whiteboard_pen` product had no assigned category, while the main POS configuration was limited to specific categories. As a result, `whiteboard_pen` was not displayed on the product screen. When no products were loaded, special products like gift cards and e-wallets also not shown,showing the `Load Sample` button instead of products. This caused tour tests expecting gift cards on the screen to fail. After this commit: ====================== Assigned the same product category to whiteboard_pen as used in the POS configuration. This ensures that the product appears on the product screen and special products like gift cards also load properly, preventing the tour test from failing. Runbot Error: 233434, 233435 Forward-Port-Of: odoo/odoo#233563
This update prevents a display error in the project portal when users try to unfollow a task that hasn't been saved. The fix ensures the 'Unfollow' button is hidden for new, unsaved tasks, improving the user experience and preventing a technical error.
Original PR description
Currently, an error occurs when a portal user opens a shared project and clicks the `Unfollow` button in the chatter of a `new(unsaved)` task. **Steps to produce:** - Install the `project` module. -…
Currently, an error occurs when a portal user opens a shared project and clicks the `Unfollow` button in the chatter of a `new(unsaved)` task. **Steps to produce:** - Install the `project` module. - Open the project app and create a new project with at least one task. - From the project’s `dropdown menu(⋮)`, select `Share Project`. - Add a `collaborator: Joel Willis`, with `Edit access mode`, copy the `public link`, and click `Share Project`. - Open the shared link in an incognito window and sign in as a `portal user`. - Open the project folder > open any task > click `New` > click `Unfollow` button. **Error**: `ValueError: Expected singleton: project.task()` **Root cause:** The Unfollow button at [1], is displayed even when the task record is not yet saved (`props.threadId` is `undefined`). At [2], the method is called on an empty recordset, causing an `error`. **Fix:** This commit prevents the error by ensuring the `Unfollow` button is hidden when the record is `unsaved`. [1]: https://github.com/odoo/odoo/blob/be138ef2ff1b3a83f77fe300f789d754ed3383fd/addons/project/static/src/project_sharing/chatter/portal_chatter_patch.xml#L7-L14 [2]: https://github.com/odoo/odoo/blob/be138ef2ff1b3a83f77fe300f789d754ed3383fd/addons/project/models/project_task.py#L2022 No task ID Forward-Port-Of: odoo/odoo#236633
This update prevents a bug where optional products in quotes could have negative quantities when rapidly reducing their amounts. The fix ensures that optional product quantities always remain at zero, improving data accuracy and preventing potential issues in sales processing. This resolves a minor user experience problem.
Original PR description
**Steps to reproduce:** * Install the **Sale Management** module with demo data. * Create a Quotation and set the *Quotation Template* to **Office Furniture**. * Open the **Preview** mode of the…
**Steps to reproduce:** * Install the **Sale Management** module with demo data. * Create a Quotation and set the *Quotation Template* to **Office Furniture**. * Open the **Preview** mode of the quotation. * Scroll to the bottom where **Optional Products** are listed. * Increase the quantity of an optional product from the initial value of zero. * Rapidly click the **minus (-)** button multiple times. **Observed behavior:** * The quantity of an optional product goes below zero when the **minus button** is clicked rapidly. **Cause:** https://github.com/odoo/odoo/blob/5ab45d45073463495e517aca9fd061415a73e893/addons/sale_management/views/sale_portal_templates.xml#L9-L16 * The decrease button is bound using classes that is not updated in the DOM after quantity changes rapidly. As a result, rapid clicks continue triggering the handler on the outdated element, causing multiple unexpected decrease events and allowing the quantity to become negative. **Fix:** * Add a guard to prevent the quantity from dropping below zero, ensuring the minimum quantity always remains zero. --- opw-5250851 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where users couldn't find UNSPSC codes by typing partial numbers. The system now uses a flexible search method, allowing users to enter any part of the code and receive relevant product results. This enhances the accuracy and usability of product categorization.
Original PR description
**Steps to reproduce:** * Install the **Accounting** and **l10n_mx** modules. * Open any product form view. * Navigate to the **Accounting** tab. * In the *UNSPSC Category* field, start typing a numerical code such as **'10101500'**. **Observed behavior:** * No results are returned, even though the corresponding UNSPSC code exists in the database. **Cause:** * The `_search_display_name` method used an exact match (`=`) on the `code` field, preventing any partial or prefix-based lookup during user input. **Fix:** * Replace the exact-match domain on `code` with a partial match using `ilike`, allowing users to find UNSPSC codes by typing any part of the numerical sequence. opw-5244705 Forward-Port-Of: odoo/enterprise#99651
Before this commit, quickly triggering the opening of the file viewer multiple times (e.g. double-click on an attachment) caused a crash. This happens because the `createFileViewer` hook generates a `fileViewerId` on initialization. When `open()` is called, it registers the component using this specific ID. If `open()` is triggered a second time while the component is still registered (or being registered), the registry throws an error because duplicate keys are not allowed. This commit fi
Original PR description
Before this commit, quickly triggering the opening of the file viewer multiple times (e.g. double-click on an attachment) caused a crash. This happens because the `createFileViewer` hook generates a `fileViewerId` on initialization. When `open()` is called, it registers the component using this specific ID. If `open()` is triggered a second time while the component is still registered (or being registered), the registry throws an error because duplicate keys are not allowed. This commit fixes the issue by calling `close()` at the beginning of the `open()` function. This ensures that any existing `FileViewer` instance associated with this hook is removed from the registry before a new one is added. task-5262556
**Problem:** when selling a product valued by lot and chosing a lot with a value of 0 the average value of the product is used instead of 0. **Steps to reproduce:** - make sure your warehouse is in single step receipt and delivery - create a product tracked by lot and valued by lot - set the category as avco - create a PO for a quantity of 10 and a unit price of 10 - confirm and open the receipt - open the stock move widget on the stock move - write "lot A" in the lot column and sa
Original PR description
**Problem:** when selling a product valued by lot and chosing a lot with a value of 0 the average value of the product is used instead of 0. **Steps to reproduce:** - make sure your warehouse is in…
**Problem:**
when selling a product valued by lot
and chosing a lot with a value of 0
the average value of the product
is used instead of 0.
**Steps to reproduce:**
- make sure your warehouse is in single step receipt and delivery
- create a product tracked by lot and valued by lot
- set the category as avco
- create a PO for a quantity of 10 and a unit price of 10
- confirm and open the receipt
- open the stock move widget on the stock move
- write "lot A" in the lot column and save
- validate
- create a PO for a quantity of 10 and a unit price of 0
- confirm and open the receipt
- open the stock move widget on the stock move
- write "lot B" in the lot column and save
- validate
- create a quotation for 1 quantity of your product
- confirm
- open the delivery
- open the stock move widget on the stock move
- in the 'pick from' column enter lot B and save
- validate
- open the valuation smart button
**Current behavior:**
the value of the stock valuation layer is -5
**Expected behavior:**
it should be 0
**Cause of the issue:**
Inside _prepare_out_svl_vals
lot.standard_price is 0 so the if condition
is false and we don't use the price of the lot
https://github.com/odoo/odoo/blob/cd2a241182cf56fc36d03df9f0afdcea30f682d2/addons/stock_account/models/product.py#L277
**fix:**
deleting the lot.standard_price condition
is not possible because when the lot is created
at delivery it has no standard_price and in this
case we want to use the standard_price of the
product.
(see test https://github.com/odoo/odoo/blob/d3835668349d466ed4ba27c9eacdbd3339f2ac37/addons/stock_account/tests/test_lot_valuation.py#L58)
opw-5077671
Forward-Port-Of: odoo/odoo#234764Steps to Reproduce: - Create a link in the editor (e.g., "abc"). - Select all and change the font size from 14 to 80. - Two empty tags are created before and after the formatted <span><a></a></span> with only FEFF Characters. - Change the font size again (e.g., back to 14). - Multiple empty tags remain in the DOM. Description of the issue this PR addresses: - In the removeFeffs method, FEFF characters are replaced with empty text nodes, which can lead to unwanted empty elements and
Original PR description
Steps to Reproduce: - Create a link in the editor (e.g., "abc"). - Select all and change the font size from 14 to 80. - Two empty tags are created before and after the formatted <span><a></a></span> with only FEFF Characters. - Change the font size again (e.g., back to 14). - Multiple empty tags remain in the DOM. Description of the issue this PR addresses: - In the removeFeffs method, FEFF characters are replaced with empty text nodes, which can lead to unwanted empty elements and empty text nodes being left in the DOM. Desired behavior after PR is merged: - Empty text nodes resulting from FEFF replacement are now properly removed, preventing leftover empty elements in the DOM. task-5097770 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233909
Before this PR: - Sending invoice/vendor bill to eTIMS would send null item codes if products weren't registered. - `View Product(s)` button in validation messages opened standard product variant view with generic product fields instead of eTIMS-specific fields. - When sending multiple invoices via batch processing, product registration used incorrect company context (in `self.env.company`) instead of the specific invoice's company, causing products to be registered to the wrong c
Original PR description
Before this PR: - Sending invoice/vendor bill to eTIMS would send null item codes if products weren't registered. - `View Product(s)` button in validation messages opened standard product variant view with generic product fields instead of eTIMS-specific fields. - When sending multiple invoices via batch processing, product registration used incorrect company context (in `self.env.company`) instead of the specific invoice's company, causing products to be registered to the wrong company's eTIMS system. After this PR: - Products are automatically registered with eTIMS before sending invoices/vendor bills. - `View Product(s)` button now opens custom `l10n_ke_kra_product_tree` view with eTIMS-specific fields. - Product registration now properly uses the invoice's company context (`move.company_id`) ensuring products are registered to the correct company's eTIMS system in multi-company scenarios. Task-5039671 Forward-Port-Of: odoo/enterprise#93375
When the user tries to perform create or copy operations on the ``hr.recruitment.stage.report`` model, a traceback appears. Steps to reproduce the error: - Install ``hr_recruitment_reports`` module with demo data - Go to Recruitment > Reporting > Hiring Velocity > switch to cohort view > click on any record > select any record > duplicate Traceback: ```py ObjectNotInPrerequisiteState cannot insert into view 'hr_recruitment_stage_report' ``` ``hr.recruitment.stage.report`` mode
Original PR description
When the user tries to perform create or copy operations on the ``hr.recruitment.stage.report`` model, a traceback appears. Steps to reproduce the error: - Install ``hr_recruitment_reports`` module with demo data - Go to Recruitment > Reporting > Hiring Velocity > switch to cohort view > click on any record > select any record > duplicate Traceback: ```py ObjectNotInPrerequisiteState cannot insert into view 'hr_recruitment_stage_report' ``` ``hr.recruitment.stage.report`` model is ``_auto=False``, meaning that no database table is created for this model. When the user attempts to create or duplicate a record of that model, It will lead to the above traceback. sentry-7024266324
This update fixes an issue where users without administrative access would encounter an error when creating projects based on templates with Field Service. The fix involves ensuring proper access controls are enforced during schedule retrieval, preventing access errors for non-administrator users. This ensures consistent project creation functionality.
Original PR description
--- ## Short functional explanation of the error Let's say we create a project template with field service. This will enable the start and end date of the project template and its tasks. If we assign…
---
## Short functional explanation of the error
Let's say we create a project template with field service. This will enable the start and end date of the project template and its tasks. If we assign an employee, their schedule will be retrieved to see if it matches the start and end date of the project.
If we try to create a project based on this template as an employee who's not an admin (only has rights for the project and services apps, for example), this will result in the error
This operation is allowed for the following groups:
- Employees/Administrator
- Employees/Officer: Manage all employees
Contact your administrator to request access if necessary.
Explanation: as we try to retrieve the employee schedule with an employee who doesn't have access rights to the Employee infos, it raises an access error.
## Reproduction Steps
1. As an admin, go to Projects and create a new project with a new stage and a new task. Assign an employee to this task.
2. Enable debug mode and go to the settings of the project. Under field service, check Field Service, then save.
3. Click on the small cog next to the project name and click Convert to Template.
4. Set a planned start and end date for the project and for its task. Assign a customer on the task.
5. Go to Users and select a different user than the one you assigned to the task.
6. Set this user administrator for Project and Field Service.
7. Make sure that this user also has an employee profile. Log in with this user and create a project based on this
### Expected behavior
The project is created without the entries the employee doesn't have access to
### Unexpected behavior
An access error is raised
## Origin of the issue
A sudo() was missing in the code.
__
opw-5263024This update ensures that employee contract details, specifically the work address and location, are consistently saved when a new contract version is created through the configurator. Previously, this information was sometimes lost, leading to potential data discrepancies. This change improves data accuracy for employee records.
Original PR description
When a new version is created by the configurator, we need to keep the work address and location.
This update fixes an issue where the SAFT report incorrectly assigned the supplier's receivable account to customers. The fix changes the XML data to use the customer's receivable account, ensuring accurate reporting for the SAFT document. This ensures compliance and proper financial reporting.
Original PR description
### Issue: In the SAFT report both the Customer and the Supplier have the same account. ### Cause: In the XML there was probably a typo and both have `property_account_payable_id` as account. ### Solution: For the `Customers` node, use `property_account_receivable_id`. opw-5144009 Forward-Port-Of: odoo/enterprise#99196
This update refines how website builder tests use snippets, ensuring they accurately reflect the real snippets used in the application. By avoiding matching snippets within other snippets and applying necessary processing, the tests now provide more reliable results and prevent discrepancies between the test environment and the live website.
Original PR description
Forward-Port-Of: odoo/odoo#234902
This update resolves an issue where unregistering a Nemhandel user caused the user database to no longer recognize them. The fix corrects a mismatch in exception types, ensuring that the user database is properly updated when a user is unregistered, preventing errors and maintaining accurate user tracking.
Original PR description
If you unregister a Nemhandel user, it won't ever be picked up by the user db. And trying to unregister by hand will give a traceback. This is due to mismatch between Exception types. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236670
This update ensures that filters applied to composite reports consistently work across all sections within those reports. Previously, filters weren't always correctly applied, leading to inconsistent report results. This change aligns with standard Odoo reporting practices, guaranteeing accurate and reliable reporting.
Original PR description
When using a composite report whose sections aren't used independently, enabling that filter on the composite report needs to enable it on their sections as well, else it won't show in the UI. This is the standard behavior for all report filters. Forward-Port-Of: odoo/enterprise#100240 Forward-Port-Of: odoo/enterprise#100148
This update corrects a technical glitch where stopping ringtone playback caused unnecessary HTTP requests. The fix resets the element's source, preventing the browser from incorrectly attempting to load a 'null' file. This ensures ringtone functionality operates smoothly and efficiently.
Original PR description
Setting the src of an element to null triggers a GET HTTP request to /null. This is not the intended behavior; we want to reset the source so that it is not linked to any file, but the browser interprets it as an attempt to load a file called "null". This commit fixes the problem by resetting the source using removeAttribute instead. [Task-5349985](https://www.odoo.com/odoo/project/5778/tasks/5349985) Forward-Port-Of: odoo/enterprise#100146
This update fixes an issue where composite reports weren't consistently applying filters to their individual sections. Now, enabling a filter on a composite report will automatically enable it on all of its components, ensuring accurate reporting results. This aligns with standard Odoo reporting practices.
Original PR description
When using a composite report whose sections aren't used independently, enabling that filter on the composite report needs to enable it on their sections as well, else it won't show in the UI. This is the standard behavior for all report filters. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237003 Forward-Port-Of: odoo/odoo#236893
This update addresses an issue where pressing Backspace within a blank blockquote would unexpectedly delete the entire Table of Contents. The change ensures that an empty blockquote is now converted into a standard container when Backspace is pressed, preserving the intended content and functionality. This improves the user experience and prevents data loss.
Original PR description
### Steps to reproduce: - Create a new Project task. - Insert a Table of Contents (e.g., /tableofcontent). - Insert a quote below it (e.g., /blockquote). - Place the cursor at the start of the empty quote and press Backspace. - The Table of Contents is removed. ### Desired behavior after PR is merged: - Empty blockquote is converted into a base container when backspace is pressed. task-5246130 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235087
This update fixes a technical issue within our Point of Sale (PoS) system that was generating warnings in the console. These warnings were related to missing widgets during order detail views. The fix adds the necessary configuration to ensure smooth operation and accurate order information display for users.
Original PR description
Steps to reproduce ------------------ 1. In PoS, make a normak order and pay it 2. Go to the "Orders", filter by "Paid" 3. Select the order of step 1 and click "Details" Observed behavior -> Warnings in the console about missing widgets. Fix --- We add those missing widgets to point_of_sale/__manifest__.py opw-5181965
This update resolves an issue where multiple expense records were created when using the 'force capture' feature with Stripe. Sending the same Stripe transaction event multiple times resulted in duplicate expense entries. This fix ensures data accuracy and prevents unnecessary expense records.
Original PR description
It's possible for multiples expenses to be created when using force capture. - Setup a company in EU and do the account onboarding - create a card - simulate a test purchase with force capture - after the webhook event issuing_transaction.* is received, an expense should have been created - now send again this event to the server (from the stripe dashboard or any other way) - a second expense will be created with the same transaction_id
This update resolves an issue where shared Knowledge articles wouldn't display correctly for users accessing them through different website languages. The fix corrects a URL rewriting problem, ensuring articles are accessible regardless of the user's preferred language setting. This improves the usability of our knowledge base for all portal users.
Original PR description
## Issue: When multiple languages are enabled on the website (English + another), sharing a public Knowledge article may block portal users from accessing it For example, if the website’s default…
## Issue: When multiple languages are enabled on the website (English + another), sharing a public Knowledge article may block portal users from accessing it For example, if the website’s default language is Spanish and the user opens the link, they are redirected to the home page and the article does not appear in the sidebar ## Cause: When accessing `/knowledge/article/...`, the `_match` route handler automatically rewrites the URL to `/en/knowledge/article/...` However, the website only recognizes `/es/knowledge/article/...`, so the rewritten URL is not valid As a result, the user falls back to `/knowledge/article/new`, which triggers a redirection to the home page ## Steps to reproduce: - Install Knowledge and Knowledge Website - Set Spanish and English (US) as available website languages - Set Spanish as default website language - Create an article in knowledge - Click Share and activate "Share to web" - Copy the link and open it in a private window (The article should be visible) - Log in as a Portal user - Open the link - The user is redirected to the home page and the article is missing from the sidebar opw-4916118 Forward-Port-Of: odoo/enterprise#96505
This update resolves an issue where the invoice report incorrectly displayed currency symbols and incorrect total amounts when a company's tax settings were 'tax included'. The fix ensures accurate reporting of price-included totals, improving invoice clarity and compliance.
Original PR description
When the company is "tax included" for all taxes, after signing to eTims, the invoice report: - shows the currency symbol twice for "Taxable Amount". - The xpath for 'td_subtotal' is also doubled for no reason. - The "Total" columns is always price excluded instead of being price included. task_id: 5252530 Forward-Port-Of: odoo/enterprise#100050
This update resolves several display issues within the mobile Kanban view for documents, specifically in the 'Recent' folder. The changes address gaps in layout and scrolling limitations, ensuring a more consistent and usable experience for users managing documents on mobile devices. This improves the overall efficiency of document access.
Original PR description
This commit fix several issue in kanban mobile view: - When a folder has folders AND documents, there is a huge gap between the two because of the kanban ghost records. - In the 'Recent' folder, folders and documents doesn't take all width. - In the 'Recent' folder, we can't scroll to see all the documents. Task-4963198 Forward-Port-Of: odoo/enterprise#100134 Forward-Port-Of: odoo/enterprise#90647
This update fixes an issue where deposited amounts were incorrectly shown as 'Total Due' in customer records. A recent system update caused a miscalculation, leading to inaccurate reporting of deposits. The fix ensures deposits are now correctly displayed as deposited amounts, improving the accuracy of financial data.
Original PR description
Steps to reproduce: =================== 1. Open the customer list. 2. Select a customer and choose `Deposit money`. 3. Deposit an amount (e.g. 50) and confirm. 4. Open the customer list again. Issue: ====== The deposited amount is shown as `Total Due` instead of `Deposited`. Also the confirmation dialog for deposit showing negative amount. Cause: ====== A major refactor in order change calculation, passes the negative change value to the `depositOrder`, so the deposit was recorded as a due amount. Fix: ==== Negate the change value when adding the deposit order line so it becomes positive and is correctly shown as a deposit. Task: 5227004
This update enhances the subchannel search and list view by sorting subchannels based on their last activity date. This prioritizes the most active and relevant conversations, making it easier for users to quickly find important discussions. It improves usability and efficiency for managing communication.
Original PR description
Sub-channel search/list is currently ordered by id, but it would be more natural to order them by last interest to be able to quickly see/find those that are actually active and still relevant today at the top of the list. task-5265234 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update addresses a technical issue preventing migration tests from running correctly. The change disables a date constraint during testing, allowing migration tests to advance the stock picking schedule without errors. This ensures the migration process continues to function smoothly.
Original PR description
This commit disables `_check_backdate_allowed` on stock pickings in the case of running a test. This is mainly because of the migration test in [`migrations/account/tests/test_lockdate.py`](https://github.com/odoo/upgrade/blob/master/migrations/account/tests/test_lockdate.py), which advances the lock date of all the existing companies by 15 days. Therefore, any stock picking record created in the `prepare` method of any migration test will fail, because the scheduled date is `now` by default. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a minor visual issue in the account update tax tags settings. Previously, an empty space appeared in the settings view when a user's permissions weren't correctly recognized. This change ensures the settings view is consistently displayed without any empty divisions, improving the user experience.
Original PR description
On the res config settings view, a group was applied on a button, but if the group is not respected, the button is invisible but not the setting div, leading to an empty div in the settings. Move the groups attribute from the button to the setting element, so we won't have any empty space anymore. Linked: https://github.com/odoo/enterprise/pull/84533 no-task
This update corrects a visual issue in the Account Online Synchronization module. Previously, only the data within the company column was hidden; now, the entire column is invisible. This ensures a cleaner and more professional user interface for users working with account synchronization.
Original PR description
The whole column needs to be invisible, not just the content of it
This update resolves a limitation that previously prevented the creation of multiple temporary directories within Odoo. By allowing multiple temporary directories, the system can now handle more complex operations, such as importing data with nested temporary files. This change ensures smoother operation and avoids potential errors.
Original PR description
Before this commit, only one temporary directory can be opened concurrently, which prevents for example nested temporary directories. This commit removes this limitation by adapting the __file_open_tmp_paths variable, which is now an array where we store opened temporary folders. It also adds tests about file_open(temporary_directory) methods.
This update corrects a minor issue where Odoo would display an error if a required field was hidden. The change ensures that Odoo correctly handles invisible fields, preventing unexpected errors and improving user experience. This ensures data entry processes run smoothly.
Original PR description
When a required select is invisible, you may get an error saying the a required field is not set. So like for other type of fields, we check the visibility of the field.
This update corrects a bug in how purchase orders with warnings are displayed. Previously, POs without any activities were shown, regardless of whether a warning was present. This change ensures that POs with warnings are correctly identified and displayed, restoring the expected behavior from previous versions.
Original PR description
Steps To Reproduce ------------------ 1- To purchase orders 2- Create random purchase orders (with activity and without and with warning) 3- Select the Warning Filter Issue ----- 1- Only POs with no…
Steps To Reproduce
------------------
1- To purchase orders
2- Create random purchase orders (with activity and without and with warning)
3- Select the Warning Filter
Issue
-----
1- Only POs with no activities show on the list.
2- The behavior in versions previous to 18.3 works perfectly fine, showing only POs with warnings.
Cause
-----
The issue is caused by this commit: 92301a5b300dec1ddfca44dc35318b83d67c56fa.
The search logic for the activity_exception_decoration field was changed to refuse negative operators (`!=`):
https://github.com/odoo/odoo/blob/92301a5b300dec1ddfca44dc35318b83d67c56fa/addons/mail/models/mail_activity_mixin.py#L118-L121
This forces the ORM to invert the filter:
https://github.com/odoo/odoo/blob/9a8350cb476af73d6bf4eea75344963eac1c7831/odoo/orm/domains.py#L873-L880
For this case, this transforms the intended query:
`Exists(activity_exception_decoration != False)` ("Has Warning")
Into the inverted query:
`NOT Exists(activity_exception_decoration == False)` ("Does NOT have a Normal activity")
This incorrectly hides records that have both warning and normal activities, and incorrectly shows records with no activities at all.
opw-5177277
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#236732This update fixes an issue where tax return amounts were incorrectly calculated for section reports, specifically in the LU tax return. The change ensures the correct return periodicity is used by retrieving the return type from the section source, resolving a discrepancy between the main report and the section report.
Original PR description
We have some reports with sections, like l10n_lu generic tax return.
Since account.return are born, when submitting the lu tax return, the periodicity is wrongly
computed, because of the self in `_init_options_return_periodicity` is the section report, not the main,
but the account.return.type is set with report_id = main report
Step to reproduce:
With a LU company:
1. Create a journal entry for a previous period
2. Submit the tax return for the same period
3. The amount shown is the amount of the current month
Solution: use options['sections_source_id'] to fetch the return_type instead of self.return_type_ids
opw-5163352
Forward-Port-Of: odoo/enterprise#100063This update resolves a bug that prevented users from correctly sorting the Time Off Ledger report. The issue stemmed from a default sorting rule that conflicted with user-specified sorting directions. Now, users can reliably sort the report in both ascending and descending order, ensuring accurate reporting.
Original PR description
Version - 19.0 ## Issue: Sorting the Date column in the Time Off Ledger triggers a traceback when attempting to sort in ascending order. ## Steps to reproduce: - Open the Attendances app - Navigate…
Version - 19.0 ## Issue: Sorting the Date column in the Time Off Ledger triggers a traceback when attempting to sort in ascending order. ## Steps to reproduce: - Open the Attendances app - Navigate to Time Off Ledger report - Click on dates column for sorting --> you get a traceback ## Cause: The code always appends `' desc'` to the order clause to enforce a default descending sort. When the UI already provides a direction (e.g. `date:month ASC`), this results in an invalid combined order such as `date:month ASC desc`, raising: `ValueError: Invalid order 'date: month ASC desc' for _read_group().` ## Fix: Add a check to avoid appending `' desc'` when the order string already contains `asc` or `desc`. ## Impact: Sorting the Date column no longer crashes. Users can now sort the report correctly in both ascending and descending order, with descending remaining the default. task-5331052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a missing translation file for the Finnish reports module. It also removes translation from a specific sales report, ensuring consistent and accurate reporting in Finnish. This improves the usability of Odoo Enterprise for Finnish-speaking users.
Original PR description
The aim of this commit is updating the POT file as we forgot to do it in this commit [[1]]. We also translate report column names in the PO files as we have official translation for it. This commit also disables the translation on the TXT EC sales report. no task id [1]: https://github.com/odoo/enterprise/commit/4887ed53d3a22fdcd766ab0ae77da7cb0498e5a3 Forward-Port-Of: odoo/enterprise#100308 Forward-Port-Of: odoo/enterprise#99887
This update addresses a memory issue that occurred during the v19 upgrade mock crawl when retrieving product information. The fix utilizes a controlled lookup instead of a large relational prefetch, preventing the 'MemoryError' and ensuring smoother operation. This resolves a potential crash and improves stability.
Original PR description
During v19 upgrade mock crawl, accessing `source.move_ids.product_id` triggered a huge relational prefetch, crashing with: ```py File…
During v19 upgrade mock crawl, accessing `source.move_ids.product_id` triggered a huge relational prefetch, crashing with:
```py
File "/home/odoo/src/odoo/19.0/addons/delivery/models/delivery_carrier.py", line 209, in _match_must_have_tags
products = source.move_ids.product_id
File "/home/odoo/src/odoo/19.0/odoo/orm/fields_relational.py", line 75, in __get__
super().__get__(remaining, owner)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1692, in __get__
recs._fetch_field(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3769, in _fetch_field
self.fetch(fnames)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3809, in fetch
fetched = self._fetch_query(query, fields_to_fetch)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3930, in _fetch_query
field._insert_cache(fetched, values)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1599, in _insert_cache
collections.deque(map(field_cache.setdefault, records._ids, values), maxlen=0)
MemoryError
```
Full traceback: https://pad.odoo.com/p/aTIGHsnDMrfMENfmU5TK
Use a controlled lookup instead.
opw-5223443
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update automatically activates the EC Sales List report menu item for Odoo Enterprise users in several European countries (Bulgaria, Cyprus, Czech Republic, Latvia, Malta, Poland, Romania). Previously, users in these regions had to manually enable the report, streamlining the reporting process and improving usability.
Original PR description
In this PR: - Added XML records to set the EC Sales List report menu item as active for some EU countries that previously required manual activation. Task-4885725 Forward-Port-Of: odoo/enterprise#93939
This update addresses a technical issue identified by Odoo's automated testing system (runbot). The fix ensures that localization tours within the Point of Sale module function correctly for different regions, improving the user experience for international customers. This resolves a previous bug that prevented proper localization setup.
Original PR description
Fix runbot issue runbot-233183 Forward-Port-Of: odoo/enterprise#100069 Forward-Port-Of: odoo/enterprise#99370
This update resolves issues with how the Hoot mock server handles 'blob:' URLs and nested data streams within unit tests. It now correctly mocks these URLs and properly parses data, ensuring more reliable test results and improved functionality for attachments.
Original PR description
See commit messages for details --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#236395 Forward-Port-Of: odoo/odoo#234558
This update corrects a missed step in the Finnish translation process, ensuring the POT file is properly maintained. It also translates a key business term, improving the accuracy and usability of the Odoo application for Finnish users. This ensures compliance with local regulations and a better user experience.
Original PR description
The aim of this commit is updating the POT file as we forgot to do it in this commit [[1]]. We also translate the Business ID term for the correct one. no task id [1]: https://github.com/odoo/odoo/commit/7ef02a48f3c93cb8aca9337a27c3c87636fb03a0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237098 Forward-Port-Of: odoo/odoo#236469
This update fixes an issue where users were incorrectly changing product details on combo item lines. To address abuse of the system, a temporary workaround has been implemented requiring users to hide product fields before editing the description. This ensures data integrity within combo orders.
Original PR description
This was initially allowed so that the user could edit the description on combo item lines (since both the product and description fields are displayed in a single column). However, users seem to abuse this (see https://github.com/odoo/odoo/pull/234090). For information, the description can still be edited, but to do so, the user must first hide the `Product` and `Product variant` columns (which can be shown again after making the necessary changes). Forward-Port-Of: odoo/odoo#237148 Forward-Port-Of: odoo/odoo#235547
This update resolves an instability issue within the Point of Sale (PoS) localization tour. The change removes a problematic closure step, which previously caused frequent failures due to the PoS's complex setup. This improves tour performance and reliability.
Original PR description
backport of : https://github.com/odoo/odoo/pull/231884 Remove the closing of the PoS in the tour as it is really unstable and fail a lot. It's mostly due to the fact that the PoS take a long time to close with a lost of modules installed. This will also make the tour faster. runbot-233183 Forward-Port-Of: odoo/odoo#236747 Forward-Port-Of: odoo/odoo#234310
This update resolves an issue where the base_import module would fail when users lacked access to the underlying data definition. The fix now includes checks for field group restrictions, preventing crashes and ensuring smoother data import processes. A new test case has been added to verify this improved behavior.
Original PR description
…ible https://github.com/odoo/odoo/pull/236037 ignores the properties field if we don't have access to the definition model at all. However, we should also check field groups to avoid crashing if the user cannot access the definition field because of group restrictions. Forward-Port-Of: odoo/odoo#237166 Forward-Port-Of: odoo/odoo#236912
This update resolves a bug where setting the background image width to 0px in the website builder's 'Repeat pattern' mode caused the background to disappear. The fix ensures that the input fields reset correctly to the default 'auto' size, maintaining proper background image display.
Original PR description
__Current behavior before commit:__ In "Repeat pattern" mode, users can set the background image's width and height to 0px, which doesn't make sense. Additionally, clearing these input fields resets their values to 0px instead of reverting them to `auto`. __Description of the fix:__ Make it possible to clear those fields by setting their default value to `null` and set the minimum value to 1 to prevent the image from disappearing. __Steps to reproduce:__ 1. On the website, drop a `s_cover` snippet 2. Set Background > Image > Position to "Repeat pattern" 3. Delete the content of the "Width" input => The background disappears. task-5094899 Forward-Port-Of: odoo/odoo#231216
This update resolves an issue that prevented fiscal receipts from generating correctly when multiple payment methods were used in a POS order. The fix ensures unique identification of payment methods, eliminating a 'duplicate key' error that was causing failures.
Original PR description
When multiple payment methods are used in a POS order, the fiscal receipt generation fails with "Got duplicate key in t-foreach: 0" error. This occurs because all payment methods have the same default it_payment_index value (1), causing duplicate keys in the Owl template's t-foreach loop. This fix uses the payment's database ID (payment.id) as the unique key in the template loop instead of relying on the payment method's it_payment_index value.
This update fixes a potential issue where rental returns could exceed the quantity picked up. Previously, users could return more products than were initially taken, leading to inaccurate inventory counts. This change ensures that returned quantities never exceed the picked-up quantities, improving rental accuracy and reporting.
Original PR description
## Versions 17.0+ ## Issue It is possible to return more products than what has been picked in Rental. ## Steps to reproduce - Create a service product available for rent; - Create a rental SO for any partner: - Add 5 units of the created service; - Confirm the SO; - Pickup 5; - Return 4; - Return 4; - Check the SOL containing 5 delivered products and 8 returned products. opw-5259727 Forward-Port-Of: odoo/enterprise#100303 Forward-Port-Of: odoo/enterprise#100015