Daily updates from Odoo
Monday, December 8, 2025
179 changes
11 changes
Resolved issues and error corrections
This update fixes an issue where the keyboard would unexpectedly appear on mobile date fields, causing a frustrating user experience. The change prevents the keyboard from opening and hides the cursor, resulting in a smoother and more intuitive date selection on smaller screens.
Original PR description
Before this commit:
- The cursor was shown inside the date/datetime input field on mobile,
which triggered the keyboard unnecessarily and degraded the user
experience.
Steps to reproduce:
1. Add a form snippet.
2. Add a Date/Datetime field.
3. Click on the Date field.
- The virtual keyboard appears and the datepicker popover may be
clipped or partially hidden.
After this commit:
- The virtual keyboard is now prevented from opening on date/datetime
inputs, and the text cursor within these fields is also hidden.
task-[4745714](https://www.odoo.com/odoo/project/974/tasks/4745714)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238771
Forward-Port-Of: odoo/odoo#212053This update resolves an issue where the automatic link between purchase orders and repair orders breaks when a purchase order is confirmed. The fix ensures the smart link remains active, streamlining the process of managing stock and related orders. This improves efficiency and accuracy in order fulfillment.
Original PR description
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the…
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the MTO route * Create a product with the MTO route enabled * Create a Repair * On the Repair Order, in part add: - type : ADD - product : mto product * Save the RO * Go to Purchase Order * Confirm the PO -> Issue Smart link between PO and RO broken. ### Observation: The smart link is defined on: RO -> PO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/repair_order.py#L15-L17 PO -> RO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/purchase_order.py#L15-L17 When we confirm the PO, from the picking information it will create new moves: https://github.com/odoo/odoo/blob/2c87f3b2b397f268f0e50cb73cd81de992ddd42e/addons/purchase_stock/models/purchase_order.py#L293-L298 To create those stock moves, we go into_create_stock_moves where, for each POL, we will generate their values and erase the smart link: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_stock/models/purchase_order_line.py#L362-L365 ### Origin: In this commit https://github.com/odoo/odoo/commit/9d98c43581e2579f43b35541b43264866dede5a5: "`created_purchase_line_id` is cleared after confirming the RFQ. This allows to merge more in `_merge_moves`." This breaks the link between PO <-> RO to maybe merge the move in the future. This issue is not present in 19.0 since it was solve in this commit : https://github.com/odoo/odoo/commit/2713876dbc70d3984e584a9037a2206dcda4e84a ### About the fix: The root cause of this issue remains ambiguous despite the analysis. Therefore, in the interest of stability and caution, we opted to implement the fix in a safer location. opw-5121816 Forward-Port-Of: odoo/odoo#232999
This update fixes an issue where holiday pay recovery was incorrectly applied to older employees when contract start and end dates were changed. The fix ensures that holiday pay recovery is applied appropriately based on the employee's start date, aligning with standard payroll practices. This improves the accuracy of payroll calculations.
Original PR description
Purpose ======= Normally contracts start and end dates should be configured without being closed and reopened at each version date. But, if it is the case, holiday pay recovery could be applied on older employees because it is considered the employee just joined the company, and there is an amount to recover.
This update resolves an issue where user notifications within the messaging menu were failing to function correctly. The fix ensures that notifications triggered by duplicate record searches properly open the correct chat window, improving the user experience for data management tasks. This was caused by a mismatch in how message threads were created and assigned.
Original PR description
**Steps to reproduce:** - Install `Data Cleaning` app - Activate notification in Odoo in the admin user profile - Create a few duplicate contacts - Go the the "Data Merge: Find Duplicate Records"…
**Steps to reproduce:**
- Install `Data Cleaning` app
- Activate notification in Odoo in the admin user profile
- Create a few duplicate contacts
- Go the the "Data Merge: Find Duplicate Records" scheduled action
- Run the action manually
- You should see new notifications telling you that they found potential duplicates
- In the top right MessaginMenu click on the notification, it opens a chatter
- Try to send a message in the chat window
- Traceback : `AttributeError: 'data_merge.model' object has no attribute '_get_thread_with_access'`
**Issue:**
The model doesn't inherit `mail.thread` so it uses `self.env['mail.thread']` directly to send notification:
```
self.env['mail.thread'].sudo().message_notify(
...
model=self._name,
notify_author=True,
partner_ids=partner_ids,
res_id=self.id,
)
```
But when sending the information with the `model` and `res_id` parameters the newly created `Store` uses `self.add("mail.thread", {"id": data.id, "model": data._name, **values})` and the message is assigned to a non-existing thread in the frontend.
**Fix:**
Explicitly check if the message is a `user_notification` and redirect the user to the discuss inbox if it's the case by reapplyng part of https://github.com/odoo/odoo/commit/b3be992c57dc5e412a127d05fc50b059814523aa
opw-5101510
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238563
Forward-Port-Of: odoo/odoo#234737This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company information is used on shipping labels, improving order accuracy and customer experience. This resolves a problem where the system wasn't properly capturing company names from the ecommerce form.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update resolves an issue preventing the payroll demo data installation from working correctly at the start of the year. The fix sets a fixed past year for Mitchell Admin's contract, ensuring accurate demo data generation. This resolves a technical error reported by automated testing.
Original PR description
Before this commit, the relative date used to generate Mitchell Admin's contract was always at January 1st of the current year, making the payroll demo data install fail when at the start of the year. This commit sets a fixed year in the past for Mitchell's contract. runbot error 234623 and 234612
This update resolves an issue where setting image field widths in list views caused a system crash during development. The change clarifies that image field widths should be controlled through list view configurations, not the image field itself, ensuring stability and proper functionality.
Original PR description
Before this commit, if one set the `width` attribute on an image field in a list view arch, there was a props validation crash (in debug mode). The `width` attribute is relevant to be set in list view archs as it allows to specify the width of the column. That attribute isn't meant to be used by the image field itself, where the option `size` can be used to specify the size of the image as a pair `[width, height]`. opw~5392068 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 Vimeo video settings (loop and hide controls) weren't being applied after saving a website page. The problem stemmed from an unnecessary escaping of URL characters in the video source, which was preventing Vimeo from correctly interpreting the settings. Now, these settings work as expected.
Original PR description
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to…
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to the Website editor. - Drag and drop a "Media List" or similar snippet. - Double-click the video placeholder to open the media dialog. - In the "Video" tab, paste a Vimeo URL. - Enable "Loop" and/or "Hide Player Controls". - Save the page. -> Observe that the video does not loop and the controls are still visible. Cause: ====== When rebuilding the iframe, `generateVideoIframe` was processing the video's `src` URL through using `escape()` function. This function is designed to prevent XSS by converting characters like `&` into their HTML entity equivalent, `&`. However, Vimeo video URLs use the `&` character to separate query parameters (e.g., `?loop=1&controls=0`). The `escape()` function was converting this URL to `?loop=1&controls=0`. but `setAttribute` already handles URL values safely. so Vimeo player will receive url containing &amp;. This broke the URL's structure. The Vimeo player received a malformed URL, could not parse the parameters correctly, and therefore ignored the options for looping and controls. escape was used before cause The original code was adding the iframe using `.html(...)` see commit: https://github.com/odoo-dev/odoo/commit/8749410b1033ddec1207ce1db42d1889a0d2ea33 side note 1: before saving the vimeo video works because we render it without the double escaping of & (as will be the case for saved video if this PR is applied) side note 2: the issue of double escaping also apply to youtube, but it seems to be ok with superfluous & in URL while in vimeo: https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1 has the video that doesn't loop, is not muted (so doesn't auto play in an iframe on most browser) and show controls https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1: all option works Solution: ========= The unnecessary `escape()` call has been removed. since the video should be only added using media dialog and the `setAttribute(...)` will escape it by default opw-5225261 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238040 Forward-Port-Of: odoo/odoo#236677
This update fixes an issue where invoices containing special characters would fail to send to Peppol, causing errors. The change ensures that all invoice data conforms to XML standards, preventing these failures and guaranteeing successful Peppol invoice transmissions. This improves the reliability of our Peppol integration.
Original PR description
## Issue: When a character that's not compatible with XML is in an invoice, and you send it to Peppol, a traceback was raised: `ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters` ## Cause: `dict_to_xml` converts each invoice field into XML, but certain control characters (e.g., `\x02`) are not allowed in XML according to the specification: https://www.w3.org/TR/xml/#charsets If such a character appears in the data (e.g., imported through a product CSV), the XML generation crashes ## Steps to produce: - Install `account_peppol` and `l10n_be` (to get the BE Company CoA) - Import a product containing a control character: `echo -e "name,default_code\nTest\x02Product,ABC123" > products.csv` - Create an invoice for the BE company using the product `Test\x02Product` - Send it via Send > by Peppol - A traceback is raised opw-5114648 Forward-Port-Of: odoo/odoo#238978 Forward-Port-Of: odoo/odoo#236836
This update corrects an issue in the l10n_ar_stock delivery guide report where a critical disclaimer about invoice validity was missing. Additionally, the report's name and number were being duplicated, causing potential confusion. This ensures the report accurately reflects invoice status and improves data consistency.
Original PR description
The mention "Document not valid as an invoice" is missing in the delivery guide report. And we shouldn't duplicatethe report name and number. opw-5004345
A recent test was failing due to timing issues when switching users in the MRP work order system. This fix addresses this by splitting the test steps to ensure records are fully loaded before checks are performed, improving overall test reliability.
Original PR description
The test `test_shop_floor_my_wo_filter_with_pin_user` sometimes fails on these steps:…
The test `test_shop_floor_my_wo_filter_with_pin_user` sometimes fails on these steps: https://github.com/odoo/enterprise/blob/422ac3d5b10c44233321010b9ecb8e37735b3ea3/mrp_workorder/static/tests/tours/tour_shopfloor.js#L177-L190 https://github.com/odoo/enterprise/blob/422ac3d5b10c44233321010b9ecb8e37735b3ea3/mrp_workorder/static/tests/tours/tour_shopfloor.js#L196-L206 https://github.com/odoo/enterprise/blob/422ac3d5b10c44233321010b9ecb8e37735b3ea3/mrp_workorder/static/tests/tours/tour_shopfloor.js#L212-L221 This happends since changing the user requires some time to display the related shopfloor records, but the steps check the number of visible records as soon as it has switched rather than when it is sure that the records are displayed. #### Fix: Since switching employees will first empty the recordset and later display the related records, we can split the steps in two. We first check that we switched users, then we check the existence of a record that is not present for the previous user, and only then perform the related checks. #### runbot-226734 Forward-Port-Of: odoo/enterprise#101268 Forward-Port-Of: odoo/enterprise#100746
6 changes
Resolved issues and error corrections
This update resolves an issue where the automatic link between purchase orders and repair orders breaks when a purchase order is confirmed. The fix ensures the smart link remains active, streamlining the process of managing stock and related orders. This prevents disruptions in the workflow between purchase and repair operations.
Original PR description
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the…
The link between purchase order and a repair order break at when the PO is confirmed. ### Steps to reproduce: * Install the Repair and Purchase modules * Activate multi-steps routes * Unarchive the MTO route * Create a product with the MTO route enabled * Create a Repair * On the Repair Order, in part add: - type : ADD - product : mto product * Save the RO * Go to Purchase Order * Confirm the PO -> Issue Smart link between PO and RO broken. ### Observation: The smart link is defined on: RO -> PO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/repair_order.py#L15-L17 PO -> RO: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_repair/models/purchase_order.py#L15-L17 When we confirm the PO, from the picking information it will create new moves: https://github.com/odoo/odoo/blob/2c87f3b2b397f268f0e50cb73cd81de992ddd42e/addons/purchase_stock/models/purchase_order.py#L293-L298 To create those stock moves, we go into_create_stock_moves where, for each POL, we will generate their values and erase the smart link: https://github.com/odoo/odoo/blob/a2be8182010613c6f92f59e686a2fbf066cc6b68/addons/purchase_stock/models/purchase_order_line.py#L362-L365 ### Origin: In this commit https://github.com/odoo/odoo/commit/9d98c43581e2579f43b35541b43264866dede5a5: "`created_purchase_line_id` is cleared after confirming the RFQ. This allows to merge more in `_merge_moves`." This breaks the link between PO <-> RO to maybe merge the move in the future. This issue is not present in 19.0 since it was solve in this commit : https://github.com/odoo/odoo/commit/2713876dbc70d3984e584a9037a2206dcda4e84a ### About the fix: The root cause of this issue remains ambiguous despite the analysis. Therefore, in the interest of stability and caution, we opted to implement the fix in a safer location. opw-5121816 Forward-Port-Of: odoo/odoo#232999
This update fixes an issue where the keyboard unexpectedly appeared on mobile date fields, causing a frustrating user experience. The change now prevents the keyboard from opening and hides the cursor, resulting in a smoother and more intuitive date selection on smaller screens.
Original PR description
Before this commit:
- The cursor was shown inside the date/datetime input field on mobile,
which triggered the keyboard unnecessarily and degraded the user
experience.
Steps to reproduce:
1. Add a form snippet.
2. Add a Date/Datetime field.
3. Click on the Date field.
- The virtual keyboard appears and the datepicker popover may be
clipped or partially hidden.
After this commit:
- The virtual keyboard is now prevented from opening on date/datetime
inputs, and the text cursor within these fields is also hidden.
task-[4745714](https://www.odoo.com/odoo/project/974/tasks/4745714)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238771
Forward-Port-Of: odoo/odoo#212053This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company name is used on shipping labels, improving order accuracy and customer experience. This was triggered by a discrepancy in how contact information is handled during ecommerce checkout.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update fixes an issue where Vimeo video settings (loop and hide controls) weren't being applied after saving a website page. The fix removes a redundant escaping process that was incorrectly altering Vimeo video URLs, ensuring the desired settings are now consistently applied.
Original PR description
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to…
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to the Website editor. - Drag and drop a "Media List" or similar snippet. - Double-click the video placeholder to open the media dialog. - In the "Video" tab, paste a Vimeo URL. - Enable "Loop" and/or "Hide Player Controls". - Save the page. -> Observe that the video does not loop and the controls are still visible. Cause: ====== When rebuilding the iframe, `generateVideoIframe` was processing the video's `src` URL through using `escape()` function. This function is designed to prevent XSS by converting characters like `&` into their HTML entity equivalent, `&`. However, Vimeo video URLs use the `&` character to separate query parameters (e.g., `?loop=1&controls=0`). The `escape()` function was converting this URL to `?loop=1&controls=0`. but `setAttribute` already handles URL values safely. so Vimeo player will receive url containing &amp;. This broke the URL's structure. The Vimeo player received a malformed URL, could not parse the parameters correctly, and therefore ignored the options for looping and controls. escape was used before cause The original code was adding the iframe using `.html(...)` see commit: https://github.com/odoo-dev/odoo/commit/8749410b1033ddec1207ce1db42d1889a0d2ea33 side note 1: before saving the vimeo video works because we render it without the double escaping of & (as will be the case for saved video if this PR is applied) side note 2: the issue of double escaping also apply to youtube, but it seems to be ok with superfluous & in URL while in vimeo: https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1 has the video that doesn't loop, is not muted (so doesn't auto play in an iframe on most browser) and show controls https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1: all option works Solution: ========= The unnecessary `escape()` call has been removed. since the video should be only added using media dialog and the `setAttribute(...)` will escape it by default opw-5225261 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238040 Forward-Port-Of: odoo/odoo#236677
This update fixes a bug where customers could select past time slots when ordering through the self-order system. Now, the system only allows selecting pickup times that are on or after the current time, ensuring accurate order scheduling and preventing confusion for customers. This improves the user experience and operational efficiency.
Original PR description
Task: [#5365003](https://www.odoo.com/odoo/project/1737/tasks/5365003) --- before this commit selecting a time slot in self-order, the customer can still pick time slots that are already in the past. For example, if the current time is 14:05, the system still allows selecting 12:00, 12:20, 13:00, etc. This should not be possible. When choosing a pickup time for today, all time slots earlier than the current time should not be generated Forward-Port-Of: odoo/odoo#237923
This update resolves an issue where freezing a spreadsheet with empty lists didn't accurately represent the data. Specifically, it corrects how ODOO.LIST is processed when there are no records, ensuring that the frozen spreadsheet displays the correct data. This improves the reliability of spreadsheet sharing and reporting.
Original PR description
Steps to reproduce: - insert a list - expand the list beyond the number of records in order to have ODOO.LIST with no result - add =ISTEXT( <a reference to an empty ODOO.LIST> ) -> the result is TRUE - Freeze and share the spreadsheet => the result of ISTEXT is FALSE in the frozen version task-5360561 opw-5359100 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#237970 Forward-Port-Of: odoo/odoo#237511
3 changes
Resolved issues and error corrections
This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company information is used on shipping labels, improving order accuracy and customer experience. This was triggered by a discrepancy in how contact information is handled in the ecommerce system.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update fixes a technical issue that could display error messages to users during the payment process for rental events. The change prevents frontend tracebacks caused by unusual event configurations, ensuring a smoother experience for customers. While the rentable event ticket feature is being addressed, this fix improves overall stability.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have `website_event_sale` but not `stock` installed; 2. create an event with a ticket; 3. make the ticket's product rentable; 4. change ticket's product type to Goods; 5. publish the event to website; 6. register for the event via website; 7. go to payment. Issue ----- AttributeError: 'bool' object has no attribute 'tzinfo' Cause ----- Having odd configurations like rentable tickets creates rental orders without rental dates, leading to unhandled errors. Solution -------- While rentable event tickets doesn't make enough sense to make it work, we can still improve the error handling to prevent showing tracebacks to the client. opw-5207045 Forward-Port-Of: odoo/enterprise#99000
This update ensures that downpayment taxes, when calculated externally (like with Avatax), correctly use the designated downpayment account set on the product category. Previously, it defaulted to the standard income account, leading to inconsistent tax calculations. This change aligns with expected downpayment behavior and improves accuracy.
Original PR description
**Problem:** When calculating taxes externally (such as Avatax) and a downpayment is made, the line on the invoice will always use the default income account, regardless of the downpayment account set as a company default. This is inconsistent with the standard behavior of downpayments, which will use the downpayment account set on the product's category instead of the income account (which themselves may come from company defaults). **Solution:** Check if there's a company default for downpayment account on product category and use this account for the downpayment line instead of the income account. opw-5171067 Forward-Port-Of: odoo/enterprise#101524
21 changes
Resolved issues and error corrections
This update resolves a test failure in the payroll module (l10n_eg_hr_payroll) caused by incorrect calculations for employee leave balances in 2026. The fix incorporates a 'freeze_time' setting to ensure accurate balance projections, preventing test failures and guaranteeing correct leave tracking.
Original PR description
Before this commit, the test `test_get_annual_remaining_leaves_with_allocation` was checking the balance of an employee with an allocation for 2025. As no freeze_time was set, the test would fail in 2026 as the allocation would be invalid and the employee balance would fallback to 0. Same issue for the test `test_get_annual_remaining_leaves_after_leave_taken` The PR https://github.com/odoo/enterprise/pull/98223 was targetting the wrong test and thus, the error was not fixed. This commit merges all 3 tests in one using freeze_time runbot error 231559 Forward-Port-Of: odoo/enterprise#101458
This update resolves an issue where the Frontdesk kiosk URL wouldn't display the correct company logo when switching companies. The fix ensures the kiosk always accesses the correct company record, allowing the logo to load properly. This improves the user experience and visual consistency of the Frontdesk station.
Original PR description
When switching companies in a Frontdesk station and opening the kiosk URL, the company logo does not appear. **Steps to produce:** - Install the `frontdesk` module. - Ensure the database has at least…
When switching companies in a Frontdesk station and opening the kiosk URL, the company logo does not appear. **Steps to produce:** - Install the `frontdesk` module. - Ensure the database has at least two companies, each with a logo configured. - `Enable multi-company` access (user has access to all companies). - Open any Frontdesk station configuration and change the company to one different from the currently active company. - Copy the kiosk URL and open it in an incognito/private window. - The kiosk opens, but the company logo is missing. **Issue:** - Company logo not comes on frontdesk kiosk. **Root cause:** - When the kiosk URL is accessed, Odoo logs an `Access Denied by record rules`. - This happens because the selected company on the station is not included in the `Public User’s companies`. - As a result, the public user cannot read the company record, so the logo does not load. **Solution:** - Added an `onchange` on `company_id` to automatically include the selected company in the Public User’s `company_ids` if it is not already present. - This ensures the kiosk always has access to correct company record and logo. - Also added an XML-side fix to prevent an access error that occurs when a company is not activated and we attempt to select it in the company field. **Before:** <img width="500" height="500" alt="frontdesk_image_before" src="https://github.com/user-attachments/assets/b002ac6e-5271-4561-bf03-542a3feeefd1" /> **After:** <img width="500" height="500" alt="frondesk_image_after" src="https://github.com/user-attachments/assets/7b5bffe4-ccbf-48f5-ad9c-d5e6d2e7678e" /> **opw-5138980** Forward-Port-Of: odoo/enterprise#101534 Forward-Port-Of: odoo/enterprise#100300
This update addresses a potential issue where changes to product subscriptions weren't consistently flagged, leading to incorrect behavior. The change introduces a warning message when modifying subscription settings on products that have already been sold, ensuring data integrity and preventing unintended subscription changes. This improves the reliability of our subscription management system.
Original PR description
**Purpose:** When a product has already been sold, we cannot change the subscription field in the product form. Odoo was correctly raising an error when the user tried to do it at the product.template level, but no warning was raised when doing it at the product.product level. **Specification:** Raise a warning when trying to change the subscription field at the product.product level Task-5081772 See also: - https://github.com/odoo/odoo/pull/231606
This update allows users to optionally select a date range for fields, even when those fields are required. Previously, the date range option was automatically enforced, making it less flexible. This change simplifies the user experience and provides more control over date selection.
Original PR description
…equired Before this commit, the range was automatically enforced when the main field was required (either in the view or on the field itself). As a result, the button to switch to a date range was hidden and both start and end dates became mandatory. With this change, the range option remains available and optional. The range will only be required when the related field is required. If you really want to have the related field required, you should probably use the `always_range` option. task-5186221
This update enhances the automatic bank reconciliation process by prioritizing matching bank statements with transactions from the prior or equal date. Previously, the system would hesitate when multiple matches were found. This change ensures the most accurate reconciliation by selecting the closest matching transaction, minimizing discrepancies.
Original PR description
When having multiple candidates with the try_auto_reconcile we used to do nothing since there was a doubt. This commit will slightly change that by selecting the move line with the closer prior or equal date. task-5212876 Forward-Port-Of: odoo/enterprise#98269
This update simplifies the appointment calendar by showing only one period (day, week, month, quarter, or year) at a time, instead of three. This change reduces visual clutter and provides users with a clearer view of their appointments, improving usability.
Original PR description
This PR displays one period of the requested scale (day, week, month, quarter and year) in the calendar instead of three. It avoids displaying unwanted periods and overwhelming users with information. Task-5022091 Forward-Port-Of: odoo/enterprise#98796
This update corrects a previous error in the EPF (Employee Provident Fund) calculation for our Malaysian payroll system. The changes ensure accurate rounding of tax amounts to the next ringgit and reflect the latest legislative employee rate adjustments. This improves payroll accuracy and compliance.
Original PR description
Previous behavior did not account for the rounding of the amount of tax to the next ringgit. Also the employee's rate has been updated in accordance to the legislation. task-5286179 Forward-Port-Of: odoo/enterprise#100736
This update resolves an issue where filters weren't consistently applied to reports included within annual reports. Specifically, the analytic group by filter was missing from the Profit & Loss (US) report when it was part of a larger annual report. This ensures all report filters work as expected regardless of report inclusion.
Original PR description
For reports that are part of an annual reports, the _compute_report_option_filter prevent the update of the filters when the report is added as a section of another report. In the case of the analytic group by for example, even when the options was enabled, the filter was not present on the profit and loss (us) since it is a section of the annual report. opw-5185296 Forward-Port-Of: odoo/enterprise#100064
This update ensures that test reports are now generated using the Odoo test server instead of the production server. This change prevents test data from impacting live operations and improves the reliability of our testing process. The system now recognizes test mode to direct report generation to the appropriate test environment.
Original PR description
Before this commit: - when generating test reports, the files were sent to prod aspone IAP server for processing which should not be the case After this commit: - added system parameter to recognize test mode to generate test return files - if test mode is enabled the files will be send to test iap server Upgrade PR: https://github.com/odoo/upgrade/pull/8465 Task-5015350
This update corrects an issue where the Aged Receivable report was not displaying invoices correctly when the invoice due date was removed. The fix ensures the report accurately reflects outstanding balances by aligning the data source used in the report with the invoice data. This improves report accuracy and data consistency.
Original PR description
step to reproduce: - create a invoice and confirm it - remove due date from it and save it - ensure the confirmed invoice do not payment term or due date - open aged receivable report - open this…
step to reproduce: - create a invoice and confirm it - remove due date from it and save it - ensure the confirmed invoice do not payment term or due date - open aged receivable report - open this entry <img width="1599" height="238" alt="image" src="https://github.com/user-attachments/assets/010f97f4-0d50-4e5a-9366-ae67d17e2bb7" /> Observation: - on clicking the entry, when redirected to list view, there are `0` records. Issue: - The query which is used to display data on report uses `COALESCE(account_move_line.date_maturity, account_move_line.date)` https://github.com/odoo/enterprise/blob/ffc329e4ff2bd6512164ecd4206210fd5c9264b9/account_reports/models/account_aged_partner_balance.py#L222-L226 - while the method `_build_domain_from_period` uses only `date_maturity` in domain redirecting to list view - This creates inconsistencies between two. https://github.com/odoo/enterprise/blob/ffc329e4ff2bd6512164ecd4206210fd5c9264b9/account_reports/models/account_aged_partner_balance.py#L383-L394 opw-5237298 Forward-Port-Of: odoo/enterprise#99883
This update resolves a bug that prevented the generation of SAFT files when a journal entry lacked a partner but included a receivable account. The fix ensures that SAFT exports can now successfully process these entries, addressing a potential compliance issue for businesses using SAFT reporting. This change was backported from another issue.
Original PR description
If we try to export a SAF-T file when a line doesn't have any partner but having a receivable account, then a traceback is displayed.
(Backport of #98240)
How to reproduce?
1. Use a company with a localization using SAF-T (e.g. l10n_dk)
2. Create and post a journal entry with no partner, and with a line having a receivable account.
3. Go on the general ledger, and export in the SAF-T format
opw-5260937
Forward-Port-Of: odoo/enterprise#100960
Forward-Port-Of: odoo/enterprise#100296This update prevents a traceback error that occurred when clicking the 'add' button on the shopfloor screen when a specific quality check was applied to a manufacturing operation. The issue stemmed from a missing variable being passed during the button click process, which caused an error. This fix ensures the 'add' button functions correctly under all circumstances.
Original PR description
**Issue** In shopfloor, a traceback occurs when clicking on the add button if the associated operation has a `quality_check` of type `register_consumed_materials`. **Steps to reproduce** 1. Create…
**Issue** In shopfloor, a traceback occurs when clicking on the add button if the associated operation has a `quality_check` of type `register_consumed_materials`. **Steps to reproduce** 1. Create two products (product and component) 2. Create a BOM for this product that consumes that component 3. Create an operation linked to that BOM (Manufacturing > Configuration > Operations) 4. Add a quality check of type “Register Consumable Material” for this operation 5. Create a MO from that BOM and confirm it 6. Click on the shopfloor smart button → If debug mode is activated, a traceback occurs → Otherwise 7. Click on the 'add' button → A traceback occurs **Cause** In the method [`subRecordProps`](https://github.com/odoo/enterprise/blob/d180235b7946c7219385df263f13f780e7faea50/mrp_workorder/static/src/mrp_display/mrp_display_record.js#L190C9-L194C14), when a quality check of type `register_consumed_materials` is done, the variable `production` is not propagated into the props. And [this](https://github.com/odoo/enterprise/blob/d180235b7946c7219385df263f13f780e7faea50/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L184) tries to access the production in the props, which is [called](https://github.com/odoo/enterprise/blob/d180235b7946c7219385df263f13f780e7faea50/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L163) when the user clicks the 'add' button. **Solution** Add the `production` variable to the props. opw-5165259 Forward-Port-Of: odoo/enterprise#98808
This update fixes a potential issue in accounting reports where data from outside designated ledgers was incorrectly included. The change ensures that reports accurately exclude journal entries from other companies when grouping by multi-ledger, improving the reliability of financial data. This enhances the accuracy of financial reporting.
Original PR description
When grouping horizontally by multi-ledger in accounting reports, ensure that items from journals outside the ledger's designated company are properly excluded. task-5384534 Forward-Port-Of: odoo/enterprise#101475
This update resolves a performance issue affecting how the VersionHistory action handles company currency. The original change didn't account for the specific version history action, leading to a bug only visible in that context. This fix ensures consistent performance across all version history actions.
Original PR description
The perfomance commit added in https://github.com/odoo/odoo/pull/151725 did not account for the version history action that does not inherit from `AbstractSpreadsheetAction`. this missing value trickled down to a bug only detectable in the VersionHistory action and which is addressed in https://github.com/odoo/odoo/pull/232985 This commit adds the same performance to VersionHistory action. Task-5187293 Forward-Port-Of: odoo/enterprise#98870 Forward-Port-Of: odoo/enterprise#98038
This update simplifies the process of creating new signature templates in Odoo Enterprise. Now, new templates automatically default to the standard 'Sign' folder, reducing manual configuration and ensuring consistency. This streamlines workflow and improves the overall user experience.
Original PR description
Assign a default document folder to sign templates so that each newly created template automatically points to the default "Sign" folder. task-5023107 Forward-Port-Of: odoo/enterprise#92624
This update resolves a critical issue in the Swiss payroll module where holiday calculations were broken after recent 19.0 updates. The fix addresses problems with the absence views and calculations, and importantly, now includes support for continued pay and disability during time off applications.
Original PR description
After recent changes in 19.0 on the time off mechanisme, leave calculation in switzerland was completely broken, we fix in this PR the view and the calculation and add the continued pay and disability on the time off application as well task-5384297 Forward-Port-Of: odoo/enterprise#101209
This update enables administrators to modify the work entries associated with payslips that have been reversed or refunded. Previously, these entries were immutable. This change improves operational efficiency by allowing corrections to be made directly within the system through the user interface.
Original PR description
-Originally, work entries for validated payslips cannot be modified. -This task allows for the modification of the work entries for the reverted payslips. -State of work entries can be modified manually through list view + form view on gear icons Task-id: #5380821 Forward-Port-Of: odoo/enterprise#101461
This update resolves an issue where the 'Returns' button on tax reports was failing when using companies with different VAT numbers. The fix ensures the button correctly checks for all companies within the branch hierarchy, allowing users to generate returns accurately.
Original PR description
To reproduce the issue: - Create a company with a branch - Give the company and its branch different VAT numbers - Make sure both companies have an opening date, so that they generate returns - Make both companies active in the company selector - Open the tax report - Click on the "Returns" button ===> The following error is raised: "Please select the main company and its branches in the company selector to proceed." This is because the tax report's options only consider one of the two companies (because they have different VAT numbers). The button is not declared as branch_allowed, so when clicked, it checks whether all the companies of the branch hierachy are in the options => they're not => error. We can fix this by simply making the "Returns" button branch_allowed. task-5369592 Forward-Port-Of: odoo/enterprise#101479
This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company name is used on shipping labels, improving order accuracy and customer experience. This was caused by a misunderstanding of how contact information is handled in the ecommerce system.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update fixes a configuration issue where Indian payroll settings were incorrectly displayed for all company types. Now, these settings are only visible within Indian companies, ensuring accurate payroll localization and compliance. This change improves data integrity and avoids potential reporting errors.
Original PR description
Before: - Indian payroll localization setting was visible to all company. After: - Indian payroll localization settings will be visible to only Indian company. Steps to reproduce: - Install l10n_in_hr_payroll > Go to non Indian company > Payroll setting visible to all company. Task: 5383944 Forward-Port-Of: odoo/enterprise#101201
This update simplifies the display of payment references in bank reconciliation reports. Previously, excessively long payment references were automatically expanded, which has now been corrected. Users must now manually unfold the line to view the complete payment reference.
Original PR description
This commit removes the expand text feature available on payment reference field in the bank reconciliation. Before this commit, a payment reference too long to be fully displayed in the bank reconciliation view could be expanded to have the full payment ref. Now, the user has to unfold the line to get the full payment ref. no task id Forward-Port-Of: odoo/enterprise#101545
22 changes
Resolved issues and error corrections
This update fixes an issue where product images on the website were incorrectly defaulting to the first product variant's image instead of the product's main image. The change ensures that the correct product image is displayed by default, improving the visual presentation of products on the website and enhancing the customer experience. This was a simple fix to a template logic error.
Original PR description
Steps to reproduce: =================== 1- Add a product & product variants 2- Add different photos for product & product variants 3- visit website shop -> observe that the product image is set to…
Steps to reproduce: =================== 1- Add a product & product variants 2- Add different photos for product & product variants 3- visit website shop -> observe that the product image is set to the image of the first product variant Cause: ====== The `product_tile` template defined a variable `variant` that defaulted to the first available variant if no specific variant was selected. The condition https://github.com/odoo/odoo/blob/bf83a4efefedae61e06a6b29ad82e647fd673ce2/addons/website_sale/views/product_tile_templates.xml#L62 subsequently used this default variant's image, bypassing the intended fallback to the product template's image. Solution: ========= Update the condition to check `product_variant` instead of `variant`. `product_variant` is only set when a specific variant is explicitly selected. This ensures the product template image is displayed by default, and the variant image is only shown when specifically requested. opw-5362624 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes layout issues within the calendar by allowing popovers to display naturally below or above events, regardless of event width. It also prevents popovers from sticking to screen edges, ensuring a cleaner and more consistent user experience. This improves the overall usability of the calendar feature.
Original PR description
This PR addresses two positioning issues: - **Calendar**: Removed forced horizontal positioning. Popovers can now display below/above events, fixing layout issues with wide events. - **Screen Edges**: Added a 20px buffer to the position calculation logic to prevent popovers from sticking to the edges of the screen/container. task-4453491
This update fixes an issue where subscription payments failed due to missing country information. The change ensures subscriptions, even for services, correctly require a country to be set, preventing payment failures and improving the reliability of recurring invoices. This resolves a technical glitch impacting subscription billing.
Original PR description
## Versions 19.0+ ## Issue A customer subscribing to a service can checkout without filling its data (incl. country). This leads to a failure of the next payment and a message in the chatter telling…
## Versions
19.0+
## Issue
A customer subscribing to a service can checkout without filling its data (incl. country). This leads to a failure of the next payment and a message in the chatter telling that "Automatic payment failed. No country specified on payment_token's partner".
## Steps to reproduce
*Ensure Sales app is installed*
- Create a customer account without filling personal data in;
- Navigate to the shop:
- Look for a subscription service (ending with "SUB") and add it to cart;
- Go to the cart and click the checkout button (automatically bypassing the addresses form);
- Pay with Demo.
- Logout and sign in as admin user:
- Go to Sales and open the latest SO (related to the test user):
- Duplicate the SO and activate debug mode;
- Open "Other Info" tab:
- Change the subscription starting date for any date in the past;
- Set the Payment Token selecting the available one; - Confirm the order.
- Navigate to Scheduled Actions:
- Look for "Sale Subscription: generate recurring invoices and payments" action and open it:
- Click "Run Manually".
- Come back to the duplicated subscription SO and look at the chatter's last message:
- OdooBot's message tells that "Automatic payment failed. No country specified on payment_token's partner".
## Cause
Task 4307281 introduced address info bypass to fasten checkout for services but subscriptions, even for services, require the country to be set for recurring payments as per https://github.com/odoo/enterprise/blob/f40e24e67a1664a13acdd01578d8269d084ee421/sale_subscription/models/sale_order.py#L1751-L1757
opw-5268156This update resolves a bug that prevented the resume section from generating correctly when an employee lacked a version record. The change adds a safeguard to prevent errors during resume generation, ensuring all employees' resumes can be created smoothly. This improves the reliability of the HR resume feature.
Original PR description
Due to some issues with migration, some employee might not have a version, which would result in breaking the code of generating the resume lines. This commit adds an extra level of protection for those case. Task-5336589 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves how Odoo handles Adyen payment rejections. Previously, a missing amount field in the rejection response would mask the actual reason for the decline. Now, the system correctly displays the refusal reason, ensuring accurate tracking and resolution of payment issues, particularly for offline payments.
Original PR description
When requesting a direct payment (for offline operation) and Adyen reject the it, we will get back a response that may not always have the amount information. This commit skip the amount and currency validation for refusal, so that the missing amount error message will not shadow the real refusal reason. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds a simple green dot to live chat channel categories in the discuss app, making it instantly clear if a live chat agent has joined a channel. This prevents agents from forgetting to join channels, improving efficiency and reducing errors. This fix addresses a UX issue introduced during the 19.0 release.
Original PR description
Before this commit, seeing whether a livechat channel was joined or not in discuss app sidebar required to mouse-hover the category and seeing whether the action join or leave was present. This is a…
Before this commit, seeing whether a livechat channel was joined or not in discuss app sidebar required to mouse-hover the category and seeing whether the action join or leave was present. This is a problem because using livechat as an agent requires frequent join and leave. The mouse-hover is too subtle to know for sure whether the channel is joined or not, which is crucial for agent to not mistakenly forgetting to join the channel at the start of their shift or leaving at the end of their shift. Also the mouse-hover technique on category shows the icon in muted state, and it's not easy to get at a quick glance since the icon are quite similar. The color is only shown on exact mouse-hover on the join/leave action. In previous versions, these category actions were always displayed on the sidebar, but have their visibility reduced in 19.0 to declutter the discuss app sidebar visually. However this introduced this UX regression. This commit fixes the issue by adding a small indicator on livechat categories that the user has joined as a tiny green dot. That way the discuss sidebar stays relatively simple visually but there's a quick and very easy indicator that the livechat channel has been joined. The agent can easily deduced the channel hasn't been joined by the non-presence of this indicator. Before: <img width="300" height="754" alt="Screenshot 2025-12-05 at 15 46 42" src="https://github.com/user-attachments/assets/f8940e69-779a-431d-ac2e-1b51fe36a2d5" /> After: <img width="308" height="735" alt="Screenshot 2025-12-05 at 15 31 57" src="https://github.com/user-attachments/assets/586be26e-3ab3-4d00-ba13-7255c1b74ec4" /> <img width="353" height="741" alt="Screenshot 2025-12-05 at 15 31 32" src="https://github.com/user-attachments/assets/43a91144-07f7-474a-84d1-b8f3718a1ace" />
This update addresses a stability issue in Odoo's mail functionality, specifically related to how it checks for changes within web pages. By adding short pauses during these checks, the system is now more reliable in detecting updates, particularly those not immediately reflected in the DOM. This prevents test failures and ensures consistent performance.
Original PR description
Backport of https://github.com/odoo/odoo/pull/234508 Before this commit, contains had 3 seconds timeout to make a final runOnce. Some tests could be longer than necessary due to: - change not observed by DOM mutation, e.g. `:focus` in selector - some selectors are sometimes not properly observed by mutation somehow, like discuss badges. This commit adds 100ms ticks to re-check selector, and the 3 seconds timeout now happens with calling the ticks 30 times.
This update enhances the reliability of Adyen payments by preventing errors caused by duplicate processing. When payment details are sent for validation, a webhook triggers a retry. Adding an idempotency key ensures the system recognizes and handles these retries correctly, avoiding transaction conflicts and rollbacks.
Original PR description
When submitting extra payment details (ex. for 3DS validation), a call to Adyen `/payment/details` will immediately trigger a webhook to `/payment/adyen/notification`.
If that webhook is processed before we have the change to process the `/payment/details` response ourself, we will crash with a `concurrent update` (for. ex. if the payment has been authorized both transactions will try to change the transaction state to `done`), so Odoo will rollback and retry posting to `/payment/details` endpoint, which now return the following response:
```
{
"status":422,
"errorCode":"704",
"message":"request already processed or in progress",
"errorType":"validation",
"pspReference":"{redacted}"
}
```
This commit add idempotency key when submitting the payment details to ensure we get back the same response in case the transaction is retried because of a concurrent update.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes a problem where users without specific permissions were unable to view overtime attendance records. The change adjusts security rights to grant access, ensuring all users can properly access and manage overtime attendance data. This improves usability and prevents data access restrictions.
Original PR description
## Issue - Getting access error when the user having no special access rights tries to access the attendance record. ## Steps to reproduce 1. Log in as user (a user with no special access rights) 2. Open the Attendances app, and click on a record with overtime attendance 3. You get an Access error wizard, upon closing will show the attendance wizard of that record, without extra hours captured on it. ## Solution - Fixed security rights to access attendance records when you do not have any special access rights. task-5366484 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update addresses slow website loading times caused by excessive parsing of product variants for JSON-LD. We've added a parameter to limit the number of variants processed, improving page speed and overall user experience, particularly for businesses with large product catalogs.
Original PR description
After this [commit](https://github.com/odoo/odoo/pull/189289/commits/1d29eccb9b320fb8c41d9610368012edbedc8d3c), all the product_variants are being parsed to be on he markup json-ld schema. Some databases could have a lot of variants and product rules, and by consecuence slowness on the pages. To make a temporal fix to this behaviour, we decided to add a param to limit the quantity of products listed on this json. OPW-5349986 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where emojis at the end of HTML emails weren't being properly formatted. The fix adjusts the code to correctly identify and transform emojis within HTML content, ensuring they display correctly for all users. This improves the overall email experience and prevents visual errors.
Original PR description
Currently, emojis are not transformed when they are at the end of the HTML composer content. This is due to the regex used in the `formatEmojisInHtml` function, which does not account for HTML boundaries properly. task-5357675 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where users without the necessary permissions to upload documents within a project couldn't successfully upload. The fix checks user rights before allowing uploads, preventing errors and ensuring proper functionality for all users with the correct access levels. This improves the reliability of document sharing within projects.
Original PR description
Step To Reproduce: - install Project - login with admin and open any Project settings, say Project 1. - create a upload document activity for 'marc demo' - ensure marc demo has 'User' access for…
Step To Reproduce: - install Project - login with admin and open any Project settings, say Project 1. - create a upload document activity for 'marc demo' - ensure marc demo has 'User' access for project - login with marc demo - open same project (kanban card -> view) - upload a document for the created activity Observation: - Traceback ``` TypeError: Cannot destructure property 'id' of '(intermediate value)' as it is undefined at Activity.onFileUploaded ``` Cause: - upload request to `/mail/attachment/upload` , calls `mail_attachment_upload` which then tries to access thread for 'write' mode, 'project.project ' model . - as marc demo does not have write access to this model, no thread is returned - so `NotFound()` is raised https://github.com/odoo/odoo/blob/322c6d0468bf79e9d29e1375c49aa13d4a7b7a67/addons/mail/controllers/attachment.py#L48-L55 Fix: - we check if selected user has appropriate rights or not for upload activity opw-5160132 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238533 Forward-Port-Of: odoo/odoo#234936
This update resolves an issue preventing users from creating quotation templates using products set up in the parent company of a multi-company setup. Previously, this was allowed in standard sales orders, but not quotation templates. The change ensures consistency and simplifies the process for users managing products across multiple branches.
Original PR description
### Issue In this issue, having multi-company setup, we cannot make a quotation template with a product from the parent company. While this is allowed in sale order. #### To reproduce: 1- Create a product and in the product form, set the the company field to the parent company. 2- Create a quotation template and set the company field to the child branch. 3- In the quotation template, add a line and use the created product from the parent company. 4- Saving the form will raise an error. Talked with PO about the issue and he agreed that the quotation template should allow product from the parent company. This is already the flow in the quotation itself. opw-5177590 Forward-Port-Of: odoo/odoo#237732
This update resolves an issue where notifications triggered by the Data Cleaning app would incorrectly open a chat window and fail to send messages. The fix ensures notifications are correctly routed to the user's discuss inbox, improving the user experience when identifying duplicate records.
Original PR description
**Steps to reproduce:** - Install `Data Cleaning` app - Activate notification in Odoo in the admin user profile - Create a few duplicate contacts - Go the the "Data Merge: Find Duplicate Records"…
**Steps to reproduce:**
- Install `Data Cleaning` app
- Activate notification in Odoo in the admin user profile
- Create a few duplicate contacts
- Go the the "Data Merge: Find Duplicate Records" scheduled action
- Run the action manually
- You should see new notifications telling you that they found potential duplicates
- In the top right MessaginMenu click on the notification, it opens a chatter
- Try to send a message in the chat window
- Traceback : `AttributeError: 'data_merge.model' object has no attribute '_get_thread_with_access'`
**Issue:**
The model doesn't inherit `mail.thread` so it uses `self.env['mail.thread']` directly to send notification:
```
self.env['mail.thread'].sudo().message_notify(
...
model=self._name,
notify_author=True,
partner_ids=partner_ids,
res_id=self.id,
)
```
But when sending the information with the `model` and `res_id` parameters the newly created `Store` uses `self.add("mail.thread", {"id": data.id, "model": data._name, **values})` and the message is assigned to a non-existing thread in the frontend.
**Fix:**
Explicitly check if the message is a `user_notification` and redirect the user to the discuss inbox if it's the case by reapplyng part of https://github.com/odoo/odoo/commit/b3be992c57dc5e412a127d05fc50b059814523aa
opw-5101510
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#238563
Forward-Port-Of: odoo/odoo#234737This update fixes an issue where toggling a block element on product pages caused a page reload. By explicitly setting the button type to 'button', the change now seamlessly updates the product page without requiring a new load, resulting in a smoother user experience. This resolves a minor usability concern.
Original PR description
**Context** If you add a toggle block element in the ecommerce description of a product in your backend, it will be rendered inside a `<form />` element on your website's product page. **Before this commit** The button controlling the toggling of this element does not have an explicit "type" attribute set. This has the effect that these buttons will act as "submit" buttons for the form element on the website, causing a page reload. https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/button#type **After this commit** Explicitly set the "type" attribute to be "button" so that toggling a block doesn't reload the user's website. opw-5369171 Forward-Port-Of: odoo/odoo#238892
This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company name is used on the shipping label, improving order accuracy and customer experience. This was caused by a misunderstanding of how contact information is handled in the ecommerce system.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update fixes an issue where scanning a lot multiple times during barcode picking would incorrectly create a backorder. The fix ensures that quantity updates are applied correctly to the relevant lines, preventing this error and streamlining the picking process. This improves order fulfillment accuracy.
Original PR description
**Steps to reproduce:** - create a product tracked by lot - create a lot with a quantity of 2 - create a new sale order - add two sale order lines, both for a quantity of 1 of the product - confirm -…
**Steps to reproduce:** - create a product tracked by lot - create a lot with a quantity of 2 - create a new sale order - add two sale order lines, both for a quantity of 1 of the product - confirm - open the picking in barcode - scan the stock location - scan the lot - scan the lot another time - validate **Current behavior:** a backorder is created **Expected behavior:** No back order should be created **Cause of the issue:** After scanning the lot for the first time we have the following situation: two lines : - one with a quantity of 1, qty_done of 1 and reserved_uom_qty of 1 - one with a quantity of 1, qty_done of 0 and reserved_uom_qty of 1 both lined grouped in a parent line with quantity of 1 qty_done of 1 and reserved_uom_qty of 2 All of this is correct. when scanning the lot for the second time: _findLine iterates through the lines to select the right line to use. _findLine calls _lineIsNotComplete on the first line to check if it's complete (this first line is complete). https://github.com/odoo/enterprise/blob/58d55868750b827a9d5ebd8b4ab2cc23c4445eca/stock_barcode/static/src/models/barcode_model.js#L1684 But _lineIsNotComplete will actually do the check on the parent line (which is not complete), so the return value will be true. https://github.com/odoo/enterprise/blob/58d55868750b827a9d5ebd8b4ab2cc23c4445eca/stock_barcode/static/src/models/barcode_picking_model.js#L1338 As a consequence, the quantity will be added in the first line and we will have a qty_done of 2 in the first line and a qty_done of 0 in the second line. Which will lead to the creation of a back order opw Forward-Port-Of: odoo/enterprise#101321 Forward-Port-Of: odoo/enterprise#99774
A recent test failure related to task scheduling time zones has been fixed. The issue stemmed from incorrectly calculating task durations based on resource time zones instead of UTC. This change ensures accurate task planning and scheduling across different time zones.
Original PR description
The test `test_plan_task_in_calendar` failed with a one-hour difference in `planned_date_begin`. The error occurred because the work intervals were computed using the resource's timezone (`Europe/Brussels`) instead of `UTC`, leading to a shifted planned date. Setting the resource timezone to `UTC` ensures consistent interval computation and resolves the test failure. [RB-227059](https://runbot.odoo.com/odoo/error/227059) Forward-Port-Of: odoo/enterprise#100580
This update resolves a minor formatting issue in Odoo's email composer. Specifically, it ensures a space is automatically added after mentions within email messages, improving readability and preventing potential display problems. This change ensures emails are formatted correctly for recipients.
Original PR description
This commit fixes an issue where there was no space inserted after a mention in the HTML composer. task-5354233 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that the terms 'Night' and 'Nights' are properly translatable within the Odoo Sale Renting module. The team took a pragmatic approach, delaying full translation for these specific terms to monitor for potential inconsistencies with website language settings. This ensures accurate localization for users in different languages.
Original PR description
Not sure why the existing `SINGULAR_LABELS` is lazy translated whereas the not single units (i.e. `self._fields['unit']._description_selection(self.env))[self.unit]`) is not, so we assume that in this case it's fine to not lazy translate both "Night" and "Nights" and see if a bug pops up later on (maybe via mismatching website language?) opw-5392109
This update ensures that all B2C invoices in the Saudi Arabia localization (l10n_sa) module now correctly display 'Simplified Tax Invoice' as the invoice title. Previously, this requirement was only applied to phase 2 ZATCA invoices. This change aligns with regulatory requirements and improves invoice consistency.
Original PR description
For B2C invoices, the invoice's title must be "Simplified Tax Invoice". This was only applied to phase 2 ZATCA in "l10n_sa_edi". This change makes sure to apply the same requirement for phase 1 invoices. Task-5322118 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#237505
This update fixes an issue where Vimeo video settings (loop and hide controls) weren't being applied after saving a website page. The problem stemmed from unnecessary escaping of URL parameters, which was preventing Vimeo from correctly interpreting the video settings. This change removes the escaping, ensuring settings are applied as intended.
Original PR description
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to…
When setting options like "Loop" or "Hide Player Controls" on an embedded Vimeo video, these settings were not applied on the final page after saving. Steps to reproduce: =================== - Go to the Website editor. - Drag and drop a "Media List" or similar snippet. - Double-click the video placeholder to open the media dialog. - In the "Video" tab, paste a Vimeo URL. - Enable "Loop" and/or "Hide Player Controls". - Save the page. -> Observe that the video does not loop and the controls are still visible. Cause: ====== When rebuilding the iframe, `generateVideoIframe` was processing the video's `src` URL through using `escape()` function. This function is designed to prevent XSS by converting characters like `&` into their HTML entity equivalent, `&`. However, Vimeo video URLs use the `&` character to separate query parameters (e.g., `?loop=1&controls=0`). The `escape()` function was converting this URL to `?loop=1&controls=0`. but `setAttribute` already handles URL values safely. so Vimeo player will receive url containing &amp;. This broke the URL's structure. The Vimeo player received a malformed URL, could not parse the parameters correctly, and therefore ignored the options for looping and controls. escape was used before cause The original code was adding the iframe using `.html(...)` see commit: https://github.com/odoo-dev/odoo/commit/8749410b1033ddec1207ce1db42d1889a0d2ea33 side note 1: before saving the vimeo video works because we render it without the double escaping of & (as will be the case for saved video if this PR is applied) side note 2: the issue of double escaping also apply to youtube, but it seems to be ok with superfluous & in URL while in vimeo: https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1 has the video that doesn't loop, is not muted (so doesn't auto play in an iframe on most browser) and show controls https://player.vimeo.com/video/1138854841?autoplay=1&muted=1&autopause=0&controls=0&loop=1: all option works Solution: ========= The unnecessary `escape()` call has been removed. since the video should be only added using media dialog and the `setAttribute(...)` will escape it by default opw-5225261 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238040 Forward-Port-Of: odoo/odoo#236677
12 changes
Resolved issues and error corrections
This update optimizes the loading speed of project settings within sales orders. Previously, a slow database scan was triggered due to a missing index, impacting performance, especially with large numbers of sales orders. Adding this index significantly reduces loading times, resulting in a faster and more responsive user experience.
Original PR description
Description ----------- Following odoo/odoo@238a41e35280256382f6509182b9e900fb4f7aba, the domain for `sale.order.line` in `_get_sale_order_items_query` was modified to search based on the relevant…
Description ----------- Following odoo/odoo@238a41e35280256382f6509182b9e900fb4f7aba, the domain for `sale.order.line` in `_get_sale_order_items_query` was modified to search based on the relevant `order_id` `id` or `project_id`. `project_id` is not indexed, leading to a heavy non-selective scan on the primary key for databases with many `sale. order` records. There is poor selectivity with the filter on `sale. order.line` resulting in a heavy join between `sale.order` and `sale.order.line`. This commit adds the missing index, allowing for `Bitmap Heap Scan` on both indexes and leveraging the selectivity of the project being currently opened. Benchmark --------- On a database with 3.5M `sale.order`, 12M `sale.order.line`, opening the "Settings" page of a project with a few sale lines associated with it took: | | Before | After | |--------------|--------|-------| | Timing (hot) | 9.1s | 5ms | Reference --------- opw-5280364 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an error that prevented users from opening the Trial Balance report when the date range was disabled. The fix ensures the necessary settings are applied to the report, allowing users to generate the report correctly regardless of the date range option. This improves report accessibility and prevents data discrepancies.
Original PR description
Currently, an error occurs when opening the `Trial Balance` report with Date Range disabled. **Steps to reproduce:** - Install the `account_reports` module and enable developer mode. - Navigate to…
Currently, an error occurs when opening the `Trial Balance` report with Date Range disabled. **Steps to reproduce:** - Install the `account_reports` module and enable developer mode. - Navigate to Accounting > Reporting > Trial Balance. - Click the gear icon to open the configuration form. - In the Options tab, disable `Date Range` and `save`. - Try to open the `Trial Balance`. **Error:** `TypeError: '>' not supported between instances of 'NoneType' and 'str'` **Cause:** At [1], the code sets `no_impact_on_currency_table: True` only for the initial balance, but does not set it in the end balance method. In the method `_init_options_currency_table`, the condition for the end balance at [2] is not satisfied, so the code below executes. When `already_present_period['from']` is `None` at [3], the comparison `>` between `None` and a `string`, causes the error. **Fix:** This commit prevents an error when opening the Trial Balance while the date range is disabled by ensuring that `no_impact_on_currency_table` is also set to `True` for the end balance at [4], similar to the behavior in `saas-18.2` at [5]. [1]: https://github.com/odoo/enterprise/blob/cbc6e02ea1bc595b391f2f741f9f2f5d6e490eeb/account_reports/models/account_trial_balance_report.py#L160-L196 [2]: https://github.com/odoo/enterprise/blob/cbc6e02ea1bc595b391f2f741f9f2f5d6e490eeb/account_reports/models/account_report.py#L1382-L1386 [3]: https://github.com/odoo/enterprise/blob/cbc6e02ea1bc595b391f2f741f9f2f5d6e490eeb/account_reports/models/account_report.py#L1399 [4]: https://github.com/odoo/enterprise/blob/cbc6e02ea1bc595b391f2f741f9f2f5d6e490eeb/account_reports/models/account_trial_balance_report.py#L180-L187 [5]: https://github.com/odoo/enterprise/blob/d808ad3f6ff52632e00cf1a68de0e5270e52895d/account_reports/models/account_trial_balance_report.py#L37-L38 opw-5365462
This update resolves an issue that previously blocked users from creating new Amazon accounts within a newly created company. The fix ensures that the system correctly handles the absence of warehouses and stock locations when a company is first set up, preventing a technical error.
Original PR description
Currently, an error occurs when user tries to create a new amazon account on a new company. Steps to replicate: - Install `sale_amazon`. - Create a new company and switch to it. - Go to Settings >…
Currently, an error occurs when user tries to create a new amazon account on a new company.
Steps to replicate:
- Install `sale_amazon`.
- Create a new company and switch to it.
- Go to Settings > Amazon account > Try to Create a new account.
Error:
```
File /home/odoo/odoo18/enterprise/sale_amazon/models/amazon_account.py, line 214, in create
'location_id': parent_location_data[0]['view_location_id'][0],
IndexError: list index out of range
```
Cause:
- Whenever a new company is created, it doesnt have any warehouses [1] and amazon stock locations [2].
- This causes the `parent_location_data` to be an empty list and causes error at line [3].
Solution:
- Assigning the `location_id` if the `parent_location_data` exists.
[1]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L206-L210
[2]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L201-L204
[3]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L214
sentry-7086464738This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company name is used on shipping labels, improving order accuracy and customer experience. This was caused by a misunderstanding of how contact information is handled in the ecommerce system.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update fixes an issue where website form fields were displaying a placeholder text of 'null' instead of an empty field. This change ensures that all form fields, regardless of their type, appear blank when initially presented to users. This improves the user experience and consistency across the website.
Original PR description
Steps to see the issue: - Open website and start editing - Drop a form - Add a new field, or click on an optional field, the type of which we can modify - Set the field type to 'Selection' or 'Radio Buttons' (or any other that does not have placeholders) - Set the field type back to 'Text' => Field's placeholder is `'null'`, but it should just be empty. task-5383835
This update fixes an issue where downloading invoices as PDFs in version 18.0 resulted in a proforma document instead of the actual invoice. The fix ensures that the correct invoice PDF is generated when downloading via the 'Download' option, resolving a discrepancy in report delivery.
Original PR description
## Issue: In 18.0, downloading an invoice via the Download option returns a proforma PDF instead of the proper invoice The PDF (without payment) works as expected ## Cause: The standard report is hidden and therefore not listed in the Print options An equivalent report is added in the Download options by `get_extra_print_items()` But this action relies on `_get_invoice_legal_documents()` which only returns the invoice if it was already generated using `Send` The `Print` button works correctly because it uses the proper report directly ## Steps to reproduce: - Open an Invoice - Use the gear to Download > PDF - The file is a proforma opw-5111272
This update fixes an issue where batch barcode scanning wasn't working correctly with multiple pickings. The system now correctly handles moves from different pickings within a batch, ensuring accurate tracking of inventory. This improves the reliability of batch management for users.
Original PR description
Steps to reproduce ----- - Enable batch pickings - Create a product - Create 2 receptions for the product (qty > 1) - Create a batch with the 2 transfers - Open the batch in barcode - Scan part of…
Steps to reproduce ----- - Enable batch pickings - Create a product - Create 2 receptions for the product (qty > 1) - Create a batch with the 2 transfers - Open the batch in barcode - Scan part of both pickings - Go back to the barcode main screen - Open the batch again > Both pickings have their demand = partially delivered quantity Cause ----- When leaving the page, we trigger https://github.com/odoo/enterprise/blob/91d6a096e88e4f11d7504d7a4052a57e2cb09ca8/stock_barcode/models/stock_move.py#L65-L68 in which we end up merging the moves together https://github.com/odoo/enterprise/blob/91d6a096e88e4f11d7504d7a4052a57e2cb09ca8/stock_barcode/models/stock_move.py#L51 This has been added by 9753c24 (ade0bef in 17.0) The problem is that `_merge_moves` merges all of the moves into the first of `merge_into` https://github.com/odoo/odoo/blob/26761e04bb648b46cd35697c6cbc8ed1e27fef90/addons/stock/models/stock_move.py#L1086-L1088 This, however, doesn't make much sense for batches because the moves can be from different pickings. ----- Ticket: opw-5163740 Forward-Port-Of: odoo/enterprise#100940
This update resolves an issue where the payment term line name wasn't correctly updated when changing the 'Customer Reference' on an invoice. The fix addresses a technical detail within the invoice processing logic, ensuring consistent and accurate naming of payment terms across invoices. This improves invoice clarity and reduces potential discrepancies.
Original PR description
### Issue: When changing the "Customer Reference" on an invoice, the name of the payment term line is not updated. ### Steps to reproduce: - Create an invoice with payment terms, confirm it - Modify…
### Issue:
When changing the "Customer Reference" on an invoice, the name of the payment term line is not updated.
### Steps to reproduce:
- Create an invoice with payment terms, confirm it
- Modify its "Customer Reference" to 'test' for example
- In the page "Journal Items" the name of the terms line has been recomputed to "test - INV/2025/XXXXX"
- Modify again its "Customer Reference" to 'abcdef' for example
- In the page "Journal Items" the name of the terms line was not recomputed
### Cause:
In `_compute_name()` we only write the name if this condition is `True`:
```py
if n_terms > 1 or not line.name or line._origin.name == line._origin.move_id.payment_reference or (
line._origin.move_id.payment_reference and line._origin.move_id.ref
and line._origin.name == f'{line._origin.move_id.ref} - {line._origin.move_id.payment_reference}'
):
line.name = name
```
The purpose of this line is to keep the name of the line if it was manually inputted. So the logic is: we only write the computed name if the previous name was computed. To check this, we check if `line._origin.name == f'{line._origin.move_id.ref} - {line._origin.move_id.payment_reference}'`.
The issue comes from the use of `_origin` in a compute. `_origin` refers to the record before we make any change. But it is meant to be used for `onchange` methods, in these the values are not yet written so `_origin` refers to the record before saving.
Here, when saving, `line._origin` is the same as `line`, so
- `line._origin.move_id.ref` is the new ref.
- `line._origin.name` uses the old ref (it's currently being recomputed).
### Solution:
Unfortunately, in the compute, there are no trace left of what were the previous values as the write already occurred.
The initial complaint justifying to keep custom line names was that on bills, the line name is empty. So when inputting a custom line name, it was removed by the compute method. The previous fix wanted to be more general by always keeping custom line names.
Considering this, this commit removes part of the previous fix: Now we only keep the custom line name when the compute method wants to remove it. So we keep the previous fix for bills.
### Note
There was a test verifying exactly that when manually deleting the line name, in the end
the line does not have a name. This will no longer be the case but a decision must be made between:
1. updating the line name when changing the ref
2. not recomputing line name when it has been changed manually
3. removing the line name when it's manually deleted
We can have 2 and 3 but not with 1 afaik.
opw-5246917This update simplifies MPF accounting within Odoo by making the MPF accounts unreconcilable by default. Previously, separate payments for MPF and wages were registered, creating complexity. Now, accountants will directly reconcile statements with the government account, streamlining the process.
Original PR description
Currently, we register two separate payments for MPF at the same time as we do for the employee's wages. This is not what we want to do; as both are not paid at the same time. MPF is also handled separately, and paid outside of Odoo on the government platform, making the registration of separate payments more complex for not many benefits. Thus, we make these accounts un-reconcilable by default, and will expect accountants to reconcile the statement with the account directly. task-5349299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update introduces a flexible hook within the stock module's barcode functionality. This allows for adjustments to how barcodes are handled specifically when processing rental transactions within the sale stock module. Previously, there was no way to customize this behavior, and this change provides a controlled mechanism for adapting to future rental requirements.
Original PR description
Add a hook method to be used in barcode that can be overriden for `sale_stock_renting`. As there is no common module for these two module, this was put in their common ancestor. opw-5265874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where rental receipts were validated incorrectly due to a conflict in how returns were processed. The change ensures that rental receipts are handled as partial receipts, preventing validation errors when scanning products during the rental process. This improves the reliability of rental transactions.
Original PR description
Steps to reproduce: - Enable Rental pickings - Create a rental for a product, for 4 quantity - Process the delivery - Open the barcode app and open the reception - Scan the product once and validate…
Steps to reproduce: - Enable Rental pickings - Create a rental for a product, for 4 quantity - Process the delivery - Open the barcode app and open the reception - Scan the product once and validate Issue: The receipt is validated without issues nor warning, despite being incomplete. This is due to a bad mix of two changes: - #60801, which always sets the rental receipt as return of the delivery - #48788, which removes the backorder check for returns in barcode For regular returns made in barcode, it makes sense to avoid the backorder check, as from here we're processing a full picking return and we'd have the confirmation pop every time. However, things are different for rental receipts, as despite them being set as returns of the delivery, they're proper receipts that need to handle the partial receipt. To avoid the issue, rather than removing the backorder check whenever there's a return linked to the picking, now also checks that there isn't a rental order linked to the picking. opw-5265874
This update resolves issues with the snippet modal's appearance in dark mode across different browsers. Specifically, it ensures consistent background colors and corrects the text color, regardless of the user's chosen color scheme. This improves the user experience and visual consistency within the Odoo editor.
Original PR description
This commit aims to fix two issues with the snippet modal in dark mode: 1. Streamline the background color accross browsers. Chrome takes into account the classes on the iframe for the background…
This commit aims to fix two issues with the snippet modal in dark mode: 1. Streamline the background color accross browsers. Chrome takes into account the classes on the iframe for the background color but Firefox and Safari don't. 2. The text below the custom snippets is always black, regardless of the color scheme selected. These 2 issues are fixed by using the color-scheme cookie value inside the snippet modal's iframe, adding as a meta tag and a custom class. task-5095262 | Browser(s) | Before | After | |--------|--------|--------| | Firefox/Safari | <img width="1192" height="847" alt="image" src="https://github.com/user-attachments/assets/f38f4944-3379-4300-8ec7-78a73dcce7f1" /> | <img width="1174" height="828" alt="image" src="https://github.com/user-attachments/assets/06e93051-737e-4abe-b937-79ce9a4e0a33" /> | | Chrome | <img width="1171" height="828" alt="image" src="https://github.com/user-attachments/assets/c5f1fcb4-eb55-4a26-83f5-e2c3c65ad0dd" /> | <img width="1174" height="833" alt="image" src="https://github.com/user-attachments/assets/c4066e4d-876c-455c-92eb-1ab0e115500c" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
4 changes
Resolved issues and error corrections
This update resolves a potential memory issue that could occur during module installation on databases with many existing accounting records. The change ensures that new fields are created efficiently, preventing the system from running out of memory and improving installation speed and stability. This primarily affects the HR Timesheet module.
Original PR description
Description ----------- On databases with a large count of existing `account.analytic.line` records, installing modules like `hr_timesheet`, which adds compute stored or related stored fields to this model can trigger a memory error due to the volume of records that need to be recomputed. This commit creates the columns manually with the correct default value that is inferred from the state and implementation of said fields. Reference --------- opw-5234833 opw-5255382 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a bug preventing users from adding products to invoices when navigating from an fsm task. The issue stemmed from inconsistent context settings between accessing invoices from a sale order versus a task, specifically related to the product domain. This change ensures consistent behavior regardless of the entry point, allowing users to correctly add products to invoices.
Original PR description
On a fsm task, using the smart button to go to the invoice, will not give the same domain for the products, if you go from the sale order or directly from the task Steps to reproduce:…
On a fsm task, using the smart button to go to the invoice, will not give the same domain for the products, if you go from the sale order or directly from the task Steps to reproduce: ------------------- * Create a product - Purchase: False - Sale : True * Create a fsm task * Add products * Go to the sale order * Create the invoice (regular invoice) * Go back to the task * Go to the invoice using the invoices smart button * Try to add your product -> issue it's not possible. Observation: --------------- The domain of the search is not the same if we go from the sale order or from the task. This is because the domain depend on the context and the context is not the same : [Domain](https://github.com/odoo/odoo/blob/8258ddf12ed6c0495628f7a480d1e2424e756540/addons/account/views/account_move_views.xml#L1134-L1141) When using the smart button on the SO, some elements will be added to the context, the important one is: default_move_type : "out_invoice": [SO context](https://github.com/odoo/odoo/blob/18.0/addons/sale/models/sale_order.py#L1453) Instead when using it on the task, the context does not have that element: https://github.com/odoo/enterprise/blob/cb79d565031ee0e1bec9db82aa35deb2e1c03576/industry_fsm_sale/models/project_task.py#L325-L327 This will be calculate here in the js files: [evalContext](https://github.com/odoo/odoo/blob/c3367bd7c6900e42394b006ccf48c3b36a1b87e9/addons/web/static/src/views/fields/field.js#L400) opw-5135567
This update corrects a bug in the invoice calculation process. Previously, changing the unit price or product would not consistently update the totals until the invoice was saved. The fix reorders the calculation logic to ensure the correct product price is used, leading to accurate totals.
Original PR description
**Steps to reproduce:** - Install Accounting - Create an invoice with an invoice line - Save the invoice - Change the unit price => The totals should change - Change the product => The unit price and…
**Steps to reproduce:** - Install Accounting - Create an invoice with an invoice line - Save the invoice - Change the unit price => The totals should change - Change the product => The unit price and the totals should change - Change the unit price again **Issue:** After this point, the totals don't change anymore, even if the unit price is changed several times. Only saving the form will adapt the totals correctly. **Cause:** When changing the unit price the first time, a "price_unit "key is added in the onchange values. When changing the product, a "product_id" key is added after the price key. Changing the product triggers an onchange of the price with the price of the new product. However, when the price is changed again, as the "price_unit" key already exists, it's reused and its position is still before "product_id" key even if it should be computed after. This order results in the use of the price of the second product instead of the one entered manually when computing the "tax_totals". **Solution:** If "product_id" and "price_unit" are the values of the onchange method, the list of values is reordered to make sure that "product_id" is computed first. opw-5012125 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where Swiss account translations were missing, particularly for payroll documents. This prevented mixed language documents, which are unacceptable for official Swiss financial records. The change ensures accurate and consistent reporting for Swiss users.
Original PR description
Some Swiss account translations were missing, mainly related to payroll. This resulted in payroll documents having mixed languages, which is not acceptable for official documents. opw-5343680