Daily updates from Odoo
Navigate
Branch
Tuesday, June 24, 2025
66 changes
36 changes
Enhancements to existing features
Notebook tabs are now easier to read, with the active tab standing out more clearly and a subtle hover effect on other tabs. This improves day-to-day navigation in affected screens while also aligning internal styling names with Odoo coding guidelines.
Original PR description
This PR accentuates the difference between an active tab and other tabs, as well as adding a small hover effect. Furthermore, these changes provided an opportunity to update the naming of the Notebook component's CSS variables, ensuring compliance with our coding guidelines. task-4797562 PR com: https://github.com/odoo/odoo/pull/213204 | Before | After | |--------|--------| | <img width="348" alt="tab-before" src="https://github.com/user-attachments/assets/a2c8eae4-1701-457b-ad84-f2b19433a513" /> |  |
Sign users get clearer list and kanban views, including shared status, responsible person, signed document details, and filters for shared templates. Shared signing links are easier to identify and manage, while access to shared requests is better aligned with template permissions.
Original PR description
In this commit, **List View Improvement** - Implemented functionality to stop sharing from the list view when document is shared. - Add fields of 'Responsible' and 'signed document' in list view. - Rename 'shareable' field to 'shared' for better clarity. - Hide sign request of public user from document menu of user when sharing a template for sign. - Add a icon to display 'shared' templates in kanban view when template is shared by link. - Add filter to filter out shared templates. - Now, the shared sign request will be accessible to all users who have permission to access the sign template. **Improve the share wizard form view and add validity of share request** - the ability to manually stop sharing documents using the Stop Sharing option remains. However, the option to set a validity period like with other document types, is still not available. task-4279714
Rental orders can now be linked to planning slots so availability is checked before a customer books online. This helps businesses such as hotels, bike rentals, or car rentals avoid accepting bookings when the required resource is already unavailable.
Original PR description
## [IMP] website_sale{_stock}_renting: move hook in website_sale_renting This commit reviews a bit the code in WebsiteSaleDaterangePicker to be able to reuse the product availabilities feature…
## [IMP] website_sale{_stock}_renting: move hook in website_sale_renting
This commit reviews a bit the code in WebsiteSaleDaterangePicker to be
able to reuse the product availabilities feature developed in
website_sale_stock_renting to be able to reuse it in other module
depending on website_sale_renting module.
## [IMP] {sale_renting_}planning: bind slot and SO
In the case of Rental of services, such as bike rental, car rental, hotel room rental...
Relying on the resources makes a lot of sense. It is already enabled to book a resource in such case!
However, when no resources are available for the role specified by the product, a booking (Rental Order)
can anyway be confirmed which therefore leads to conflicts in planning since no resources are available for this order!
In the case of an hotel, they can't make a new room!
Such use case can be worked around in Rental with some automations.
However, eCommerce needs to be fed with availabilities in order to prevent double booking from website.
task-4863072This update adjusts automated tests for spreadsheet pivot views after an underlying library change. It helps keep quality checks reliable so future document spreadsheet updates can be validated with confidence.
IoT boxes can now pair correctly when a company runs multiple Odoo databases. The pairing process includes the target database and lets the IoT box authenticate to the right place, avoiding failed connections in multi-database environments.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/214960 We now provide the database name in the pairing token so that the IoT box is able to reach the specific database that we are pairing from. This fixes not being able to use the IoT in a multi-DB environment. We also add a new `/iot/authenticate` route, so that the IoT box can acquire a session in the correct DB. This is needed as the websocket connection requires an active session. task-4815521
The “To Check” review feature is now limited to authorized accounting roles, such as bookkeepers and accounting administrators. This helps prevent general billing or invoicing users from incorrectly marking accounting entries as reviewed.
Original PR description
The To Check feature should only be used by the accountants. A random user who only use accounting to create bills and invoices shouldn't be allowed to review and mark a move as checked. This is why now we only show the feature to accountant (Bookkeeper and Accounting admins) and raise an error if a user without the good rights try to change the checked field. Linked: https://github.com/odoo/odoo/pull/211598 Linked: https://github.com/odoo/upgrade/pull/7740 task-4807991
This update streamlines how customer follow-up records check whether related accounting activity exists. It avoids a more fragile query pattern, helping keep the feature reliable without changing day-to-day user workflows.
Original PR description
odoo/odoo#205208
The field service task form has been reorganized so planned dates and allocated hours appear in the main left section instead of crowding the right side. This makes the most relevant scheduling and workload information easier to find when working on field service tasks.
Original PR description
Before this commit, the task form view of a fsm task contains many fields in the right part. This commit moves the planned dates and the allocated_hours in the left part of the form view but only for fsm tasks. task-4753294
Appointment scheduling can now limit how many people each staff member can handle per time slot, not just resources like rooms or equipment. Businesses can also allow multiple separate bookings in the same slot up to a configured limit, making group classes, consultations, and visits easier to manage.
Original PR description
Before this commit, we only managed resources' capacities for the appointments. From this commit we extend the manage capacities for the users. Users can be booked for the given number of people at max. Also, the user's capacity is shared therefore different people can book an appointment with a user until the capacity of the user. Task-4144546
Payment processing for SEPA Direct Debit now tracks failures through the payment transaction status instead of relying on exceptions. This makes subscription payments easier and more reliable for other Odoo apps to handle, reducing rollback-related issues.
Original PR description
Before this commit the payment engine relied on raising exceptions. That was inconvenient for other modules (ex. Subscription)to use payment as it was needed to handle exceptions and cursor rollback. After this commit the payment engine will rely on only the transaction state. task-3648413 See also: - https://github.com/odoo/odoo/pull/169967
Payroll batches now select employee contract versions directly, making it clearer which payslips will be generated before processing. The update also improves default wizard values, date handling, payroll dashboard navigation, and a Saudi payroll form layout issue.
Original PR description
Problem ---------- Change the pay run selection of employees to selection of versions directly Pre-fill the pay run wizard Change datetime in date In l10n_sa the pay run form view is not well displayed In the payroll dashboard: a click in a specific payrun open the form view Objective ---------- - Filter directly per versions, we can see which payslip will be generated (less magic than before) - Change view to select versions with the hr_version list view - Set a default schedule pay to monthly and a placeholder for the structure_id - Change datetime in date and _get_name_for_period date conversion - Move the report field in l10n_sa pay run form view - Correct the onClickLine in the payrun part of the payroll dashboard Solution ---------- - Use the valid contract filter from the generate_payslip method in the _get_valid_versions_domain directly task-4878411
Colombian and Peruvian electronic invoicing generation was updated to use Odoo’s newer shared UBL tools, improving maintainability and consistency with required tax formats. The update also includes a small Belgian accounting fix so setup scripts only update accounts that actually exist, preventing avoidable installation errors.
Original PR description
We refactor the Colombian and Peruvian UBL to use the new UBL generation helpers. Community PR: https://github.com/odoo/odoo/pull/214151 DIAN doc: https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Tecnico-Factura-Electronica-de-Venta-vr-1-9.pdf task-4242065
The barcode app now displays a stock move line description when it adds information beyond the product name. This helps warehouse staff better identify picking or movement details directly in the scanning interface.
Original PR description
This commit adds the description of a stock move to the interface of the barcode app, in case that the description is not empty and is not the same as the product name (which is the current default). odoo/odoo#177390 Task-4126824
Planning and Gantt schedule items now show start and end times in a shorter HH:MM format. This makes schedule labels easier to read and leaves more room for important details, especially in languages where AM/PM formatting takes extra space.
Original PR description
## [IMP] planning: condensed time displayed in planning This commit changes a bit the display name of planning template to condense the time displayed for start and end time. ## [IMP] web_gantt: condense time displayed in pill display name Before this commit, the time displayed to show start and end time of a pill could be long in some languages, like in English when we use AM and PM, because of that, there are not enough spaces to display other useful information in the display name of the pill. This commit changes the time format to display the time in HH:MM in the display name of pill. task-4801407
The Colombian electronic invoicing module has been updated to use the latest retry process. This keeps invoice submission recovery aligned with the main platform changes and helps maintain reliability when retrying failed electronic document operations.
Original PR description
in odoo/odoo#211194 we refactored the retry mechanisim, l10n_co_edi is the only edi that is using the refactored function, hence, need to updated task-4728978
Resolved issues and error corrections
This fix prevents editor-only styling files from being included in the main website builder asset bundle. It reduces the risk of unintended visual effects or maintenance issues in appointment, knowledge, rental sales, and studio website editing features.
Original PR description
*: website_appointment, website_knowledge, website_sale_renting, website_studio
In commit [1], the website builder was rewritten in owl. The concept of `*.inside.scss` files was introduced: style that is loaded on pages, inside the iframe only during edition.
The `html_builder.assets` bundle was not supposed to have those. We fix this issue and potential future issues by adding a remove on all modules that include all files within `static/src/{website_builder,plugins}`.
[1]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2
Community PR https://github.com/odoo/odoo/pull/215218Spreadsheet filter editors now handle cases where a filter has no default value without causing incorrect behavior. This helps users configure spreadsheet filters more reliably, especially when leaving optional filter values blank.
Original PR description
Task: 4886119
The payroll pay run kanban view no longer crashes when opened. This restores access to the pay run overview, helping payroll teams continue their work without interruption.
Original PR description
Problem ---------- - Traceback when payrun kanban view is open Objective ---------- - Make the payrun kanban view available Solution ---------- - Remove the xpath in the PayrunKanbanHeader task-4890216
Code cleanup and technical improvements
The Planning app code has been reorganized by moving separate planning classes into their own files. This does not change user-facing behavior, but it makes the codebase easier to maintain and safer to update in the future.
Original PR description
- split planning classes each to its own file extract from this: odoo/enterprise#81319 Task: 4866865
The IoT-related driver and homepage components were consolidated into a single module structure. This reduces internal complexity and helps keep maintenance of connected device features more consistent without changing day-to-day business workflows.
Original PR description
`hw_posbox_homepage` files had no reason to be placed in a separate module, we then merged it into `hw_drivers`, that we renamed `iot_drivers` in the meantime. Community PR: odoo/odoo#213749 Task: 4860513
Miscellaneous changes
Steps to reproduce: - Open Follow-up levels for 15 days -Check the option for “Automatic” - Go to the email template set in the “Content Template” and set a test email in the CC of the email configuration. - Open the follow up reports for a sample customer who is in the “15 days” stage and change the next reminder date to be a day before today. The reminder must be set to automatic. - There will appear a red ribbon on the right corner that says “In need of action” - In another tab, open sch
Original PR description
Steps to reproduce: - Open Follow-up levels for 15 days -Check the option for “Automatic” - Go to the email template set in the “Content Template” and set a test email in the CC of the email…
Steps to reproduce: - Open Follow-up levels for 15 days -Check the option for “Automatic” - Go to the email template set in the “Content Template” and set a test email in the CC of the email configuration. - Open the follow up reports for a sample customer who is in the “15 days” stage and change the next reminder date to be a day before today. The reminder must be set to automatic. - There will appear a red ribbon on the right corner that says “In need of action” - In another tab, open scheduled actions and Open the action “Account Report Followup; Execute followup” - Run this action manually Issue: Go to the previous tab and notice that the email is only sent out to the customer partner record and not the cc email address Note: This issue only occurs if the automatic followup is set. If we try to manually followup by clicking on the “Follow Up” button on the customer report, the email is sent correctly to both addresses. Cause: When running the cron, the recipients aren't in the options Solution: Add an helper to find all necessary recipients from the template if no recipient ids in the options opw-4527398 Forward-Port-Of: odoo/enterprise#87014 Forward-Port-Of: odoo/enterprise#83944
When creating a SEPA Direct Debit (SDD) mandate for a contact, mandates linked to a child contact are not recognized as valid at payment registration. It should be but it suggests a configuration issue so it needs a warning but not an error. task-4507135 Forward-Port-Of: odoo/enterprise#85882
Original PR description
When creating a SEPA Direct Debit (SDD) mandate for a contact, mandates linked to a child contact are not recognized as valid at payment registration. It should be but it suggests a configuration issue so it needs a warning but not an error. task-4507135 Forward-Port-Of: odoo/enterprise#85882
**Current behavior:** A user who can otherwise use the entire mps can not add 'rows' to the view (i.e., write on `ResCompany` `mrp_mps` fields). **Expected behavior:** Can add rows to the MPS. **Steps to reproduce:** 1. Install `mrp_mps` with demo data 2. Edit "Demo" user access rights so they only have the mrp manager group 3. Open MPS -> click `Rows` dropdown (under search bar) and add/remove one -> access error **Cause of the issue:** Field is on `ResCompany` and the MPS us
Original PR description
**Current behavior:** A user who can otherwise use the entire mps can not add 'rows' to the view (i.e., write on `ResCompany` `mrp_mps` fields). **Expected behavior:** Can add rows to the MPS. **Steps to reproduce:** 1. Install `mrp_mps` with demo data 2. Edit "Demo" user access rights so they only have the mrp manager group 3. Open MPS -> click `Rows` dropdown (under search bar) and add/remove one -> access error **Cause of the issue:** Field is on `ResCompany` and the MPS user can't write to that model. **Fix:** Permit writes on `ResCompany` `mrp_mps` fields if they are on an mps field and the user has the mrp manager group. opw-4591655 Forward-Port-Of: odoo/enterprise#87765 Forward-Port-Of: odoo/enterprise#80881
Issue / current behavior: In the gantt view of hr.attendance, the no content help screen will only show if there's no rows. In the case of a fresh database with only the Administrator employee, the help will not appear because the admin row exists by default. Required behavior: The gantt view should show the no content help screen if recordIds inside the single row is empty, meaning that there's no hr.attendance records. task-4874129 Forward-Port-Of: odoo/enterprise#87874
Original PR description
Issue / current behavior: In the gantt view of hr.attendance, the no content help screen will only show if there's no rows. In the case of a fresh database with only the Administrator employee, the help will not appear because the admin row exists by default. Required behavior: The gantt view should show the no content help screen if recordIds inside the single row is empty, meaning that there's no hr.attendance records. task-4874129 Forward-Port-Of: odoo/enterprise#87874
Steps to Reproduce: - Open the Planning app. - Click on the avatar of a resource. - Refresh the page, then click on the avatar of a resource again. Issue: - A traceback error occurs when clicking on the avatar after a page refresh, likely due to component destruction or incomplete loading. Solution: - Consolidated multiple RPC calls into a single method in the parent component to avoid issues with component destruction during `super.onWillStart`. - Modified `onWillStart` to ensure `h
Original PR description
Steps to Reproduce: - Open the Planning app. - Click on the avatar of a resource. - Refresh the page, then click on the avatar of a resource again. Issue: - A traceback error occurs when clicking on the avatar after a page refresh, likely due to component destruction or incomplete loading. Solution: - Consolidated multiple RPC calls into a single method in the parent component to avoid issues with component destruction during `super.onWillStart`. - Modified `onWillStart` to ensure `hr_access` data is fetched without risking lifecycle conflicts. task-4210513 Forward-Port-Of: odoo/enterprise#86878 Forward-Port-Of: odoo/enterprise#75121
- Reworking the DIOT report to comply with 2025 standard - Adjusting operation_type values on res.partner to match - Adjusting DIOT tests and other tests affected by the rework Community PR: https://github.com/odoo/odoo/pull/204742 task-4568859 Forward-Port-Of: odoo/enterprise#88253 Forward-Port-Of: odoo/enterprise#82864
Original PR description
- Reworking the DIOT report to comply with 2025 standard - Adjusting operation_type values on res.partner to match - Adjusting DIOT tests and other tests affected by the rework Community PR: https://github.com/odoo/odoo/pull/204742 task-4568859 Forward-Port-Of: odoo/enterprise#88253 Forward-Port-Of: odoo/enterprise#82864
In this PR: ========== - We are improving the mobile view to make online orders more consistent and seamless. task-4585233 Forward-Port-Of: odoo/enterprise#88166 Forward-Port-Of: odoo/enterprise#80838
Original PR description
In this PR: ========== - We are improving the mobile view to make online orders more consistent and seamless. task-4585233 Forward-Port-Of: odoo/enterprise#88166 Forward-Port-Of: odoo/enterprise#80838
### Issue: Steps to reproduce: - In the settings enable packagings - Create a storable product P with Units as uom and a barcode - Inventory > Configuration > Product > Units & Packagings - Click on pack of 6 > Packaging Barcodes > New - Create one for your product with a different barcode - Go to barcode > Inventory count #### Issue 1: - Scan your packaging > It create a line for 1 Pack of 6 - Apply #### > If you check on the product form you have 1 on Hand unit #### Issue 2
Original PR description
### Issue: Steps to reproduce: - In the settings enable packagings - Create a storable product P with Units as uom and a barcode - Inventory > Configuration > Product > Units & Packagings - Click on…
### Issue: Steps to reproduce: - In the settings enable packagings - Create a storable product P with Units as uom and a barcode - Inventory > Configuration > Product > Units & Packagings - Click on pack of 6 > Packaging Barcodes > New - Create one for your product with a different barcode - Go to barcode > Inventory count #### Issue 1: - Scan your packaging > It create a line for 1 Pack of 6 - Apply #### > If you check on the product form you have 1 on Hand unit #### Issue 2: - Scan your packaging > It create a line for 1 Pack of 6 - Scan your product > Nothing happens rather than adding one unit #### Issue 3: - Scan your product > It create a line for 1 Unit - Scan your packaging > Nothing happends rather than adding 6 units ### Cause of the issue: The issue 1 is the most problematic as it introduce corrupted data. The issue has been introduced by Commit 188ad6980222a77168c462cf149cb79bf28ca2e6 where packagings have been merged with uoms. Prior to this commit, scanning a packaging would convert the barcodeData to to be expressed in the uom of the product: https://github.com/odoo/enterprise/commit/188ad6980222a77168c462cf149cb79bf28ca2e6 The commit came with the additional feature of creating lines refering dirrectly to the packaging, for instance scanning a pack of 6 would create one line: 1 pack of 6. While this behavior make sense in the context of pickings since stock moves can bear different uoms than the product it self, it does not in the context of stock.quant's since the uom of the quant is necessarily the one of the product: https://github.com/odoo/odoo/blob/9f8e9ca2676f5e3ccc34522d444d1f02e2d21f92/addons/stock/models/stock_quant.py#L53-L55 Now, the issue is that in inventory counts you edit quants via the barcode lines. When the barcode changes are applied in db, we provide the data's to write or create via these lines: https://github.com/odoo/enterprise/blob/38e0ae75c2cfddfe76535847ff8b67823b0c6419/stock_barcode/static/src/models/barcode_model.js#L920-L928 https://github.com/odoo/enterprise/blob/f2dd6326c2084ed467c3e4c3e9d931f41309ad79/stock_barcode/static/src/models/barcode_quant_model.js#L307-L320 which can not provide to the backend the packaging uom in order to convert the related quantities (as it is not a quant field). In particular, the Command.create and Command.update are simply populated expecting these qties to be expressed in the product_uom. ### Fix: Converting the barcodeData's quantity in case a packaging is provided will solve all issues since all the save commands will be expressed in the expected uom and since the barcode machinery is already tailored to treat the addition of appropriate qties. opw-4872894 Forward-Port-Of: odoo/enterprise#87999
The size of fields for Previous Payroll IDs was set to 20 characters. According to the STP xml schema, the max size is 200. This is already checked with the schema validation so the limit can be safely removed. This commit also adds a disclaimer for the users informing them regarding STP compliance. opw-4820852 Forward-Port-Of: odoo/enterprise#88248 Forward-Port-Of: odoo/enterprise#87068
Original PR description
The size of fields for Previous Payroll IDs was set to 20 characters. According to the STP xml schema, the max size is 200. This is already checked with the schema validation so the limit can be safely removed. This commit also adds a disclaimer for the users informing them regarding STP compliance. opw-4820852 Forward-Port-Of: odoo/enterprise#88248 Forward-Port-Of: odoo/enterprise#87068
**Current behavior:** Scanning a package type in an MO in barcode while having a raw move line (component line) selected will result in a traceback. **Expected behavior:** Put the comp line in a new pack of that package type. **Steps to reproduce:** 1. Make a packge type 2. Make a new MO -> open it in barcode 3. Scan some component, select the new line 4. Scan the barcode of the package type -> traceback **Cause of the issue:** We end up calling `action_put_in_pack` when `
Original PR description
**Current behavior:** Scanning a package type in an MO in barcode while having a raw move line (component line) selected will result in a traceback. **Expected behavior:** Put the comp line in a new pack of that package type. **Steps to reproduce:** 1. Make a packge type 2. Make a new MO -> open it in barcode 3. Scan some component, select the new line 4. Scan the barcode of the package type -> traceback **Cause of the issue:** We end up calling `action_put_in_pack` when `this.resModel` is `MrpProduction` (which does not define this method). **Fix:** Define the method for the barcode MRP model to display a notification to, rather, scan a product (scanning a package here doesn't make sense). opw-4564834 Forward-Port-Of: odoo/enterprise#87629 Forward-Port-Of: odoo/enterprise#81374
When we enable the integer rounding option on this report, a traceback is raised at the report opening. It happens because integer rounding didn't support a groupby when a custom engine is used. opw-4688616 Forward-Port-Of: odoo/enterprise#87618 Forward-Port-Of: odoo/enterprise#86452
Original PR description
When we enable the integer rounding option on this report, a traceback is raised at the report opening. It happens because integer rounding didn't support a groupby when a custom engine is used. opw-4688616 Forward-Port-Of: odoo/enterprise#87618 Forward-Port-Of: odoo/enterprise#86452
Before this commit, the statement attachment was created only when doing an import but not when creating the statement manually. This commit will move the logic to create the attachment into the create of account bank statement task-4863754 Forward-Port-Of: odoo/enterprise#87599
Original PR description
Before this commit, the statement attachment was created only when doing an import but not when creating the statement manually. This commit will move the logic to create the attachment into the create of account bank statement task-4863754 Forward-Port-Of: odoo/enterprise#87599
Before, The closing balance of saft export for the unaffected earnings account was always at zero which makes no sense. Now this is fixed as the closing balance should always be equal to the initial balance. Forward-Port-Of: odoo/enterprise#88096 Forward-Port-Of: odoo/enterprise#87419
Original PR description
Before, The closing balance of saft export for the unaffected earnings account was always at zero which makes no sense. Now this is fixed as the closing balance should always be equal to the initial balance. Forward-Port-Of: odoo/enterprise#88096 Forward-Port-Of: odoo/enterprise#87419
Removed the module as it was removed in fe442111dc22b5d0bb9717ff69a5f473e1e81d50, and mistakenly resurrected in 65ed1bddbb2d032f74ef84afc9add85a1503dec5 Forward-Port-Of: odoo/enterprise#87742
Original PR description
Removed the module as it was removed in fe442111dc22b5d0bb9717ff69a5f473e1e81d50, and mistakenly resurrected in 65ed1bddbb2d032f74ef84afc9add85a1503dec5 Forward-Port-Of: odoo/enterprise#87742
From saas-18.2, some account changes on Swedish CoA when other module(s) are installed have been breaking the test for the export (that exports all the available account). This commit adapts the expected test file to ignore this changes and ensures the result always stays the same, no matter what modules are installed on the database. This fixes the currently recurring runbot errors from saas-18.2 and up: [runbot-159821](https://runbot.odoo.com/odoo/error/159821) Forward-Port-Of: o
Original PR description
From saas-18.2, some account changes on Swedish CoA when other module(s) are installed have been breaking the test for the export (that exports all the available account). This commit adapts the expected test file to ignore this changes and ensures the result always stays the same, no matter what modules are installed on the database. This fixes the currently recurring runbot errors from saas-18.2 and up: [runbot-159821](https://runbot.odoo.com/odoo/error/159821) Forward-Port-Of: odoo/enterprise#86752
Since #82896 reconciling bank statement line that has a partner with company_id set to a branch company leads to removing the partner from the statement line when validating the reconciliation. Steps: - Create a branch company and select it. - Create a contact with company_id == the branch company. - Create and confirm an invoice with that contact as partner. - Go back to accounting dashboard, and open bank reconciliation widget. - Create a new transaction with the invoice amount and tha
Original PR description
Since #82896 reconciling bank statement line that has a partner with company_id set to a branch company leads to removing the partner from the statement line when validating the reconciliation. Steps: - Create a branch company and select it. - Create a contact with company_id == the branch company. - Create and confirm an invoice with that contact as partner. - Go back to accounting dashboard, and open bank reconciliation widget. - Create a new transaction with the invoice amount and that partner. - Select it, and select the invoice we created, and click on Validate. - Notice that the partner is not set (removed) from the transaction. Fix: Add another condition to check if the statement line company matches the partner company before trying to unset the partner if its company isn't a root company. opw-4809740 Forward-Port-Of: odoo/enterprise#88103 Forward-Port-Of: odoo/enterprise#87440
30 changes
Enhancements to existing features
When creating a bank account, users now see a non-blocking warning if the same account is already linked to another partner. This helps prevent duplicate bank account records while still allowing users to continue when appropriate.
Original PR description
If a bank account is already linked to a partner, display a non-blocking warning on the bank account creation form, containing a link to the other partner. task-4431041
Importing public holidays in Planning is now much faster on databases with many scheduled shifts. The change lets Odoo process affected planning hours more efficiently in batches, reducing a reported import from about 40 minutes to 4 minutes.
Original PR description
The current code of `_recompute_shifts_in_leave_periods` explicitely calls the compute method `_compute_allocated_hours` of planning.slot to recompute the allocated hours according to modifications…
The current code of `_recompute_shifts_in_leave_periods` explicitely calls the compute method `_compute_allocated_hours` of planning.slot to recompute the allocated hours according to modifications done to the public holidays. Calling the method directly like that is far from ideal as we are missing proper batching, fields protection, etc.. that the ORM usually does for computed fields. This commit replaces the explicit call by an `add_to_compute`. This essentially marks the field as "to be recomputed". This recomputation then happens at the next flush_model/recompute_model call and can applies the proper ORM optimizations of batching by `PREFETCH_MAX` size, protecting fields to avoid triggering loops of recomputations. This speeds up the import of new Public Holidays in an already populated database. #### speedup In a customer database with 50K planning.slots, 1300 of which needs to recompute their allocated_hours, the import timing Before PR vs After PR is the following: - 40 min -> 4 min opw-4782452
This change improves how report menu items are updated when reports are turned on in bulk. It reduces repeated work during accounting report setup and testing, helping the process run more efficiently without changing user-facing behavior.
Original PR description
This mostly benefits `test_balance_sheet_balanced` as it mass activates reports on every `_set_up_localization` (so before rendering each report, something it does ~200 times).
When users use the automatic setup fix to make a POS scale certified, the system now also turns on Units of Measure. This helps businesses quickly assign the right product units, such as kilograms, and reduces manual setup after certification fixes.
Original PR description
This commit automatically enables the 'Units of Measure' setting when the user auto-fixes their settings to make their POS scale certified. While this is not a strict requirement, it helps the users to then quickly set the correct units for their products (e.g. kg) task-4885681
Resolved issues and error corrections
A new automated test checks that restaurant table booking and release behavior works as expected in Point of Sale. This helps prevent issues where booked table orders might not be properly sent to the server, improving confidence in restaurant operations.
Original PR description
Following this commit: 9448836cb0307161d829f28bda0bdb5bf50f3a10 This commit adds a test to ensure that the booking and release table functionality works correctly in the POS Restaurant module. The test verifies that when a table is booked the order is correctly sent to the server.
This fix prevents the Point of Sale screen from failing when an order line is quickly added and then removed, a situation that can happen with loyalty features. It improves cashier reliability by avoiding rendering errors during normal sales workflows.
Original PR description
Before this commit, if an order line was added and then removed (for example, by the loyalty module), it could cause errors during rendering due to missing required props for the orderline. This scenario is common with the loyalty module. opw-4724428 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could stop users from printing picking operations for deliveries containing kit products when packaging was selected on one line. The change helps keep warehouse delivery documents reliable for sales involving packaged kits.
Original PR description
Step to reproduce : - Create a quotation with 2 products using kits - Use the delivery smart button - Change one of the line to use a packaging - Print the picking operation Problem: ZeroDivisionError: float division by zero [opw-4824380](https://www.odoo.com/odoo/project.task/4824380) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website eLearning course cards now correctly show the “New Content” ribbon when recently published content has been added. This helps visitors quickly spot updated courses and improves visibility for fresh learning material.
Original PR description
Restore the "New Content" ribbon (activated via page options) which should be displayed on the course card when a new published content has been added during the last 7 days. The ribbon isn't displayed because it's declared in a "t-field" element which replaces its content to display the field at rendering. Task-4852463 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where images copied and pasted inside the HTML editor could disappear if they were stored directly in the copied content. The editor now preserves those embedded images correctly, reducing broken content when users paste rich text.
Original PR description
Problem: When copying content that includes an image with a `src` in base64 format, the origin is incorrectly prepended to the `src`, resulting in a broken image on subsequent paste. Cause: The logic that prepends the origin doesn't exclude base64 images, causing the final `src` to be invalid. Solution: Skip appending the origin if the `img.src` is already in base64 format. Steps to reproduce: 1. Copy an image (with base64 `src`) into the editor. 2. Copy the image again from within the editor. 3. Paste the image. → The image is not shown due to incorrect `src`. opw-4872676 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an error that could stop users from printing Picking Operations reports for kit products when packaging was removed from a component. This keeps delivery paperwork available and avoids disruption during sales and warehouse processing.
Original PR description
**Step to reproduce:** 1. Install mrp & sales module. 2. Ensure Product Packaging is activated for Inventory. 3. Create a product with a Kit-type BOM that includes two components. 4. Assign packaging…
**Step to reproduce:**
1. Install mrp & sales module.
2. Ensure Product Packaging is activated for Inventory.
3. Create a product with a Kit-type BOM that includes two components.
4. Assign packaging to the product.
5. Create and confirm a Sales Order for this product.
6. Open the Delivery Order generated from the Sales Order.
7. Remove the packaging from one of the components of the kit in the delivery order.
8. Try to print the Picking Operations report.
**Issue:**
When printing the Picking Operations report, a
`ZeroDivisionError: float division by zero` occurs during the
computation of the `product_packaging_qty` field on stock.move.line.
**Cause:**
The `_compute_product_packaging_qty` method performs a
division operation that assumes packaging is present on the move:
https://github.com/odoo/odoo/blob/c1d88949a3c305b425ab3a862741ebab7b7cd344/addons/mrp/models/stock_move.py#L101
When the packaging is removed, `move.product_packaging_id` becomes
falsy, and accessing `.qty` returns 0. This leads to division by zero.
**Solution:**
To fix this, the computation of product_packaging_qty is avoided for kit
component move lines that do not have packaging assigned.
This ensures that the computation only applies to valid lines with the packaging.
**opw-4805679**Internal users without sales or event-specific permissions can now register for events that include multiple-choice questions. This prevents a server error during registration and adds test coverage to help keep the flow reliable.
Original PR description
A global rule for base.group_user is missing for the event.answer.model. This commit adds it. A test has been added to check that internal users have all the permissions required to register for events. Reproduce: The administrator must create a new user and let empty the permissions for sales and for events. When trying to register for an event that has questions with options, this new user will trigger a 500 error. task-
Recent Google Calendar synchronization changes were rolled back after reports that synced users could see duplicated events. This urgent reversal prioritizes calendar reliability while the underlying issue is investigated further.
Original PR description
This commit reverts odoo/odoo#208302, odoo/odoo#188848 and odoo/odoo#192876. Issues have been found on the synchronization with Google related to the duplication of events for synchronized users. As it is an urgent matter and these two fixes were merged too close to prior of the first problem report, we're dropping them for additional investigation. task-4873605
Canceling the payment that created a third-party check now also updates the check’s status, so it no longer incorrectly appears as "In Hand". This keeps payment and check records aligned and helps avoid confusion in check tracking workflows.
Original PR description
Fixed an issue where, when canceling a payment that originated the third-party check, the check remained in "In Hand" status when it shouldn't. Now, when the payment is canceled, the check status is…
Fixed an issue where, when canceling a payment that originated the third-party check, the check remained in "In Hand" status when it shouldn't. Now, when the payment is canceled, the check status is properly updated to reflect its cancellation, ensuring consistency in the workflow. **Description of the issue/feature this PR addresses:** This PR addresses an issue where a third-party check remains in the "In Hand" status even after the origin payment is canceled. **Current behavior before PR:** A customer payment is created with a third-party check. The payment is confirmed, then moved to draft and canceled. After cancellation, the third-party check remains in the "In Hand" status in the third-party checks menu, even though the origin payment has been canceled. **Desired behavior after PR is merged:** When the payment is canceled, the check will no longer remain in "In Hand" status in the third-party checks menu after the payment is canceled. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update refreshes the spreadsheet component and fixes several issues that could affect daily spreadsheet work. Users should see more consistent behavior for data validation rules, pivot tables with blank values, and formatting copied across merged cells.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a38db25af [REL] 18.0.35 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/a38db25af [REL] 18.0.35 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/000269c29 [IMP] demo: add clear action [](https://www.odoo.com/odoo/2328/tasks/) https://github.com/odoo/o-spreadsheet/commit/6dbaa3f6e [FIX] data_validation: preserve rule order when updating a rule [Task: 4863726](https://www.odoo.com/odoo/2328/tasks/4863726) https://github.com/odoo/o-spreadsheet/commit/ea088b06f [FIX] pivot: treat empty strings the same as blank cells [Task: 4889073](https://www.odoo.com/odoo/2328/tasks/4889073) https://github.com/odoo/o-spreadsheet/commit/a3a8e49d6 [FIX] paint_format_store: copy and apply merges on paste format [Task: 4179256](https://www.odoo.com/odoo/2328/tasks/4179256) https://github.com/odoo/o-spreadsheet/commit/28db4a786 [FIX] paint_format_store: update selection after pasting format [Task: 4807659](https://www.odoo.com/odoo/2328/tasks/4807659) https://github.com/odoo/o-spreadsheet/commit/efd5a396e [REF] clipboard: extract paste helpers to reduce duplication [Task: 4807659](https://www.odoo.com/odoo/2328/tasks/4807659) 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: 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>
This fix restores the visual highlighting of selected planning shifts after an underlying calendar behavior changed. It helps users continue to spot important shifts in the Planning calendar as expected.
Original PR description
Before this commit, the PlanningCalendarCommonRenderer override the eventToRender method but this method has been removed in parent class. This commit changes the method overriden to make sure the class is added when some shifts have to be highlighted.
A shop floor manufacturing test now waits for a component update before checking the result. This reduces false test failures and helps keep manufacturing workflows stable for future releases.
Original PR description
### Issue: The tour test_add_component_from_shop_foor_in_multi_step_manufacturing makes an assert on the value of an input before waiting for this input to be updated. runbot-build-error-226734
Paused timers now keep the correct elapsed time when they are resumed. This prevents inflated time entries and improves accuracy for users relying on timers for work tracking or billing.
Original PR description
The current implementation of the `startTimer` function incorrectly calculates the current time when the timer has been paused. For ex, if the timer started 24 hours ago and was paused 23 hours ago. Calling `startTimer` to resume the timerReactive component, would calculate the offset between the paused time and current time incorrectly. This change ensures that no extra time is added to the timer, when it is in a paused state, maintaining accurate tracking of elapsed time. opw-4658402 opw-4824616 opw-4829820
This fix ensures subscription lines that have already been invoiced keep their invoiced quantity even when related dates are changed. This helps prevent incorrect billing adjustments and keeps subscription revenue records consistent.
Original PR description
Backport of: - [ ] https://github.com/odoo/enterprise/commit/981665196f162df9702d471223e16edf5deb99d5
Miscellaneous changes
**Problem:** when the decimal precision of Product Price is higher than the precision of the currency used, the seller is not correctly selected based on their prices **Steps to reproduce:** - Open Settings/Technical/Database Structure/Decimal Accuracy - For Product Price set a decimal accuracy of 3 - Create a new product - In the purchase tab add 3 lines for a vendor the same vendor - First line with a price of 0.025 and a qty of 1 - Second line with a price of 0.022 and a qty of 2 -
Original PR description
**Problem:** when the decimal precision of Product Price is higher than the precision of the currency used, the seller is not correctly selected based on their prices **Steps to reproduce:** - Open…
**Problem:** when the decimal precision of Product Price is higher than the precision of the currency used, the seller is not correctly selected based on their prices **Steps to reproduce:** - Open Settings/Technical/Database Structure/Decimal Accuracy - For Product Price set a decimal accuracy of 3 - Create a new product - In the purchase tab add 3 lines for a vendor the same vendor - First line with a price of 0.025 and a qty of 1 - Second line with a price of 0.022 and a qty of 2 - Third line with a price of 0.020 and a qty of 3 - Create a new request for quotation for this product with this vendor - set a quantity of 3 **Current behavior:** The unit price is 0.022 **Expected behavior:** It should be 0.020 **Cause of the issue:** When sorting the set of product.supplierinfo, rounding should not be applied because the rounding will be the one of the currency and the Product Price could allow more decimal than the currency. If we allow vendors price to be more precise the the currency, the sorting should take into account this precision when choosing a vendor. opw-4823919 Forward-Port-Of: odoo/odoo#213826
In certain cases, the unit price value on a partial credit note does not match the unit price on the corresponding invoice This commit solves this issue by using a more precise return value of _get_line_amount_before_discount_jod in XML numbers calculations It also makes sure that all newly created companies in Jordan use `round_globally` for `tax_calculation_rounding_method` task-4877278 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr F
Original PR description
In certain cases, the unit price value on a partial credit note does not match the unit price on the corresponding invoice This commit solves this issue by using a more precise return value of _get_line_amount_before_discount_jod in XML numbers calculations It also makes sure that all newly created companies in Jordan use `round_globally` for `tax_calculation_rounding_method` task-4877278 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214844
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. --- I co
Original PR description
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields 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#206026
Steps: - Open any views with a search bar - Press ALT + Q (hotkey used to focus search input) - Nothing happens This behavior has been introduced by https://github.com/odoo/odoo/pull/185960 This commit just adds the focus that had previously been removed to enable the input to be correctly selected so that the user can write directly on it. opw-4874194 Forward-Port-Of: odoo/odoo#215127
Original PR description
Steps: - Open any views with a search bar - Press ALT + Q (hotkey used to focus search input) - Nothing happens This behavior has been introduced by https://github.com/odoo/odoo/pull/185960 This commit just adds the focus that had previously been removed to enable the input to be correctly selected so that the user can write directly on it. opw-4874194 Forward-Port-Of: odoo/odoo#215127
Problem: - When using the same account for both discount allocation and payment method, the system failed to distinguish between the two discount lines resulting in an imbalance during accounting entry generation. Solution: - Added `amount_currency` as part of the key in the discount allocation logic to correctly differentiate between the positive and negative entries. opw-4806356 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forw
Original PR description
Problem: - When using the same account for both discount allocation and payment method, the system failed to distinguish between the two discount lines resulting in an imbalance during accounting entry generation. Solution: - Added `amount_currency` as part of the key in the discount allocation logic to correctly differentiate between the positive and negative entries. opw-4806356 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212231
Calling external resources can lead to random failures in tests test_tracking_short_code calls a tracked url to check the side effect of this call, but we actually don't need to follow the redirect. Fixes the test by not following the 301 and checking the target instead. Forward-Port-Of: odoo/odoo#215232 Forward-Port-Of: odoo/odoo#215175
Original PR description
Calling external resources can lead to random failures in tests test_tracking_short_code calls a tracked url to check the side effect of this call, but we actually don't need to follow the redirect. Fixes the test by not following the 301 and checking the target instead. Forward-Port-Of: odoo/odoo#215232 Forward-Port-Of: odoo/odoo#215175
When generating a credit note for an invoice with multiple lines of the same product (same product_id, name, and price_unit) but different discounts, the system incorrectly matches both credit note lines to the same invoice line. This commit solves this issue by adding line discount to the criteria used to match credit notes lines with invoices lines. task-4876849 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo
Original PR description
When generating a credit note for an invoice with multiple lines of the same product (same product_id, name, and price_unit) but different discounts, the system incorrectly matches both credit note lines to the same invoice line. This commit solves this issue by adding line discount to the criteria used to match credit notes lines with invoices lines. task-4876849 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214779
Steps to reproduce: - create a new journal with foreign currency - create an invoice (amount:100) with this journal and set it "to check" - Go to dashboard Issue: check balance is in company currency amount but the symbol is the one from the currency of the journal Solution: Chkl: <strike>Misc and Sales/Purchase Journals should display all amounts in company currency</strike> Eventually, we decided that it would be better for the stable versions to keep the currency displayed as the
Original PR description
Steps to reproduce: - create a new journal with foreign currency - create an invoice (amount:100) with this journal and set it "to check" - Go to dashboard Issue: check balance is in company currency amount but the symbol is the one from the currency of the journal Solution: Chkl: <strike>Misc and Sales/Purchase Journals should display all amounts in company currency</strike> Eventually, we decided that it would be better for the stable versions to keep the currency displayed as the one from the journals. We therefore use the same logic as for the bill/invoices opw-4349684 Forward-Port-Of: odoo/odoo#208444 Forward-Port-Of: odoo/odoo#203475
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. Forward-Port-Of
Original PR description
Before this commit, several invisible fields were present in the views, whereas after https://github.com/odoo/odoo/pull/162009 these fields need to be either justified or removed. The needed fields are fetched automatically after https://github.com/odoo/odoo/pull/137031 This commit adds a comment to each field so that the tests pass in stable versions, to avoid potential issues with inheritance in custom views. We will removes the unnecessary invisible fields in master. Forward-Port-Of: odoo/enterprise#83421
The default_get method of the 'l10n_uk.hmrc.send.wizard' model assumed the presence of 'client_data' in the context, leading to a KeyError during test_display_name_new_record. This fix checks for the presence of 'client_data' before attempting to call import_vat_obligations. If 'client_data' is not present, it avoids calling import_vat_obligations and raises a UserError, thus preventing the KeyError. build_error-115767 Forward-Port-Of: odoo/enterprise#84327
Original PR description
The default_get method of the 'l10n_uk.hmrc.send.wizard' model assumed the presence of 'client_data' in the context, leading to a KeyError during test_display_name_new_record. This fix checks for the presence of 'client_data' before attempting to call import_vat_obligations. If 'client_data' is not present, it avoids calling import_vat_obligations and raises a UserError, thus preventing the KeyError. build_error-115767 Forward-Port-Of: odoo/enterprise#84327
When generating the German tax report, field Kz83 was included in the XML even when the value was 0.00. This caused the exported file to be rejected by the ELSTER platform. This fix removes Kz83 from the XML when its value is null or zero. The ELSTER platform automatically calculates this field if it's missing. source: https://help.deltek.com/product/maconomy/documentation/BPMReporting/CountryReports/Appendix_Germany.html opw-4783544 Forward-Port-Of: odoo/enterprise#86978
Original PR description
When generating the German tax report, field Kz83 was included in the XML even when the value was 0.00. This caused the exported file to be rejected by the ELSTER platform. This fix removes Kz83 from the XML when its value is null or zero. The ELSTER platform automatically calculates this field if it's missing. source: https://help.deltek.com/product/maconomy/documentation/BPMReporting/CountryReports/Appendix_Germany.html opw-4783544 Forward-Port-Of: odoo/enterprise#86978
Before this PR: - Fields `l10n_in_exception`, `l10n_in_gst_return_period_id`, and `l10n_in_gstr2b_reconciliation_status` were copied when duplicating records. - The field label for GSTR-2B status was shown as just "Status", which could be ambiguous. After this PR: - Added `copy=False` to all three fields to prevent unintended data duplication. - Updated the label "Status" to "GSTR-2B Status" in `l10n_in.gst.return.period` to make the purpose clear. OPW: 4882698 Forward-Port-Of: odoo/e
Original PR description
Before this PR: - Fields `l10n_in_exception`, `l10n_in_gst_return_period_id`, and `l10n_in_gstr2b_reconciliation_status` were copied when duplicating records. - The field label for GSTR-2B status was shown as just "Status", which could be ambiguous. After this PR: - Added `copy=False` to all three fields to prevent unintended data duplication. - Updated the label "Status" to "GSTR-2B Status" in `l10n_in.gst.return.period` to make the purpose clear. OPW: 4882698 Forward-Port-Of: odoo/enterprise#88110