Friday, July 25, 2025
30 changes · saas-18.3
Enhancements to existing features
This update adds automated checks for several Point of Sale data models, helping ensure that orders, order lines, categories, and presets continue to work as expected. It reduces the risk of future changes causing regressions in key POS workflows.
Original PR description
Add hoot tests for POS models including `pos_order`, `pos_order_line`, `pos_category`, and `pos_preset`. task-id: 4945821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds automated checks for the main passkey journeys, including registration, login, verification, and deletion. It helps reduce the risk of future authentication changes accidentally breaking passkey access for users.
Original PR description
The one big beautiful test suite written for passkeys Not tested yet: renaming passkeys, not sure if this is worth testing Forward-Port-Of: odoo/odoo#219165 Forward-Port-Of: odoo/odoo#217583
IoT Box logs are now kept longer and have more space reserved, making it easier to investigate issues after weekends. Routine technical messages are reduced, and error pages now guide support teams to relevant web server logs faster.
Original PR description
This commit contains the following small changes: - Change the number of days of logs kept from 2 to 3. The reason for this is so that if a problem occurs on a Friday evening, it is still available to view on a Monday. - Increase the size of the /var ramdisk to 512M, to ensure it will never be filled even if we end up with 3x100MB log files. - Change various INFO logs to DEBUG, to clean-up the log output to be more useful. - Change werkzeug log level to WARNING, to stop showing every HTTP request as a log. - Add a link to the Nginx logs to the 502 error page. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220324
This update aligns certified scale checksum handling with the latest Toledo scale error checks. It helps ensure point-of-sale scale integrations continue to validate correctly after the related scale error detection changes.
Original PR description
This PR adapts the scale checksum to the PR adding the error checks to Toledo scales: https://github.com/odoo/odoo/pull/217674 Forward-Port-Of: odoo/enterprise#90877 Forward-Port-Of: odoo/enterprise#89602
Resolved issues and error corrections
Autocomplete fields now preserve spaces when users type multiple words, preventing words from being visually joined together in suggestions. This improves clarity and reduces input mistakes in contact, employee, resource, and tag selection fields.
Original PR description
This commit fixes an issue in many2x autocomplete fields where typing a complete word followed by a space would result in that space being removed, causing the next word to stick to the previous one. The problem stemmed from how highlighted search results wrap the matched text in a \<span\>, which inadvertently isolates adjacent spaces. Combined with the display: flex styling of parent elements, these isolated spaces were visually trimmed. To resolve this, each autocomplete result item is now entirely wrapped in a \<span\>, preventing space trimming and ensuring proper word separation during input. task-4898120
Self-ordering menus no longer show categories that only contain hidden special products, such as fiscal items used for Belgian compliance. This keeps restaurant customers from seeing confusing empty categories when ordering.
Original PR description
Steps to reproduce: - Install the pos_black_box_be module. - Configure a Belgian restaurant and enable self-ordering. - Open the self-ordering page. - The category 'Fiscal category' is displayed even though it does not contain any products. This commit ensures that categories containing only special products (which are not displayed) will no longer appear on the self-ordering page. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217642
This fixes an issue where post-upgrade tests could be skipped when custom modules were present after an upgrade. It helps ensure upgrade validation runs as expected, reducing the risk of undetected problems before deployment.
Original PR description
Since e4ca53b0a3780c298c280988997321c2be8e7d3f we compute `updated_modules` from information in the DB. This leads to an empty `module_names` list if there are custom modules after an upgrade. Since the `to upgrade` modules is non-empty, `module_names` gets the list of `registry.updated_modules` which is empty when we are just running post upgrade tests. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220429
This fixes an unstable automated test for Live Chat navigation by skipping an unreliable shortcut menu step and opening the needed page directly. It helps keep release validation more stable without changing the user experience.
Original PR description
The `test_session_history_navigation_back_and_forth` test sometimes fail. The test ensures we can navigate between the session list view and discuss using the browser history. To do so, the tour first accesses the list view using the command palette. However, command palette sometimes doesn't open. The command palette part of the tour is useless as the view can directly be accessed by passing the correct url to the `start_tour` function. This commit removes the command palette part of the tour thus fixing the issue. fixes runbot-108129 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#220345
Point of Sale sessions now use a customized session numbering prefix exactly as configured. This prevents the shop name from being incorrectly added before custom sequence values, making session IDs clearer and consistent for reporting and operations.
Original PR description
Description of the issue/feature this PR addresses: The sequencing for new PoS Session isn't right when set to another value than the default. Current behavior before PR: The PoS name was added before the intended sequence. For example, if you set the pos.session sequence to TEST/ with the Furniture Shop, it return Furniture ShopTEST/00001. Desired behavior after PR is merged: The PoS Session name should be using only the sequence if the sequence isn't the default one. When the pos.session sequence is set to TEST/ and you open the Furniture Shop, it should return TEST/00001. Steps to reproduce: - change the default sequence prefix for pos.session - open a pos session and Open Register - go to Point of Sale > Orders > Sessions - check the Session ID opw-4822673 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212775
This change updates an automated point of sale sales test to use the correct test startup method. It helps prevent false test failures in the release process, improving confidence that updates can be delivered reliably.
Original PR description
Replace `start_tour` by `start_pos_tour`. Trying to fix runbot error 230078. opw-4819708 Forward-Port-Of: odoo/odoo#220159 Forward-Port-Of: odoo/odoo#219940
Fixes an issue in the website editor where underlines and strikethroughs disappeared when gradient text colors were applied. This ensures styled website text displays as intended, improving visual consistency for published content.
Original PR description
Problem: Using `-webkit-text-fill-color: transparent;` in `.text-gradient` is required for gradient text, but it also causes underline (`<u>`) and strikethrough (`<s>`) styles to become invisible, since those decorations rely on the text fill color. This results in the lines under `u` and `s` elements not being rendered when gradient text is applied. Solution: Render the underline and strikethrough manually using a `background-image` (gradient) applied to `s` and `u` tags. This simulates the missing lines while keeping the gradient text style. Steps to reproduce: 1. Add a text block in the website editor. 2. Apply a text color gradient. 3. Apply underline or strikethrough. → The underline/strikethrough is not visible. opw-4797201 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210390
This update makes automated web interaction tests more predictable by ensuring the test clock is fully controlled during timing checks. It reduces false test failures caused by heavy CPU load, helping maintain confidence in release validation without changing user-facing behavior.
Original PR description
Hoot provides us with "time control" features such as "advanceTime", which is useful for testing scenarios where we want to wait for some events to happen (such as a debounced function), but without…
Hoot provides us with "time control" features such as "advanceTime", which is useful for testing scenarios where we want to wait for some events to happen (such as a debounced function), but without actually waiting too much. The way it works is that hoot simply override setTimeout and related functions to keep track of all handlers and their scheduled time. However, this is not enough, as the real setTimeout is still by default called, so it can happen in some tests that when we advance the time by some amount, say 500ms, if the cpu load is very high, then other handlers that are scheduled AFTER the 500ms may have run as well. To fix this, we can use the freezeTime feature from hoot. It simply give the full control to hoot, and do not call the real setTimeout function. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change removes an unnecessary test dependency from the live chat discussion test suite. It helps keep automated checks simpler and reduces the risk of unrelated test setup causing failures, without changing customer-facing behavior.
Original PR description
remove the dependency on `TestPortal` from `test_discuss_full`, as it is not needed. [runbot-226366](https://runbot.odoo.com/odoo/error/226366) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220259 Forward-Port-Of: odoo/odoo#213161
Fixed Italian electronic invoices so product descriptions with line breaks are converted into a single line before submission. This prevents invoices from being rejected by the Italian SDI tax portal when descriptions contain newline characters.
Original PR description
**Steps to reproduce:** 1. Install l10n_it_edi module 2. Create an invoice where the product description includes a newline. 3. Make sure the invoice uses VAT tax. 3. Confirm the invoice. 4. Click on…
**Steps to reproduce:** 1. Install l10n_it_edi module 2. Create an invoice where the product description includes a newline. 3. Make sure the invoice uses VAT tax. 3. Confirm the invoice. 4. Click on send 5. Only enable Send to Tax Agency. 6. Click "Send" again. 7. Go to the Attach files and download the attachment. 8. Check the `<Descrizione>` (description) in the XML file. **Issue:** The `<Descrizione>` field in the `<DettaglioLinee>` tag includes newline characters, which are not accepted by SDI portal. **Causes:** The line description is using '\n'.join(...), which results in actual newline characters in the XML. https://github.com/odoo/odoo/blob/ca7de6b2fbe4626583b67a34d77bbb523d972f79/addons/account/models/account_move_line.py#L513 https://github.com/odoo/odoo/blob/a7a29ed691db4f1607c0d12929c56845681164fa/addons/l10n_it_edi/models/account_move.py#L316-L324 **Solution:** To fix this, replace newline characters in the description with spaces and Strip leading/trailing whitespace. This ensures SDI receives a single-line <Descrizione>value. **Before fix:**  **After fix:**  Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4808826) opw-4808826 co-authored by: Raj Bhuva (bhra@odoo.com) Forward-Port-Of: odoo/odoo#218168
This fix makes an automated check in the Sales Project area wait for a dialog to close before continuing. It helps prevent intermittent test failures during updates, improving release reliability without changing day-to-day user behavior.
Original PR description
Steps to reproduce the issue: 1- install sale_project without demo data 2- as the test is not deterministic, adding step_delay may help reproducing it The test was failing because the tour was not waiting for the modal to close before trying to click on the created sale order line. so accoding to this line https://github.com/odoo/odoo/blob/18.0/addons/sale_project/models/sale_order_line.py#L63-L63 the New Sale order line have in it a default product which doesnt open a modal build_error-163102 Forward-Port-Of: odoo/odoo#220179
Creating a user from an employee now checks whether that email address is already used by an existing user. Instead of causing an error, the system shows a warning so HR teams can resolve the duplicate email safely.
Original PR description
This error is triggered when creating a users from employee records. Steps to Reproduce: - Install the `hr` module. - create a `user`. - Create an `employee` using the same email as the user. - In…
This error is triggered when creating a users from employee records.
Steps to Reproduce:
- Install the `hr` module.
- create a `user`.
- Create an `employee` using the same email as the user.
- In the newly created employee record, click the Create User action.
`ValueError: UniqueViolation('duplicate key value violates unique constraint "res_users_login_key"\nDETAIL: Key (login)=(roman.hatossy@gmail.com) already exists.\n') while evaluating
"employees = env['hr.employee'].browse(env.context.get('selected_ids', []))\nif employees:\n action = employees.action_create_users()"`
This error occurs when attempting to create users from employee records, but user with the same email already exists in the system.
This commit ensures that users are created for employees only if no existing user is using the same email address. If a user with the employee's email already exists, a warning notification is displayed instead of error.
sentry-6600672947
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe sales order task counter now excludes tasks that have been converted into templates. This prevents the Sales screen from showing an inflated number of active tasks, giving users a more accurate view of work linked to an order.
Original PR description
…count Before this commit, the tasks stat button displayed in the SO form view takes into account the task templates if the templates are linked to the SO. This commit adds a condition to exclude the task templates in the count displayed in that stat button. Steps to reproduce the issue ---------------------------- 0. Install sale_timesheet module 1. Go to Sales app 2. Create a quotation with a service product in which a task will be created once the quotation will be confirmed. 3. Confirm the SO 4. Click on tasks stat button 5. Click on the task containing in the list view 6. Convert that task into a template 7. Go back to the form view of the SO created. Expected Behavior ----------------- The Tasks stat button count should not take the template into account. Current Behavior ---------------- The Tasks stat button count take the template into account. task-4781135
This fixes a display issue in the HTML editor where deleting a checked checklist box could leave the checkmark behind. Users editing checklists will now see the item update cleanly and consistently when they remove a checkbox.
Original PR description
Problem: After commit 02ae5a645a80e6088a596b6273e70b5476e79e88, pressing backspace on a `li` adds the `oe-nested` class. If that `li` is a checked checkbox item, only the checkbox is removed, but the checkmark remains visible. Solution: Always remove the `o_checked` class when converting the list item to `oe-nested`. **After we backspace on checked item:** Before: <img width="975" height="324" alt="image" src="https://github.com/user-attachments/assets/374bf407-25d7-45fa-a84e-0aef72aa3690" /> After: <img width="972" height="366" alt="image" src="https://github.com/user-attachments/assets/33575d7c-ea1c-432c-b4b6-4ce248e2fc78" /> Steps to reproduce: - Add a checklist - Check an item - Press backspace to remove the checkbox -> The checkmark remains visible, even though the box is gone opw-4953981 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219838
To reproduce: ============= -1 Install Peru accounting -2 Change language to Spanish PE -3 Go to add a new Tax form -4 Change code to ISC -5 Debug mode you will see the selections are not well translated Problem: ======== Translation team requested to change selections translations Solution: ========= Update translations opw-4954487 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220353
Original PR description
To reproduce: ============= -1 Install Peru accounting -2 Change language to Spanish PE -3 Go to add a new Tax form -4 Change code to ISC -5 Debug mode you will see the selections are not well translated Problem: ======== Translation team requested to change selections translations Solution: ========= Update translations opw-4954487 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220353
Fixes an issue where the image crop tool could stay visible after an image was deleted, and another issue where reopening crop after using image transform could fail. This makes image editing in Odoo's editor more reliable and prevents confusing on-screen tools from lingering.
Original PR description
### Steps to reproduce: **Issue 1:** - Add an image in the editor. - Apply image transformation (e.g., shrink it). - Open the image cropper tools. - Press the Backspace key. - Observe that cropper…
### Steps to reproduce: **Issue 1:** - Add an image in the editor. - Apply image transformation (e.g., shrink it). - Open the image cropper tools. - Press the Backspace key. - Observe that cropper still visible. **Issue 2:** - Go to To-Do and insert an image. - Click on Image Transform, then on Image Crop — observe that Image Crop opens correctly. - Click the Discard button in the Image Crop UI. - Again select the image, click Image Transform, then Image Crop. - Notice that Image Crop no longer opens. ### Description of the issue/feature this PR addresses: - Pressing Backspace removes the image from the editor. - However, the cropper remains open, and focus returns to editable area, allowing to type with the cropper still visible. - Clicking Image Crop while Image Transform was active could destroy both due to async loadBundle() timing. On subsequent attempts, ImageCrop was added before ImageTransform was removed, causing Owl to destroy both in the same frame. ### Desired behavior after PR is merged: - When the image is removed, the associated cropper is also closed. - Clicking Image Crop button while Image Transform is active now works. task-4859869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213914
This fixes UBL e-invoice generation so product identification fields are not created when a product has no barcode. It helps avoid malformed or misleading invoice data and adds test coverage for direct invoice export scenarios.
Original PR description
In the refactored UBL (with `account_edi_ubl_cii.use_new_dict_to_xml_helpers`): Currently we may generate the `StandardItemIdentification` node even in case the `barcode` is not set on the product. The issue was introduced as a FW-port issue in commit f46c10f03e59e8aae98079fc57f5295a376f2761 (18.0). The problem is that the `schemeID` attribute is always set. task-None (original fix is task-4941855) Forward-Port-Of: odoo/odoo#219896
Point of Sale category labels now display Chinese text horizontally instead of stacking characters vertically. This makes category names readable for Chinese-speaking users and improves usability at checkout.
Original PR description
**Issue** Using `max-width: min-content `combined with `d-flex` caused Chinese characters to stack vertically, as each character is treated like a word and with a 2-line height, only first two 2 characters were visible **solution:** Switch to grid layout and remove max-width to ensure label width isn't constrained by its content length. opw-4766145 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#210312
The Documents app now shows website and company fields only to the right internal users and only when those fields are relevant. This prevents portal or external users from seeing fields they should not see, while keeping the interface cleaner for internal users in simpler setups.
Original PR description
Fixes the visibility of the `website_id` and `company_id` fields. These fields other than hidden from non internal users, they should be visible to internal users only when multiple websites or multiple companies are available, respectively. Partial revert of: ddf102e5 task-4505668 Forward-Port-Of: odoo/enterprise#90876 Forward-Port-Of: odoo/enterprise#86181
Belgian Intrastat XML exports now respect the option to hide zero-value lines, matching what users see on the report screen. This prevents fully discounted or zero-cost transactions from being included in official XML exports when users choose to exclude them.
Original PR description
_______________________________________ ## Short functional explanation of the error On the export intrastat report page, we can click on the 'Posted Entries' button, which allows us to select 'Hide…
_______________________________________ ## Short functional explanation of the error On the export intrastat report page, we can click on the 'Posted Entries' button, which allows us to select 'Hide lines at 0'. Doing this will prevent 0 cost transactions from appearing in the report. However, when exporting to XML, such transactions are still displayed. Note: this is related to Belgian companies only. ## Reproduction Steps 1. Go to settings and make sure the company you're operating with is Belgian. Then, in accounting, under the Custmer Invoices section, check the 'Intrastat' option. 2. Go to products and create a new product of type 'Goods'. Then, in the 'Accounting' tab, click on a random commodity code. Set the country of origin as a country belonging to the European Union (for example, Austria). Click on save. You should see a field named 'Intrastat Supplementary Unit Amount' appear. 3. Go to accounting. Click on the 'Vendors' tab and 'Bills'. Click on New. Select a random vendor, and add a line containing the product you just created. Add the column 'Intrastat' and set the corresponding field at '11 outright...'. Then, set a price. In the 'Other Info' tab, set the field 'Intrastat Country' as a random country in the European Union (for example, Australia). Set the fiscal position at 'Import/Export' and set the 'Intrastat Transport Mode' field at '1. Sea transport'. Finally, click on confirm. 4. Duplicate the vendor bill you just created. On this new vendor bill, set the Intrastat at '12 Direct trade...'. Display the column 'Disc.%' and set the field at 100. Then click confirm. 5. Click on the 'Reporting' tab, and under 'Audit Reports', click on 'Intrastat Report'. Set the month to the current month, then click on 'Report: Intrastat(Services....)' and select 'Intrastat (Goods)'. You should be able to see the 2 vendor bills you just created. Click on 'Options' then 'Hide lines at 0': you should see the bill having a 0 cost disappear. Finally, click on the cog on the top left next to 'Intrastat Report' and click on 'XML'. 6. Once the XML file has finished downloading, open it. ### Expected behavior The transaction having a 0 cost shouldn't appear. ### Unexpected behavior The transaction having a 0 cost appears. ## Origin of the issue In the code responsible for the display of the XML report, there isn't any condition responsible for checking if the transaction should be displayed or not. _________________________________________ opw-4464123 --- Forward-Port-Of: odoo/enterprise#90193 Forward-Port-Of: odoo/enterprise#89285
Updates an incorrect validation message in the Belgian certified POS setup so it now tells users to use 0.05 rounding with the nearest method. This helps businesses configure cash rounding correctly and avoids confusion during setup.
Original PR description
The message `'The rounding method must be set to 0.5 and "Nearest"'` was wrong in `pos_blackbox_be/models/pos_config.py`
```py
def _check_cash_rounding(self):
if not self.cash_rounding:
raise ValidationError(_("Cash rounding must be enabled"))
if (
self.rounding_method.rounding != 0.05
or self.rounding_method.rounding_method != "HALF-UP"
):
raise ValidationError(
_('The rounding method must be set to 0.05 and "Nearest"')
)
```
It should be `'The rounding method must be set to 0.05 and "Nearest"'` as indicated in that documentation :
https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/belgium.html?highlight=blackbox#certified-pos-system
It's the same for 18.0
I also added the field for translation into `pos_blackbox_be.pot`
opw-4862967
Forward-Port-Of: odoo/enterprise#90321
Forward-Port-Of: odoo/enterprise#87496Website Helpdesk tickets now avoid showing a duplicate description field when no extra contact form fields are present. When the field is shown, its label uses the user's selected language, improving clarity for multilingual customers and support teams.
Original PR description
## Short functional explanation of the issue When a ticket is created and there are no additional fields, the only field in the ticket is the description field. Moreover, it is not translated. ##…
## Short functional explanation of the issue When a ticket is created and there are no additional fields, the only field in the ticket is the description field. Moreover, it is not translated. ## Reproduction Steps 1. Go to the general settings. Add a language where the term "description" differs from the english word (for example, Spanish). Do the same for the website settings. 2. Go to the website app. Scroll down and change the language. Then, click on the translated "contact us" tab. Fill the form and send the ticket. 3. Go to the helpdesk app and open the ticket you just created. ### Expected behavior The description field shouldn't show, as it appears in the description page. The field should only show if there are additional fields on the "contact us" page. ### Unexpected behavior The description field shows, untranslated. ## Origin of the issue In the ticket code, the field.name is used, instead of the field .field_description, which is translatable. Moreover, there isn't a condition checking if the field should appear or not. -- opw-4876726 Forward-Port-Of: odoo/enterprise#88913
This update makes automated checks for the Studio report editor more dependable by improving how they wait for scrolling to finish. It reduces occasional false test failures, helping teams trust release validation results without changing business functionality.
Original PR description
Linked tests: - `test_add_field_blank_report` - `test_field_placeholder` These tests contained scroll-related indeterminacies that caused them to fail from time to time. This was due to the fact that we were modifying the scroll and we used this code to make sure it was done: ```js await new Promise(requestAnimationFrame); ``` However, sometimes this wasn't enough, so we now use `waitUntil`, which is more robust https://runbot.odoo.com/odoo/runbot.build.error/181989 runbot-181989 Forward-Port-Of: odoo/enterprise#90806
Referral autocomplete search results now keep spaces in displayed names, making entries easier to read and distinguish. This fixes a display issue in the HR Referral module without changing the underlying referral workflow.
Original PR description
This commit applies the same methodology as in https://github.com/odoo/odoo/pull/218768 to resolve the missing spaces issues in many2x autocomplete search results. task-4898120
Fixed an issue where reloading a Sign request page or opening it in a duplicated browser tab could show an error instead of the request. This makes the signing workflow more reliable for users returning to or sharing active request pages.
Original PR description
**Steps to reproduce:** 1. Install sign 2. Create a sign request and send it to someone 3. Now, either refresh the page or duplicate the page **Issue:** - Traceback Error ```UncaughtPromiseError > OwlError Uncaught Promise > The following error occurred in onMounted: "Cannot read properties of undefined (reading '4')" ``` **Cause:** - requestItemStates is not defined here, which is passed by context https://github.com/odoo/enterprise/blob/ceebc915607b471ffb8e3bbde055c6816cc06b43/sign/static/src/backend_components/sign_request/sign_request_control_panel.js#L34 **Solution:** - Add a safe fallback if requestItemStates is not present backport a5a6718c3a2fba226ecd7ed3efdb32d06777b6ae opw-4949153 Forward-Port-Of: odoo/enterprise#90601
Installing Partner Commission no longer fails when the default Services product category has been removed. This prevents an installation-blocking error and lets businesses enable the module even after customizing product categories.
Original PR description
Currently, a ParseError is arising when the user installs the `partner_commission` module after deleting the `Services` in Product Categories/Configuration. Steps to reproduce: --- - Install…
Currently, a ParseError is arising when the user installs the `partner_commission` module after deleting the `Services` in Product Categories/Configuration.
Steps to reproduce:
---
- Install `Invoicing` application (without demo data).
- Invoicing > Configuration > Product Categories > Delete `Services`
- Now install `partner_commission` module
Traceback:
---
```py
ValueError: External ID not found in the system: product.product_category_services
ParseError: while parsing /home/odoo/src/enterprise/saas-18.4/partner_commission/data/data.xml:3, somewhere inside <record id="product_commission" model="product.product">
<field name="name">Commission</field>
<field name="purchase_ok" eval="True"/>
<field name="categ_id" ref="product.product_category_services"/>
<field name="type">service</field>
</record>
```
The error occurs because the user deleted `Services` in Product Categories, and then tried to install the other module.
This commit resolves the error by providing a False value for the field if the product category is missing.
sentry-6754387015
Forward-Port-Of: odoo/enterprise#90598