Thursday, September 11, 2025
28 changes · 19.0
New functionality added to Odoo
Adds support for using iMin receipt printers with Odoo Point of Sale, enabling businesses with iMin hardware to print customer receipts directly from POS. This integration is limited to receipt printing and does not apply to kitchen printers.
Original PR description
- Integrated with iMin Printer. - Only work with receipt printer, won't work in kitchen printer. task-5018605
Enhancements to existing features
The color picker now has more consistent spacing and input styling across its tabs, making it easier to use and more visually polished. Popovers now handle large content better by scrolling instead of overflowing, while older RGBA input elements have been removed to simplify the experience.
Original PR description
Desired behavior after PR is merged: - Applied same padding across `Solid`, `Custom`, and `Gradient` tabs. - Applied same styles to input field (position, angle, hex). - Fixed content overflow inside the popover, allowing excess content to scroll when it exceeds the maximum height. - Removed RGBA inputs related code and tests. task-5047830 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
Users receiving a Discuss call invitation can now see and use the join button instead of only being able to refuse. This fixes a call invitation workflow issue so invited users can enter calls as expected.
Original PR description
Before this commit, when receiving a discuss call invitation, the user could only refuse the call. This happens due to wrong condition for the showing the "join" call button: this button condition had "no call invitation", which is the exact opposite of the flow that should work! This happens from https://github.com/odoo/odoo/pull/223004 that convert the call invitation buttons into call actions. When doing this improvements, it also reconciled the actions as there was a lot of code duplication, one of which was "join" button in call invitation but also "join" on the call view when not in call. PR made the mistake to have the condition of "join" in call view when not in call (and no invitation), but completely forgot the "join" from call invitation whose condition was excluded from the condition. This commit relax the condition so that it takes into account both cases for the showing of the "join" call button.
Discuss call users now get a clearer, interactive flow for camera and microphone permissions instead of relying on old notifications. The update also requires a name before joining from the welcome page and shows call action icons that reflect the current permission state, reducing confusion before and during calls.
Original PR description
Purpose of this PR: - to join channel through welcome page requires name - removed old notifications, added interactive permission dialog instead for voice sensitivity configuration and call - call actions icons change according to permission state for both call view and welcome page - rtc service tracks camera/mic permission state task-[4967087](https://www.odoo.com/mail/view?model=project.task&res_id=4967087) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Vendor bill uploads now warn users when the bill GSTIN does not match the selected company, helping prevent bills from being recorded under the wrong entity. GSTR-2B matching also handles duplicate invoice reference numbers in draft purchases more smoothly, reducing stalled background processing.
Original PR description
Use Case 1 – Bill Upload/Scan - Issue: When scanning or uploading vendor bills, system allows upload even if the bill’s GSTIN does not match the company GSTIN. This can happen when multiple companies share the same name but have different GSTINs under the same PAN. - Solution: Add a warning if the bill’s GSTIN doesn’t match the company GSTIN: *"It seems Bill’s GSTIN doesn’t match this company. Please verify before proceeding.”* Use Case 2 – Duplicate IRN in GSTR-2B Matching - Issue: Cron job gets stuck when duplicate IRN exists in both draft purchase documents and fetched GSTR-2B data. - Solution: Include draft purchase documents having IRN in the matching process for the current period, so duplicate warnings are skipped and processing continues smoothly. Task ID: 4862214 Forward-Port-Of: odoo/enterprise#92948
Users now manage their light, dark, or system-based color scheme from their personal preferences instead of the quick user menu. The update also makes first-time loading smoother when the system preference is dark, reducing visible flicker during startup.
Original PR description
As the backend now supports the browser/system/device color scheme, having a directly accessible switch in the UserMenu is not as necessary as before. This commit moves it to the user's preferences instead. task-5074720
Auditors can now access audit working files in PDF format when reviewing completed internal audits. This improves audit follow-up by providing the requested supporting documentation beyond the existing Trial Balance export.
Original PR description
When verifying internal audits that have been done, auditors may request reports of Audit Working files. The working file must be available in PDF. The export currently only contains the Trial Balance with the audit state and last comments (more recent annotation) during the audit. task-id: 4993075
Public visitors could see a forbidden error on product pages when certain extra product fields were configured. This fix ensures those extra fields can be displayed correctly, preventing blocked product pages and improving the shopping experience.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable debug mode; 2. go to Website / Configuration / Websites; 3. open first website; 4. open Product Page Extra Fields tab; 5. add Icon (Product); 6. go to a product page as Public User. Issue ----- > **403: Forbidden** > [!Note] > For this issue to occur, the extra field cannot be loaded into cache yet, making it difficult to reproduce in versions before 18.3. As of 18.3, access rights are checked regardless of cache status. Cause ----- It's possible to add extra fields that don't allow access to public users by default. Solution -------- In the `ecom_show_extra_fields` template, retrieve the field values in `sudo` mode. opw-5031708 Forward-Port-Of: odoo/odoo#225352
The website builder now applies SVG dynamic colors correctly, so icons no longer disappear when users choose certain palette or grey colors. Color previews also show the actual selected color, making website editing more reliable and easier to understand.
Original PR description
__Current behavior before commit:__ The color palette for SVG Dynamic Colors doesn't work properly. The color preview doesn't show the current color and some colors make the SVG disappear.…
__Current behavior before commit:__ The color palette for SVG Dynamic Colors doesn't work properly. The color preview doesn't show the current color and some colors make the SVG disappear. __Description of the fix:__ - The [`_update_svg_colors`] backend method only works with rgb, hex and the palette colors matching `/^o-color-[1-5]$/`. So all other custom CSS variables (e.g. `var(--white)`) are converted to hex notation in the SVG URL search params. - Furthermore, to show the correct color in the little color preview circle, [`getValue`] now always returns a normalized CSS color value. - The regex matching rgba color in [`convertCSSColorToRgba`] has been fixed to include alpha values that don't have the 0 before the decimals (e.g. `rgba(255, 255, 255, .5)`). __Steps to reproduce:__ 1. Open the website builder 2. Switch to "Artists" theme 2. Drop a Horizontal Attributes snippet 3. Click on one of the SVG icon => the color previews in Image > Dynamic Colors don't correspond to the SVG colors 4. Click on one of the color to open the palette 5. Choose one in the top row => the SVG disappears 6. Go in the "Custom" tab of the color palette => the current color is not the correct one 7. Choose one of the grey shade at the top => the SVG disappears [`_update_svg_colors`]: https://github.com/odoo/odoo/blob/64efa6b7dc7/addons/html_editor/controllers/main.py#L92 [`getValue`]: https://github.com/odoo/odoo/blob/64efa6b7dc7/addons/website/static/src/builder/plugins/dynamic_svg_option_plugin.js#L29 [`convertCSSColorToRgba`]: https://github.com/odoo/odoo/blob/64efa6b7dc7/addons/web/static/src/core/utils/colors.js#L218 Forward-Port-Of: odoo/odoo#224850
This update fixes an error that could prevent Indian electronic invoices from being sent correctly. Businesses using India e-invoicing should see more reliable invoice processing and fewer failed submissions caused by this issue.
Original PR description
In this commit- --- Fixed a typeError in l10n_in_edi_send_invoice method Replaced - incorrect syntax `data.get['SignedInvoice']` with `data['SignedInvoice']`. opw-5071703 Forward-Port-Of: odoo/odoo#226106
This update brings the spreadsheet component up to the latest version and fixes several user-facing issues. Business users should see cleaner dashboard sorting, better translated chart labels, fewer unnecessary Excel import warnings, and more reliable copy/paste behavior with formulas.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd79eea46 [REL] 19.0.1 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd79eea46 [REL] 19.0.1 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/5c0bf705c [FIX] dashboard: align sort icon with text [Task: 5075237](https://www.odoo.com/odoo/2328/tasks/5075237) https://github.com/odoo/o-spreadsheet/commit/7c8c52255 [FIX] translation: dynamic translation for chart terms [Task: 5076040](https://www.odoo.com/odoo/2328/tasks/5076040) https://github.com/odoo/o-spreadsheet/commit/0ac0e86e0 [REL] version 19.0 [](https://www.odoo.com/odoo/2328/tasks/) https://github.com/odoo/o-spreadsheet/commit/325073b55 [FIX] Menu: Fix item text truncation [Task: 5072649](https://www.odoo.com/odoo/2328/tasks/5072649) https://github.com/odoo/o-spreadsheet/commit/3c7a71302 [IMP] carousel: improve drag & drop of chart over carousel [Task: 5059979](https://www.odoo.com/odoo/2328/tasks/5059979) https://github.com/odoo/o-spreadsheet/commit/6e09fa499 [FIX] xlsx: remove useless warnings on import [Task: 5075112](https://www.odoo.com/odoo/2328/tasks/5075112) https://github.com/odoo/o-spreadsheet/commit/b5ad83388 [FIX] selection: copy then paste instead of copy/paste loop [Task: 4930718](https://www.odoo.com/odoo/2328/tasks/4930718) https://github.com/odoo/o-spreadsheet/commit/4a4312e57 [REF] Border: Bordel [Task: 4852413](https://www.odoo.com/odoo/2328/tasks/4852413) https://github.com/odoo/o-spreadsheet/commit/6fa1bbcdc [REF] cellComputedStyle: use positionmap [Task: 4930718](https://www.odoo.com/odoo/2328/tasks/4930718) https://github.com/odoo/o-spreadsheet/commit/71360e47d [MOVE] positionMap: move to helper [Task: 4930718](https://www.odoo.com/odoo/2328/tasks/4930718) https://github.com/odoo/o-spreadsheet/commit/7be6b4636 [FIX] clipboard: insert cells bugged with array formulas [Task: 4938311](https://www.odoo.com/odoo/2328/tasks/4938311) https://github.com/odoo/o-spreadsheet/commit/27bbe0fa6 [FIX] xlsx: `=undefined` when importing array formula [Task: 4812508](https://www.odoo.com/odoo/2328/tasks/4812508) https://github.com/odoo/o-spreadsheet/commit/9bfd31dff [REV] xlsx: make import verbose [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) 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: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@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>
Deleting a single calendar event now correctly opens the confirmation window again, so users can preview and send cancellation emails to attendees before removal. This prevents confusing redirects and failed deletion flows caused by missing email template language settings.
Original PR description
Since [1], we removed the 'lang' value from mail templates, as we allow to use a fallback on main partner's lang instead. However, when deleting a calendar.meeting (from Form or calendar) we usually…
Since [1], we removed the 'lang' value from mail templates, as we allow to use a fallback on main partner's lang instead. However, when deleting a calendar.meeting (from Form or calendar) we usually (if no sync is on, and when deleting a single event) open the wizard of confirmation that allows to preview and send cancelation email to the attendees, in order for them to have the information before complete deletion. (see the following wizard: calendar.popover.delete.wizard) Before [1], we wanted to make sure the template had a lang set. But we forgot to change that condition, resulting in a lot of cases where deletion is just not working, and redirects to the calendar view instead (default behavior), as the lang on the template is not set. We now use the ´_render_lang´ method instead in order to compute the lang value and use it in the condition as well, actively opening the confirmation modal instead of doing nothing and redirecting to the calendar event. [1]: odoo/odoo@dc016190e3f3fd90b10fb1eac07204e22d715109 Task-5079771
This update prevents the web app from downloading the same large JavaScript file twice when users switch between light and dark mode. It improves loading efficiency and reduces unnecessary data usage, especially for users on slower networks.
Original PR description
CSS bundles are different. JS bundles are the same. Don't download it twice. Note: this avoids downloading a duplicated 3MB compressed (12MB uncompressed) JS bundle with a different name (which avoids the cache being properly used) when switching from light to dark mode. task-5074720
Duplicating sections on invoices, quotations, and templates now preserves settings such as optional sections and hidden composition. This prevents users from having to manually reapply those choices after copying a section.
Original PR description
Steps to reproduce: - Create a quotation/invoice with a section and a product line - Mark the section as optional section or hide composition - Duplicate the section Issue: - The duplicated section does not retain its "optional/hidden composition" status. - This happens because readonly/invisible fields (like `is_optional`, `collapse_*`) are not copied when duplicating records in a StaticList. Cause: - By default, StaticList skips readonly/invisible fields during duplication to avoid issues with some technical fields (e.g., in accounting). Solution: - Introduce a `copyFields` option to `duplicateRecords` in StaticList to explicitly allow copying certain fields, even if they are readonly or invisible. Affected version: 19.0 opw-4669991 Co-Authored by: Julien Carion <juca@odoo.com> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the Point of Sale from crashing when taxes are enabled and added to a product after that product was already used in an active POS session. It helps store staff continue selling without interruption after tax settings are changed in the backend.
Original PR description
Steps to reproduce: ---- - From accounting disable taxes - Create new product - Open PoS UI and add product in orderline - Go to backend and enable taxes - Add tax in previously created product - Open UI again Issue: ---- - We will have traceback Cause: ---- - undefined error as pos_receipt_label is undefined as we don't have chance to reload data as product is already in orderline Fix: ---- - added optional chaining so we don't have undefined error also we have to reload data after enabling taxes from the configurations in the backend ---- task - 4762770 Forward-Port-Of: odoo/odoo#208511
This fix prevents invoice creation from crashing when a company's country has been removed and VAT number verification is enabled. Users can continue creating invoices while the system safely handles incomplete company address settings.
Original PR description
The system crashes with an error when a user tries to create an invoice. **Steps to produce:-** - Install `Accounting` module and switch to `BE Company`. - Go to `Settings > Users & Companies >…
The system crashes with an error when a user tries to create an invoice.
**Steps to produce:-**
- Install `Accounting` module and switch to `BE Company`.
- Go to `Settings > Users & Companies > Companies` and remove the country from the BE company.
- Create a new customer with:-
- Country as `Belgium`.
- Tax ID as `DE123456788`.
- `Accounting > configuration > settings > enable Verify VAT Numbers`.
- Now try to make `invoice` with customer as previously created customer.
**Error:-**
`TypeError : argument of type 'bool' is not iterable`
**Root cause:-**
- At [1], the code attempts to access `company.country_id`, but since the country was manually removed from the company, it evaluates to null record, leading to the error.
**Solution:-**
- Add a safeguard to ensure `company.country_id` also exist before accessing `country_group_codes`.
[1] -https://github.com/odoo/odoo/blob/4c2330f3cc0d1a0046e28d351f894763aeea57d2/addons/base_vat/models/res_partner.py#L764
**sentry-6851141424**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#225158Portal users can now buy paid eLearning courses after completing a quiz from a shared preview link. The change restores the cart action so the purchase flow no longer fails with an error.
Original PR description
Steps to reproduce: 1) Install `website_sale_slides`. 2) Create a course with enroll policy 'On payment' and publish it. 3) Add a content allow preview it and add a quiz 4) Go to website, click Share…
Steps to reproduce:
1) Install `website_sale_slides`.
2) Create a course with enroll policy 'On payment' and publish it.
3) Add a content allow preview it and add a quiz
4) Go to website, click Share button and open the generated link in incognito.
5) Login as a portal user, pass the quiz and click "Buy this course".
Issue:
- A traceback occurred:
`Cannot read properties of undefined (reading 'addToCart')`.
Cause:
- The method call `self.call('websiteSale', 'addToCart', ...)` relied on the deprecated `call` service, which was removed in commit https://github.com/odoo/odoo/commit/b8d0ab4275b24510161de9db793020f3489b0446.
- The service and method `call('websiteSale', 'addToCart'` is not valid and was not updated here :
https://github.com/odoo/odoo/blob/35161ecf0dd3fde47db9b2166718339c2e30ac92/addons/website_sale_slides/static/src/js/slides_course_join.js#L29
- As a result, `addToCart` was no longer accessible and triggered a JS error.
Solution:
- Update the code to use the new service and method: `call('cart', 'add',`
opw-5045424
Forward-Port-Of: odoo/odoo#224760This update fixes errors when opening subsection options in sales orders and ensures quote PDFs respect hidden pricing for combo products. It also adds missing combo product quantities in PDFs, making customer-facing quotes clearer and consistent with the portal.
Original PR description
### **Description:** - This PR addresses two functional issues in the Sale module and a minor cleanup in `sale_management` tests. ### **Fixes:** - **Traceback on subsection options:** - Opening options for subsections in Sale Orders raised a traceback due to a missing export introduced during refactor 5f4db1d. - Fixed by restoring the missing export. - **PDF report for combo products:** - Combo product prices were shown in PDF quotes despite "hide prices" being enabled. - Quantities of combo products were also missing in the PDF. - Fixed by adding the missing condition for hidden prices and showing the quantity (e.g., Office combo x 5). **Cleanup:** - Removed redundant logic in the optional products test method in `sale_management`. task-4999851 See Also: - https://github.com/odoo/enterprise/pull/94276 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website theme settings panel now avoids unnecessary background rendering when opening sections. This reduces the delay users experience when working in the theme tab, making website customization feel faster and smoother.
Original PR description
The purpose of this commit is to reduce the rendering time of the theme tab. Currently, when we have a BuilderRow that contains a collapse slot, we always render it in order to know whether it contains content or not, so that we can display the collapse arrow. The collapse feature is widely used in the theme tab. This results in a lot of unnecessary calculations, because the only case that requires dynamic calculation of the collapse arrow is the BuilderOption for visibility. So we will therefore add the “observeCollapseContent” props to enable or disable the rendering of the slot in order to dynamically display the collapse arrow. This change saves approximately 20% of time. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223929
Fixes an error that blocked users from posting Work in Progress accounting entries from manufacturing orders. This keeps manufacturing accounting workflows usable after recent inventory valuation changes.
Original PR description
Steps to reproduce: * install MRP and Accounting * open an MO * go to actions -> "Post WIP Accounting Entry" Odoo shows an error message, ending with: ``` KeyError: 'property_stock_account_input_categ_id' ``` This looks like a missing part of the "New Inventory valuation" (commit https://github.com/odoo/odoo/commit/08b62a4bbcc6f9a391b2cc00a621ef4c76100229). 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
The purchase catalog's Add All action now adds only the currently suggested and filtered products, preventing unintended items from being added to purchase orders. This makes bulk purchasing suggestions more reliable and reduces manual cleanup for buyers.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Unbuild operations now use the current product valuation method instead of forcing a match to the original manufacturing cost. When build and unbuild costs differ, Odoo creates a corrective accounting entry so inventory values and product costs stay accurate.
Original PR description
**Current behavior:** Since https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3, we valuate an unbuild operation by attempting to match the ensuing OUT layer with the IN…
**Current behavior:** Since https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3, we valuate an unbuild operation by attempting to match the ensuing OUT layer with the IN layer from the original MO. The point being to eliminate a potential valuation imbalance for the manufactured product (might affect cost, etc.). **New behavior** Don't attempt to match an unbuild valuation layer with the original MO valuation layer. If there is some cost difference between build time and unbuild time, make a corrective journal entry for it. **Issue with current behavior** The following sequence: 1. Create Product A with average costing, real-time valuation 2. Create 2 components, avg costing, real-time val 3. Create a BoM for Product A with the components 4. Manufacture 3 units of Product A with different component quantities (can set flexible consumption on BoM) 5. Unbuild the first manufactured unit Results in Product A's cost not matching the expected average cost according to the valuation layers. **Cause of the issue:** Unbuilding the first MO created an out move at the original "build time" cost, but since we've built 2 additional qty, that original cost is not the current average cost- thus the "theoretically current" standard price of the product (sum of layers value divided by remaining qty) is no longer the value we see on the product form. **Fix:** Don't try and match the valuation layers. Aside from issues such as the one described above, it might not actually make functional sense to do so (e.g., FIFO isn't actually adhering to first-in-first-out if we're preferring the original IN layer for an unbuild valuation). Instead we make a journal entry with any excess cost of production (it was actually a solution proposed in the discussion on https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3 in the first place). Additionally, now that we aren't doing this mapping, we can revert the non-test difference of https://github.com/odoo/odoo/commit/3a69456a291da593748475c86e7efc6234019e47, as this commit was fixing an issue introduced by the change which added the mapping. opw-[4877597](https://www.odoo.com/web#id=4877597&view_type=form&model=project.task) Forward-Port-Of: odoo/odoo#222014 Forward-Port-Of: odoo/odoo#221718
Restores missing context information so the Import Template button appears again where users expect it in accounting moves and timesheets. This helps users access the correct import template labels and links, reducing confusion during data import workflows.
Original PR description
The context was removed in a previous change (https://github.com/odoo/odoo/pull/222793), which caused the "Import Template" button to disappear in `account.move` and `hr.timesheet`. These models rely on context keys in `get_import_template` to display the correct label and link. This commit adds the `context` back and tests for both models.
The Ask AI button now opens the AI chat window as expected, even when background loading is still in progress. This prevents users from clicking the button and seeing no response, improving reliability of the AI assistant experience.
Original PR description
The issue is caused by the use of orm service wrapped in "useService". When the button is clicked, it will be unmounted but an orm query is still pending. The pending query is blocked by the useService because the component is already unmounted. The remedy is to use the raw orm service.
The Swiss balance sheet now calculates previous-year unallocated earnings correctly and separates current-year earnings into retained and allocated amounts. This helps businesses reviewing Swiss financial reports see accurate profit and loss carryforward figures at fiscal year-end.
Original PR description
Before this commit, `Previous Year unallocated profit and loss` was showing wrong amount. With this commit, we adapt this line (change period of one of its expression) and we add two new lines to reflect the actual year earnings, retained and allocated. Steps, with fresh db: - 1 invoice confirmed in the past year for 1000 - Create the carryforward move (1000 debit for 999 account, and 1000 credit for 2979 account) - Go to balance sheet, set date as 'End of last fiscal year' -> See 'Previous Years Unallocated Earnings` showing -1000 opw-4054341 Forward-Port-Of: odoo/enterprise#94243 Forward-Port-Of: odoo/enterprise#91281
This fix prevents improvement suggestions from being created for extra work orders that are not part of the original bill of materials. It avoids duplicate quality check setup that could trigger an error when manufacturing orders are duplicated, improving reliability for shop floor and PLM users.
Original PR description
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the…
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the method `add_check_in_chain()`, the `point.sequence` cause issue because the check can have multiple points https://github.com/odoo/enterprise/blob/e85d11f9b3bf07a55e5365adac7370955a149566/mrp_workorder_plm/models/mrp_workorder.py#L58-L66 That the case because multiple quality checks sequences are created when the operation_id is False That's unexpected because PLM isn't made to suggest WorkOrder additions and Suggestions to New WO, but only Suggestions to existing operations So we avoid to create `quality.point` when there is no operation_id ## Information: To get the Traceback, you need to install Quality_control because this module will copy the QC to the MO including the one with operation_id set to False ## Steps to reproduce: Quality_control and plm need to be installed - Enable Work Orders in Settings - Create a Product with a BoM - Create a MO for the Product - Add an extra WO - In the Shop Floor, Mark as Done the BoM's WO - On the Extra WO, click Gear Icon > Update Instructions > Improvement Suggestion > Add a Step - Insert a Title and Propose Change - Duplicate the MO and redo the Shop Floor steps to get the Traceback opw-4874108 Forward-Port-Of: odoo/enterprise#92384
This fixes rental pricing rules so night-based rental periods cannot be combined with other rental period types. It helps avoid incorrect rental setups and pricing issues for businesses using Odoo rental products.
Original PR description
with other rental periods. Fixes from regression testing post merge.
The Aged Receivable and Aged Payable reports now correctly expand all lines when users apply custom grouping. This prevents incomplete or broken report views, helping finance teams review outstanding customer and vendor balances more reliably.
Original PR description
We previously checked if the groupby is not changed to use the _common_custom_unfold_all_batch_data_generator. However, the user cannot change this field and is instead editing the user_groupby, so _common_custom_unfold_all_batch_data_generator was always used.