Daily updates from Odoo
Monday, February 23, 2026
307 changes
31 changes
Enhancements to existing features
This update optimizes the creation of global invoices in the Mexican tax system (l10n_mx_edi). By changing the wizard to a 'TransientModel,' the system no longer stores temporary data permanently, leading to a smoother and more efficient invoice creation process. This change avoids unnecessary database usage and improves performance.
Original PR description
Change to TransientModel so a wizard is not permanently stored in db when creating a global invoice. Forward-Port-Of: odoo/enterprise#107950 Forward-Port-Of: odoo/enterprise#107244
Resolved issues and error corrections
This update resolves a technical issue that caused errors when exporting sales orders involving goods moving between countries in Europe. The fix ensures the system correctly checks for the presence of invoices during export, preventing unexpected errors and improving data accuracy. This enhancement ensures smooth order processing across borders.
Original PR description
…e_date' When exporting an SO, we got a traceback when the goods are traveling inside Europe in 2 differents countries because that part of the code was not checking an invoice was involved or not. opw-5959874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250066
This update resolves an issue where the Planning calendar view would crash due to incorrect data validation in the sample data. The fix adapts the system to handle a 'false' value for a required field, preventing the crash. While a more comprehensive solution was considered, this quick fix ensures stability for sample data usage.
Original PR description
Go to the Planning calendar view and toggle filters such that there is no data displayed. Save the current filters as favorite. Then, reload and switch to the list view. Before this commit, in…
Go to the Planning calendar view and toggle filters such that there is no data displayed. Save the current filters as favorite. Then, reload and switch to the list view. Before this commit, in **debug mode**, the props validation of the ResourceTag component crashed, because it received `false` as value for the `type` props, which expected a `string`. The problem comes from the SampleServer, which only knows about the fields of the main model, but not those of co-models reachable from relational fields. In this case, there's a `resource_ids` many2many field on the main model whose relation is `resource.resource`, and there's a `type` selection field on that model. That field is required, so the code only expected `string` values, not `false`. But as the SampleModel doesn't know about that `type` field, it generates `false` as value. Ideally, the SampleModel should know about the whole field specs (main model + relations). However, even though that would be quite easily doable for kanban and list views (unity specs), it wouldn't be the case for the other views (the SampleServer is shared between all views using sample data). So it would require non trivial architectural changes to make this work. For that reasons, we went for the easy fix, which is to adapt the props definition to support `false`, as the value was actually already correctly handled by the Component itself. runbot error~239951 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 resolves a problem in the Hong Kong payroll calendar that was causing errors when creating employees. The system incorrectly used US company data, leading to workflow disruptions. The fix sets company IDs to 'False' to use the standard work entry type, ensuring correct functionality.
Original PR description
The resource calendar for Hong Kong doesn't work well at the moment. When the data is loaded, it picks the company from the env (usually a US one during db initialization) and the country from it. Using that country, it deduces the work entry type for the attendance_ids. At the moment, the result is that HK calendar ends up with US work entries, causing access errors in certain flow. (e.g. With hr_contract_salary installed you can no longer create employees). The solution is to explicitly set the company_ids to False as done in other countries to have the generic work entry set and bypass the issue.
This update fixes a usability issue with drag-and-drop functionality, particularly when using nested elements like dropdowns. The change ensures smaller elements are preferred when overlapping, leading to a smoother and more intuitive user experience. It addresses a previous bug where larger dropzones were incorrectly prioritized.
Original PR description
This commit improves the drag and drop functionality by detecting the closest elements when dragging. The previous implementation only calculated distance when the cursor was outside the rectangle,…
This commit improves the drag and drop functionality by detecting the closest elements when dragging. The previous implementation only calculated distance when the cursor was outside the rectangle, returning 0 for any position inside. This caused issues with nested dropdowns: when a small dropdown is inside a larger one, the quadrance of the larger one would be 0, but since for the smaller one it is actually harder to place it perfectly inside, the distance would be non-zero, so the larger one would be preferred. The new implementation: - Handles rectangle-to-rectangle overlap detection using center distances - For non overlapping rectangles, returns correct quadrance - Returns negative normalized overlap ratio for overlapping elements, preferring smaller elements with similar overlap percentages - Supports both point queries (x, y) and rectangle queries (x, y, width, height) Steps to see the issue: - Open Website and start editing - Drop the `s_banner` snippet - Try to drop a button (or any other inner element) next to the existing button in the snippet => The experience is not the most user-friendly Old implementation: https://github.com/user-attachments/assets/507c0402-b855-46a7-938d-8f05d905dd3e New implementation: https://github.com/user-attachments/assets/34b352b4-e08a-4a7f-a2b5-2702ee8e63ef It might not look like an improvement in the video, but it feels actually easier now when trying to drag and drop to a relatively small dropzone. task-5794898
This update corrects a technical error within the HR holidays module that was causing incorrect calculations of working intervals. Specifically, the system was incorrectly mixing employee and resource IDs, leading to inaccurate holiday scheduling. This fix ensures accurate holiday calculations for all employees and resources.
Original PR description
Employee and resource ids were the same during testing. These were mixed in the function. runbot-240926 Note: https://github.com/odoo/odoo/pull/248661 aims to avoid such errors in the future --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249839
This update fixes a bug where inactive accounts were excluded from key financial reports (P&L, Balance Sheet, Accounts Coverage). The change adjusts how the system searches for accounts, now correctly including inactive ones in these reports. This ensures more accurate financial reporting.
Original PR description
Purpose: In P&L, Balance Sheet and Accounts Coverage Report, inactive accounts are not considered. Root cause: `deprecated` field on `account.account` is replaced with `active`, and orm search by default returns only active records. Solution: add `active_test=False` in the context. task- 5906024 Forward-Port-Of: odoo/enterprise#106956
This update addresses an issue where vendor bills received via Peppol as XML were missing a PDF attachment. Now, Odoo automatically generates and attaches a PDF when one isn't provided, allowing users to easily preview and verify the bill data. This improves usability and data validation.
Original PR description
Some vendor bills received via Peppol as XML do not include an attached PDF, preventing users from previewing the document and verifying the values parsed by Odoo. This commit generates and attaches a PDF when the XML does not provide one. task-5500236 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245577
This update prevents unnecessary errors from being raised when the Codabox sync process (CRON) encounters temporary issues. Previously, repeated errors would disable the process, even if the servers were functioning again. Now, errors are only reported when manually triggering the sync, ensuring a smoother and more reliable experience.
Original PR description
In case of a failure/downtime from the IAP/Codabox servers, an error is currently being raised. Although this is useful when manually clicking the Fetch button to see what happens, in the context of a CRON it's much less desirable as multiple failures from a CRON will automatically disable it which is not useful as the servers might be back up later on. Now, instead, we only raise if we're not in a CRON environment. opw-5922549 Forward-Port-Of: odoo/enterprise#107798
This update resolves an issue where users within the 'Planning / User' group couldn't take open shifts. The fix ensures that the 'I Take It' button is consistently displayed for these users, allowing them to seamlessly accept shifts within the Planning app. This improves the usability of the Planning feature for all users.
Original PR description
## Issue In the Planning app, users within the *Planning / User* groups could not take open shifts. The button *"I Take It"* would not be displayed when clicking on the shift. ## Steps to reproduce…
## Issue
In the Planning app, users within the *Planning / User* groups could not take open shifts. The button *"I Take It"* would not be displayed when clicking on the shift.
## Steps to reproduce
1. Install the *Planning* (`planning`) app
2. In the Planning app, as an admin, create and publish an open shift
3. Log in as a *User*, open the *Planning* app, and click on the open shift
4. **The _"I Take It"_ button is not displayed**
When logging in as a user who is **not** part of the *Planning / User* group, the *I Take It* button is displayed.
## Cause
The condition for the *I Take It* button to be displayed is the following:
https://github.com/odoo/enterprise/blob/301e3c40c3272a6ae89a1eb4387d7d244e1dc52c/planning/views/planning_views.xml#L282-L283
The condition that makes the button invisible is `not context.get('my_planning_action')`. When the user is part of *Planning / User*, the schedule they see when opening the *Planning* app is the *"Schedule by Resource"*, which has the following context:
https://github.com/odoo/enterprise/blob/301e3c40c3272a6ae89a1eb4387d7d244e1dc52c/planning/views/planning_views.xml#L716
When a user who **is not** part of the *Plannig / User* group opens the *Planning* app, they see their own schedule, where the context is different than in the first case:
https://github.com/odoo/enterprise/blob/301e3c40c3272a6ae89a1eb4387d7d244e1dc52c/planning/views/planning_views.xml#L636
Because the `my_planning_action` property is in the context (and all the other conditions are respected), the button is displayed.
opw-5451282
Forward-Port-Of: odoo/enterprise#104919This update ensures Odoo's Mexican payroll system accurately reflects the latest Social Security Law regarding minimum wage exemptions. Specifically, it correctly handles situations where an employee's earnings are below the minimum wage, zeroing out relevant deductions and tax contributions. This update maintains compliance and avoids potential errors in payroll reporting.
Original PR description
According to the Mexican Social Security Law, when an employee's total monthly earnings (including bonuses and commissions) are equal to or less than the monthly minimum wage (l10n_mx_daily_min_wage…
According to the Mexican Social Security Law, when an employee's total monthly earnings (including bonuses and commissions) are equal to or less than the monthly minimum wage (l10n_mx_daily_min_wage * 365 / 12), they are exempt from social security contributions and income tax, also they lost the subsidy benefit. - The next rules are zeroed out when the gross salary is equal or less than the minimum wage: - IMSS_EMPLOYEE: IMSS Total (Employee) - ISR: ISR (Income Tax) - SUBSIDY: Used Subsidy - IMSS_EMPLOYEE and ISR are omitted from the generated XML. - As the ISR is zero, the `totalDeducciones` attribute on the `nomina12:Nomina` node should be removed. - The SUBSIDY should be present in the `SubsidioCausado` attribute on the `nomina12:SubsidioAlEmpleo` node, but the `Importe` attribute on the `nomina12:OtroPago` node should be 0.0. This change requires updates to existing standard tests, as some previous test cases used amounts lower than the minimum wage. target: 19.0 task-5226971 Forward-Port-Of: odoo/enterprise#107712 Forward-Port-Of: odoo/enterprise#104668
This update significantly speeds up order processing within the Master Production Schedule (MPS) by optimizing how related product information is retrieved. Previously, the system was loading unnecessary data, leading to delays. Now, the system efficiently fetches only the required information, resulting in faster order fulfillment.
Original PR description
When traversing X2many fields (bom_ids, bom_line_ids) during prefetching in filtered, the _prefetch_ids data grew excessively. Prefetching bom lines pulled in IDs for lines belonging to all boms across all associated products, even though _skip_bom_line in this case only operates on the current product's context. Use prefetch() with no args to avoiding unnecessary record loading for unrelated boms. Benchmark: | |Before |After| |-----------------|-------|-----| |action_replenish |Timeout|577ms| Related ticket: opw-5928055 Forward-Port-Of: odoo/enterprise#107648
This update resolves a problem where CFDI-compliant invoices for Mexican companies were generating PDF reports with section lines that were too short, failing to properly display all invoice details. The fix ensures that the section line in the PDF accurately reflects the entire invoice, improving report accuracy and compliance. This impacts users generating invoices for Mexican businesses.
Original PR description
**STEP TO REPRODUCE** 1. Select a MX company. 2. Create an invoice for a MX company with a section. 3. Send the invoice via CFDI. 4. Notice the section line in the section pdf is no long enough and does not cover the lines below. opw-5501379 Forward-Port-Of: odoo/enterprise#106123
This update resolves a technical error that was preventing notifications from the signature field. The issue stemmed from a missing declaration in the notification service, which was causing an error. This fix ensures that signature field notifications function correctly.
Original PR description
The notification service is later used in this [method](https://github.com/odoo/odoo/blob/04f3473da52ec74f3955cadd58eb016537497d44/addons/web/static/src/views/fields/signature/signature_field.js#L120), but it was never declared so it was causing an error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249143 Forward-Port-Of: odoo/odoo#248602
This update fixes an issue where OCR-extracted expense amounts weren't correctly converting to the company's standard currency (USD). The change ensures that the 'Total' amount accurately reflects the receipt's original currency value, improving the reliability of expense reporting. This prevents incorrect financial calculations.
Original PR description
Steps to reproduce: 1. Initialize an expense with a foreign currency (e.g., EUR). 2. Trigger OCR extraction on a receipt with a specific total. 3. Observe that both 'Total In Currency' and 'Total' (USD) are set to the same value. 4. The exchange rate is forced to 1.0, ignoring the system's exchange rate. Cause: The _fill_document_with_results method assigned the OCR total to both 'total_amount_currency' and 'total_amount' as a placeholder. This triggered the field's inverse logic during the write() call, causing Odoo to treat the input as a manual exchange rate override of 1:1. Solution: Remove the 1:1 placeholder assignment. The method now explicitly calculates 'total_amount' using the _convert() helper once the currency is identified, ensuring the company currency total reflects the actual system exchange rate. opw-5437611 Forward-Port-Of: odoo/enterprise#108089 Forward-Port-Of: odoo/enterprise#107534
This update fixes a bug preventing users from searching the Colombian Daily Journal (Libro Diario) effectively. Previously, report lines were missing key information, causing the search bar to not function. The fix ensures all journal entries are searchable by move, partner, account, and label, improving reporting accuracy.
Original PR description
Steps to reproduce: 1. Open the Colombian Daily Journal (Libro Diario). 2. Type a move name or partner in the search bar. 3. Observe that no results are returned. Cause: Report lines were generated with an empty 'name' attribute. The accounting report framework uses this field for client-side filtering. Empty names make the search bar non-functional. Solution: Populate the 'name' field with move, partner, account, and label data. This enables the frontend search bar to match against these strings. opw-5495558 Forward-Port-Of: odoo/enterprise#106179
This update addresses an issue where the search bar in the Odoo iOS app was incorrectly clearing input when using a Korean keyboard and Safari. The fix prevents premature processing of search values during IME composition, ensuring accurate search functionality. This improvement specifically targets iOS devices.
Original PR description
Safari does not reliably set `KeyboardEvent.isComposing` during IME composition (e.g. Korean). As a result, the search value was processed too early and got cleared while composition was still in progress. Interestingly, the issue could not be reproduced with the Japanese keyboard, which appeared to behave correctly. See [1]. This commit adds an early return while composing to prevent interpreting the value prematurely. Since this is a targeted fix, it is applied only on iOS. Steps to reproduce: - Configure a Korean keyboard on an iPhone - Open a Sale Order - Focus the search bar - Type a character, then type a second one to combine them - The search input value gets reset [1] https://github.com/odoo/odoo/pull/222151 opw-5448385 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249473
This update resolves an issue where products created through the Services and Materials view were incorrectly assigned a default 'no' expense policy. The fix ensures these products now default to the standard 'sales_price' policy, aligning with expected sales accounting practices. This improves data accuracy and simplifies product costing.
Original PR description
This commit fixes an issue where products created from the `Services and Materials` view were assigned the default `no` expense policy. They should instead default to `sales_price` task-5490517 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that when a user unfollows a record in the inbox, all related notifications are automatically marked as read. This prevents a confusing situation where only one notification is marked as read, accurately reflecting the user's desire to stop following the conversation and improving the inbox's clarity.
Original PR description
**Description of the issue this PR addresses:** Previously, unfollowing a record from the inbox only marked the notification on which the action was performed as read. As a result, other unread notifications related to the same record remained in the inbox, even though unfollowing is a global action, indicating that the user is no longer interested in the entire conversation. **Desired behavior after PR is merged:** - Marks all notifications related to the same record as read when unfollowing from the inbox. - Ensures the inbox state accurately reflects the user’s intent to stop following the conversation. task-[5119331](https://www.odoo.com/odoo/project/1519/tasks/5119331) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an accounting error in Odoo's international tax reporting. Previously, the same account was used for both tax payable and receivable, leading to incorrect balance reporting. This change ensures that tax receivable balances are accurately reflected, improving accounting accuracy across various countries.
This update resolves an accounting error in the UK and Netherlands tax reporting by ensuring that tax receivable and payable accounts are distinct. Previously, the same account was used for both, leading to incorrect balance reporting. This change ensures accurate tax reporting and avoids potential accounting discrepancies.
This update improves the user experience by correcting the label for the GIF button within Odoo's email functionality. The change ensures a clearer and more intuitive way for users to attach GIFs to their emails. This is a minor improvement focused on usability.
Original PR description
task-5867464 (point 84) backport of https://github.com/odoo/odoo/pull/249459
This update resolves an incorrect reliance on Peppol BIS3 constraints within the RO and HR EDI modules. Previously, an unnecessary dependency caused issues with sending invoices, particularly to physical persons. This fix aligns the modules with the correct BIS3 specifications, ensuring proper invoice processing.
Original PR description
The CIUS RO and CIUS HR depends on the BIS3 which is fundamentally incorrect. This was probably made out of lazyness to redefine things that are almost the same in both these CIUS and the BIS3. Now, in previous PR [1], we added contraints for the Peppol BIS 3 that are impacting those formats. Indeed, the EndpointID can be empty in the context of CIUS RO and CIUS HR. In particular, it's breaking the sending to physical person at the moment. [1]: https://github.com/odoo/odoo/pull/246961 opw-5943698 Forward-Port-Of: odoo/odoo#249970 Forward-Port-Of: odoo/odoo#249089
This update resolves a bug where autofilling pivot cells with incorrect relational IDs caused the application to crash. The fix ensures that while the autofill process continues to function correctly, the associated tooltip functionality is stable, preventing unexpected errors. This improves the reliability of pivot table data entry.
Original PR description
If you try to autofill a pivot cell that has an invalid relational id in its domain (eg. `=PIVOT.HEADER(1, "stage_id", 99999999)`), the autofill actually works but the tooltip make everything crash. Task: [5913754](https://www.odoo.com/web#id=5913754&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#107807 Forward-Port-Of: odoo/enterprise#106601
This update significantly speeds up the loading of product pages by reducing unnecessary browser recalculations (reflows). The change optimizes how product variants are displayed, resulting in a 82% faster rendering and a 5.5x speedup, leading to a better customer experience.
Original PR description
**Issue:** Loading the shop page was slow due to excessive forced reflows. When a reflow occurs, the browser can't reuse the layout computed so far, and it's forced recalculate it again. **Cause:**…
**Issue:** Loading the shop page was slow due to excessive forced reflows. When a reflow occurs, the browser can't reuse the layout computed so far, and it's forced recalculate it again. **Cause:** In `updateVariantPreview`, the init loop wrote to the DOM (textContent, classList) then immediately read `offsetWidth` in the same iteration, forcing the browser to flush and recalculate layout once per product. This PR tackles the 2 areas of improvement identified: 1. Reduce reflows **number**. 2. Reduce reflows performance **cost**. [task-5177358](https://www.odoo.com/web#id=5177358&cids=1&menu_id=4720&action=333&active_id=1695&model=project.task&view_type=form) --- ### 1: Reduce reflows **number**. **Before this PR:** Phase 1 was a single loop mixing writes and reads, triggering N layout recalculations for N products on the page. | Performance Tab: CSS selectors & Advanced paint instr. active (slow) | |--------| | <img width="1847" height="650" alt="image" src="https://github.com/user-attachments/assets/91e86e91-1209-4865-bcbd-336f792664ed" /> | | Timing inflated by the debug environment | **After this PR** Phase 1 is split into two sub-loops. All writes first (1a) and all reads after (1b). So the browser flushes layout only once, regardless of product count, matching the batching pattern already used in phases 2 and 3. | Performance Tab: CSS selectors & Advanced paint instr. active (slow) | |--------| | <img width="1380" height="555" alt="image" src="https://github.com/user-attachments/assets/c0fefe32-d309-4fc8-a945-1a5f5c12b86e" /> | | Timing inflated by the debug environment | **Performance results** In a page with 21 products, 11 of which with variants, the number of reflows dropped from 12 to just 2, resulting on a 82% faster rendering, roughly a 5.5X speedup. --- ### 2: Reduce reflows performance **cost**. Reflows cannot be entirely avoided, but side-effects can be mitigated in CSS by instructing the browser how to react when this circumstance occurs. This PR add two rules to the products card: 1. `contain`: Tells the browser each product card is a layout containment boundary and inner changes "should not" affect elements outside. 2. `content-visibility`: Tells the browser to try skipping cards outside the viewport. Their layout will be eventually evaluated when cards scroll into view. **Performance result:** In a page with 21 products, 11 of which with variants, the performance cost of a single reflow dropped by 22%. _note: the browser is not obliged to honor these "suggestion" and may behave differently depending by the viewport size, the content and the browser itself._ --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249324
This update resolves an issue where users with the 'Project Manager' role couldn't access sale order lines, specifically within the inventory system. The fix adjusts security rules to ensure stock users, including those with the 'Project Manager' role, have the necessary permissions to view related sale order details. This improves usability for users managing stock and sales operations.
Original PR description
Users with the project_manager role and no access on sale cannot open stock moves Steps to reproduce: 1. Install Sales, Inventory and Project 2. Create a Sale order for any company with an address…
Users with the project_manager role and no access on sale cannot open stock moves Steps to reproduce: 1. Install Sales, Inventory and Project 2. Create a Sale order for any company with an address and any product and confirm it (a delivery should be automatically created) 3. Go to Settings > Users and open user Marc Demo 4. Set Marc Demo's role on Sales to "No" and on Project to "Administrator" 5. Log in as Marc Demo 6. Go to Inventory > Operations > Deliveries and try to access the delivery previously created 7. An error occurs Problem: https://github.com/odoo/odoo/blob/6b2d3af64a076654e04494972acc4c42d7c54bd8/addons/sale_stock/models/stock.py#L32-L38 stock.move's description is computed based on the related sale order lines which will cause an access error because users with role `project.group_project_manager` can only access sale order lines of projects or tasks because of this rule: https://github.com/odoo/odoo/blob/3909bef741ebb5c879beb383c395e1a310ba78eb/addons/sale_project/security/sale_project_security.xml#L4-L13 even though the group `stock.group_stock_user` are expected to always have read access to sale order lines because of this right: https://github.com/odoo/odoo/blob/3909bef741ebb5c879beb383c395e1a310ba78eb/addons/sale_stock/security/ir.model.access.csv#L6 Note that the issue doesn't happen when the user is a sale user because of this rule that adds the rights on sale order lines: https://github.com/odoo/odoo/blob/3909bef741ebb5c879beb383c395e1a310ba78eb/addons/sale/security/ir_rules.xml#L78-L83 This fix also solves the issue for `mrp.group_mrp_user` because they inherit the group `stock.group_stock_user`: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/mrp/security/mrp_security.xml#L11-L16 Therefore the rule on `project.group_project_manager` needs to be overridden when the user is a stock user Solution: Create a record rule with a truthy domain to force stock users to have access to sale order lines even if other rules remove this access opw-5492232 Forward-Port-Of: odoo/odoo#247529
This update fixes a visual issue where date pickers displayed arrows in the wrong direction when the website was viewed in RTL languages like Arabic. The fix ensures that date pickers correctly align with the language direction, providing a consistent and user-friendly experience for all users.
Original PR description
### Steps to reproduce: - Download Rental and eCommerce apps. - Install an RTL language (e.g., Arabic) on the website. - Create a rental and go to website. - Try to pick a date for the rental. ###…
### Steps to reproduce: - Download Rental and eCommerce apps. - Install an RTL language (e.g., Arabic) on the website. - Create a rental and go to website. - Try to pick a date for the rental. ### Issue: When the website is viewed in an RTL language, the navigation arrows of the date picker are displayed in the wrong direction. This happens because the date picker is not inside `o_rtl` component, but inside `o-main-components-container` component. So, when `o_rtl` is called in css (for example): https://github.com/odoo/odoo/blob/2264f330859b79010b227e3a9fda1075de8ed4e8/addons/web/static/lib/odoo_ui_icons/style.css#L67-L76 Since the arrows are not inside `o_rtl`, the transformation doesn't apply to them. ### Solution: The `o_rtl` class has been appended to `o-main-components-container` class in case of a RTL language, so that had the css file contain rules for `o_rtl`, they would be applied automatically. opw-5498615 Forward-Port-Of: odoo/odoo#249541 Forward-Port-Of: odoo/odoo#246190
This update fixes a bug where the MO search filter was unintentionally cleared when clicking the header of a manufacturing order. The change ensures that the filter remains active after interacting with the workorder, improving usability and streamlining the shopfloor search process. This resolves an issue caused by a previous update related to barcode scanning.
Original PR description
### Steps to reproduce: - Download MRP app. - Create a product and its corresponding BOM (including at least a single operation) - Create and confirm a manufacturing order for 1 unit of that product…
### Steps to reproduce: - Download MRP app. - Create a product and its corresponding BOM (including at least a single operation) - Create and confirm a manufacturing order for 1 unit of that product - Click on the Shop Floor smart button > Click on the header of the MO - The MO filter applied on the shopfloor search bar is removed ### Issue: The MO search filter is removed after you click the header of the workorder order. This bug was introduced by another commit https://github.com/odoo/enterprise/pull/94584/changes/c83ab24a8d037a339db8067c7e9794cba5c16eab to remove the filter when a workorder's barcode is scanned. Hence, https://github.com/odoo/enterprise/blob/67ff37a830202afb8c8914da6f7bc8d4972eefd4/mrp_workorder/static/src/mrp_display/mrp_display_record.js#L289-L292 the change resulted in the filter being removed every time the header is clicked. In the case where a user clicks to start the workorder, we need to keep the filter. ### Fix: Based on https://github.com/odoo/enterprise/blob/67ff37a830202afb8c8914da6f7bc8d4972eefd4/mrp_workorder/static/src/mrp_display/mrp_display_record.xml#L6-L8 `onClickHeader()` is called every time a shopfloor record is clicked, which (based on the reference in the previous section) removes the filter, then calls `startWorking()`. By removing `this.env.searchModel.removeMOFilter()` from this method, it's ensured that clicks preserve the user's current search context. For https://github.com/odoo/enterprise/blob/67ff37a830202afb8c8914da6f7bc8d4972eefd4/mrp_workorder/static/src/mrp_display/mrp_display.js#L248-L250 since the original workflow of removing the filter in case of a barcode scan should be kept, moving `removeMOFilter()` call here with the appropriate reference of `workorder.component.env.searchModel`matches the expected behaviour. opw-5877418 Forward-Port-Of: odoo/enterprise#107121
This update resolves a visual glitch preventing live chat visitors on mobile from adding reactions. The fix removes an outdated override of quick action counts, allowing the emoji picker to display properly. This ensures a smoother and more functional live chat experience for all users.
Original PR description
Before this commit, live chat visitors in mobile could not add a message reaction due to visual glitch. This happens because there's an override in livechat to show 3 quick message actions rather…
Before this commit, live chat visitors in mobile could not add a message reaction due to visual glitch. This happens because there's an override in livechat to show 3 quick message actions rather than 4, and this patch also applies in mobile where there's only 1 with the "..." button. The "Add reaction" message action in mobile, when shown as a quick action, is buggy: click on it glitches the visual of message in a way that disrupt the viewing of message... And this doesn't show the emoji picker. This commit fixes the issue by removing the override of quick action count of live chat visitors. This overrides was added a long time ago when the "Add reaction" and "View reactions" had the same icon, and playing with the amount of quick actions was a way to avoid showing these 2 actions as quick actions with similar icons [1]. Also quick actions in chat window has been tweaked to show 2 actions at most in desktop, which is the best presentation in chat window. Removal of the override let it use this better quick action count. [1]: https://github.com/odoo/odoo/pull/140335 Task-5953287 Before / After <img width="399" height="767" alt="Screenshot 2026-02-19 at 17 41 21" src="https://github.com/user-attachments/assets/4f1fb8e7-fa0b-4c8c-8f41-552432224064" /> <img width="401" height="771" alt="Screenshot 2026-02-19 at 17 56 20" src="https://github.com/user-attachments/assets/5aadc9df-d858-49ec-b894-d2c424396f54" /> Forward-Port-Of: odoo/odoo#249776 Forward-Port-Of: odoo/odoo#249550
This update fixes an issue where formatting links would create duplicate links and introduce formatting inconsistencies. The changes ensure links are treated as single units, wrapping selected text in a `<font>` tag for formatting, and also addresses issues with color classes and block splitting to improve the overall link editing experience.
Original PR description
Before this commit: when formatting partially a link, the link is split at the selection and formatted. This causes duplicated links. After this commit: we consider links are unsplittable, thus…
Before this commit: when formatting partially a link, the link is split at the selection and formatted. This causes duplicated links. After this commit: we consider links are unsplittable, thus formatting on links will wrap the selected part in a <font> tag. commit 2: [FIX] html_editor: solve infinite loop of links with color class Before this commit: we have a fix https://github.com/odoo/odoo/commit/96bc421d30f34a8bfc10dde93c2f283809a8a3e3 which to be able to remove the style classes in the link element After this commit: We don't consider the style class in the link element as `hasColor`, because the style classes come from the template code, which is hard-coded xml. Removing them, the user won't be able to add it back. For example, on a product page, edit the `Terms and conditions` link, do nothing and save, the muted color is forced removed. Note that another fix https://github.com/odoo/odoo/commit/f5fc55f19f89041c8391ff81b127ffce0898f89f is also removed cause it was a fix for https://github.com/odoo/odoo/commit/96bc421d30f34a8bfc10dde93c2f283809a8a3e3. The tests belonging to https://github.com/odoo/odoo/commit/96bc421d30f34a8bfc10dde93c2f283809a8a3e3 are adapted, and those of https://github.com/odoo/odoo/commit/f5fc55f19f89041c8391ff81b127ffce0898f89f are kept as future safeguards of list coloring. commit 3: [FIX] html_editor: extra check on targetnode when splitting blocks Before this commit: we only check if the current block to be split is splittable, but not the target node. After this commit: if the current block is splittable but the current target node is not, we won't split the block but insert a <br> commit 4: [FIX] html_editor: properly fill inlineAncestors when formatting Before this commit: when the parent node of the current node is unsplittable, the `inlineAncestors` stays empty. After this commit: we handle this case and push the parent node in the list when the parent node is fully selected. We also add a fully selected predicate in link_plugin for the case when the selection includes all the content (except for zws) of a non-button link task-5244810 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249470 Forward-Port-Of: odoo/odoo#241871
Documentation and clarification updates
This pull request confirms that the developer has signed a Corporate License Agreement (CLA) for Odoo. The change involves a documentation update to record this signature, ensuring compliance with Odoo's contribution guidelines. This is a standard legal process for contributing to the Odoo project.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248793
18 changes
Enhancements to existing features
This update optimizes the creation of global invoices in the Mexican tax system (l10n_mx_edi). By changing the wizard to a 'TransientModel,' data is no longer permanently stored in the database, streamlining the invoice creation process and reducing unnecessary storage. This change improves efficiency and performance.
Original PR description
Change to TransientModel so a wizard is not permanently stored in db when creating a global invoice. Forward-Port-Of: odoo/enterprise#107950 Forward-Port-Of: odoo/enterprise#107244
Resolved issues and error corrections
This update adds a new setting to the Odoo admin interface, allowing administrators to control the visibility of KPI data within email activities. Previously, this setting was missing, limiting administrative control. This change ensures administrators can properly manage KPI data visibility.
Original PR description
Introduced in ff941e6555c12918803db4a72511c9381cc58c31, the field `kpi_provider_visibility` was not added to the form view. With this commit, we add the field to the form view, so that the value can be changed by the administrator of the database. Task-id: [5167740](https://www.odoo.com/odoo/project.task/5167740)
This update improves the accuracy of company identification for Malaysian VAT records. The change ensures that VAT numbers starting with 'IG' are correctly flagged as non-company, based on a distinction made by TIN prefixes. This enhances compliance and reporting for Malaysian businesses using the Odoo system.
Original PR description
In this commit: - For Malaysia, TIN is distinguishable between an individual and a company by prefix - if vat starts with 'IG', 'is_company' should remain False Task [link](https://www.odoo.com/odoo/project.task/5912436) task-5912436
This update prevents unnecessary errors from being raised when the Codabox sync process (CRON) fails. This change improves stability by avoiding automatic disabling of the sync process due to temporary server issues, ensuring a smoother user experience.
Original PR description
In case of a failure/downtime from the IAP/Codabox servers, an error is currently being raised. Although this is useful when manually clicking the Fetch button to see what happens, in the context of a CRON it's much less desirable as multiple failures from a CRON will automatically disable it which is not useful as the servers might be back up later on. Now, instead, we only raise if we're not in a CRON environment. opw-5922549 Forward-Port-Of: odoo/enterprise#107798
This update resolves an issue where users within the 'Planning / User' group couldn't take open shifts. The fix ensures that the 'I Take It' button is consistently displayed for this group, allowing them to seamlessly accept shifts within the Planning app. This improves usability for a key group of users.
Original PR description
## Issue In the Planning app, users within the *Planning / User* groups could not take open shifts. The button *"I Take It"* would not be displayed when clicking on the shift. ## Steps to reproduce…
## Issue
In the Planning app, users within the *Planning / User* groups could not take open shifts. The button *"I Take It"* would not be displayed when clicking on the shift.
## Steps to reproduce
1. Install the *Planning* (`planning`) app
2. In the Planning app, as an admin, create and publish an open shift
3. Log in as a *User*, open the *Planning* app, and click on the open shift
4. **The _"I Take It"_ button is not displayed**
When logging in as a user who is **not** part of the *Planning / User* group, the *I Take It* button is displayed.
## Cause
The condition for the *I Take It* button to be displayed is the following:
https://github.com/odoo/enterprise/blob/301e3c40c3272a6ae89a1eb4387d7d244e1dc52c/planning/views/planning_views.xml#L282-L283
The condition that makes the button invisible is `not context.get('my_planning_action')`. When the user is part of *Planning / User*, the schedule they see when opening the *Planning* app is the *"Schedule by Resource"*, which has the following context:
https://github.com/odoo/enterprise/blob/301e3c40c3272a6ae89a1eb4387d7d244e1dc52c/planning/views/planning_views.xml#L716
When a user who **is not** part of the *Plannig / User* group opens the *Planning* app, they see their own schedule, where the context is different than in the first case:
https://github.com/odoo/enterprise/blob/301e3c40c3272a6ae89a1eb4387d7d244e1dc52c/planning/views/planning_views.xml#L636
Because the `my_planning_action` property is in the context (and all the other conditions are respected), the button is displayed.
opw-5451282
Forward-Port-Of: odoo/enterprise#104919This update resolves an issue where an unnecessary 'add inputs' button was appearing on Swiss payroll payslips. This change improves the user experience for Swiss users by simplifying the payslip view and ensuring a cleaner presentation. The fix addresses a minor visual inconsistency.
Original PR description
don't show add inputs button on payslips on the swiss localization. Forward-Port-Of: odoo/enterprise#107958
This update improves the speed of changing order stages in the Point of Sale (POS) system. By separating customer display calculations and optimizing database queries, the system now responds much quicker when switching between order stages, leading to a better user experience. These changes address a previous performance bottleneck.
Original PR description
Before this commit when a lot of orders were in the preparation display and when clicking on an order to change its stage, it was very slow because we were doing the customer display computation directly. Now we compute customer display data in a separate RPC call, and we only call it when the customer display receives a notification of new orders, which makes the stage change much faster. The `_get_pos_orders` is updated to avoid an O(n²) loop; The `_get_open_orderlines_in_display` is updated to avoid deep joins. Forward-Port-Of: odoo/enterprise#107727
This update fixes a display issue in the Point of Sale product information popup. Previously, the 'Financials' section incorrectly showed the tax identification number ('RFC') instead of the correct tax name ('VAT' or 'IVA'). This change ensures accurate tax labeling for products, improving clarity and compliance for users.
Original PR description
How to reproduce; - Use a company from a country with a different vat_label (Mexico for example) - Go to the frontend of POS - Select a product > ... > Info The problem: Under the "Financials" section, "RFC" is displayed instead of "VAT" or "IVA". RFC is the tax identification number, not the tax name Why: This commit (https://github.com/odoo/odoo/commit/4fa9f9b849016f312efcb73f9a76b223e429aec0) introduced the usage of vat_label to display the tax name in a dynamic way. However, the vat_label field is used to store the tax identification number, not the tax name opw-5915087 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247618
This update resolves a problem where CFDI-compliant invoices generated for Mexican companies were producing PDF reports with incorrectly sized section lines. The report now accurately displays all invoice details, ensuring compliance with Mexican tax regulations and avoiding potential errors in invoice processing. This fix improves the accuracy and reliability of our Mexican accounting module.
Original PR description
**STEP TO REPRODUCE** 1. Select a MX company. 2. Create an invoice for a MX company with a section. 3. Send the invoice via CFDI. 4. Notice the section line in the section pdf is no long enough and does not cover the lines below. opw-5501379 Forward-Port-Of: odoo/enterprise#106123
This update resolves an issue where the 'Update Prices' button disappeared after saving a quotation. The fix adds a field to the view that correctly maintains the button's visibility, ensuring users can easily adjust prices when needed. This improves the sales process flow.
Original PR description
Steps to produce: --- - Install sales module. - Go to Settings and enable Pricelists (make sure we have 2 pricelists so that we able to change the pricelist value in quotation). - Create a new…
Steps to produce: --- - Install sales module. - Go to Settings and enable Pricelists (make sure we have 2 pricelists so that we able to change the pricelist value in quotation). - Create a new quotation > Add a customer and product. - Change the pricelist. - Save the record. Issue: --- - After saving the quotation, the `Update Prices` button becomes invisible. Root cause: --- - The field `show_update_pricelist`, which controls the visibility of the button, is not present in the view. As a result, when the record is saved, the field is not included in the form data and its value is not properly maintained, causing the button to become invisible. - The field is removed from the view in this [commit]. Solution: --- - Added the `show_update_pricelist` field to the view to ensure its value is properly maintained. This allows the `Update Prices` button to remain visible when applicable. [commit]: https://github.com/odoo/odoo/commit/da4b588b272432095f549c012e0a0d7238f00dc0 **Enterprice PR:** https://github.com/odoo/enterprise/pull/107621 opw-5927659 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248957
This update resolves an issue where the 'Update Rental Prices' button disappeared after saving a rental order. The fix adds a field to the view that ensures the button remains visible when a rental period is changed, streamlining the rental order management process. This ensures users can easily adjust rental prices as needed.
Original PR description
Steps to produce: --- - Install `sale_renting` module. - Rental > Open any order > Change the rental period. - Save the record. Issue: --- - After saving the order, the `Update Rental Prices` button becomes invisible. Root cause: --- - The field `show_update_duration`, which controls the visibility of the button, is not present in the view. As a result, when the record is saved, the field is not included in the form data and its value is not properly maintained, causing the button to become invisible. - The field is removed from the view in this [commit]. Solution: --- - Added the `show_update_duration` field to the view to ensure its value is properly maintained. This allows the `Update Rental Prices` button to remain visible when applicable. [commit]: https://github.com/odoo/enterprise/commit/b90bbdef10a7a37fb065626ba995811ab388c7a1 opw-5937145 --- Forward-Port-Of: odoo/enterprise#107621
This update corrects a bug in Odoo's stock accounting calculations (AVCO compute) that was causing errors when products didn't have any associated stock movements. The change ensures the system handles this scenario gracefully, preventing errors and improving overall stability. This resolves an internal issue impacting product tracking.
Original PR description
PR [247625](https://github.com/odoo/odoo/pull/247625) improved performance of the AVCO computation with `_run_average_batch()`. However, it's currently possible that the method returns an empty dictionary if a product does not have any stock move associated with it. It then raises a traceback in `_run_avco()` because we expect the dictionary to always hold the product id keys. Ticket: opw-5951133 Forward-Port-Of: odoo/odoo#249735
This update resolves a technical issue that caused errors when exporting sales orders traveling between countries in Europe. The fix ensures the system correctly identifies if an invoice is involved during the export process, preventing a traceback and ensuring smooth order fulfillment. This improves reliability for international sales.
Original PR description
…e_date' When exporting an SO, we got a traceback when the goods are traveling inside Europe in 2 differents countries because that part of the code was not checking an invoice was involved or not. opw-5959874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250066
This update resolves an issue where users with the 'Project Manager' role couldn't access sales order details related to deliveries. The fix adjusts security rules to ensure stock users, including those with the 'Project Manager' role, have the necessary permissions to view sale order lines. This ensures smooth operation for users managing inventory and sales.
Original PR description
Users with the project_manager role and no access on sale cannot open stock moves Steps to reproduce: 1. Install Sales, Inventory and Project 2. Create a Sale order for any company with an address…
Users with the project_manager role and no access on sale cannot open stock moves Steps to reproduce: 1. Install Sales, Inventory and Project 2. Create a Sale order for any company with an address and any product and confirm it (a delivery should be automatically created) 3. Go to Settings > Users and open user Marc Demo 4. Set Marc Demo's role on Sales to "No" and on Project to "Administrator" 5. Log in as Marc Demo 6. Go to Inventory > Operations > Deliveries and try to access the delivery previously created 7. An error occurs Problem: https://github.com/odoo/odoo/blob/6b2d3af64a076654e04494972acc4c42d7c54bd8/addons/sale_stock/models/stock.py#L32-L38 stock.move's description is computed based on the related sale order lines which will cause an access error because users with role `project.group_project_manager` can only access sale order lines of projects or tasks because of this rule: https://github.com/odoo/odoo/blob/3909bef741ebb5c879beb383c395e1a310ba78eb/addons/sale_project/security/sale_project_security.xml#L4-L13 even though the group `stock.group_stock_user` are expected to always have read access to sale order lines because of this right: https://github.com/odoo/odoo/blob/3909bef741ebb5c879beb383c395e1a310ba78eb/addons/sale_stock/security/ir.model.access.csv#L6 Note that the issue doesn't happen when the user is a sale user because of this rule that adds the rights on sale order lines: https://github.com/odoo/odoo/blob/3909bef741ebb5c879beb383c395e1a310ba78eb/addons/sale/security/ir_rules.xml#L78-L83 This fix also solves the issue for `mrp.group_mrp_user` because they inherit the group `stock.group_stock_user`: https://github.com/odoo/odoo/blob/cda011dc8590773f6c3a26f4ae9d5242a3147024/addons/mrp/security/mrp_security.xml#L11-L16 Therefore the rule on `project.group_project_manager` needs to be overridden when the user is a stock user Solution: Create a record rule with a truthy domain to force stock users to have access to sale order lines even if other rules remove this access opw-5492232 Forward-Port-Of: odoo/odoo#247529
This update fixes a visual issue where date picker arrows appeared mirrored when the website was displayed in RTL languages like Arabic. The fix ensures that date pickers correctly align with the user's language direction, improving usability for international users. This was achieved by adding the necessary styling to the main container component.
Original PR description
### Steps to reproduce: - Download Rental and eCommerce apps. - Install an RTL language (e.g., Arabic) on the website. - Create a rental and go to website. - Try to pick a date for the rental. ###…
### Steps to reproduce: - Download Rental and eCommerce apps. - Install an RTL language (e.g., Arabic) on the website. - Create a rental and go to website. - Try to pick a date for the rental. ### Issue: When the website is viewed in an RTL language, the navigation arrows of the date picker are displayed in the wrong direction. This happens because the date picker is not inside `o_rtl` component, but inside `o-main-components-container` component. So, when `o_rtl` is called in css (for example): https://github.com/odoo/odoo/blob/2264f330859b79010b227e3a9fda1075de8ed4e8/addons/web/static/lib/odoo_ui_icons/style.css#L67-L76 Since the arrows are not inside `o_rtl`, the transformation doesn't apply to them. ### Solution: The `o_rtl` class has been appended to `o-main-components-container` class in case of a RTL language, so that had the css file contain rules for `o_rtl`, they would be applied automatically. opw-5498615 Forward-Port-Of: odoo/odoo#249541 Forward-Port-Of: odoo/odoo#246190
This update ensures the MO filter remains active in the shopfloor search bar after a user clicks on a manufacturing order's header. Previously, clicking the header would remove the filter, causing inconvenience. This fix corrects a bug introduced during a previous update related to barcode scanning, maintaining the user's intended search context.
Original PR description
### Steps to reproduce: - Download MRP app. - Create a product and its corresponding BOM (including at least a single operation) - Create and confirm a manufacturing order for 1 unit of that product…
### Steps to reproduce: - Download MRP app. - Create a product and its corresponding BOM (including at least a single operation) - Create and confirm a manufacturing order for 1 unit of that product - Click on the Shop Floor smart button > Click on the header of the MO - The MO filter applied on the shopfloor search bar is removed ### Issue: The MO search filter is removed after you click the header of the workorder order. This bug was introduced by another commit https://github.com/odoo/enterprise/pull/94584/changes/c83ab24a8d037a339db8067c7e9794cba5c16eab to remove the filter when a workorder's barcode is scanned. Hence, https://github.com/odoo/enterprise/blob/67ff37a830202afb8c8914da6f7bc8d4972eefd4/mrp_workorder/static/src/mrp_display/mrp_display_record.js#L289-L292 the change resulted in the filter being removed every time the header is clicked. In the case where a user clicks to start the workorder, we need to keep the filter. ### Fix: Based on https://github.com/odoo/enterprise/blob/67ff37a830202afb8c8914da6f7bc8d4972eefd4/mrp_workorder/static/src/mrp_display/mrp_display_record.xml#L6-L8 `onClickHeader()` is called every time a shopfloor record is clicked, which (based on the reference in the previous section) removes the filter, then calls `startWorking()`. By removing `this.env.searchModel.removeMOFilter()` from this method, it's ensured that clicks preserve the user's current search context. For https://github.com/odoo/enterprise/blob/67ff37a830202afb8c8914da6f7bc8d4972eefd4/mrp_workorder/static/src/mrp_display/mrp_display.js#L248-L250 since the original workflow of removing the filter in case of a barcode scan should be kept, moving `removeMOFilter()` call here with the appropriate reference of `workorder.component.env.searchModel`matches the expected behaviour. opw-5877418 Forward-Port-Of: odoo/enterprise#107121
This update resolves an issue where purchase receipts for kits with different unit of measure categories would fail due to a calculation error. The fix ensures accurate quantity calculations for kit receipts, particularly when the purchase currency differs from the company currency, preventing receipt validation failures.
Original PR description
Steps to reproduce ------------------ 1. Enable Units of Measure and Automatic Valuation. 2. Create: Product KIT, stockable, UoM category Unit, UoM = Units. BoM for KIT with at least one component…
Steps to reproduce
------------------
1. Enable Units of Measure and Automatic Valuation.
2. Create:
Product KIT, stockable, UoM category Unit, UoM = Units.
BoM for KIT with at least one component whose UoM is in a different
category (e.g. m from Length).
3. Go to the product's category and set the Costing Method to Average
Cost (AVCO) and the Inventory Valuation to Automated.
4. Create a PO for KIT in a currency different from the company currency.
5. Confirm the PO and validate the receipt.
Issue
-----
Validating the receipt raises:
> The unit of measure m defined on the order line doesn't belong to the
> same category as the unit of measure kit defined on the product…
If you keep the PO currency equal to the company currency, the same kit
and BoM work and the receipt posts correctly.
Cause of the issue
------------------
Validating the receipt will call the `_action_done` of stock.move's and generate the related accounting entries. During this call and the currency of the PO is different from the company currency the `_generate_valuation_lines_data` will call the `_get_currency_convert_date` method:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L134-L140
This call will in turn call the `_get_qty_received_without_self`:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L121-L122
which was not written to handle kit products since it assumes that the product of the PO is the same as the one of the related move:
https://github.com/odoo/odoo/blob/751d54207c6214a25a5a1def57137e2f2f9106e3/addons/purchase_stock/models/stock_move.py#L102-L108
Fix
---
The qty_received is relevant to the _get_currency_convert_date as the method compares the qty_invoiced with the qty_received to determine whether to use the Invoice Date (when qty_invoiced > qty_received) or the Receipt Date.
https://github.com/odoo/odoo/blob/888e086dc6c7823b07993e90f70e2849e988fa7a/addons/purchase_stock/models/stock_move.py#L122-L126
For kits, `qty_received` must be calculated by aggregating component
moves to accurately determine this status. Since the standard logic
crashes due to UoM mismatch, the override in `purchase_mrp` is
necessary to provide the correct quantity for this date selection.
opw-5030761
Forward-Port-Of: odoo/odoo#248883
Forward-Port-Of: odoo/odoo#236276Documentation and clarification updates
This pull request confirms that the developer has signed a Corporate License Agreement (CLA) for Odoo. The change involves updating documentation to reflect this legal compliance. This ensures Odoo's continued development aligns with its licensing terms.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248793
2 changes
Resolved issues and error corrections
This update corrects a previous issue where GL reports were incorrectly filtering based on AML labels instead of account names. Previously, searching for an account wouldn't always return the correct lines. This change ensures GL reports accurately filter by the specified account name, improving report accuracy and usability.
Original PR description
Since 235a5160d13296328b79e4092a8b88a733628268, the GL reports line names are set from the amls name instead of the account name. This leads to wrong behavior when trying to filter the GL, either by using the search bar or opening the GL from a P&L line. Steps: - Create a move with a line using account 442000 for example - Create another move with no line using 442000 account - Set label of one line to be containing "442000" - Go to GL and input '442000' in the search bar -> The line with label '442000' in displayed This commit set the report line's name from the account name instead of the aml's name opw-5070801
This update resolves an issue where data related to Dian tax calculations (l10n_co_dian) was being reset unexpectedly. The fix ensures that key data elements are properly flushed, maintaining accurate accounting records for users in Colombia. This improves the reliability of financial reporting.
Original PR description
task-5500236
10 changes
Resolved issues and error corrections
This update ensures that all event registration answers, including free-text responses, are correctly synchronized during the payment process. Previously, only selection-based answers were sent, leading to data loss. This fix corrects a technical issue related to how event registration data is handled, improving the reliability of event ticket sales through POS.
Original PR description
## Steps to reproduce: - Configure event registration with only free-text fields (no selection field). - Open the POS, add an event ticket product, and fill in the registration form. - Click Payment…
## Steps to reproduce: - Configure event registration with only free-text fields (no selection field). - Open the POS, add an event ticket product, and fill in the registration form. - Click Payment and validate the order. ## Issue: - Registration answers were only sent to the backend when at least one selection-type question was filled. - When no selection field was present, free-text answers were not synced at all. ## Reason: - The `registration_answer_ids` and `registration_answer_choice_ids` One2many fields on EventRegistration both point to the same `registration_id` Many2one field on EventRegistrationAnswer. https://github.com/odoo/odoo/blob/c738d049fe09101bd14dce0710c2659a4a6eca39/addons/event/models/event_registration.py#L83-L85 - This caused data loss during the POS model synchronization, as entries were overwritten in the `inverseMap`. https://github.com/odoo/odoo/blob/c738d049fe09101bd14dce0710c2659a4a6eca39/addons/point_of_sale/static/src/app/models/related_models/model_defs.js#L59-L75 ## Fix: - Send all registration answers (free-text and selection-based) exclusively via `registration_answer_choice_ids`. task-5438565
This update corrects a minor oversight in the system's invoice matching tolerance settings. The change ensures accurate reconciliation of bank statements with invoices, preventing potential discrepancies and improving financial reporting. This fix addresses a technical detail that could have impacted data accuracy.
Original PR description
During this commit:https://github.com/odoo/enterprise/commit/15d26e62f14bb0224712a1712b47ebe16c3b8702 we forgot to change one part of the hardcoded tolerance. task-5952881
This update prevents test instability caused by unintentionally adding methods to models during testing. The change ensures that tests run reliably by enforcing the use of patchers for test-specific method modifications, avoiding conflicts between tests. This improves overall system stability and reduces the risk of unexpected behavior.
Original PR description
Setting methods on models during tests and not removing them afterwards can cause misbehaviour of other tests. Setting mock or test-specific methods is not an issue but it should be done via patchers. https://runbot.odoo.com/odoo/error/237983 Forward-Port-Of: odoo/odoo#249005 Forward-Port-Of: odoo/odoo#247151
This update resolves an issue where test patches within Odoo models were causing instability. The team has moved these patches to the instance level, aligning with best practices and addressing a detection error. This improves the reliability of our testing process.
Original PR description
Otherwise they trip the on-test-side-effect-detector (at least in its current incarnation). Forward-Port-Of: odoo/enterprise#107653 Forward-Port-Of: odoo/enterprise#106948
This update resolves a problem where products weren't loading correctly when switching between companies within the POS Loyalty module. The fix prevents errors caused by trying to load products directly, ensuring all products are accessible regardless of the company setting. This improves the reliability of the POS Loyalty system.
Original PR description
Step to reproduce - install `pos_loyalty` and have two companies - for this record: `loyalty.gift_card_product_50` set company_id = company1 - switch to company b and start pos Observation: - no products are loaded Cause: - `browse()` was used to load records `gift_card_product_50` and `ewallet_product_50` - when any of them is restricted on one company it fails to load whole model Fix: - Instead of directly loading them, we use `search()` to avoid `AccessError` so that rest of the products can be loaded. - Gift card is still not shown as expected opw-5449466 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a previous issue where searching for archived accounts didn't display their associated journal entries. Now, users can view all journal items, regardless of whether an account is archived, providing a more complete financial record. This improves reporting and analysis accuracy.
Original PR description
This commit makes it possible to see the journal items for archived account when searching for the account. Previously, when searching for an account that is archived, its journal items weren't shown. task-5905559 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a bug where internal users were incorrectly assigned as suppliers when forwarding supplier invoices. This issue was causing disruptions in the OCR (Optical Character Recognition) process, which relies on automatic data population from invoices. The fix ensures invoices are correctly linked to existing suppliers, maintaining the integrity of the OCR workflow.
Original PR description
Currently we have an issue with OCR flow, where if internal users forward an email from an internal email address, the internal user is added as vendor Steps to reproduce: - Setup email alias for journal "Purchases" - From an internal user email, forward a supplier bill to the vendor bill alias Issue: If the supplier is not already a registered partner, the bill will be created with the internal user set as partner. This will break OCR flow where the missing document fields will be auto populated from the bill opw-5487368
This update resolves an issue where stock quantities were being rounded incorrectly when scanning barcodes on delivery orders. Specifically, the system was adding too little stock, leading to discrepancies in order fulfillment. This ensures more accurate stock tracking and reduces the risk of order errors.
Original PR description
To reproduce the issue: - Create a stock quantity of product1 for example of 275.84 kg in PACK1 - Create a delivery order of 3.6 kg - Go to the delivery order on stock barcode - Scan PACK1 - The new line is created as 272.2399999999 Forward-Port-Of: odoo/enterprise#107933 Forward-Port-Of: odoo/enterprise#89300
This update resolves an issue preventing custom fields from being added to attendee registration forms. Previously, a change in the system required a specific data type for registration fields, causing errors. This fix allows for more flexible customization of the registration process, enabling developers to easily add and manage additional attendee information without impacting core functionality.
Original PR description
Before the addition of identification questions like "name", "email", and "phone" in the commit [1] as event questions instead of having them static, we could add custom data, such as fields for the address, with static inputs in the form. After that addition, it's no longer possible because the registration gives us the following error when trying to convert data that isn't a M2o ID or an Integer value:
invalid literal for int() with base 10
By adding the check for the field's type, we can still add custom fields with static fields in the template, as an alternative, given that there's no question type for other fields.
[1]: https://github.com/odoo/odoo/commit/6b8daa880c
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#244378Documentation and clarification updates
This pull request confirms that the developer has signed a Corporate License Agreement (CLA) for Odoo. The change involves a documentation update to record this signature, ensuring compliance with Odoo's contribution guidelines. This is a standard legal process for contributions to the Odoo project.
Original PR description
@pedrobaeza --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248793
4 changes
Enhancements to existing features
This update adds a new feature to the helpdesk timesheet wizard, allowing other Odoo modules to dynamically adjust timesheet values. This provides greater flexibility and control over timesheet data, streamlining the process for support teams. It builds upon previous work to enhance the overall timesheet management experience.
Original PR description
Add a hook in helpdesk_timesheet timer wizard for other modules to modify timesheet values. Forward-Port-Of: odoo/enterprise#107301
Resolved issues and error corrections
This update prevents unnecessary errors from being raised when the Codabox sync process (CRON) encounters a temporary issue. Previously, repeated errors would disable the sync, even if the servers were functioning again. Now, errors are only reported when not running in a CRON environment, ensuring a smoother and more reliable process.
Original PR description
In case of a failure/downtime from the IAP/Codabox servers, an error is currently being raised. Although this is useful when manually clicking the Fetch button to see what happens, in the context of a CRON it's much less desirable as multiple failures from a CRON will automatically disable it which is not useful as the servers might be back up later on. Now, instead, we only raise if we're not in a CRON environment. opw-5922549 Forward-Port-Of: odoo/enterprise#107798
This update fixes an issue where the VAT Book download was only generating for the primary company. Now, when multiple branches with the same CUIT are selected, the VAT Book will include data for all of them, ensuring accurate reporting for multi-branch businesses. This improves the reliability of tax reporting for our Argentinian clients.
Original PR description
#### Issues: VAT Book should download for all selected companies with same CUIT as the current one. #### Step to reproduce: - In a company in Argentina ("Parent Company") - Create a branch "Child…
#### Issues:
VAT Book should download for all selected companies with same CUIT as the current one.
#### Step to reproduce:
- In a company in Argentina ("Parent Company")
- Create a branch "Child Company A" with no CUID
- Create a branch "Child Company B" with a different CUID than parent
- Go to "Child Company A"
- Either:
- i. Select both "Parent Company" and "Child Company A" but not "Child Company B"
- ii. Select all 3 "Parent Company", "Child Company A" and "Child Company B"
- In Accounting > Report > Tax Return :
- Download the VAT Book (wheel > "VAT book(ZIP)")
#### Current behavior:
i. Get Invalid Operation
ii. Download the VAT Book for "Parent Company" only
#### Expected behavior:
- Download the VAT Book for both "Parent Company" and "Child Company A"
A previous call to get_options provide the client with the info about which selected companies have the same CUIT as the current company. Therefore companies in the options are the correct ones.
opw-5385585This update corrects a bug where OCR processing was incorrectly applied to split expenses, leading to increased usage of paid image processing services (IAP) and unexpected costs for users. The fix ensures OCR is only performed on the original expense document, optimizing resource usage and preventing unnecessary charges, especially when automatic digitization is active.
Original PR description
OCR should only be performed on the original document. Enabling it on splits leads to redundant OCR requests and unnecessary IAP credit consumption. This is particularly important when automatic digitization is enabled, as it triggers a paid request for every split generated, leading to unexpected costs for the user. The same bug was fixed in version 19.0 and up (commit 0688575), but it couldn't be backported as the `split_expense_origin_id` field doesn't exist in version 18.0. opw-[5930791](https://www.odoo.com/odoo/project/2068/tasks/5930791) Forward-Port-Of: odoo/enterprise#107789
10 changes
Enhancements to existing features
This update enhances the internal organization of Odoo's IoT driver code by clearly defining the types of key objects used. Making the `Interface` class abstract improves code clarity and maintainability. This change supports ongoing development and future enhancements to the IoT functionality.
Original PR description
To ease development, we typed `drivers`, `iot_devices`, and `interfaces` objects. This commit also makes `Interface` inherit from ABC in order to make it clearer that it's abstract. see odoo/odoo#236772
This update simplifies how holiday accrual plans are configured, making it clearer that users can reset accrued time without it carrying over. The changes remove confusing options and always display the date for resetting accruals, improving the user experience and reducing potential misinterpretations.
Original PR description
Description of the issue/feature this PR addresses: . When configuring an accrual plan, users may want no carry-over of accrued days, while still ensuring that accrued balances expire or reset on a…
Description of the issue/feature this PR addresses: . When configuring an accrual plan, users may want no carry-over of accrued days, while still ensuring that accrued balances expire or reset on a specific date (for example, at the allocation start or on a fixed annual date). . This task aims to make the configuration explicit, intuitive, and self-explanatory, without changing the underlying behavior. Current behavior before PR: The UI implicitly ties the ability to set an expiry/reset date to enabling carry-over, which misleads users into believing that this is a functional limitation in v19.0. In reality, the system supports this behavior, but only through a non-intuitive configuration that forces users to enable carry-over and then mark it as lost at a milestone. Desired behavior after PR is merged: . Remove can_be_carryover boolean field with accrued_gain_action selection . Always show the carryover_ date selection field . Hide carry-over options in case of lost accrued time task-5468596
This update ensures that unpublished badges across the Odoo website modules are now consistent, aligning with recent community changes. This improves the overall user experience and maintains a unified brand image for our website.
Original PR description
Following the changes in community, the goal is to make unpublished badges consistent across website modules. task-5136516 Related: https://github.com/odoo/odoo/pull/239842
This update enhances the survey results displayed in spreadsheets by adding a 'status' column to indicate the response state. It also includes a style update to the survey results table for better readability. This improves the clarity and usability of survey data reporting.
Original PR description
Wiht this commit, the `ODOO.SURVEY` function also returns a new column with the state of each survey response in the spreadsheet results. It also adds a table to improve the style of the survey results in the spreadsheet. Task: [5908771](https://www.odoo.com/web#id=5908771&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
Resolved issues and error corrections
This pull request resolves a minor issue within the account reports audit tour, ensuring the tour functions correctly. The fix corrects a problem that was preventing the tour from completing successfully. This update improves the user experience for account reporting.
This update resolves a bug in a test tour for the payroll attendance module. The tour was incorrectly triggering a search that caused unexpected behavior. The fix streamlines the tour process by directly selecting the correct employee, eliminating unnecessary searching and ensuring consistent test results.
Original PR description
runbot-error-id~238494
This update resolves a technical issue that previously caused the AI field cron job to fail. By correctly handling expected exceptions, the cron job is now more reliable and stable, ensuring consistent operation of the AI field functionality. This improves the overall performance and dependability of the Enterprise module.
Original PR description
This commit updates the exception handling to correctly catch the expected exception. Task-5894552
This update resolves a bug in the Peruvian reporting module's test cases. A recent change introduced incorrect tax settings into test expense accounts, causing test failures. This commit corrects the default expense account used in tests, ensuring accurate test results and maintaining the integrity of the reporting functionality.
Original PR description
In the community PR for l10n_pe https://github.com/odoo/odoo/pull/240831 , some new expense accounts are added and some existing accounts are modified. This change added default tax to the expense accounts which was being used in test cases for `l10n_pe_reports_lib`. Due to this, a new tax line was added in line_ids, and certain tests were failing since tax line was not at all taken into consideration. This commit updates default expense account to another account without any default tax for tests. Task [link](https://www.odoo.com/odoo/project.task/5149253) task-5149253
Features or functions removed from Odoo
This update removes outdated and unused CSS styles related to displaying 'no content' messages across various Odoo modules. This cleanup improves code organization and reduces potential conflicts, ensuring a cleaner and more efficient user experience. The changes also address a conflict between generic and custom 'no content' classes.
Original PR description
In this PR we remove the overrides which extended `%o-nocontent-empty-document` which has been dropped in the PR of the same name in the community repo. task-5136210 Community PR:
This update removes an unused parameter ('next_groupby') from Odoo's report engines, streamlining the configuration and improving efficiency. The change also eliminates redundant checks within the engines, resulting in a cleaner codebase. This improves maintainability and performance.
Original PR description
We removed count_rows which used the next_groupby by using a custom engine where they specify their next_groupby directly instead. Since next_groupby isn't used anywhere else in the engines, we can remove this parameter (for the engines)! Also removed redondant calls to _check_groupby_fields in custom engines where it would be called by _compute_formula_batch_with_engine_custom before calling the function. task-5145246 Forward-Port-Of: odoo/enterprise#97085
6 changes
Enhancements to existing features
This update enhances how Odoo extracts amounts from bank statements (like CODA files). It now supports bank statements that use continuous digits without decimal points, automatically converting them to decimal values. This simplifies reconciliation and reduces manual data entry for users importing bank statement data.
Original PR description
Update the reconciliation logic of reco models to support regex patterns using named capture groups 'integer' and 'fraction'. This is specifically designed for cases where bank statement labels (like CODA files) provide amounts in cents i.e continuous string of digits without a decimal separator. The logic now: - Prioritizes 'integer' and 'fraction' named groups if present in the match. - Concatenates these groups with a decimal point to form a valid float. - Falls back to the standard digit extraction logic if named groups are not found. So now if user wants the amount to be extracted in decimal values from label then user needs to add regex which supports two groups 'integer' and 'fraction'. Community PR: odoo/odoo#242750 Task [link](https://www.odoo.com/odoo/project.task/5449413) Task-5449413
This update addresses usability issues on the mobile bank reconciliation widget. Specifically, it optimizes the layout to better fit smaller screens by moving the chat window to the bottom and simplifying button labels to save space. Secondary buttons have been moved to a dropdown menu for tablet views.
Original PR description
The mobile style on bank rec widget is a bit buggy, this commit adds few improvements: 1 - When in mobile view, chatter is shown on the right (like in desktop view), but the screen is way too tight to display both chatter and st_lines at the same time. Solution: Display the chatter at the bottom of the screen. 2 - If the screen is too tight to show 2 primary buttons (Example: Set Partner & Set Account), We remove the "Set " on the buttons label to save some space. 3 - In tablet view, we don't have enought place to show all the secondary buttons we are showing in desktop view. This commit removes the reco model secondary buttons. (Now accessible in the dropdown menu) task-5114831
Resolved issues and error corrections
This update resolves an issue where an unnecessary 'add inputs' button was appearing on Swiss payroll payslips. This change improves the user experience for employees and administrators using the Swiss localization of Odoo Enterprise, ensuring a cleaner and more intuitive interface.
Original PR description
don't show add inputs button on payslips on the swiss localization.
This update fixes an issue where users could inadvertently make changes to knowledge articles due to incorrect navigation. The change ensures the correct article is loaded before any actions like sharing or editing, enhancing the user experience and data integrity. This improves the reliability of the knowledge base.
Original PR description
With this commit, We ensure we're in the correct article before making any changes (share, add to favorites, edit) using `waitUntil`. We've added a `checkArticle` function to ensure the article is in the correct place in the menu. runbot-error-id~234645
This update resolves an issue where the 'Update Rental Prices' button disappeared after saving a rental order. The fix adds a field to the view that ensures the button remains visible when a rental period is changed and the order is saved. This ensures users can easily adjust rental prices as needed.
Original PR description
Steps to produce: --- - Install `sale_renting` module. - Rental > Open any order > Change the rental period. - Save the record. Issue: --- - After saving the order, the `Update Rental Prices` button becomes invisible. Root cause: --- - The field `show_update_duration`, which controls the visibility of the button, is not present in the view. As a result, when the record is saved, the field is not included in the form data and its value is not properly maintained, causing the button to become invisible. - The field is removed from the view in this [commit]. Solution: --- - Added the `show_update_duration` field to the view to ensure its value is properly maintained. This allows the `Update Rental Prices` button to remain visible when applicable. [commit]: https://github.com/odoo/enterprise/commit/b90bbdef10a7a37fb065626ba995811ab388c7a1 opw-5937145 --- Forward-Port-Of: odoo/enterprise#107621
Features or functions removed from Odoo
This update eliminates outdated warning messages related to IoT receipt printers. As we no longer collect printer status data, these messages are no longer generated or displayed. This improves the user experience by reducing unnecessary notifications.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/249819 As we are no longer querying the status of the receipt printer on the IoT box, some of the error messages such as being low on paper will no longer be sent by the IoT. This commit removes the messages in the JS code too.
15 changes
Resolved issues and error corrections
This update resolves a testing issue within the Arabic VAT (l10n_ar_edi) module. By using `sudo()` when writing test data, the system can now reliably validate invoices even when the user account doesn't have the necessary permissions. This ensures consistent and accurate testing in all environments.
Original PR description
This pull request makes a minor update to the `_dummy_afip_validation` method in `account_move.py`, improving its reliability for testing environments. * Testing reliability: The method now uses `sudo()` when writing dummy AFIP fields, ensuring that the operation succeeds even if the current user lacks write permissions. Without this fix, if the user doesn't belong to group "base system", it won't be able to validate invoices in testing environment. <img width="1258" height="454" alt="image" src="https://github.com/user-attachments/assets/522bfd9d-33be-4bcd-a60b-ef4c09a8e0d6" />
A recent update to the Hong Kong payroll salary rule required updating the associated tests. This change ensures that all tests accurately reflect the new rule, maintaining the integrity of the payroll calculations. This fix prevents potential discrepancies in reported payroll data.
Original PR description
In odoo/enterprise:100842 a salary rule was corrected, but the related tests were not. This will correct that mistake.
This update ensures self-order transactions in our POS system now adhere to the same data validation rules as regular POS orders. This enhances data accuracy and reliability, reducing potential errors and improving the overall customer experience. The change applies to several POS modules including online payments and restaurant ordering.
Original PR description
*: pos_online_payment_self_order, pos_restaurant, pos_self_order This commit improves the data validation of pos self order by using the same validation as the one used for regular pos order.
This update fixes a minor typo in the Odoo warning message displayed when a Python external dependency is not found on PyPI. The corrected message ensures a more professional user experience and avoids confusion. This change improves the clarity of error messages for developers and users.
Original PR description
Description of the issue/feature this PR addresses:
Fixes typo "o" should be "to"
Current behavior before PR:
Warning text is shown as `python external dependency on 'jwt' does not appear o be a valid PyPI package. Using a PyPI package name is recommended.` when having in `__manifest__.py` : ` "external_dependencies": {"python": ["jwt"]},`
Desired behavior after PR is merged:
Warning text without typo : `python external dependency on 'jwt' does not appear `**to**` be a valid PyPI package. Using a PyPI package name is recommended`
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update reverses a recent change that was incorrectly removing accented characters from legal names used for Mexican VAT (EDI) processing. The SAT now allows all characters, so we're restoring the original behavior, requiring users to input the correct, legally registered name. This ensures full user control and avoids blocking legitimate transactions.
Original PR description
An accent sanitization feature was introduced in Odoo 18 [1]. It was done because it appeared the SAT replaced certain characters with their unaccented counterpart, but it's not the case. At least…
An accent sanitization feature was introduced in Odoo 18 [1]. It was done because it appeared the SAT replaced certain characters with their unaccented counterpart, but it's not the case. At least today, the SAT allows all characters (pointed out in [2]). This explains why in the past 6 months this feature has been slowly undone [3][4][5], character by character, after customers run into issues. The approach can not work, so we go back to the name with the accents the user puts on the partner. Users need to put the correct, legally registered name in Odoo. If it doesn't work then they can adapt it as needed. This way the user is in full control, and we don't block them. This reverts the whole accent sanitization saga: - Revert "[FIX] l10n_mx_edi - More accented characters accepted by SAT", this reverts commit 46cc41ddd258e80372478a746ea79d154a5931d9. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit dcbd8797667b5be88f48045e48da86ac42db362c. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit 32b8333fd3f813ec3188394c2634129e3fbfe31d. - Revert "[FIX] l10n_mx_edi: Fix accents in legal name", this reverts commit 05ed1fb9059bd1459e38dc00b041cada6bf06ac4. This also removes the unused frozendict import to make "Check Style" happy. opw-5915515 [1] https://github.com/odoo/enterprise/pull/95207 [2] https://github.com/odoo/enterprise/pull/107960 [3] https://github.com/odoo/enterprise/pull/96043 [4] https://github.com/odoo/enterprise/pull/106557 [5] https://github.com/odoo/enterprise/pull/107677 Closes odoo/enterprise#107960
This update prevents users from canceling subscriptions if they don't have access to the associated invoices. Previously, a sales representative could cancel a subscription even if they lacked visibility of the invoices. Now, the system correctly prevents cancellation until the sales representative has access to the invoice details, ensuring accurate subscription management.
Original PR description
Before this commit, when a user had access to an invoiced subscription but not to the invoiced, he could cancel the subscription. Step to reproduce: - create a subscription in company A, with a pricelist available in company B. Sales person A belong to company A. - invoice the subscription and confirm the invoice - update the company (company B) and sales person of the subscription (B). The new salesperon don't see the invoice in the stat button. After this commit salesperson B can't cancel the subscription. task-5907345
This update corrects an issue where Brazilian fiscal positions were incorrectly inherited across companies, leading to errors. Now, fiscal positions are properly isolated based on the company where they are created, ensuring accurate reporting and calculations for Brazilian customers. This resolves inconsistencies and prevents errors when managing fiscal settings.
Original PR description
Issue ===== The fiscal position defined on a partner was not properly isolated per company, leading to cross-company inconsistencies and errors. Steps to Reproduce ================== 1. Install…
Issue ===== The fiscal position defined on a partner was not properly isolated per company, leading to cross-company inconsistencies and errors. Steps to Reproduce ================== 1. Install `industry_fsm_sale` and `l10n_br`. 2. In the US company: - Create a Brazilian customer. - Set a fiscal position on the customer. 3. Switch to the Brazilian company: - Open the same customer. - Set a fiscal position on the customer. 4. Still in the Brazilian company: - Create a task for that customer in the Field Service app. - Add a product to the task. Result ====== An error is raised because the fiscal position from the US company is used, which is not valid for the Brazilian company. Root Cause ========== When reading the fiscal position from the partner, the value is fetched in the environment of the company in which the partner record was originally created (US company). If no company is explicitly specified, the fiscal position is read in that original environment, even when the user is operating under the Brazilian company. Solution ======== Explicitly enforce the current company context when reading the fiscal position from the partner to ensure the correct company-specific value is used. opw-5270522 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where shipping capacity percentages were incorrectly calculated across multiple batch transfers. The change ensures that each batch's capacity is accurately determined, aligning with the displayed values and improving the reliability of dispatch management. This impacts how users view and manage batch transfers.
Original PR description
## Issue Before This PR: The fields `used_weight_percentage` and `used_volume_percentage` in the list view were showing incorrect values. These fields were incorrectly aggregating totals across all…
## Issue Before This PR: The fields `used_weight_percentage` and `used_volume_percentage` in the list view were showing incorrect values. These fields were incorrectly aggregating totals across all batches, as the calculation of `estimated_shipping_weight` and `estimated_shipping_volume` was not handled per batch, resulting in wrong percentages. ## Steps to Reproduce: - install inventory module and enable settings for batch transfers and dispatch management, - add two batch records with vehicles assigned (having weight or volume capacity), and transfers having products with weight or volume defined - Observe different values of weight % or volume %, in form and list view. ## Cause of the Issue: In the method `_compute_estimated_shipping_capacity` the computation loop referenced all records together, causing totals to be shared across batches. ## With This PR: Each batch now computes its own estimated shipping weight and volume correctly, ensuring correct per-batch values consistent with the form view and match what users see when opening individual records. Backport of [commit](https://github.com/odoo/odoo/pull/227166/changes/a709e84d8357a622198a8ac0a0199af9b16f56e7)
This update resolves a minor issue where a typo appeared in the logs for the Belgian Codabox localization module. This ensures accurate logging for reporting and troubleshooting, maintaining the integrity of financial data. The change is purely a technical correction.
Original PR description
This commit will fix a typo in the log. no task id
This update fixes an issue where deactivated withholding taxes were still being calculated in payments. The fix ensures that payments accurately reflect only active withholding taxes, preventing incorrect financial reporting. The change was made by filtering the tax fetch function to prioritize active taxes.
Original PR description
# How to reproduce - Install the l10n_ar_withholding module - Pick a Vendor and add a Purchase Withholding tax in the accounting tab - Go into configuration and disable that tax - Create a Vendor Bill with that Vendor - Confirm the bill and create a payment # The problem The deactivated tax is still computed in the payment # Why The function that fetches the withholding taxes does not check if the taxes are active or not # The fix I though of 2 solution : - Add an override to remove the taxes from the Vendor when they are deactivated - Add a filter to the fetch function to check if the taxes are active I chose the 2nd solution as it is the least invasive one. opw-5917257
A bug was preventing users from correctly saving approval domain rules within the web_studio interface. This issue stemmed from how domain data was being formatted between Python and JavaScript. The fix ensures that domain rules are saved accurately, resolving a potential disruption in automated email workflows.
Original PR description
Steps to reproduce ================== - Install web_studio,sale_management - Open a form view in sale - Open studio - Click on the "Send by email" button - Add an approval rule - Add a domain by clicking on the filter icon - Use the not set operator - Confirm - Click on the filter icon again - Confirm => ValueError: malformed node or string on line 1: <ast.Name object at 0x79ff4c7b7f50> Cause of the issue ================== JSON.stringify was used to pass the domain as a string to the DomainSelectorDialog. This doesn't work for boolean as they don't have the same representation in JavaScript as opposed to Python. Solution ======== Use the Domain().toString function opw-5923585 Forward-Port-Of: odoo/enterprise#107432
This update corrects a reporting issue with Italian invoices (l10n_it) by ensuring the total invoice amount (`ImportoTotaleDocumento`) is always displayed in EUR, as required by Italian tax regulations. This change aligns with government guidelines and avoids potential compliance problems.
Original PR description
With an `l10n_it` company: - Create an invoice in a foreign currency and export the XML. In the XML, the field `ImportoTotaleDocumento` is expressed in the invoice currency, while `Divisa` is set to…
With an `l10n_it` company: - Create an invoice in a foreign currency and export the XML. In the XML, the field `ImportoTotaleDocumento` is expressed in the invoice currency, while `Divisa` is set to the company currency. `ImportoTotaleDocumento` must be expressed in EUR, as stated in the following document: https://www.agenziaentrate.gov.it/portale/documents/20143/0/10FAQ+pubblicate+il+19+luglio+2019+(aggiornate+il+1+luglio+2021).pdf/6e8acb34-b7c5-730e-6a39-79c0a296e02b > L'art. 21, comma 2, lettera l) del d.P.R. n. 633/72 specifica che > “aliquota, ammontare dell'imposta e dell'imponibile con arrotondamento al centesimo di euro”. > Conseguentemente, se la fattura è emessa da soggetti residenti o stabiliti il codice da inserire nel campo `<Divisa>` > deve essere obbligatoriamente “EUR”. > Article 21, paragraph 2, letter (l) of Presidential Decree No. 633/72 specifies that > “the tax rate, the amount of the tax, and the taxable amount must be stated with rounding to the euro cent.” > Consequently, if the invoice is issued by resident or established taxpayers, the code to be entered in the `<Divisa>` > field must mandatorily be “EUR”. As a result, we now use the **company currency amount** for the `ImportoTotaleDocumento` field (assuming the company currency is always EUR for `l10n_it`). Ticket [link](https://www.odoo.com/odoo/project.task/5913088) opw-5913088 Forward-Port-Of: odoo/odoo#247537
This update corrects a previous issue where cost of goods expense lines incorrectly used the product's analytic account instead of the distribution model. The fix ensures that the analytic account aligns with the user-defined distribution model, providing more accurate profitability reporting, especially for sales linked to projects.
Original PR description
Steps: - Activate automatic accounting - Create a product P: • Storable, track inventory • Set a cost • Product category FIFO, automated valuation - Activate analytic accounting - Create a…
Steps: - Activate automatic accounting - Create a product P: • Storable, track inventory • Set a cost • Product category FIFO, automated valuation - Activate analytic accounting - Create a distribution model for that applies to expense account - Create an invoice for product P, set an analytic (different from the one set on the model above) - Confirm -> On the cogs expense line, the analytic account is the one from the product line, it should be the one set on distribution model Cause: The analytic distribution is forced to the same value as the product line at the creation of cogs lines. Fix: Adding a helper to know if we need to force the value of analytic distribution or leave it to the compute method. This is especially needed for invoices that are originated by a sale order linked to a project, since we calculate profitability items regarding the project's distribution. Note: This is an issue that has been addressed several times in differents way, the reason of this fix is that we think that user should rely on distribution models: if they want a distribution to be applied on the cogs line, they should create a distribution model that meet their needs. opw-5193666
This update corrects an issue where manually created stock transfers without a procurement group were incorrectly merged into existing transfers. The change ensures each transfer creates its own operation, preventing data inconsistencies and improving the accuracy of multi-step stock workflows. This resolves a problem where unrelated receipts were grouped together.
Original PR description
*: purchase_stock Issue Before This Commit: ====================== In a `multi-step` configuration, while validating a transfer that has no `procurement group`, its next operation (Input → QC →…
*: purchase_stock Issue Before This Commit: ====================== In a `multi-step` configuration, while validating a transfer that has no `procurement group`, its next operation (Input → QC → Stock) is merged into an existing transfer that also lacks a procurement group, even when the transfers are manually created and not generated from a Sales or Purchase Order. This results in unrelated transfers being grouped together. Steps to Reproduce: ====================== - Install the `stock` module. - Configure the warehouse to use `three-step reception`. - Create and validate two receipts for Product A (qty 10) with Vendor A. - `Observation`: the next transfers for both receipts are merged into a single transfer, even though both receipts were created manually and not generated from any same source document like PO/SO. Cause of the Issue: ====================== In the `_search_picking_for_assignation()` method, when no `group_id` is defined on a move, the system still attempts to find an existing picking using the `partner_id`. Additionally, in the `_key_assign_picking()` method, moves without a `group_id` are grouped based on their `partner_id`. As a result, validating multiple manually created receipts sharing the `same vendor` causes them to be incorrectly merged into the `same next transfer`, since they do not share a common procurement group. After this Commit: ====================== The `_search_picking_for_assignation()` method now skips searching for existing pickings when moves lack a `procurement.group`. The `_key_assign_picking()` method groups moves by their `originating picking` instead of the partner, preventing merges between unrelated transfers without a procurement group. This ensures each manual transfer creates its `own next operation` in multi-step routes. Task-ID: 5242340
This update corrects a test case within the quality control module to accurately reflect recent changes in how Odoo handles picking moves. Specifically, the test now correctly assesses scenarios where multiple shipments are merged into a single transfer when a procurement group is defined. This ensures the quality control process aligns with the latest functionality.
Original PR description
Fix the test case to align with the updated picking move merge behavior, where the next transfer merges into an existing one only when a procurement group (group_id) is set TaskID-5242340
4 changes
Resolved issues and error corrections
This update fixes an error in how leave balances are calculated when simulating accruals across carry-over dates. Previously, the system incorrectly reported negative balances. The fix precomputes leave consumption to avoid a circular dependency, ensuring accurate balance calculations for employees taking leave.
Original PR description
__Problem:__ When simulating accruals across a carry-over date, the system showed a wrong available balance. 1. Create an accrual plan: - 1 day granted at the beginning of each month - reset at the…
__Problem:__
When simulating accruals across a carry-over date, the system showed a wrong available balance.
1. Create an accrual plan:
- 1 day granted at the beginning of each month
- reset at the start of the year (carry-over reset)
2. Enable _Allow Negative_ on Paid Time Off.
3. Create a validated allocation starting at the beginning of the year.
4. Take 11 days of leave at the end of the year, approve and validate it
5. Cross the carry-over (Jan 1), then check balance on __Feb 1__:
- __Expected:__ available 1
- __Current:__ available −9
__Root cause:__
- Circular dependency between `leaves_taken` compute and future accrual simulation:
`_get_future_leaves_on()` → creates `fake_allocation` → triggers
`leaves_taken` → `_compute_leaves()` →
`employee._get_consumed_leaves()` → `_get_future_leaves_on()` again.
→ Infinite recursion / wrong value injected.
__Fix:__
- Precompute and inject the correct `leaves_taken` value when building the `fake_allocation` before processing accrual plans through a direct helper `_get_leaves_taken_in_period(target_date)` to compute leaves consumed up to a given date for a single allocation, without recursion.
- opw-4918619This update resolves a bug that caused the lunch ordering tour to fail when a user quickly navigated to a record before the necessary filters were applied. Specifically, the 4 Formaggi meal was incorrectly selected instead of the intended Aaron's Pizza option. This ensures a smoother and more reliable user experience for ordering lunch.
Original PR description
When ran on a fast enough computer, we clicked on a record before the filter has been applied. In practice, the 4 Formaggi meal was selected instead of Aaron's Pizza runbot-233159
This update resolves a random failure within the website editor's tour feature. The issue stemmed from inconsistencies in how the tour service triggered events compared to real user interactions. Adding a simple delay ensures the system correctly detects the necessary actions, preventing the tour from prematurely ending.
Original PR description
Steps to reproduce
==================
Run the test test_15_website_link_tools a bunch of times. It will eventually fail.
It happens every time if we add the following step after the "Reselect the first image" or the "Re-select image." step:
```js
{
trigger: "body",
run: async function() {
const { promise, resolve } = Promise.withResolvers()
setTimeout(resolve, 500)
return promise
}
},
```
It will fail when checking if the link toolbar is present
Cause of the issue
==================
In 17.0, the tour service doesn't trigger exactly the same events as a real user.
In this case, a selectionchange event is trigger causing the linkpopover to disappear
https://github.com/odoo/odoo/blob/6f7baa97db91f9a447257c3762febf4bd8a04800/addons/web_editor/static/src/js/wysiwyg/wysiwyg.js#L2963-L2977
Solution
========
We can set and focus the selection on the after clicking on it.
runbot-237703This update fixes inaccuracies in Bulgarian tax names and adjusts the default purchase tax rate from 20% PTC to 20% FTC, aligning with current Bulgarian regulations. This ensures accurate tax calculations and reporting for Bulgarian businesses using the Odoo system.
Original PR description
Fixing incorrect tax names and changing the default purchase tax to 20% FTC instead of 20% PTC. task-5935754