Thursday, May 21, 2026
30 changes · saas-19.2
Resolved issues and error corrections
This update resolves an issue where users could trigger an error when entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells within the Master Production Schedule. The fix ensures that blank input is handled correctly, preventing the error and maintaining data integrity.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052A bug was causing errors when creating new Helpdesk teams. This update ensures that a necessary email template exists before attempting to use it, preventing a system crash. This improves the stability of the Helpdesk module.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update fixes a bug that prevented order synchronization with Lazada when package information was incomplete. The system now gracefully handles missing package data, avoiding errors and ensuring orders are synced correctly. This improves the overall reliability of the Lazada integration.
Original PR description
orders can omit package data in the API payload if the package id doesn't match. When a picking still had a package_extern_id, filtering order_items by that id produced an empty list, and max() on the resulting timestamps raised ValueError and blocked order sync. Return early when no matching package lines exist so sync can continue. taskId - 6195507 Forward-Port-Of: odoo/enterprise#117194
This update fixes an issue where URLs with mixed or uppercase characters weren't automatically converted to clickable links within the HTML editor. The fix ensures that all URLs, including those with single-character domains like 'x.com', are correctly recognized and linked. This enhancement improves the user experience by making it easier to share and navigate to online resources.
Original PR description
### Description of the issue/feature this PR addresses: - URL_REGEX was constructed with the "i" flag, but passing a RegExp object to new RegExp(regex, "g") silently drops the original flags, leaving only "g". This caused uppercase (ODOO.COM) and mixed-case (Odoo.Com) URLs to not be converted to links when pressing space. ### Desired behavior after PR is merged: - URL_REGEX.source with explicit "gi" flags to preserve case-insensitive matching in `prepareConvertToLink`. - Allow automatic URL detection for single-character domains such as `x.com`, `t.co`, and `a.io` by relaxing the minimum domain label length in the URL regex from 2 to 1 characters. task-6199269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265409 Forward-Port-Of: odoo/odoo#263255
This update fixes a minor issue in the demo order system for point-of-sale and restaurant POS. Previously, demo orders used a default forward slash ('/') as an order reference. Now, all demo orders have sequential order references, except those in the 'new' state. This ensures demo orders are more accurately represented and easier to understand.
Original PR description
Before this commit: =================== - For demo orders, no proper Order Reference is displayed, by default, it is set to '/'. After this commit: =================== - All default '/' values are replaced with a sequential Order Reference, except for orders in the 'new' state . Task-6004716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264971 Forward-Port-Of: odoo/odoo#253272
This update optimizes how bank statement information is recorded within Odoo. By using a batch logging function, the system now processes bank statement details more efficiently, reducing delays and improving overall performance. This change enhances the speed and reliability of financial reporting.
Original PR description
There is no need for a full message post to get the details of the transaction. We can use the batched function instead `_message_log_batch`. Forward-Port-Of: odoo/enterprise#117923 Forward-Port-Of: odoo/enterprise#117742
This update fixes a potential error in the maintenance scheduling process. Previously, a maintenance request with only a scheduled end date could cause a system crash. The fix ensures both start and end dates are set, or both are empty, preventing this error and improving stability.
Original PR description
#### Issue: Opening the MRP planning view could raise a traceback when a maintenance request had a `schedule_end` but no `schedule_date`. `TypeError: '<' not supported between instances of 'NoneType'…
#### Issue: Opening the MRP planning view could raise a traceback when a maintenance request had a `schedule_end` but no `schedule_date`. `TypeError: '<' not supported between instances of 'NoneType' and 'datetime.datetime'` #### Steps to reproduce: 1. Install maintenance, mrp, and mrp_maintenance. 2. Create a work center. 3. Create a maintenance request linked to that work center. 4. set a `Scheduled end` and Leave `Scheduled Date` empty. 5. Go to MRP > Planning > Work Orders. #### Cause: `maintenance.request` stores `schedule_end` as a writable field, but no constraint enforces that `schedule_date` and `schedule_end` must be set together. Later, `mrp_maintenance` in `_get_maintenances_intervals` fetches maintenance intervals for the gantt view without filtering null bounds. If a request has `(schedule_date, schedule_end)` = `(False, datetime)`, that interval is passed to `Intervals(...)`, which crashes when comparing `None` with a `datetime`. #### Fix: Add a constraint on `maintenance.request` to require `schedule_date` and `schedule_end` to either both be set or both be empty. Also filter out incomplete intervals in the MRP maintenance gantt query in this enterprise PR: https://github.com/odoo/enterprise/pull/117710 opw-6225772 enterprise PR: https://github.com/odoo/enterprise/pull/117710 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This pull request corrects an accidental reversion of changes related to Weblate. The original reversion impacted several internal components, including those supporting helpdesk, IoT devices, and payroll. This ensures these features continue to function correctly.
Original PR description
This partially reverts commit 64c2b74aaec2742df68c8494b2b2378ea59ce173. Weblate accidentally reverted the following commits: - d0e4fbbf09c10b1927020657c11ac46e9ced2496 - fdb5afd26817e1aa5da6cc3eaa3f3fed1744427d - ff467b9c0bb21e1e6bafe00c2dffb7019196e5ac - d94a3c0908cfad8d39f30dc3399b42dc2078cc46
This update resolves a crash issue that occurred when opening dropdown menus on certain pages (like the `/r` page). The fix ensures the menu is fully loaded before attempting to observe it, preventing a technical error that previously caused the dropdown to fail. This improves the overall stability and usability of the application.
Original PR description
Steps to reproduce: - Go to the `/r` page. - Click a dropdown. => traceback Before this commit, `Dropdown.onOpened()` always observed `menuRef.el` as soon as the popover reported it was open. In frontend pages such as `/r`, the menu can still be rendering at that moment. The menu appears just after, but `MutationObserver.observe()` already received `undefined` and raised a `TypeError`. After this commit, `Dropdown.onOpened()` only starts the observer when the menu element exists. The dropdown can finish opening normally, so the menu is shown without traceback. Introduced by [1]. [1]: 7aed5b141f06 Forward-Port-Of: odoo/odoo#265224
This update fixes a minor visual issue in the multi-currency popover. Previously, the display would include an awkward "on" with no date, creating a less polished user experience. This change ensures a cleaner and more professional appearance for currency conversions.
Original PR description
This commit fixes a formatting issue in the multi-currency popover when no currency exchange rate is available. Previously, the popover would awkwardly display the word "on" with no trailing date (e.g., "CHF 22.81 at $ 1.00 on"). The template now conditionally hides the "on" keyword when no date is present to ensure a clean UI. task-6227557 Forward-Port-Of: odoo/odoo#265022
This update resolves an issue where the Odoo tour feature was repeatedly rendering, causing performance slowdowns. The fix prevents an infinite loop of updates triggered by state changes, limiting rendering to a manageable level. This results in a smoother and more responsive user experience.
Original PR description
Before this commit, the tour pointer entered an infinite loop of rendering because one change in its state triggered DOM mutations on which the tour listen to update the pointer, triggering the rendering of the pointer. This was because of a reactive's state being update too early. After this commit, the number of renderings is limited to a reasonable minimum. 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#265498
This update fixes an issue where the bottom sheet wasn't consistently appearing on larger touch devices like tablets. Previously, a dropdown was shown instead, which was visually incorrect. Now, the bottom sheet is always displayed, ensuring a better user experience across all screen sizes.
Original PR description
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#264973 Forward-Port-Of: odoo/odoo#264705
This update resolves an issue where the Send & Print wizard would fail when proforma PDFs weren't automatically created for invoices. The fix ensures the system handles cases where these PDFs aren't generated gracefully, preventing errors and improving the reliability of invoice sending. This primarily impacts scenarios where proforma PDFs are not immediately available.
Original PR description
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict. The…
`_generate_and_send_invoices` raises `KeyError: 'proforma_pdf_attachment'` when `_get_invoice_extra_attachments` returns an empty recordset for a move in the `success` dict.
The `proforma_pdf_attachment` key is only populated in `_generate_invoice_fallback_documents`, which is called exclusively when `allow_fallback_pdf=True`. However, the code at the return step also triggers when `allow_fallback_pdf=False` (normal wizard path), where the key is never set.
Replace the bare dict access `move_data['proforma_pdf_attachment']` with `move_data.get('proforma_pdf_attachment', self.env['ir.attachment'])` so the flow returns an empty attachment recordset instead of raising a `KeyError` when no fallback proforma PDF was generated.
Fixes: KeyError: 'proforma_pdf_attachment' in account.move.send.wizard Steps to reproduce:
1. Use the Send & Print wizard on a posted invoice
2. Trigger a condition where _get_invoice_extra_attachments returns an empty recordset (e.g. via l10n_vn_edi_viettel with sinvoice files not yet fetched) despite no error being raised
Forward-Port-Of: odoo/odoo#264564This update resolves an issue preventing normal users from canceling approval requests they created. The fix utilizes 'sudo' to grant the necessary permissions, allowing users to successfully cancel their own requests and streamlining the approval process. This improves user experience and reduces potential bottlenecks.
Original PR description
Issue: - A user who created an approval request could cancel it. But a rights error appeared during the cancellation. Steps to Reproduce: - Create an approval being a normal user. - Try to cancel the approval. - A ValidationError is raised eventhough the approvals can be cancelled by creator of it. Fix: - Changed the cancel action to use the sudo for the user who created the task and can cancel it Impact: - Users can cancel their own approval requests without errors. Task: 6123104 Forward-Port-Of: odoo/enterprise#114189
This update fixes a bug where calendar events weren't consistently appearing in user calendars when multiple contacts shared the same email address. The fix adds filters to ensure events are correctly associated with the user's partner, improving calendar synchronization reliability. This prevents missed event notifications and ensures accurate calendar views.
Original PR description
**Steps to reproduce:** - Install Calendar app and sync it with google as admin user - Setup another user, related contact will be created automatically - Log as the new user and sync his calendar…
**Steps to reproduce:** - Install Calendar app and sync it with google as admin user - Setup another user, related contact will be created automatically - Log as the new user and sync his calendar with his google account - Create another contact with the same email - Log as admin user - Invite the contact linked to the user to a calendar event - Invite the contact not linked to the user to another calendar event - Both invitations are received by email - Both events appear in the organizer and recipient google calendars - Only the event sent to the contact linked to the user shows up in odoo calendar - Event sent to the contact not linked to the user doesn't appear **Issue:** The second event is properly synced with the google calendar, but it won't show up in the user calendar as it is not assigned to his own partner. Adding the second contact to the calendar view will make the other event appear. **Fix:** Add `calendar.filters` for such duplicated partners on event creation so that the correct user has them by default in its calendar view. Another possible fix would be to adapt the partner of the event directly to the one of the user on creation when there are duplicates (but it would change the current logic where such partners are used). opw-6117460
This update fixes an issue where the 'Company Name' field on the customer website form wasn't syncing correctly, leading to potential data loss. The fix ensures that a parent company is created and linked to the customer contact, maintaining data consistency and preventing errors when creating new customers through the website.
Original PR description
Steps to reproduce: 1. Add a Website Form snippet 2. Set the action to "Create a Customer" 3. The "Company Name" field is not synced with the builder option (the "Type" dropdown shows "None") Reason: In PR[1], the company field was removed, resulting in an unexpected `None` value and potential data loss. Fix: Restore the expected behavior by ensuring that: - A parent company is created if it does not exist - The contact is linked to this parent This prevents data loss and ensures consistency between the form and backend data. [1] https://github.com/odoo/odoo/pull/211043 task-5979184
This fix resolves an issue where recurring plans weren't appearing in quotations generated using the DIN5008 template. The update adds a simple styling adjustment to ensure recurring plans are consistently visible in all reports, improving the accuracy of subscription information. This ensures users always see the complete details of their subscriptions.
Original PR description
When generating a quotation for a recurring plan, if the quotation uses the DIN5008 template, the recurring plan is not shown in the report. Steps to reproduce: ------------------- * Make sure…
When generating a quotation for a recurring plan, if the quotation uses the DIN5008 template, the recurring plan is not shown in the report. Steps to reproduce: ------------------- * Make sure l10n_din5008 is installed * Create a Swiss company * Go to the subscription app and create an order with a recurring plan * Print the quotation > Observation: The recurring plan is not shown in the report. Why the fix: ------------ We add a new scss rule to make sure the recurring plan is always shown in the report. https://github.com/odoo/enterprise/blob/fb2eb6cfdc4527e102dd22321975ab3f0d24b88b/sale_subscription/views/subscription_templates.xml#L7-L23 Before: <img width="790" height="677" alt="image" src="https://github.com/user-attachments/assets/342753fa-9655-41ac-a958-f94f6ae2b6c7" /> After: <img width="808" height="756" alt="image" src="https://github.com/user-attachments/assets/4ed726c5-0702-48ee-8578-8b0d2c0f4e55" /> opw-5960219 Forward-Port-Of: odoo/odoo#261727
This update fixes a potential issue where the website incorrectly displayed unavailable unit of measure (UOM) information for products. This change ensures that users receive accurate UOM details, improving the overall sales experience. It was triggered by recent product updates and is a minor improvement.
Original PR description
In some case, the requested uom might not be available (anymore) depending on the product latest changes. Followup on 4ac31e3545f009d0f96462f6a9098d5163ad521b --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265231
This update resolves an error that prevented users from completing the replenishment process when no routes were associated with a product. The fix ensures the system handles empty route lists gracefully, preventing a technical error and ensuring replenishment functionality works correctly for all products and company setups. This improves the reliability of the stock management process.
Original PR description
## Steps to Reproduce: 1. Install the stock module. 2. Activate "Multi-Step Routes" from settings. 3. Activate the "My Company (Chicago)" company. 4. Create a route for the Chicago company. 5. Create a new product and enable the created route on it. 6. Click on the "Replenish" button. ## Error: `IndexError - tuple index out of range` ## Cause: At [1], when none of the product routes belong to the current company or are shared routes, the filtering returns an empty recordset. As a result, trying to access the first route from the empty result raises an index error. ## Fix: This commit only assigns `route_id` when a route matches the given condition. Otherwise, it keeps the value as `False`. [1] - https://github.com/odoo/odoo/blob/13c0e082c260381a332fe1425fe2ba83a1c0c579/addons/stock/wizard/product_replenish.py#L78 sentry-7488075413 Forward-Port-Of: odoo/odoo#265468 Forward-Port-Of: odoo/odoo#265179
This update fixes a technical issue where the mock server incorrectly included archived users when determining a primary user. Now, the mock server accurately reflects the real Odoo system by only considering active users for this calculation. This ensures consistent behavior and data accuracy in the mock environment.
Original PR description
Previously, archived users were not filtered out when computing 'main_user_id' in the mock server, which did not reflect the actual behavior. This PR ensures that only active users are considered when computing 'main_user_id', aligning the mock server logic with the real implementation. enterprise: https://github.com/odoo/enterprise/pull/117480 task-6179486 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265428 Forward-Port-Of: odoo/odoo#262247
This update resolves a test failure in the WhatsApp discuss sidebar by aligning it with a recent change that now only considers active users when determining available commands. This ensures the test accurately reflects the current system behavior and prevents disruptions to the WhatsApp feature.
Original PR description
This PR updates the discuss sidebar testcase to match the new behavior where only active users are considered when computing main_user_id, reducing the number of available commands and fixing the failing assertion. community: https://github.com/odoo/odoo/pull/262247 task-6179486 Forward-Port-Of: odoo/enterprise#117830 Forward-Port-Of: odoo/enterprise#117480
This update corrects a visual issue where the project sharing notebook was using dark styles, causing a conflict with the standard light mode. The team removed a specific style file to ensure consistent appearance across the Odoo Enterprise platform.
Original PR description
The project sharing notebook previously used dark-themed styles, which conflicted with the light mode .Removing the notebook.dark.scss file from the imported files in the manifest. task-4922564 Forward-Port-Of: odoo/enterprise#99161
This update resolves an issue where UBL invoices couldn't be imported correctly if the EndpointID field had extra spaces at the end. The change automatically removes these spaces, allowing the import process to succeed and ensuring accurate invoice processing. This prevents import failures and improves data integrity.
Original PR description
**PROBLEM** When importing a ubl that, for some reason, have trailing space on the text of the EndpointID node, we refuse it. This PR strips the trailing spaces on the import. **STEP TO REPRODUCE** 1. Import a ubl as a bill, with a trailing space in the EndpointID of the other party. 2. Notice the import fail, with the error: The Peppol endpoint (50238597645 ) is not valid. It should contain only letters and digit. opw-6227395 Forward-Port-Of: odoo/odoo#265266
This update fixes an issue where newly created projects weren't automatically inheriting the stage selected in their project templates. The fix ensures that projects created from templates correctly utilize the specified stage, streamlining project setup and improving consistency. This prevents manual stage adjustments after project creation.
Original PR description
Steps to reproduce: - 1. Enable "Project Stages" in Project settings. 2. Create a project template and move it to a stage other than the first one (e.g., "Stage 2"). 3. Create a project from this template (manually or via a Sales Order). Issue: - The newly created project is always placed in the first stage instead of inheriting the stage defined in the template. Cause: - The `stage_id` field on the `project.project` model is defined with `copy=False` When a project is created from a template, this field is excluded from the copied values, causing the new project to fall back to the default first stage. Fix: - Override `copy_data` to explicitly include `stage_id` from the source project template. task-6019852 Forward-Port-Of: odoo/odoo#265429 Forward-Port-Of: odoo/odoo#253864
This update resolves an issue where validating opening financial entries caused an error. Now, users can successfully validate opening credit and debit values, ensuring accurate initial accounting setup. The fix addresses a context issue preventing the system from correctly identifying the company for posting.
Original PR description
Issue:
Posting and validating an opening move raises a UserError.
Steps to reproduce:
- With accounting
- Accounting -> Settings -> Initial setup
- Add some opening credit/debit values
- Click on "Validate and post"
- On the confirm window, click on Post
Current behavior:
- Raise a UserError
Expected behavior:
- Post the entry for the current company only
Cause:
As "company_id" is not always defined in the context, `get('company_id')` return None and trigger the UserError.
Instead, warn the user it will be validated only for the current company.
opw-6164885This update resolves an issue where users would encounter an error when attempting to sign in to planning slots that lacked a defined end date. The fix ensures the system handles this scenario gracefully by assigning a default end date, preventing the error and allowing users to successfully sign in.
Original PR description
Currently, an error occurs when user tries to signin on a planning slot which doesnt have an end date selected.
Steps to replicate:
- Install `planning_field_service` and open Planning.
- Click New > Add a Customer > Change status to `Scheduled`.
- Remove end datetime (right one) > Click `Sign In`.
Error:
```
File '/home/odoo/odoo19/enterprise/planning_field_service/models/planning_slot.py', line 264, in action_sign_in
if now > self.end_datetime.astimezone(ZoneInfo('UTC')):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'bool' object has no attribute 'astimezone'
```
Cause:
- As the user removed value from end datetime, `self.end_datetime` is False so we get this error when trying to access `self.end_datetime.astimezone()`.
Solution:
- Added a conditonal check for `self.end_datetime` before accessing `self.end_datetime.astimezone()`.
sentry-7480608465This update fixes an issue where the 'clear' buttons on the Odoo website's shop pages were unintentionally shrinking, making them difficult for users to see and interact with. The change ensures these buttons maintain their full size, improving the user experience and accessibility of the online store. This is a simple visual improvement.
Original PR description
task-6145581 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265494 Forward-Port-Of: odoo/odoo#262183
This update fixes an issue where multiple attachments to invoice emails sometimes used the same filename, leading to confusion. The change ensures that additional reports attached to invoices have unique filenames, preventing attachment conflicts and improving email reliability. This resolves a previous bug reported in related tickets.
Original PR description
Problem: When adding additional dynamic reports to the “Invoice: Send by Email” template, reports without a configured `print_report_name` incorrectly use the invoice filename. This is an issue because multiple attachments can have the same exact filename. Example from related ticket: the user attached timesheets to their template and both the invoice PDF and timesheet attachment used the same filename. Expected: The additional report should use its own fallback filename (ex: `timesheets_INV_XXX.pdf`) or its configured `print_report_name`. Actual: The additional report uses the invoice filename instead. To fix this, reports without `print_report_name` now fallback to: `<report name>_<invoice name>.pdf` as done in v18.0 Related Ticket: 6207518 and 6175376 Forward-Port-Of: odoo/odoo#264841
This update optimizes how the Point of Sale system calculates prices, particularly when dealing with many product price lists. By streamlining the process, the system now responds faster and more efficiently, leading to a better user experience. This change focuses on internal performance improvements within the Odoo system.
Original PR description
The getPrice function in product_template_accounting.js was a performance bottleneck when using large pricelists. This commit introduces the following optimizations: 1. Pre-index pricelist rules by product_id and product_tmpl_id at load time in ProductPricelist. 2. Replace the sort() operation with a single-pass scan to find the best matching rule (highest min_quantity that satisfies the current quantity). 3. Apply sequential rule precedence (Variant → Template → General), stopping as soon as a valid rule is found. 4. Move rule mappings from uiState to direct properties in ProductPricelist to avoid useless reactivity. 5. Centralize rule selection logic in ProductPricelist for better responsibility separation. task-id: 5965826 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244268
This update optimizes how Odoo handles changes to a partner's parent organization. Previously, updating a partner's parent could trigger unnecessary checks and updates, slowing down the process. This fix ensures these checks only happen when a true change to the parent ID occurs, resulting in faster updates and fewer errors.
Original PR description
When updating a partner's parent_id, ensure the VAT check and move line updates are only triggered if the parent_id actually changes. This prevents unnecessary validations and side effects when writing the same parent_id value. This fix improves performance and avoids spurious errors when updating partners via the API. task-[6214466](https://www.odoo.com/odoo/project.task/6214466) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264175