Tuesday, December 2, 2025
52 changes · 19.0
New functionality added to Odoo
This update introduces a new reporting feature for Irish businesses, specifically the Return of Trading Details (RTD) Report and its associated Return. This allows Irish companies to comply with local regulations and reporting requirements within Odoo, streamlining their accounting processes.
Original PR description
WIP This PR adds a new report Return of Trading Details (RTD) for Ireland and its Return. task-5184653
Enhancements to existing features
This update adds logging to the automated reconciliation process, making it easier to identify and resolve issues when it runs in a user's database. Previously, debugging this process was difficult, but these new loggers provide greater visibility into the reconciliation steps. This improves reliability and reduces potential disruptions.
Original PR description
For the moment, it's difficult to debug in users databases in the cron and the try auto reconcile. This commit will add some loggers to be more aware of what's going on. task-5358849 Forward-Port-Of: odoo/enterprise#100601
Resolved issues and error corrections
This update corrects a previous issue where the system incorrectly set the preferred invoice sending method based on the first 'Send & Print' action for a partner. This prevented users from easily switching to new sending methods like 'PEPPOL' without being repeatedly prompted to use email. This change ensures users have control over their sending preferences.
Original PR description
Before this commit, we were setting the preferred invoice sending method on the Contact depending on what was in the first Send & Print to this specific partner. It's a bad idea because user don't know about this setting and when they want to switch the default method (example email -> peppol) the wizard will keep propose them to send it by email only and they don't know why since they never knowingly set it to "email". task-none (feedback from AVW) Forward-Port-Of: odoo/odoo#238029 Forward-Port-Of: odoo/odoo#237956
Features or functions removed from Odoo
This update removes redundant overrides for start dates in the UK and New Zealand reporting modules. Previously, users couldn't easily set the start date themselves, rendering the field on the form view ineffective. This change simplifies the reporting process and aligns with the new user interface functionality.
Original PR description
These overrides are useless now that the user can access the return type form view and configure himself the start_date. Overriding _get_start_date_elements should be avoided as much as possible as this is making the field on the form view useless if set.
This update clarifies the Peppol settings within the Odoo configuration, making it easier for users to identify the current operating mode (demo, test, or production). Previously, users lacked a visual indicator, which could lead to configuration errors. This simple label change improves usability and reduces the risk of misconfiguration.
Original PR description
Before this PR : The Peppol settings section in the settings page did not show the current mode (demo/test/prod). Users had no clear indication of the active mode, which could lead to mistakes. After this PR : A small label is now displayed in the Peppol settings section to clearly indicate the current mode when not in production. task-5149768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238039 Forward-Port-Of: odoo/odoo#236072
This update corrects a bug where administrators without HR permissions could trigger an access error when attempting to create a new employee. The fix hides the 'Create Employee' button for users lacking the necessary HR rights, ensuring a smoother user experience and preventing errors.
Original PR description
**Version:** - 17.0 **Steps to reproduce:** - Make sure Marc Demo is an Administrator but has no Employees (HR) access rights. - Log in as Marc Demo. - Go to Settings → Users → Create a new user. - Enter a name and email, then Save. - You’ll see the "Create Employee" button it appears even though the user has no HR rights. - Click it → an Access Error occurs. **Isuue:** - The "Create Employee" button is visible for users who don’t have HR permissions, causing an access error when clicked. **Solution:** - Hide the "Create Employee" button for users without HR access by adding the correct group restriction. task-5212464 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#235258
This update fixes an issue where styles (color, size) applied to text within a document weren't consistently reflected on list markers. Now, when converting text with multiple styles to a list, the list markers will always display the intended styles, improving the formatting of lists.
Original PR description
**Current behavior before PR:** - When applying a color or size style to the entire text and then converting it into a list, the style was reflected on the list marker. - However, if multiple styles (e.g., both color and size, or color and bold) were applied, only one style or sometimes none was reflected on the marker. **Desired behavior after PR is merged:** - When text with color, size, or both styles is converted into a list, The list markers now consistently reflect those styles. task-5097649 Forward-Port-Of: odoo/odoo#234296 Forward-Port-Of: odoo/odoo#227813
This update resolves an error that prevented payslips from being printed for employees who didn't have a contract assigned. The fix ensures that a contract is required to generate a payslip, preventing template errors. This improves the reliability of payroll reporting.
Original PR description
An error occurs while printing a payslip for an employee who does not have a contract. Steps to reproduce the error: - Install the ``hr_payroll`` module - Create an employee without contract - Create a payslip for that employee > Compute Sheet > Print Traceback: ``` Error while rendering the template: TypeError: '<' not supported between instances of 'datetime.date' and 'bool' ``` https://github.com/odoo/enterprise/blob/368a81a277b2fa7c5eac7c63addd0d75ec89111b/hr_payroll/views/report_payslip_templates.xml#L70 Here, ``version_id.contract_date_start`` will be ``False`` when the employee does not have a contract, which leads to the above traceback. Solution: User can not print payslip without running contract. sentry-6922017511
This update addresses a minor timing issue that was causing automated tests for the Point of Sale (POS) module to occasionally fail. The fix ensures that key order acceptance timestamps are correctly verified, improving the reliability of our automated testing process. This resolves a specific runbot error and contributes to overall system stability.
Original PR description
in this commit: - Fixed the `_acceptOrder, _dispatchOrder, _completeOrder` test, which could fail due to minor timing delays. - Updated the assertion to only verify that `orderAcceptTime` is not empty. runbot-error-234594 Forward-Port-Of: odoo/enterprise#100942
This update fixes a minor bug where closing the `/article` dialog in the Knowledge editor would cause the page to jump to the top. The fix ensures the correct element focus is maintained during dialog closure, preventing this disruptive scroll behavior. This improves the user experience when editing long articles.
Original PR description
Problem: When editing a long Knowledge article and executing the `/article` command, closing the dialog automatically scrolls the page to the top. Cause: This happens because `useActiveElement` inside the `Dialog` component runs its cleanup function when the dialog unmounts. While unmounting, `document.activeElement` is `body`, so the cleanup tries to focus back the `oldActiveElement`, which is the `editable`, and this resets the selection and causes the scroll jump. Solution: Set the selection when closing the dialog, ensuring the `editable` remains the `document.activeElement` during cleanup, preventing the focus reset. Steps to reproduce: - Edit a long article further down the page. - Use the `/article` command. - Dismiss the dialog. → The page scrolls back to the top. opw-4797567 Forward-Port-Of: odoo/enterprise#100634
This update fixes an issue where RPC failures were incorrectly handled by the system's caching mechanism. Previously, a failed RPC would resolve with 'undefined' instead of properly rejecting the promise. This change ensures that RPC failures are correctly caught and handled, preventing unexpected behavior and improving the stability of the system.
Original PR description
Let's say we trigger two times a RPC that fails. The first time, the cache is empty and we make the RPC. The ram cache is filled with `prom`. The second time, we get `prom` from the ram cache. When…
Let's say we trigger two times a RPC that fails.
The first time, the cache is empty and we make the RPC. The ram cache is filled with `prom`.
The second time, we get `prom` from the ram cache.
When the RPC actually finishes, we end up in
```js
.catch((error) => {
this.ramCache.delete(table, key);
def.reject(error);
});
```
=> the RPC failure is catched, which means `prom` itself is not rejected. Instead, it resolves with the result of `.catch(...)`, which is `undefined`
Here is a simplified toy example:
```js
const prom = Promise.resolve(
Promise.reject(new Error("fetch failed")).catch(() => {})
);
```
In this example, `prom` is successful and the result is `undefined`
"
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#238185
Forward-Port-Of: odoo/odoo#237984This update resolves an issue where duplicating an approver within an approval request caused a system error. The fix prevents the same user from being linked to multiple approvers, eliminating the traceback and ensuring approval requests can be properly processed. This improves stability and prevents disruptions to the approval workflow.
Original PR description
When User duplicates the approver for any approval request and tries to open that approval request, A traceback will appear. Steps to reproduce the error: - Activate the developer mode - Go to Approvals > Create a new approval request > add any approver > Save - Click on the ``View`` button in the approver line - Now, In the Form view > Actions > Duplicate - Go back to that approval request through breadcrumbs Traceback: ``` ValueError: Expected singleton: approval.approver(1, 3) ``` https://github.com/odoo/enterprise/blob/83b6c0e1c052b08bd23c5e009773b5a3148ddeec/approvals/models/approval_request.py#L270 When the customer duplicates the approver, ``user_id`` will be also duplicated. So, Now Same User is linked with multiple approver. So, It will lead to the above traceback. sentry-6642840799 Forward-Port-Of: odoo/enterprise#100979 Forward-Port-Of: odoo/enterprise#87164
This update resolves a crash that occurred when generating inventory valuation reports in Arabic. The issue stemmed from the system incorrectly interpreting date formats, specifically Eastern Arabic numerals. The fix ensures dates are consistently formatted as 'YYYY-MM-DD' (ASCII ISO), preventing errors and improving report reliability.
Original PR description
Steps:
- Switch UI language to Arabic.
- Accounting ▸ Review ▸ Inventory Valuation.
Before this commit:
- Crash during RPC with: ValueError: time data '٢٠٢٥-١٠-٢١' does not match format '%Y-%m-%d' (from stock_account.stock.valuation.report._get_report_data)
Cause:
- The client sent the date string with Eastern Arabic digits. Python’s strptime('%Y-%m-%d') only accepts ASCII digits.
with this commit:
When building kwargs for `get_report_values`, serialize the date with `toISODate()` (ASCII `YYYY-MM-DD`).
Replace localized formatting (`toFormat('yyyy-MM-dd')` with `toISODate()` at the call site. This is locale-independent and avoids TZ side effects for pure dates. Keeps existing behavior for empty date (send `false`).
opw-5146684
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis pull request updates the core odoo spreadsheet component to the latest version (19.0.12). It addresses several minor bugs and performance improvements related to chart rendering, data handling, and user interface elements, ensuring a smoother and more reliable spreadsheet experience. These changes enhance stability and usability for users.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/32203f1f8 [REL] 19.0.12 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/32203f1f8 [REL] 19.0.12 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/6fde54cb8 [FIX] chart: don't crash treemap without visible data [Task: 5365419](https://www.odoo.com/odoo/2328/tasks/5365419) https://github.com/odoo/o-spreadsheet/commit/291608938 [FIX] charts: small zoom is disabled [Task: 5058567](https://www.odoo.com/odoo/2328/tasks/5058567) https://github.com/odoo/o-spreadsheet/commit/b0c2d6628 [FIX] clickable cells: prevent overlap with grid icons [Task: 4930803](https://www.odoo.com/odoo/2328/tasks/4930803) https://github.com/odoo/o-spreadsheet/commit/45725c976 [FIX] Migration: Fix chart migration after 18.5.1 [Task: 5365954](https://www.odoo.com/odoo/2328/tasks/5365954) https://github.com/odoo/o-spreadsheet/commit/e63f36f52 [FIX] pivot: Ensure computed measure range adaptation [Task: 5358213](https://www.odoo.com/odoo/2328/tasks/5358213) https://github.com/odoo/o-spreadsheet/commit/34d4c6420 [FIX] commands: remove duplicate in invalidateEvaluationCommands [Task: 5358213](https://www.odoo.com/odoo/2328/tasks/5358213) https://github.com/odoo/o-spreadsheet/commit/b58dae95a [FIX] Charts: Ensure Chart js extension are loaded on chart creation [Task: 5214007](https://www.odoo.com/odoo/2328/tasks/5214007) https://github.com/odoo/o-spreadsheet/commit/99a94ac04 [FIX] topbar: close font size dropdown and keep focus on the grid [Task: 5263792](https://www.odoo.com/odoo/2328/tasks/5263792) https://github.com/odoo/o-spreadsheet/commit/666c6de18 [FIX] figures: fix non-deterministic figure order export [Task: 5092281](https://www.odoo.com/odoo/2328/tasks/5092281) https://github.com/odoo/o-spreadsheet/commit/7578897a4 [FIX] Demo: Fix wrapper style [Task: 5212448](https://www.odoo.com/odoo/2328/tasks/5212448) https://github.com/odoo/o-spreadsheet/commit/641d1923a [FIX] composer: keep edition mode inactive on cursor selection change [Task: 5354541](https://www.odoo.com/odoo/2328/tasks/5354541) https://github.com/odoo/o-spreadsheet/commit/c5c03e189 [FIX] BottomBarSheet: sheet name should update on foreign changes [Task: 5016252](https://www.odoo.com/odoo/2328/tasks/5016252) https://github.com/odoo/o-spreadsheet/commit/d4b38dc53 [FIX] Composer: Fix assistant position [Task: 5155838](https://www.odoo.com/odoo/2328/tasks/5155838) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update resolves an issue where the PEPPOL data neutralization script wouldn't function correctly if a required key was missing. The change ensures the script automatically inserts the key when it's not present, guaranteeing proper data processing for PEPPOL transactions. This improves the reliability of our PEPPOL integration.
Original PR description
There can be some siutations where you can not have the key account_peppol.edi.mode while having a connection. But the neutralize only updates and so, if the key is not present, it does nothing. So change it to insert the key if no present --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238184
This update resolves a technical error that was preventing proper payroll calculations within the Odoo Enterprise system. The fix involved correcting a dependency issue related to a configuration field, ensuring accurate salary processing for Belgian employees. This change improves the reliability of payroll reporting.
Original PR description
…act_salary A runbot build error was reported for one of my tests: https://runbot.odoo.com/odoo/runbot.build.error/233591 The issue was because the field `hide_in_offer` was used in a module where it did not exist. I have overridden the function to make it call the field when it was installed, and moved the logic using it to that inheriting function. task-5350522 Forward-Port-Of: odoo/enterprise#100190
This update resolves a technical issue related to the Swiss payroll module (l10n_ch_hr_payroll) by adding missing input types. These input types are crucial for accurately reflecting Swiss tax and social security regulations, ensuring the payroll calculations align with legal requirements. This fix improves the accuracy and compliance of the payroll processing for Swiss businesses.
Original PR description
Forward-Port-Of: odoo/enterprise#100992
This update resolves a technical error that prevented the generation of payroll export files. The fix utilizes the employee's display name instead of the name field, ensuring consistent export functionality. A new test suite has been implemented to guarantee the accuracy of the Acereta payroll export process.
Original PR description
When generating the export file, a traceback occurred because the name field was empty. The logic has been updated to use the display_name field instead, ensuring the export runs correctly, as it is always set to a value. However, the display_name sometimes is just a date, so I depended on a customizable new lable to show the employee to this version. Additionally, a comprehensive test suite was added to validate Acereta code behavior, including: - validation of code length for employees, companies, and work entry types, - handling of codes across different companies, - and the complete Acereta export flow (from work entry creation and validation to export file generation). task-5153727 Forward-Port-Of: odoo/enterprise#96823
This update fixes a technical error that prevented users from accessing the date filter within mail group settings. The issue stemmed from a formatting mistake in the code, which was corrected to ensure the date filter functions correctly. This ensures all users can effectively manage their mail groups.
Original PR description
Steps to reproduce =================== 1. Open any mail group on the website side. 2. Try to access the date filter. Here https://github.com/odoo/odoo/pull/206575/commits/99ece288df1bbb98fd538479b07da14f3abf0d03, we missed wrapping the tuple in the `Domain` class. Task-5369008 Forward-Port-Of: odoo/odoo#238076
This update resolves an issue where the system was incorrectly creating multiple bank accounts from UBL invoices. The fix filters out duplicate account numbers, ensuring accurate bank information is imported into the system. This prevents potential data inconsistencies and improves the reliability of financial transactions.
Original PR description
Currently `_import_retrieve_and_fill_partner_bank_details` may try to to create multiple res partner bank with the same account. This can i.e. happen in case there are multiple `cac:PaymenMeans` nodes in the XML. After this commit we filter out duplicate bank accounts numbers. opw-5149621 Forward-Port-Of: odoo/odoo#238139 Forward-Port-Of: odoo/odoo#236676
This update corrects a bug that prevented users from mentioning colleagues in different companies within Odoo's chat functionality. The issue stemmed from a missing security check, leading to access errors. Adding a necessary security layer now allows users to correctly mention colleagues regardless of their company affiliation.
Original PR description
Steps to reproduce: 1. Create a portal user in the current company 2. Create a new company and switch to it. 3. In the Chatter of any record, mention the portal user from the previous company. Issue: - An AccessError is raised when mentioning a user belonging to another company. Cause: - The missing forward port of this commit https://github.com/odoo/odoo/commit/b1133f6a1efaef1d62f32f7f0197f2d8eb0cb191 was not merged, which caused the user to access res.users records without sudo() from version saas-18.4. Since the mentioned user belongs to a different company, the current user lacks the necessary read permissions, triggering the error. https://github.com/odoo/odoo/blob/6c35edb9dabaf8ce0b276ca26459401ac43d10e4/addons/mail/models/res_partner.py#L267 Solution: - Add sudo() to access the user. opw-5105598 Forward-Port-Of: odoo/odoo#230215
This update resolves an issue where test emails using 'view_online' would fail if the contact associated with the email was deleted. The fix ensures the system now retrieves the first contact ID, preventing errors and improving the reliability of test email generation. This ensures emails are sent correctly even after contact deletions.
Original PR description
In the email marketing, when you add "view_online" and dynamic placeholder "object.name", and try doing a test email, it creates a url token for the "view online" with the res_id as the user's id which grabs the record from the mailing_contact with that res_id. So, in case the mailing_contact with the res_id is deleted, the "view_online" gives you error saying record with id "res_id" cannot be find. Our fix is to search the mailing_contact and grab the id of the first record. This fix updates the code from this commit: [8a9981e](https://github.com/odoo/odoo/commit/8a9981e78a438ceb53a4fdc0445ebed2170c6624) opw-5049654 Forward-Port-Of: odoo/odoo#232440
This update resolves an issue where employee profile pictures were misaligned on mobile devices. The fix ensures that employee avatars display correctly, providing a consistent and professional user experience for mobile users. This improves the visual quality of the HR module.
Original PR description
The employee form view displayed misaligned avatar images on mobile screens. task-5241292 Forward-Port-Of: odoo/odoo#234537
A technical error preventing edits to the 'Document: Document Share' email template has been resolved. This issue stemmed from a recent update to the template structure, causing a syntax error. The fix ensures users can now successfully modify and save this important email template.
Original PR description
**Steps to reproduce:** 1. Install `document` and `contact` 2. Go to Settings > Technical > Email Templates 3. Search for the 'Document: Document Share' template 4. Try to edit and save it **Issue:** - Traceback occurs: `SyntaxError: t-elif directive must be preceded by t-if or t-elif directive` **Cause:** - A revamp introduced by commit: https://github.com/odoo/enterprise/commit/22446368503fadc0e0bf459dd3c8ab8b8f6624b0 Introduced an invalid template structure **Solution:** - Refactor the template to ensure valid QWeb directive order opw-5143730
This update corrects a potential issue where delivery IoT reports could be generated without verifying the existence of the associated IoT device. This prevents errors and ensures reports are only created when valid device data is available, improving report reliability. The change focuses on a critical check within the delivery IoT module.
Original PR description
As `delivery_iot.ir_action_report` is overriding `iot.ir_action_report` and bypassing the IoT device record existance check, we need to also check in delivery IoT.
This update resolves a bug that prevented users from creating replenishment orders when using the 'Buy' route in the purchase module. The fix corrects an error related to date handling during orderpoint calculations, ensuring the 'Buy' route now functions correctly. This improves the reliability of replenishment processes.
Original PR description
Currently, an error is produced when creating a new replenishment record for using the **Buy** route. **Steps to Reproduce:** 1. Install `purchase_stock` module with demo data. 2. Inventory > Operations > Replenishment. 3. Make **Route** field visible in the list. 3. Click **New**, and select the **"Buy"** in Route. **Error:** `TypeError - combine() argument 1 must be datetime.date, not bool` **Cause:** The method `_get_orderpoint_procurement_date()` expects a valid lead horizon date but receives a boolean value when the product is not set. This leads to a traceback during the computation. **Fix:** The commit handles the replenishment computation when a product is not defined. As a result, creating a replenishment with the "Buy" route works correctly even when the product is not defined. sentry-6928858334
This update resolves an error that prevented users from accessing the Time Off overview in the Gantt view when an employee lacked a defined working schedule. The fix skips unnecessary calculations when a working schedule is missing, ensuring the feature functions correctly for all employees. This improves the user experience and prevents data access issues.
Original PR description
Currently, an error occurs when an employee has no working schedule set and the user tries to open the Time Off overview in the Gantt view. **Steps to Reproduce:** 1. Install `hr_holidays_gantt` with demo data. 2. Remove the **Working Hours**(Payroll section) of **Marc Demo**. 3. Navigate to: Time off > Overview. **Error:** `AttributeError - 'bool' object has no attribute 'upper'` **Cause:** The error occurs because at [1], the contract does not have a `resource_calendar_id` (working schedule) assigned. As a result, it attempts to access attributes of a False value, causing the error. **Fix:** This commit skips the computation when the contract does not have a working schedule set. [1] - https://github.com/odoo/enterprise/blob/db049f42ad4c2c291b2d64a9e637cd2292c280e8/hr_holidays_gantt/models/hr_leave.py#L204 sentry-7017326141 Forward-Port-Of: odoo/enterprise#100730
This update resolves an issue where the mobile website preview's scrollbar appeared incorrectly during page transitions. The fix ensures the entire website document is copied to the fallback iframe, eliminating visual inconsistencies and improving the overall mobile browsing experience. This addresses a minor aesthetic problem that could potentially impact user perception.
Original PR description
### [FIX] website: copy the whole document to fallback iframe Since da85d7f8f39f43bd21603b40f357dfc572036d27, the style in head and the body of the website preview are copied to the fallback iframe's…
### [FIX] website: copy the whole document to fallback iframe Since da85d7f8f39f43bd21603b40f357dfc572036d27, the style in head and the body of the website preview are copied to the fallback iframe's document. This did not copied the attributes on the `html` node, which somtimes impacted the appearance. With this commit, the whole document is copied to the fallback iframe. Steps to reproduce: - Activate "Mobile preview" when viewing the website - Go to a page that is long enough for a scrollbar to appear - Navigate to another page - Bug: During the transition, the fallback is shown, and its scrollbar is wider than the one of the page that was shown just before task-5212287 ### [FIX] website: remove content of fallback iframe after load Since commit 7b19831e1c624b483008feb526ba773ec8b23009, an fallback iframe is shown behind the website preview to avoid flicker on navigation. Since commit 3036c7dc4720a88f2717b96a29d45d923eb6ec75, the preview for mobile has some transparency on its scrollbar. Thus the part of the fallback iframe behind the scrollbar when previewing mobile was slightly visible. This commit fixes it by removing the fallback iframe's content after the website has loaded (and the fallback is not needed anymore). Steps to reproduce: - On website, activate "Mobile preview" - Navigate to a page long enough to have a scrollbar - Navigate to another page long enough to have a scrollbar - Scroll a bit - Bug: The scrollbar of the fallback is slightly visible task-5212287 Forward-Port-Of: odoo/odoo#237810 Forward-Port-Of: odoo/odoo#233373
This update resolves an issue where links to individual tasks within the 'My Tasks' feature were broken. The fix adds a necessary field to the action definition, restoring functionality. A new test has also been implemented to prevent similar problems in the future.
Original PR description
after https://github.com/odoo/odoo/commit/bc6b363f556104e86a635325690a8061a9e9ff91 all `/my-tasks/<task-id>` links are broken because of missing path field in the corresponding action. this commit should fix the issue and add a test to avoid regression. opw-5342898 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds a 'Documents' section to the employee record form, allowing users to easily manage and view associated documents. Previously, these document fields were missing, creating a gap in the employee information available within the system. This enhancement improves record completeness and facilitates better document tracking.
Original PR description
- These fields were not available in the employee form view. - create a new section named 'Documents' under the Personal Tab in employee form view - added the fields in the employee form view task-5366982 Forward-Port-Of: odoo/enterprise#100869
This update fixes an issue where adding shifts to existing rental orders didn't correctly update the order line and total price. The fix ensures that new shifts are properly added to the order, reflecting the increased quantity and total cost. This improves the accuracy of rental order management.
Original PR description
**steps to reproduce:** - Configure a booking product as service and rental. - Confirm a shift to create a rental order. - Activate sync on the role. - Add a new shift with the same product using "Add to last order". - Open the rental order: the order line and total price are not updated. **issue:** The price and the order line were not updated when a new shift was added to the last order. **cause:** Previously, adding a new shift to a rental order did not add the order line on the corresponding order. becacuse we was not checking the state of the order and at line creation line will be created for confirmed order only. **fix:** A check is added when the getting the rental order it should be confirmed. task-5093190 Forward-Port-Of: odoo/enterprise#95314
This update fixes a bug that occurred when creating new product templates. Previously, the system incorrectly set the template's launch date, leading to errors. This change ensures the launch date is calculated accurately from the start, preventing these issues and improving data consistency.
Original PR description
If _compute_write_date is launched when creating a product.product without starting from an existing product.template, the compute may be launched before the product.template is created, hence record.product_tmpl_id.write_date is False, and comparing datetime and bool leads to an error. This completes the fix proposed https://github.com/odoo/odoo/pull/138177 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237756 Forward-Port-Of: odoo/odoo#237523
This update fixes a technical issue related to how error messages are displayed in stock order processing. Previously, the system was generating potentially infinite activity. This change ensures that error messages are handled correctly and efficiently, preventing unnecessary processes. It also improves performance by limiting the scope of searches.
Original PR description
From saas-18.2 and later, html fields has been changed the old behaviour.
Ex.
```python
model.create({'note': 'test'}) -> <p>test</p>
```
Old behaviour:
```python
model.search_count([('note', '=', 'test')]) -> 1
```
New behaviour:
```python
model.search_count([('note', '=', 'test')]) -> 0
```
To follow the new behaviour and not generate infinite activities, we need to add html elements to the error message.
Additional, we improved the performance (better to count and limit vs see all the whole table).
OPW-5266061
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#237977This update fixes a problem where website theme colors weren't consistently reflected in the highlight color picker. By using CSS variables instead of direct copying, the system now automatically keeps theme colors synchronized, ensuring a consistent brand experience across the website. This improves visual accuracy and reduces potential design inconsistencies.
Original PR description
Before this commit: 1. The colors in the _highlight_ color picker were not properly synchronized with the _theme_ colors. 2. The _theme_ colors were copied as raw values instead of using _CSS_ variables, which caused them to fall out of sync. After this commit: 1. The _solid_ tab theme colors of _highlight_ color picker now stay in sync with _theme_ colors, even when they are updated. It is achieved by setting `cssVarColorPrefix` variable to "**hb-cp-**". 2. Used CSS variables `var(--o-color-x)` instead of copying _theme_ color values. task-5079081 Forward-Port-Of: odoo/odoo#228123
This update fixes a previous issue where document fields were missing from the employee record view. A new 'Documents' section has been added to the Personal tab, allowing HR staff to easily manage and access employee documents within the system. This improves data organization and streamlines document access for employee records.
Original PR description
- These fields were not available in the employee form view. - create a new section named 'Documents' under the Personal Tab in employee form view - added the fields in the employee form view task-5366982 Forward-Port-Of: odoo/odoo#237954
This change removes the 'dam' registerer from the VoIP master configuration. This simplifies the VoIP setup and avoids potential conflicts, ensuring a cleaner and more reliable system. It's a technical update focused on improving VoIP stability.
This update resolves a technical problem preventing users from accessing sales commission achievement reports. Previously, a temporary database view was inaccessible to other sessions, causing errors. Now, the system verifies the view's availability before attempting to retrieve report data, ensuring reliable access for all users.
Original PR description
In the commission module, the achievements are computed with a temporary SQL view. These view have limited visibility inside a SQL session. Before this commit, we checked the existence of a temporary view with the following SQL request: SELECT viewname FROM pg_catalog.pg_views WHERE viewname='sale_commission_achievement_report_view' This simple query would return the existence of the view but not its availability in the current session. As a result, when the user tried to access the report values, SELECT * FROM sale_commission_achievement_report_view would result in an error as the temporary view would not be available in all the running sessions. Only the one which created the temporary view would be able to access the data. After this commit, the existence and the availability of the view is checked to make sure that it is possible to fetch the results in the current session. task-5378382
This update resolves an issue where badges in the Odoo Community sidebar were appearing cropped. The change adjusts the badge's sizing to ensure they display correctly, improving the overall user experience. This ensures consistent and accurate representation of key information.
Original PR description
In community, the badges in the sidebar looked cropped. By replacing the fixed `min-width` value with the corresponding variable, the badges' shape is fixed. | Before | After | | ------------- | ------------- | | <img width="296" height="901" alt="Screenshot 2025-11-20 at 16 50 23" src="https://github.com/user-attachments/assets/5dba05a2-5a0e-4563-a555-de72e607abf6" /> | <img width="296" height="901" alt="Screenshot 2025-11-20 at 16 50 08" src="https://github.com/user-attachments/assets/28c49c5a-57e9-49cb-ba9d-c65e2f8976a0" /> | task-5223774 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a rare error that prevented test requests from completing successfully. The fix ensures the system reliably acquires a necessary lock, preventing failures in the background request processing. This improves the stability and reliability of our core functionality.
Original PR description
In some rare cases the late_request_thread could execute so fast without releasing the GIL that assertCanOpenTestCursor was executed before the main_lock.acquire(), causing the lock to be None. In…
In some rare cases the late_request_thread could execute so fast without releasing the GIL that assertCanOpenTestCursor was executed before the main_lock.acquire(), causing the lock to be None. In this case, acquiring the lock is pointless since the late_request_thread has already finished, defeating the purpose of this quire, but we can workaround this keeping a reference to the main_lock before starting the thread. This way, even if the late_request_thread is already finished, we can still acquire the lock even if it is already released. Normal flow: - main_thread acquires main_lock - main_thread span request_thread - main_thread tries to acquire main_lock and again and blocks - request_thread runs and releases main_lock - main_thread acquires main_lock and continues When it fails - main_thread acquires main_lock - main_thread span request_thread - request_thread runs and releases main_lock - main_thread tries to acquire main_lock witch is None and fails Fixed - main_thread acquires main_lock - main_thread span request_thread - request_thread runs and releases main_lock - main_thread tries to acquire main_lock but it is already released - main_thread acquires main_lock and continues Runbot error [229827](https://runbot.odoo.com/odoo/runbot.build.error/229827) Forward-Port-Of: odoo/odoo#237886
This update resolves an issue preventing the 'fuel_type' selection field in the HR contract model from being properly translated. By directly using the variable for options, this change ensures all text within the field can be localized, improving internationalization support for our Belgian HR payroll and fleet modules.
Original PR description
The selection field `fuel_type` in the `hr.contract` model was not properly translatable, because it used a function yielding static strings for the options. This commit changes the field to use the variable directly, allowing them to be translated. Forward-Port-Of: odoo/enterprise#100990 Forward-Port-Of: odoo/enterprise#100748
This update resolves an issue where the spreadsheet feature wasn't reliably displaying error messages when data loading failed. The team removed the 'clear' button from the spreadsheet interface to simplify the user experience and prevent confusion. This ensures that users receive clear feedback about data loading problems.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237989 Forward-Port-Of: odoo/odoo#233739
This update resolves a technical issue preventing the translation of text within the demo data for Sales Order Templates in version 19.0. This ensures that all text within these templates can be localized for international users, improving the overall user experience and supporting global expansion efforts. The fix was made to ensure consistent translation capabilities across the Odoo platform.
Original PR description
This commit fixes a little issue with the `sale.order.template` demo data, where the optional section title wasn't translatable. Affected version-19.0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a reporting issue where payment reports incorrectly included bank accounts with zero allocations. The change ensures that only accounts with positive allocations are displayed, providing more accurate and reliable payment information. This improves the clarity and trustworthiness of financial reports.
Original PR description
-In case of creating payment reports for an employee with multiple bank accounts, if one of the accounts has an allocation of 0%, it still appears in the report. -This approach has been changed to include only accounts with positive allocations. Backport for odoo/enterprise#100643
This update fixes an issue where the HTML editor's table selection wasn't behaving as expected when selecting all text within a cell. Now, after selecting all cell content with Shift, only the current cell is selected, allowing for more precise editing. This ensures users can accurately target and modify individual cells within tables.
Original PR description
**Current behavior before PR:** Steps to reproduce: - In an m × n table, type some text inside a cell. - Place the cursor at the end of the text. - Hold Shift and repeatedly press ArrowLeft until the entire cell becomes selected. Once the cell content is fully selected, the cell itself is selected along with its adjacent cell, instead of only the current cell. **Desired behavior after PR:** After selecting all text, the current cell alone should become selected. Pressing Shift + ArrowLeft again should then extend the selection to the adjacent cell. task-5268801 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235959
This update allows authorized users to cancel payslips, even without accountant privileges. Previously, reversing a payslip required specific accounting group settings on related financial documents. This change simplifies the process for authorized personnel, improving operational efficiency. It ensures payslips can be correctly reversed when necessary.
Original PR description
As you need to have accountant group on some fields of the account move to be able to reverse it. We need to do it as sudo.
This update fixes an issue where the ‘Late Activities’ and ‘Today’s Activities’ counters on the Recruitment dashboard didn't correctly update after an activity was marked as done. The fix ensures that inactive activities no longer skew the counts, providing more accurate reporting on outstanding tasks. This improves the reliability of the Recruitment dashboard.
Original PR description
On the Recruitment dashboard (Jobs kanban), the counters for “Late Activities” and “Today’s Activities” may not decrease after an activity is marked as done, even though completed activities no longer appear in the applicant list. Root cause: `_compute_activities` aggregates counts from `mail_activity` using the deadline and job filters but does not exclude non-running (inactive/archived) activities. If an activity is not unlinked and becomes inactive (`active = FALSE`), it still matches `date_deadline <= today` and is counted. Steps to reproduce: 1. Open Recruitment 2. Pick any job and schedule an activity with Due date is Today (also try Yesterday for “Late”). 3. Mark the activity as Done. the number of activities today or late will not decrease opw-5123947 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232722
This update eliminates misleading duplicate order warnings that appeared when renewing subscriptions. The change specifically excludes renewal quotes ('2_renewal') from the system's duplicate order checks, preventing unnecessary alerts. This ensures a smoother renewal process for users and avoids potential disruptions.
Original PR description
Version: - 19.0 Steps to reproduce: 1. Create a subscription. 2. Set a customer reference 3. Confirm the subscription and create an invoice. 4. Renew the subscription to generate a renewal quote (state '2_renewal'). Issue: A duplicate order warning is displayed when renewing a subscription Solution: Exclude renewal quotes (`subscription_state == '2_renewal'`) from the duplicate order check in `_fetch_duplicate_orders`. This prevents incorrect warnings when creating or opening renewal quotes. taskid-5258963
This update fixes a technical issue that caused a traceback when removing color from a mega menu in the website editor. The fix ensures that color styles are correctly copied during editing, preventing errors and improving the user experience when customizing mega menu colors. This resolves a reported problem impacting website customization.
Original PR description
Problem: When removing a color from a block, a traceback occurs. Cause: After https://github.com/odoo/odoo/commit/bda6835293b2b222a003b9696fa052f31539a4ef we copy only style attributes to the `newFont` but the color can be applied through a class that applies text color so we should also copy classes that changes text color. Steps to reproduce: - Open Website. - Add a mega menu. - Open the editor. - On the mega menu, enable the “eCommerce Categories” option. - Edit one of the navigation headers’ labels and save. - Observe traceback. opw-5357516 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238193
This update fixes an issue where the Total Value report for inventory products incorrectly displayed values when fractional quantities were involved. The change ensures accurate remaining quantity and value calculations, particularly when products have fractional inventory levels. This improves the reliability of inventory reporting.
Original PR description
Problem: When valued products are moved in fractional quantities, the "Valuation" report under Inventory > Reporting > Stock > Total Value will show the wrong computed value for both the Remaining Quantity and Remaining Value (`remaining_qty` and `remaining_value` on stock.move). This is due to an `int` cast while computing remaining quantity, which then affects the remaining value calculated on this report. Solution: Move the `int` cast to a more appropriate location in the `_run_fifo_get_stack` logic so that the remaining quantity is preserved. Steps to reproduce (Runbot 19.0) - Product with: - Inventory tracked by quantity - Non-zero standard price (e.g. $1) 1. Add a fractional quantity on hand with an inventory adjustment (e.g. 1.9) 2. Navigate to Inventory > Reporting > Stock, click the number for Total Value on the product (will be $1.90) On this menu with the example data, Remaining Quantity will be 1.00, and remaining value will be $1.00. opw-5230435
This update resolves a technical problem preventing invoices with Italian e-invoicing attachments from being successfully sent. The issue stemmed from incorrect file encoding, which caused errors during transmission to the Italian tax authority. Now, attachments are correctly sent, ensuring invoices are processed as intended.
Original PR description
Before this commit: Steps 1) When clients try to send invoices to Italian e-invoicing 2) And if `L10N It Edi Attachment File` is already set (Ex. already sent but using only the `by Post` option, the XML gets generated and set) => A Invalid Operation Error is raised with the message: `Error sending file from the Proxy Server to SdI: Start tag expected, '<' not found, line 1, column 1 (<string>, line 1)`, This occurs because the `_l10n_it_edi_send()` method is called with invalid `attachments_vals` as `raw` key contains encoded file instead of the raw version. Then it's encoded again in that method, so there is a double encoding and the Italian e-invoicing fails to decode it. After this commit: If the client try to send the invoice to Italian e-invoicing after generating the `L10N It Edi Attachment File`, it works well.
This update resolves a bug where the website's custom favicon wasn't consistently displayed in browser tabs. Previously, the browser cached the default Odoo favicon even after changing the website's favicon settings. This change ensures that the correct favicon is always shown, improving the user experience and brand consistency.
Original PR description
When editing a website favicon in settings or switching between websites with different favicons, the browser tab always displayed the default Odoo favicon instead of the specific website's favicon.…
When editing a website favicon in settings or switching between websites with different favicons, the browser tab always displayed the default Odoo favicon instead of the specific website's favicon. the favicon were not immediately reflected due to browser caching. The browser is responsible for caching the favicon. When you load a page, the browser sees `<link rel="shortcut icon" href="...">`. If it has already downloaded the image at that URL, it will use the stored (cached) copy instead of asking the server for it again. This improves performance. but also it's responsible for the bug. Steps to reproduce: =================== 1. Set a custom favicon for your website in Settings. 2. Open the Website app. 3. Observe that the browser tab shows the default Odoo favicon instead of the custom one. Solution: ========= Retrieve the favicon URL directly from the iframe's document content (link[rel~='icon']) and update the main window's favicon opw-5126299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237361
This update fixes a bug that caused the system to crash when users attempted to validate signed documents. The issue stemmed from a missing field related to document signing, which occurred after uninstalling a specific app. The fix ensures the system gracefully handles this situation and prevents errors.
Original PR description
The system will crash with an error when the user tries to validate the signature. **Steps to produce:** - Install `Sign, Employee Contracts, and Documents` apps with demo data. - Go to Apps and…
The system will crash with an error when the user tries to validate the signature.
**Steps to produce:**
- Install `Sign, Employee Contracts, and Documents` apps with demo data.
- Go to Apps and uninstall the `hr_contract_sign`module.
- Send any employee a sign request for a document.
- When the employee tries to validate and send the document, the error appears.
**Error:**
`KeyError: 'sign_request_ids'
ValueError: Invalid field hr.employee.sign_request_ids in condition ('sign_request_ids', 'in', [1])`
**Cause:**
- When `sign` route is called, then we try to search field `sign_request_ids` in `hr_employee`. but we can see the field `sign_request_ids` is defined in `hr_contract_sign` module.
- And user removed the `hr_contract_sign` module, so the field no longer exists. in the hr_employee model.
**Solution:**
- Added a graceful bypass when `sign_request_ids` is missing,
**sentry-6819182542**
Forward-Port-Of: odoo/enterprise#100796
Forward-Port-Of: odoo/enterprise#95449