Daily updates from Odoo
Navigate
Branch
Thursday, July 11, 2024
62 changes
18 changes
Resolved issues and error corrections
Fixes a broken guided tour in Website Slides so users can complete the walkthrough as expected. The update corrects timing and button-targeting issues caused by earlier library and design changes.
Original PR description
**Issue** From v17.2, the website_slides tour is not working because of some changes in the tour library. Commit from where I think the bug is coming https://github.com/odoo/odoo/commit/b334055c82c4350b4122e620ae76179a9fc4eaa2 and later due to the website design change another step was also failing and that should be coming this commit https://github.com/odoo/odoo/commit/80e3f53550b7ed74ac18bb09ea542c9e77c9a61d **Technical** The "Add to content" is loading before our frame is ready due to this the position of the pointer was wrong. Due to the design change tour was not able to point the publish btn **After this PR** Now the tour is working properly. Task-3960962
This update refreshes the spreadsheet engine with fixes that make charts easier to read, improve formula matching behavior, and reduce unnecessary recalculations. Users should see more reliable spreadsheet results and smoother performance, especially in larger sheets.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/9f2068549 [REL] 17.2.16 Task: 0 https://github.com/odoo/o-spreadsheet/commit/86adb37bf [FIX] charts: truncate labels…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/9f2068549 [REL] 17.2.16 Task: 0 https://github.com/odoo/o-spreadsheet/commit/86adb37bf [FIX] charts: truncate labels by default Task: 3958962 https://github.com/odoo/o-spreadsheet/commit/de8b6b1a3 [PERF] evaluation: don't evaluate needlessly Task: 4036899 https://github.com/odoo/o-spreadsheet/commit/565dbdc9d [PERF] evaluation: invalidate spreading in batch Task: 4036899 https://github.com/odoo/o-spreadsheet/commit/d164e4215 [IMP] demo: add large demo data set for array formulas Task: 4036899 https://github.com/odoo/o-spreadsheet/commit/dd9f5a386 [FIX] functions: "*" doesn't match empty string Task: 4023057 https://github.com/odoo/o-spreadsheet/commit/62f4af81a [FIX] functions: match empty cells Task: 4023057 https://github.com/odoo/o-spreadsheet/commit/81381a425 [REV] chart: avoid useless chart updates Task: 4029016 Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
This fixes a display issue where popups or overlays inside embedded livechat could fail to appear when they were already queued before the chat area finished loading. Visitors should now see the right livechat interface elements consistently without duplicate overlays elsewhere on the page.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/154349 PR above allowed to define shadow DOM-specific overlays, which is desirable for apps that need to work in a shadow DOM like livechat from…
Follow-up of https://github.com/odoo/odoo/pull/154349 PR above allowed to define shadow DOM-specific overlays, which is desirable for apps that need to work in a shadow DOM like livechat from visitor's perspective. The reason for shadow DOM is to use exactly same style and behaviour of livechat like in Discuss as internal users. The shadow DOM has to sustain its good working by itself, so it also needs to deploy some required main components like overlay container. In website, there's also an overlay container, and since they share the same stateful service (overlay_service), we do not want to display the overlay twice. So PR above solved the issue by allowing to make overlay with a provided `rootId`, which when set it contains the `id` attribute of the root node of the overlay that has to manage the overlay. This allows to clearly determine which overlay container is responsible to display the appropriate overlay. Code above was however buggy: it relies on `isVisible(overlay)`, whose computation requires `rootRef.el`. Refs' el are not determined on the 1st rendering of the overlay service. This is not a problem when the overlay container is 1st mounted without any overlay, but if it's being registered with some overlays, mounting the overlay container afterwards results in the non-showing of the overlay. The `rootRef` is important to find out the "global" root node id, i.e. the shadow DOM root id. This commit fixes the issue by rendering again overlay container after mount when there are some pre-registered overlays.
Users who cannot edit projects or lunch products can once again mark them as favorites. This restores a convenient personalization option that was unintentionally blocked by a recent access-rights change.
Original PR description
## [FIX] project: let project user to set a project as favorite Before this commit, since the project user cannot edit a project and a recent fix (https://github.com/odoo/odoo/pull/168464) ensures…
## [FIX] project: let project user to set a project as favorite Before this commit, since the project user cannot edit a project and a recent fix (https://github.com/odoo/odoo/pull/168464) ensures the boolean_favorite widget is readonly is the field is readonly or if the record is readonly then the project user can no longer mark a project in favorite. This commit overrides the standard widget `boolean_favorite` for project to make sure the widget is always editable if the field is not in readonly. task-4041969 ## [FIX] lunch: allow employee to save as favorite a product in lunch Before this commit, the current user could have no access to lunch app to add/edit product, etc. Since the user cannot edit `lunch.product` model, he can no longer save as favorite a product since a recent bug fix (https://github.com/odoo/odoo/pull/168464) to ensure the button is in readonly when the field or the record is in readonly. This commit makes sure the user can always save as favorite even if the record is readonly for the user since the user just has to choose what he would like to eat during lunch break and so he just needs to select and save as favorite. task-4041969
Miscellaneous changes
Before this commit, Czech language translations of the Czech tax report were wrong. The appropriate Czech translations were added from this sheet: https://docs.google.com/spreadsheets/d/1xqDqpLwY5nCyNA5WuzLSPdR52Jq6f8IPxU4S3Bh1Nw4/edit?pli=1&gid=1709389226#gid=1709389226 task-3127683 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#172559
Original PR description
Before this commit, Czech language translations of the Czech tax report were wrong. The appropriate Czech translations were added from this sheet: https://docs.google.com/spreadsheets/d/1xqDqpLwY5nCyNA5WuzLSPdR52Jq6f8IPxU4S3Bh1Nw4/edit?pli=1&gid=1709389226#gid=1709389226 task-3127683 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#172559
In auto-complete field of a vendor bill, the domain before the current commit would only get purchase orders from the current company. The domain was amended to get POs from current company and all its descendant branches. The POs of children companies should be visible on vendor bills of current company. If the user selects a PO that belongs to a child company, the company_id field should be = the child company. task-3987695 --- I confirm I have signed the CLA and read the PR guidel
Original PR description
In auto-complete field of a vendor bill, the domain before the current commit would only get purchase orders from the current company. The domain was amended to get POs from current company and all its descendant branches. The POs of children companies should be visible on vendor bills of current company. If the user selects a PO that belongs to a child company, the company_id field should be = the child company. task-3987695 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171480
Add myself for CLA --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171169
Original PR description
Add myself for CLA --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171169
To reproduce the bug follow the instructions: - Have pos and sales app installed - Go to pos app setting and enable is a Restorant setting - Back to the dashboard you should have a new shop called Restorant - Go to the products from and create a product ('pencil' for instance), make it available in pos and in self-order and assign to it a category - Add another product ('paper') with the same options in pos side and assign to it the same category, then add the first product ('pencil') to it
Original PR description
To reproduce the bug follow the instructions: - Have pos and sales app installed - Go to pos app setting and enable is a Restorant setting - Back to the dashboard you should have a new shop called…
To reproduce the bug follow the instructions:
- Have pos and sales app installed
- Go to pos app setting and enable is a Restorant setting
- Back to the dashboard you should have a new shop called Restorant
- Go to the products from and create a product ('pencil' for instance), make it available in pos and in self-order and assign to it a category
- Add another product ('paper') with the same options in pos side and assign to it the same category, then add the first product ('pencil') to its optional product in sales section
- Back to pos dashboard open a sessing in Restorant shop then go back again to the dashboard
- Click on the tree dots on the top right of the Restorant shop block and click on the mobile view
- Create a new order adding 'paper' to the command then go to checkout
Now the optional product 'pencil' should be shown but it's unavailable.
A feature was added in Odoo 17.1 and newer for the availibility of the product on the point of sale app. It filter the product based on the availability hours of its categories. This brought changes to ProductCard component witch (you can check product_list_page) in pos_self_order modul for that. The thing is that these change wasn't made is pos_self_order_sale modul witch made the product always shown as unavailable.
opw-3977238
Forward-Port-Of: odoo/odoo#170119The step to check the reward line added was sometimes happening before it had time to render. Changed the order of the step to allow the reward line to be rendered before checking it. runbot error: 69954 Forward-Port-Of: odoo/odoo#171882
Original PR description
The step to check the reward line added was sometimes happening before it had time to render. Changed the order of the step to allow the reward line to be rendered before checking it. runbot error: 69954 Forward-Port-Of: odoo/odoo#171882
Previously, when switching from an email template that overrides the email_from field to one that does not, the original email_from value was mistakenly passed as an argument. Consequently, emails were sent with the wrong sender, using the address from the template instead. Whereas, it is expected behavior that when a template does not specify any user, the current user's email address should be used as the sender. [Changes introduced by this commit] This commit addresses the issue by updati
Original PR description
Previously, when switching from an email template that overrides the email_from field to one that does not, the original email_from value was mistakenly passed as an argument. Consequently, emails…
Previously, when switching from an email template that overrides the email_from field to one that does not, the original email_from value was mistakenly passed as an argument. Consequently, emails were sent with the wrong sender, using the address from the template instead. Whereas, it is expected behavior that when a template does not specify any user, the current user's email address should be used as the sender. [Changes introduced by this commit] This commit addresses the issue by updating the sender email to the current user's email address when the template being updated to does not override the sender email field. [Reproduce] - Install -i contacts - Log in as user U - Create 2 Email templates that "Applies to" Contact (Settings/Technical/Email/Email Templates): - T1: set "From" field in "Email Configuration" tab (different than U's email) - T2: without set "From" field - Go to a contact app, select any user - Click "Send message" -> Expand "Full Composer" - Select template T1 (with set email) - Select template T2 (without set email) and Send - BUG: email gets send with email from T1 (even tho we selected T2, without any email) opw-3769188 # Encouraging discussion I would like to encourage discussion on the fix, as I can imagine different approaches to this problem. (Like maybe instead we could not sent the `sent_from` argument from the fronted side and relay on the mechanism of default values). Any comments highly welcomed Forward-Port-Of: odoo/odoo#170299 Forward-Port-Of: odoo/odoo#158000
There is currently an issue with the `report_stock_quantity` SQL view. When there is only 1 `stock_warehouse` in a given database and `pg_stats` for `stock_warehouse` is up-to-date, the query plan for scanning the `all_sm` cte (the `existing_sm` cte is always inlined) becomes extremely bad. That's because postgres somehow expects only 1 row returned by the `all_sm` cte whereas in real databases it can be closer to 500 000. This makes postgres plan a Nested Loop Join that has very bad performance
Original PR description
There is currently an issue with the `report_stock_quantity` SQL view. When there is only 1 `stock_warehouse` in a given database and `pg_stats` for `stock_warehouse` is up-to-date, the query plan…
There is currently an issue with the `report_stock_quantity` SQL view. When there is only 1 `stock_warehouse` in a given database and `pg_stats` for `stock_warehouse` is up-to-date, the query plan for scanning the `all_sm` cte (the `existing_sm` cte is always inlined) becomes extremely bad. That's because postgres somehow expects only 1 row returned by the `all_sm` cte whereas in real databases it can be closer to 500 000. This makes postgres plan a Nested Loop Join that has very bad performances in large databases. Another weird side-effect of this is the production vs staging (duplicate) on Odoo.sh. Because stagings and duplicates don't necessarily have up-to-date statistics, you can have the same query being very slow on the production database and very fast on a staging. That's because in the absence of statistics for the stock_warehouse table, postgres does not make any particular assumption on the number of rows returned by the `all_sm` cte and therefore produces a more efficient plan. This commit tries to change that by introducing a new small CTE that simply does a LEFT JOIN between `stock_location` and `stock_warehouse`. Because this CTE is referenced twice in the `existing_sm` CTE, it will be materialized by postgres, i.e. evaluated first before being saved in memory for further usage. Thanks to that, postgres knows the expected number of rows of the CTE and can better plan the outer query's execution. #### speedup Customer database with 17 000 products, 700 000 stock.moves, 97 locations and 1 stock_warehouse. Doing a simple GROUP BY query on `report_stock_quantity`: 5min -> 1s ##### dalibo To understand the dalibo, currently there is a workaround for this issue. If we add (and archive) a new `stock_warehouse` and then analyze the table, postgres plans an efficient plan. My guess here is that with only 1 record postgres skews the plan, probably because it tries to shortcut parts of the query execution. When there are 2 or more warehouses it cannot do that anymore and simply relies on correct statistics to plan the execution. Another possibility would be that statistics for tables with only 1 row are badly used by postgres. In any case, the point of the new CTE is to match the 2 or more warehouses case when postgres plans the scanning of the `all_sm` CTE. - [1 warehouse, base case](https://explain.dalibo.com/plan/a8fagdgd2d20ae48) - [2 warehouses, base case](https://explain.dalibo.com/plan/2d38fb9ef6df495g) - [1 warehouse, new CTE case](https://explain.dalibo.com/plan/92e41053c9g0ce8d) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#169401
## Analysis In case it's a simplified invoice, the 'to_invoice' is automatically set to True if a corresponding journal is set. Simplified invoices then generates a PDF which takes a few seconds to generate (using wkhtmltopdf) and slow downs the user experience. ## Fix This commit avoids generating the PDF in case no orders explicitly require an invoice. It mostly works the same as this commit for the Chilean localization: https://github.com/odoo/enterprise/pull/53655 which introduced a ne
Original PR description
## Analysis In case it's a simplified invoice, the 'to_invoice' is automatically set to True if a corresponding journal is set. Simplified invoices then generates a PDF which takes a few seconds to generate (using wkhtmltopdf) and slow downs the user experience. ## Fix This commit avoids generating the PDF in case no orders explicitly require an invoice. It mostly works the same as this commit for the Chilean localization: https://github.com/odoo/enterprise/pull/53655 which introduced a new context parameter (in the related commit: https://github.com/odoo/odoo/pull/148159). ### References opw-3875944 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#171523 Forward-Port-Of: odoo/odoo#164783
Customers are unable to submit their invoice if the LegalReference is more than 250 letters. This commit fixes this. task-4043343 Forward-Port-Of: odoo/odoo#172461
Original PR description
Customers are unable to submit their invoice if the LegalReference is more than 250 letters. This commit fixes this. task-4043343 Forward-Port-Of: odoo/odoo#172461
# :whale: Enterprise PR: https://github.com/odoo/enterprise/pull/61967 taskid: 3603762 Forward-Port-Of: odoo/odoo#162196
Original PR description
# :whale: Enterprise PR: https://github.com/odoo/enterprise/pull/61967 taskid: 3603762 Forward-Port-Of: odoo/odoo#162196
A few translation issues are fixed with this: - The title of the report was not translating the type of leave - The title was not correctly formatting the dates accroding to the locale of the user. - The months were not translated - The days were not translated Cleaning of the title's English will be done in master --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#172594 Forward-Port-Of: odoo/odoo#171976
Original PR description
A few translation issues are fixed with this: - The title of the report was not translating the type of leave - The title was not correctly formatting the dates accroding to the locale of the user. - The months were not translated - The days were not translated Cleaning of the title's English will be done in master --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#172594 Forward-Port-Of: odoo/odoo#171976
A recent fix forbade the usage of partners from other companies on a SO (see 7be39d0b2157ec53e84c730a210868e4a4a1f8d9, and the comment on the original PR). On the ecommerce, in some advanced multi-company & multi-website configuration, this led some customers to be unable to create a cart (add products to it), because their partner was restricted to another company. It was previously possible, but led to other issues later on, e.g. during the post-processing of payment transactions linked
Original PR description
A recent fix forbade the usage of partners from other companies on a SO (see 7be39d0b2157ec53e84c730a210868e4a4a1f8d9, and the comment on the original PR). On the ecommerce, in some advanced…
A recent fix forbade the usage of partners from other companies on a SO (see 7be39d0b2157ec53e84c730a210868e4a4a1f8d9, and the comment on the original PR). On the ecommerce, in some advanced multi-company & multi-website configuration, this led some customers to be unable to create a cart (add products to it), because their partner was restricted to another company. It was previously possible, but led to other issues later on, e.g. during the post-processing of payment transactions linked to the cart. Therefore, we consider it's still better to show a warning early on, but we prefer to replace the standard multi-company warning by a dedicated error message recommending the customer to have another account, or to contact the website administrator. To solve the issue for a given customer, either he should have a separate account for the given company, or no company (ID) should be set on its partner record, so that it's shared between companies. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#172433 Forward-Port-Of: odoo/odoo#172101
If a 17.2 database use a windows IoT (in version 17). Then it will cause issue as the send_to_controller function is called from the printer drivers in 17.2 which would be missing the mac parameter as such, the 17 code have to adapt to 17.2 drivers syntax. This would cause errors such as: ``` websocket: error from callback <function on_message at 0x0000016400FE0540>: send_to_controller() missing 1 required positional argument: 'iot_mac' odoo.addons.hw_drivers.websocket_client: websocket recei
Original PR description
If a 17.2 database use a windows IoT (in version 17). Then it will cause issue as the send_to_controller function is called from the printer drivers in 17.2 which would be missing the mac parameter as such, the 17 code have to adapt to 17.2 drivers syntax. This would cause errors such as: ``` websocket: error from callback <function on_message at 0x0000016400FE0540>: send_to_controller() missing 1 required positional argument: 'iot_mac' odoo.addons.hw_drivers.websocket_client: websocket received an error: send_to_controller() missing 1 required positional argument: 'iot_mac' ``` (and the idea of putting the mac address as a parameter was pretty bad to start with) Related PR: https://github.com/odoo/odoo/pull/172000 Forward-Port-Of: odoo/odoo#172736
[FIX] stock.landed.cost: Use invoice date currency exchange rate for landed cost computation Fixes an issue where the landed cost computation was based on the exchange rate of the accounting date instead of the invoice date, causing discrepancies in valuation and vendor bill. Now, the exchange rate of the invoice date is correctly utilized for accurate landed cost calculation. To reproduce the issue: 1. Create a purchase order 2. Receive the product 3. Create a vendor bill
Original PR description
[FIX] stock.landed.cost: Use invoice date currency exchange rate for landed cost computation Fixes an issue where the landed cost computation was based on the exchange rate of the accounting date…
[FIX] stock.landed.cost: Use invoice date currency exchange rate for landed cost computation
Fixes an issue where the landed cost computation was based on the exchange rate of the accounting date instead of the invoice date, causing discrepancies in valuation and vendor bill. Now, the exchange rate of the invoice date is correctly utilized for accurate landed cost calculation.
To reproduce the issue:
1. Create a purchase order
2. Receive the product
3. Create a vendor bill for landed cost product in a different currency
4. Click on the "Create Landed Cost" button in the vendor bill
Error: The landed cost is computed using the exchange rate of the accounting date, while the total on the invoice is calculated using the invoice date's exchange rate. This results in a discrepancy between the bill price and the valuation.
The fix ensures that the exchange rate of the invoice date is used for computing the total for the landed cost.
opw-3862915
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#171039
Forward-Port-Of: odoo/odoo#16515534 changes
New functionality added to Odoo
Tasks created from paid appointment bookings now carry the appointment's planned start and end dates in the task scheduling fields. This helps teams see and plan appointment-related work directly in project tasks without relying on description text.
Original PR description
When a task is created from an SO itself generated by an appointment, the task description contains the planned dates of the appointment. This PR places those planned dates directly into the planned_date_begin and date_deadline task fields.
Steps to reproduce:
- Install the modules appointment, sales, ecommerce and project.
- Set the up-front payment of the appointment to booking fees.
- Configure the booking fees to generate a task on SO.
- Make an appointment and pay.
- The task should be generated by the correct planned dates values.
Task-3619453Financial budgets can now be created and managed directly in accounting reports, especially profit and loss reports. This restores the ability to budget against financial accounts and lets users compare and adjust budgets alongside actual accounting results.
Original PR description
https://github.com/odoo/enterprise/commit/14eb7afe3f65b4f3bd91e6ee3095b29439364b68 refactored the Budget app, and made it use exclusively analytic accounting. Doing so, it removed the account.budget.post object, and the ability it gave to create financial budgets (that is, budgets made on accounts directly). We reintroduce this feature in a different form with this commit. Financial budgets are now handled through the account.report.budget object. This object can be created and populated from a regular form view, but it is also directly integrated into the reports (enabled on all P&L by default), allowing the user to rewrite/complete its content while comparing it with the actual data from the accounting. task-3634036
Stock fleet gains map and Gantt views to help teams visualize delivery batches by route and schedule. This makes planning and monitoring fleet operations easier, while related delivery connectors were adjusted to stay compatible with package handling changes.
Odoo now supports CNAE activity codes for Brazilian AvaTax transactions. Companies can set a primary activity code that is automatically used on sales orders and invoices, while users can choose another code when a transaction relates to a secondary business activity.
Original PR description
A CNAE code determines the type of activity a company is involved in. Companies can be registered to have one or more codes. Transactions are linked to these codes, depending on the exact nature of them. To support it in Odoo we add a default, primary CNAE code on the company. This is used as a default on both sale.order and account.move. In case a transaction is linked to a secondary activity sector of the company, the user can change it. The _l10n_br_is_avatax() function in the mixin was changed to a non-stored computed field so it can be used to determine visibility of the new fields in the views. The res_config_settings_views.xml file was re-formatted because its indentation was inconsistent. task-3987919
Enhancements to existing features
The enterprise web client test suite has been moved to a newer testing approach. This improves maintainability and helps ensure future web interface changes can be validated more reliably without changing user-facing behavior.
Original PR description
task-4028356
Field service tasks marked as under warranty will no longer connect employee timesheets to sales order lines. Tasks that only have timesheets and no billable products will also no longer generate sales orders, reducing unnecessary billing paperwork and helping keep customer charges accurate.
Original PR description
If FSM task is under warranty do not link their timesheets to sale order lines. Additionally, if there are timesheets but no products for a task, do not generate a sale order for that task. task-3933298
Users can now create a customer invoice or vendor bill directly from the bank reconciliation screen when a bank transaction relates to an unregistered business document. The new document is pre-filled with relevant details such as amount, date, and partner, reducing manual navigation and making reconciliation faster.
Original PR description
As of now, it is not possible to create a commercial move directly from the bank reconciliation widget. This commit aims to facilitate the workflow to create invoices or bills and reconcile them with…
As of now, it is not possible to create a commercial move directly from the bank reconciliation widget. This commit aims to facilitate the workflow to create invoices or bills and reconcile them with existing bank statement lines. Before this commit, if the user has a bank statement line for a unregistered commercial event, they have to: 1. Make a note of the amount, date and potentially a label 2. Navigate to Customers/Vendors > Invoices/Credit Notes/Bills/Refunds > New 3. Go back to the reconciliation widget (no breadcrumbs available) After this commit, the user will be able to create a move through a button in the bank reconciliation widget. The move is pre-filled with relevant information, such as amount, date and partner (if available). The user can return to the bank reconciliation widget through the breadcrumbs, and proceed to validate the created and added move. This commit: - Modifies behaviour of function actionSelectRecoModel to support the creation of moves. - Modifies function _js_action_select_reconcile_model to continue supporting journal entries as previously, but also the creation of moves. - Adds the function _action_redirect_to_move_button to create the relevant move and action leading to the move. - Modifies _js_action_restore_st_line_data to add the created move to the reconciliation widget. - Adds flag 'move_aml' to bank reconciliation widget line model. task-3768742
This change adjusts the expected processing behavior for deleting accounting entries after related sales expense updates. It supports upcoming internal changes that may require a small number of extra database operations without affecting user workflows.
Original PR description
In the refactoring of sale_expense, we would end up with two more queries in the account.move.unlink() method, as we potentially editing sale_expense_lines quantities and clearing expenses linked task-3458826
Pricelist behavior is simplified so discounts are shown only when a pricing rule is based on a percentage discount. Website sales now display discounted values automatically, while related website pricelist settings are moved into the website sales area for a clearer setup.
Original PR description
- no more discount policy -> only show discount if compute price of rule is percentage - show discounted value automatically on website - no more "multiple prices per product" advanced settings turned on by default - move pricelist settings related to website to website_sale and delete configuration tab task-3061255
New Appraisal installations without demo data now offer guided scenarios so users can quickly understand how to create and manage appraisals. The update also improves employee deletion handling by removing related appraisals and goals where appropriate while preserving history when the employee manages goals.
Original PR description
* = hr_appraisal, hr_appraisal_survey, hr_appraisal_skills When you go on odoo.com/trial you don't have demo data. With this commit, when you install the Appraisal app without demo data, you can select a scenario to easily understand how to create an appraisal. task: 3772927
Sales and purchase orders now share common order and order line behavior, reducing duplicate maintenance and making future improvements more consistent. Purchase orders can also optionally support down payments through a new setting, while several internal field names were standardized.
Original PR description
A lot of behavior is shared between the sale order (line) and purchase order (line). To avoid having to maintain this code in parallel and allow for sharing of the overlapping code, we introduce two new mixins: 1. account.order.mixin, for sale.order and purchase.order 2. account.order.line.mixin, for sale.order.line and purchase.order.line We make use of this opportunity to also rename some of the shared fields to conform to the naming standards. Additionally, this PR adds the option to create down payments for purchase orders by moving the existing functionality from sale orders into the newly created mixins. This new function is disabled by default for purchase, but can be turned on with a new checkbox in the settings. task-3600910 Community PR: https://github.com/odoo/odoo/pull/144608 Upgrade PR: https://github.com/odoo/upgrade/pull/5627
This update modernizes the website Twitter wall code by removing its reliance on an older JavaScript library. It also fixes an error that could occur when loading the Twitter wall, improving reliability for website visitors.
Original PR description
This PR aim to convert all jQuery code into Vanilla JS in website_twitter_wall, this way we will reduce the dependency of jQuery in Odoo codebase. task-3930744
The website event Twitter wall has been updated to use modern browser technology instead of an older shared library. This helps simplify maintenance and supports Odoo's broader effort to streamline its website codebase, with no expected change for end users.
Original PR description
This PR aim to convert all jQuery code into Vanilla JS in website_event_twitter_wall, this way we will reduce the dependency of jQuery in Odoo codebase. task-3770362
Adds support for Kenya's 2% withholding VAT process so businesses can track VAT withheld on vendor bills. The new reporting helps identify amounts due for payment and improves VAT tax report calculations, reducing compliance risk.
Original PR description
In Kenya, some customers are assigned to withhold the VAT on vendor bills. To avoid penalties the WH Report is created, this report provides a clear view on the total VAT withheld in a period and when it should be paid. The withheld VAT information is also used to complete the calculation of the VAT due in the Tax report. task: 3703440
A new GST setting lets businesses decide whether E-invoiced lines are included when submitting GSTR-1. This gives finance teams more control over GST reporting and reduces unwanted automatic submissions.
Original PR description
Before this pr: ---------- - Lines with E-invoices are automatically included in GSTR-1, requiring no manual intervention. - No setting is available to control E-invoiced lines' inclusion in the GSTR-1 submission process. After this pr: ---------- - A setting was added in the GST module to determine if lines with E-invoices should be pushed to GSTR-1. - This setting acts as a boolean to control the inclusion of E-invoiced lines in the GSTR-1 submission process. Task Id: 3932520
The POS employee login screen has been redesigned to make signing in clearer and easier for staff. Employees can now also log in using a PIN code, helping speed up access on mobile point-of-sale devices.
Original PR description
- Design a new login screen. - Add the ability to log in with a PIN code. Task id : 3927537 Linked to: https://github.com/odoo/odoo/pull/165956
Adds support for managing purchase reimbursements in Ecuadorian vendor bills and purchase liquidations, including dedicated reimbursement lines. This improves compliance by including reimbursements in electronic documents, withholding flows, and ATS reporting.
Original PR description
Implement purchase reimbursements functionality for Ecuador. - New tab in vendor bill and purchase liquidation to add reimbursement lines. - EDI Purchase Liquidation with reimbursements - EDI Withholding of a purchase reimbursements - ATS Reimbursement section opw-3860622 
This update lets Brazilian companies using AvaTax select CNAE activity codes and more precise operation types for sales and invoices. This helps classify transactions more accurately for government tax reporting and supports companies with multiple business activities.
Original PR description
See individual commits for more details. task-3803424 task-3987919 PR notes - ~~this includes #64714, it should be merged first.~~ - this includes #65145, it should be closed if we merge this.
Report notes are now tied to the report period, so users see only the comments relevant to the dates they are reviewing. Users can add and manage multiple annotations directly on report lines, and exports now preserve those annotations more clearly.
Original PR description
*: account_reports, l10n_lu_reports Description of the issue/feature this commit addresses: The current behavior of footnotes makes it impossible to have multiple footnotes by company by line. Also,…
*: account_reports, l10n_lu_reports Description of the issue/feature this commit addresses: The current behavior of footnotes makes it impossible to have multiple footnotes by company by line. Also, when annoting a line in a report for a certain period, and changing the period of the data shown by the reports, the annotation stays. This leads to footnotes being irrelevant or give false pieces of information. This commit transforms footnotes into annotations which are much more flexible and are a more powerful tool for the users. --- Desired behavior after the commit is merged : This commit brings a rework to the annotations' system by moving adding and changing some features they bring. 1 - The annotation now disposes of a "date" field which is set to the value of the "date_to" period of the data currently shown on the report. This value is then used during the computation of which annotations have to be shown and which have not to be shown so that only annotations for the current period appear. 2 - When clicking on the "Annotate" button on a line that already has an annotation, previous behavior was the opening of a dialog with the content of the current annotation which gave the possibility to edit it. Now, if a line has already one visible annotation, that button is not shown anymore. The line name has a little comment bubble next to it which opens the "annotation popover". Inside the popover, the user can read mulitple pieces of information regarding each annotation of the line which are : its text content, its author, the date it has been written at and the date it targets. The user can also edit and delete each of these annotation or add more via a "New" button. 3 - The footnote section at the bottom of a report with at least one footnote has been removed as the content of the annotation is now available directly on the annotated line and it made no sense to leave it. 4 - In the xlsx export, an additional column has been added to keep the annotations during the export. There is one column by line regardless to the number of annotations the line has and in a case in which a line would have multiple annotations, each of them would be numbered and split by a return character. 5 - In the PDF export, the rendering is now able to show multiple annotations on a single line. 6 - Journal Report and Followup Report used to have a footnote rendering process for the pdf export but since those Reports don't offer the possibility to annotate lines, thoses process have been removed. Adding this improvement, annotations are much more flexible and can bring real value to reports. --- task-3301125
Resolved issues and error corrections
The Work Orders list in Manufacturing now opens normally again. A leftover setting that pointed to a removed interface component was removed, preventing a crash when users access work orders.
Original PR description
**To reproduce:** Open manufacturing -> Operations -> Work Orders **Root cause:** Since the introduction of the Shop Floor in [1], a JS class was deleted from the workorders list view, but we forgot to remove the attribute on the view itself. Since the changes in [2], this will now result in a hard crash when trying to load the view (as there no longer is a null check). This commit fixes this by removing the JS class attribute from the WO list view. [1] https://github.com/odoo/enterprise/pull/43610 [2] https://github.com/odoo/odoo/pull/171073
Moving a task in the Gantt view now preserves existing many-to-many assignments when the new target is already among them. This prevents unintended removal of related values, while still replacing assignments when the task is moved to a genuinely different value.
Original PR description
Before this commit: Consider a many2many field value = [A, B, C] From the gantt view: - move the pill to value A => value = [A]. B and C are removed. After this commit: - move the pill to value A => value still [A, B, C] as A is part of it - move the pull to value D => value = [D]. A, B and C removed. task-3852999
This update keeps several country-specific localization features working reliably on Ubuntu 24.04 by replacing deprecated software library usage. It helps avoid failures in electronic invoicing, tax reports, certificate handling, and spreadsheet exports as underlying system packages evolve.
Original PR description
As the DEFAULT_CIPHERS hardcoded list of was removed in recent versions of urllib3, let's use the system default one instead.
Code cleanup and technical improvements
This update adds internal labels to Mexican invoice, payment, and delivery slip report sections. It does not change what customers see, but it makes these reports easier for teams to maintain and extend in the future.
Original PR description
Added names to tags inside report_invoice.xml and report_payment.xml for easier scalability in the future
Odoo Studio now includes a new Kanban editor designed for the newer view architecture, while keeping the older editor available for compatibility. Users can more easily build Kanban card layouts from predefined sidebar structures, drag fields into them, and add card widgets such as images and ribbons.
Original PR description
This commit creates a new kanban editor for the new arch API. The legacy kanban editor using the old one is still active for compatibility purposes until we stop the support of those in upcoming versions of Odoo. This new editor makes it easy to add more features to the Kanban view than ever before, since we can adjust the layout, using predefined structures, available directly from the sidebar. Then, it is possible to drag and drop any field inside those structures. Some widgets can be added directly inside the kanban card (kanban_image or web_ribbon). Co-authored-by: Florent Dardenne <dafl@odoo.com> part of task-3650117
This update streamlines how guest, attachment, notification, and link preview information is sent to the web client, reducing repeated data transfer and browser-side processing. It should make messaging-related screens more efficient without changing visible business workflows.
Original PR description
This will reduce data transferred to the client and processed in JS when the same guest, attachment or notification was appearing multiple times in result. This also makes more clear what is transferred by avoiding nested values. This is part 6, focusing on guest, attachment, notification, link preview. Formatting code eventually becomes simpler too, by always adding data to the store rather than updating pre-existing dict manually. Part of task-3605717 https://github.com/odoo/odoo/pull/172448
Miscellaneous changes
Tag updates were causing reload of the domain, while updating tag counts, With this commit all contextual values are preserved during tag updates [Reproduce] - Install documents,contacts- Open a contact - Open its documents - Go to "internal" - Upload a document - Add a tag to it (or remove it) - BUG: all documents visible (instead of documents for that particular client) opw-3967799 Forward-Port-Of: odoo/enterprise#65299
Original PR description
Tag updates were causing reload of the domain, while updating tag counts, With this commit all contextual values are preserved during tag updates [Reproduce] - Install documents,contacts- Open a contact - Open its documents - Go to "internal" - Upload a document - Add a tag to it (or remove it) - BUG: all documents visible (instead of documents for that particular client) opw-3967799 Forward-Port-Of: odoo/enterprise#65299
To reproduce: - Create a new db with demo data and install `sale_timesheet` module - Then as a second step, install `documents_project` The installation will crash with: ``` psycopg2.errors.NotNullViolation: null value in column "folder_id" of relation "documents_document" violates not-null constraint ``` When using `search` with no corresponding field, `convert_xml()` will only consider the first value, and in our case because of the ordering of project model, we're not going to set
Original PR description
To reproduce: - Create a new db with demo data and install `sale_timesheet` module - Then as a second step, install `documents_project` The installation will crash with: ``` psycopg2.errors.NotNullViolation: null value in column "folder_id" of relation "documents_document" violates not-null constraint ``` When using `search` with no corresponding field, `convert_xml()` will only consider the first value, and in our case because of the ordering of project model, we're not going to setup the document folder on project which is not `project.project_project_1`. This commit force creating documents folders for all projects with `use_documents` option set. Forward-Port-Of: odoo/enterprise#65964
Add shortcut keys to the recon model buttons in the reco widget. The keys are SHIFT+Number (1 to 5 for the 5 visible buttons) Task-4024471 Forward-Port-Of: odoo/enterprise#66066
Original PR description
Add shortcut keys to the recon model buttons in the reco widget. The keys are SHIFT+Number (1 to 5 for the 5 visible buttons) Task-4024471 Forward-Port-Of: odoo/enterprise#66066
**Purpose this PR:** This commit converts the all the qunit testcases of the crm_enterprise module to hoot. Part of task:[3818666](https://www.odoo.com/odoo/project/1519/tasks/3818666?cids=2) Forward-Port-Of: odoo/enterprise#62256
Original PR description
**Purpose this PR:** This commit converts the all the qunit testcases of the crm_enterprise module to hoot. Part of task:[3818666](https://www.odoo.com/odoo/project/1519/tasks/3818666?cids=2) Forward-Port-Of: odoo/enterprise#62256
To reproduce the bug, follow these steps: - Download the document present in ticket 3991731. - Upload it to the sign app. - Try to drag and drop the sign box to the bottom. You will find that the drag and drop functionality in general is erratic. This is due to the coordinates being incorrect, sometimes even negative, since the method used to calculate the height and width of the PDF view is flawed. I used the getBoundingClientRect method (the same method used to get the sign box coordi
Original PR description
To reproduce the bug, follow these steps: - Download the document present in ticket 3991731. - Upload it to the sign app. - Try to drag and drop the sign box to the bottom. You will find that the drag and drop functionality in general is erratic. This is due to the coordinates being incorrect, sometimes even negative, since the method used to calculate the height and width of the PDF view is flawed. I used the getBoundingClientRect method (the same method used to get the sign box coordinates) to fix this issue. opw-3991731 Forward-Port-Of: odoo/enterprise#65020
Before this commit: -Checkboxes in studio were not clearly visible in dark mode due to the border color being too similar to the background. -o_kanban_group had a white background that looked out of place in dark mode. After this commit: -Color of the border of the checkboxes is inverted in dark mode for better visibility -Background color of o_kanban_group is changed to enhance its appearance in dark mode. Task-3920491 Forward-Port-Of: odoo/enterprise#63040
Original PR description
Before this commit: -Checkboxes in studio were not clearly visible in dark mode due to the border color being too similar to the background. -o_kanban_group had a white background that looked out of place in dark mode. After this commit: -Color of the border of the checkboxes is inverted in dark mode for better visibility -Background color of o_kanban_group is changed to enhance its appearance in dark mode. Task-3920491 Forward-Port-Of: odoo/enterprise#63040
With this PR, the actions to open all journal items have been removed from all GSTR sections of the GST return Period. This change helps streamline the GST Return by eliminating unnecessary actions, ensuring a more focused and efficient reporting process. **task**-3908555 Forward-Port-Of: odoo/enterprise#66406 Forward-Port-Of: odoo/enterprise#64442
Original PR description
With this PR, the actions to open all journal items have been removed from all GSTR sections of the GST return Period. This change helps streamline the GST Return by eliminating unnecessary actions, ensuring a more focused and efficient reporting process. **task**-3908555 Forward-Port-Of: odoo/enterprise#66406 Forward-Port-Of: odoo/enterprise#64442
Related ticket: 4000939 Forward-Port-Of: odoo/enterprise#66407
Original PR description
Related ticket: 4000939 Forward-Port-Of: odoo/enterprise#66407
Since the audit trail is mandatory in Germany, we cannot remove moves or any documents related. We only need to remove the moves linked to the company of the tour. We also have more queries because we now need to check if the move is part of the audit trail before unlinking. Forward-Port-Of: odoo/enterprise#66387
Original PR description
Since the audit trail is mandatory in Germany, we cannot remove moves or any documents related. We only need to remove the moves linked to the company of the tour. We also have more queries because we now need to check if the move is part of the audit trail before unlinking. Forward-Port-Of: odoo/enterprise#66387
10 changes
Enhancements to existing features
The IoT Box connection process now includes clearer instructions and helpful links to Odoo documentation. This makes it easier for users to successfully connect a new IoT Box to their database without confusion.
Original PR description
Updated description when connecting new IoT Box to db, added help buttons redirecting to Odoo documentation. Task: 4021957
Resolved issues and error corrections
This fix corrects the Quick Create feature in the Calendar Studio editor, which was incorrectly disabled and couldn't be toggled. The issue was caused by reading the wrong property name and not properly saving the disabled state. Users can now correctly enable and disable Quick Create functionality when customizing calendar views.
Original PR description
Steps to reproduce ================== - Install web_studio,calendar - Go to calendar - Open studio => In the sidebar, Quick Create is disabled but should be enabled Toggling it does nothing Cause of the issue ================== The value was incorrectly read from `archInfo.hasQuickCreate` Solution ======== `hasQuickCreate` -> `quickCreate` This shows a second issue: Now that it's enabled, we can't disable it. This is because we remove the attribute instead of setting it to false If we don't pass the attribute, it will keep it's default value (true) https://github.com/odoo/odoo/blob/2afce223268c4ee1ac3c98a6108b1390be82716b/addons/web/static/src/views/calendar/calendar_arch_parser.js#L34 opw-4023026
This fix resolves an issue where decimal quantities were being incorrectly rounded to whole numbers when adjusting inventory in the barcode app for products with package contents. The system now properly preserves decimal precision based on the configured decimal settings, ensuring accurate inventory adjustments for fractional quantities.
Original PR description
## Issue: - When adjusting inventory for a product with packages from the barcode app, quantities that are not whole numbers will be rounded to the nearest whole number. ## Steps To Reproduce: -…
## Issue: - When adjusting inventory for a product with packages from the barcode app, quantities that are not whole numbers will be rounded to the nearest whole number. ## Steps To Reproduce: - Create a product and include two other products in its packaging, specifying a non-whole number for the contained quantity. - In the barcode app, adjust the inventory by adding the created product and then save the changes. - Click on the small pen icon to modify the product's details. - Observe that when adding the quantities with decimal values, they get rounded up to the nearest whole number. ## Solution: - In the `_increment` function, when the initial `value` is not a decimal (it does not contain a '.'), the fraction variable is not set, and the rounding defaults to 0. It's important to note that this issue does not occur when the `value` is a decimal, as the split function operates correctly. - To resolve this issue, instead of relying on the number of digits after the '.' in the `value`, we set the precision based on what is defined in the 'decimal.precision' model. This approach not only addresses the current issue but also resolves the underlying problem initially discussed in this PR https://github.com/odoo/enterprise/pull/53378 opw-3896929 Forward-Port-Of: odoo/enterprise#65619 Forward-Port-Of: odoo/enterprise#62505
This fix resolves an issue where clicking the general ledger action button didn't properly expand parent account lines when the hierarchy view was enabled. Previously, the action would open but leave parent accounts collapsed, making it difficult for users to see the full account structure they needed. Now the parent lines automatically unfold when the action is triggered, making the feature work as intended.
Original PR description
Before this commit, when clicking on the action with the hierarchy enabled, the parent line were not unfolded which cause the purpose of the action to be useless. task-3839845
This fix resolves an intermittent error that occurred in the French accounting dashboard when the tax journal was temporarily removed during nightly tests. The issue caused the system to crash with a key error. This update ensures the dashboard remains stable and functional even when journal data changes unexpectedly.
Original PR description
If you run the nightly builds of TestAccountJournalDashboard, sometimes the tax journal is withdrew from the dashboard -> key error initial pr: https://github.com/odoo/enterprise/pull/66346 opw-4004375
This fix addresses an issue where bank transactions without identifiers were being incorrectly filtered during import. Previously, when providers returned transactions without IDs, only the first transaction would import while others with empty identifiers were skipped. The system now properly handles these edge cases by ignoring transactions with empty identifiers in the filtering logic.
Original PR description
The aim of this commit is fixing the filtering of transactions when transactions have an empty identifier. Even if it's shouldn't be the case, it happens that providers return transactions without an identifier. In this case, it will always importe the first transaction and not the others as they have a similar id (an empty string). Now, we ignore in the filter these transactions. opw-4014171
This fix corrects how percentage-based reconciliation models distribute amounts across multiple lines. Previously, the system was incorrectly calculating percentages based on remaining balances after each line, resulting in incorrect distributions. Now percentages are correctly applied to the original statement line amount, ensuring accurate financial reconciliation.
Original PR description
The current code is taking the residual amount instead of the statement line amount. When doing a reco model 'percentage_st_line' on 1000: Line 1 - 74% Line 2 - 24% Line 3 - 2% We get: 1000 * 0.74 = 740 (1000 - 740) * 0.24 = 62.4 (1000 - 740 - 62.4) * 0.02 = 3.95 Instead of: 1000 * 0.74 = 740 1000 * 0.24 = 240 1000 * 0.02 = 20 task_id: 3940370 Forward-Port-Of: odoo/enterprise#62884
Fixed an issue where the settle due accounts button was not always displayed on the partner details screen in the Point of Sale. The button is now always shown, with the label changing to "Deposit Money" when there's no amount due and "Settle Due Accounts" when there is an outstanding balance. This provides a better user experience and clearer guidance for staff handling customer payments.
Original PR description
The settle due accounts was not always shown on the partner screen. Now it's always shown, and when the user doesn't have any amount due the text changes to "Deposit Money" instead of "Settle Due Accounts" Steps to reproduce: ------------------- * Install pos_settle_due module * Open PoS session * Open partner list * Click on details for any partner with no due > Observation: The "Settle Due Accounts" button is missing Why the fix: ------------ We always show the button, but change the text to better match the behavior. If there is no amount due the text says "Deposit Money" and when the user has some amount due it says "Settle Due Accounts" opw-3925397 Forward-Port-Of: odoo/enterprise#65762
This fix resolves an issue where partner commissions were not being calculated when a quotation template was added to a commission plan's rules. The system now properly checks the sale order's quotation template when determining which commission rules apply, ensuring commissions are correctly generated even when using templates.
Original PR description
Steps to reproduce ------------------- - create a commission plan with: product category: "All" rate: R capped: True max commission: >>> - create a partner level with the created commission plan -…
Steps to reproduce
-------------------
- create a commission plan with:
product category: "All"
rate: R capped: True
max commission: >>>
- create a partner level with the created commission plan
- create a partner with the created partner level
- create a product in the correct category with price P
- create a quotation template with the created product
- create a sale order with the partner as referrer
- add the quotation template (the product is added automatically)
- confirm
- create the invoice, confirm it and register the payment
At this moment, a purchase order is created (the commission) If we repeat these steps with a new sale order,
the amount of the purchase order will increase as expected.
- add a quotation template on the commission plan (in the rules)
- repeat the creation of a sale order.
No commission is added (purchase order line).
Cause:
------
We have no template when calling `_match_rules`.
However, our plan has a default template.
The result is that no rules are found.
Solution:
---------
Fallback on the sale order's template
if it is not a subscription.
opw-3933323This fix corrects a critical issue in the disallowed expenses fleet report where transaction lines were being incorrectly grouped together when account IDs and vehicle IDs happened to match numerically. The fix ensures that expenses are properly separated by vehicle and account, preventing data misrepresentation and system crashes in the report display.
Original PR description
## [FIX] account_disallowed_expenses_fleet: query is mixing apple and pear The aim of this commit is to make the report behaves correctly when facing a DB with a lot of vehicles and a lot of accounts…
## [FIX] account_disallowed_expenses_fleet: query is mixing apple and pear The aim of this commit is to make the report behaves correctly when facing a DB with a lot of vehicles and a lot of accounts by making the query `group by` and `order by` more robust. Context: - 1 account and 1 vehicle share the same number for the id - the account is tagged with disallowed expense tag - 1 `account.move.line` without vehicle in that account - 1 `account.move.line` with a vehicle (with a dna rate) in the same account Before the commit: - The computation is giving wrong result in the report: 2 `account.move.line` were aggregated together under the hierarchy of the account without vehicle and the vehicle doesn't appear in the report at all. cause: the `CASE WHEN` could return, for example `92` as a `vehicle_id` and then `92` as an `account_id` and thus have them regrouped together. - 2 lines of the report were sharing the same "line_id" (the id given by report framework id, see method `_build_line_id`) which are used in a t-key property in an OWL loop resulting in a crash for the front-end. After the commit: - The 2 lines are aggregated seperatly: The line without `vehicle_id` is under the hierarchy of the account and the line with `vehicle_id` is under the hierachy of the concerned vehicle. - The line doesn't share any line_id anymore task-id: None (issue discovered in our own prod) ## [IMP] account_reports: ensure line_id is uniq in tests Moved to https://github.com/odoo/enterprise/pull/66216 Forward-Port-Of: odoo/enterprise#64166