Tuesday, October 7, 2025
31 changes · 19.0
New functionality added to Odoo
Adds support for Swedish companies to prepare and submit monthly VAT returns and EC sales list reports in Odoo. This helps businesses meet recurring Swedish tax reporting obligations more directly from the accounting system.
Original PR description
Companies in Sweden have to submit their VAT return and EC sales list report monthly. This commit adds the returns both. task-4893969
Enhancements to existing features
Bank reconciliation XML uploads now create the related accounting entry right away. This makes the uploaded transaction details available immediately on the bank statement line, improving reconciliation accuracy and workflow continuity.
Original PR description
When uploading a xml from the bank rec widget, the move will be created directly so we can put the move lines in the bank statement line. task-5107112 Forward-Port-Of: odoo/enterprise#95345
Resolved issues and error corrections
This fix prevents crashes when processing incoming emails with XML attachments for Chilean electronic invoicing. It restores stable email handling so users can continue processing documents without interruption after the first message.
Original PR description
Description of the issue/feature this PR addresses: Fixes [#230014](https://github.com/odoo/odoo/issues/230014). Requires #96467 and #96421 under 19.0 approved and merged for a full fix. Please also forward to saas-18.4 along with #96421 , issue is also present there. (DO NOT FORWARD #96467 TO saas-18.4). Current behavior before PR: Crashes after processing first email with XML due to a savepoint implementation which is not working. Desired behavior after PR is merged: No crash. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale now shows which communication method was most recently used to connect with an IoT Box, making connection status easier to understand. The old longpolling toggle was removed because WebRTC is now the main communication method.
Original PR description
We updated the IoT Box status icon in PoS to display the last protocol used to communicate with the box. We removed the longpolling enable/disable toggle as the main protocol now is WebRTC. Task: 5116840
Manufacturing planning now defaults indirect component demand to manual replenishment, reducing setup steps for planners. The replenishment tooltip was also clarified so users can understand planning color indicators without prior product knowledge.
Original PR description
With this commit:
-----------------
- MPS Replenishment Trigger:
- Set ‘Manual’ as the replenishment trigger in MPS when the component is
marked as indirect, since such components—added via BoM—defaulted to ‘Never’
and should instead allow manual planning as they represent indirect demand.
- This improvement removes that extra step, speeding up the workflow and
improving overall UX.
- MPS Replenishment Tooltip:
- Improved tooltip text to clearly explain the color codes in the
replenishment row. This improves usability and removes the need for prior
knowledge of Odoo’s MPS color semantics.
task-4868885This fix stops the HTML editor from getting stuck when users remove formatting from a colored table cell. It makes formatting cleanup more reliable, preventing an error that could interrupt content editing.
Original PR description
Problem: When having a `table` with `color` and selecting a cell to remove format, we get a traceback: "Infinite Loop in removeAllColor()." Cause: The color is applied on `table`, but we only process `td` for color removal. As the color remains on `table`, each attempt to remove it keeps reapplying, leading to an infinite loop. Solution: When removing color, also remove it from the `table`. Then apply the color to all child `td`. This ensures `td` colors are later removed automatically if selected, avoiding the loop. Steps to reproduce: 1. Add a `color` property to a `table` and `td`. 2. Select the `td`. 3. Click "remove format" from the toolbar. 4. Observe traceback. opw-5112088 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229878
Closing a Picture-in-Picture call window now properly shuts down the related call interface. This prevents errors when users leave or disconnect from calls after using the pop-out window.
Original PR description
**Description of the issue this PR addresses:** When closing a Picture-in-Picture (PiP) window, the app mounted on it was not destroyed. As a result, the `Meeting` component remained mounted even…
**Description of the issue this PR addresses:** When closing a Picture-in-Picture (PiP) window, the app mounted on it was not destroyed. As a result, the `Meeting` component remained mounted even though the call was disconnected, leading to errors. The cleanup of the mounted app only occurred when creating a new PiP window, not when closing one. **Current behavior before PR:** * Closing a PiP window does not destroy the mounted app. * `Meeting` component stays mounted after call disconnect. * Errors occur due to leftover state. **Desired behavior after PR is merged:** * The app mounted on the PiP window is properly destroyed as soon as the PiP window is closed. * No errors occur from a lingering `Meeting` component after closing. **Steps to reproduce:** - Join a call - Open the call in PiP - Disconnect the call either via PiP or from the Discuss app -> traceback OR - Close PiP window, then disconnect the call from the Discuss app -> traceback task-[5112773](https://www.odoo.com/odoo/project/1519/tasks/5112773)
This fix prevents the AI assistant from crashing when users ask for sales results in a pivot view. It improves reliability by checking that report measures are valid before using them, so business users can run AI-powered sales analysis more smoothly.
Original PR description
The system crashes with an error when a user adds a prompt in AI and searches. **Steps to produce:** - Install the `Sales and AI` module with demo data. - Go to sales and click on the AI button on…
The system crashes with an error when a user adds a prompt in AI and searches. **Steps to produce:** - Install the `Sales and AI` module with demo data. - Go to sales and click on the AI button on top. - Add query that used pivot view like `Top 5 sales reps by revenue also make pivot view`. - Try multiple times (error only comes in terminal). **Error:** ValueError: Measure 'price_subtotal:sum' not found in model 'sale.report' for menu ID 331. **Cause:** - Here at [1], we split the measure_str and assign the first element to `measure_name`. - At [2], we try to find a field in the model using this `measure_name`, which fails. - The issue is that `measure_name` can contain both the `field` and its `aggregation` function (e.g., product_qty:sum), which is not a valid field. **Solution:** - In this PR, a new method `validate_measures` has been added to ensure that the provided measures are valid and properly defined. [1] https://github.com/odoo/enterprise/blob/f838bbd0ce425d24444b510e49752c3da8068712/ai/models/ai_agent.py#L1244-L1245 [2] https://github.com/odoo/enterprise/blob/f838bbd0ce425d24444b510e49752c3da8068712/ai/models/ai_agent.py#L1264-L1265 **sentry-6917511363,6915439025**
This fixes an error that prevented users of the Spanish accounting localization from opening the VAT Book report. The report now loads as expected while keeping the related chatter or annotation control hidden where needed.
Original PR description
Step to reproduce - setup company for l10n_es i.e. spain localization - Go to Accounting > Reporting > Spain > VAT Book. Observation: - Traceback found Issue: - Template `l10n_es_reports.VatBooksLineName` tries to replace a xpath https://github.com/odoo/enterprise/blob/d0c17835ecc4a911bc8c8c57946eaef9e73245ab/l10n_es_reports/static/src/components/vat_books/line_name.xml#L2-L6 which do not exists, after [1] Fix: - we fix the xpath to hide the chatter/annotation button. [1] odoo/enterprise@8fae6a058bc20732bccc6e3732144d4ea2aafdad opw-5106583
This fix prevents customers from encountering an access error when paying for a self-order from a mobile device after a contact was linked to the order messages. It helps keep the mobile ordering and payment flow reliable for restaurant and point-of-sale users.
Original PR description
Before this commit, if a partner was added to the message_partner_ids, as reading the order triggered the compute function and it changed the uid to the public user due to a call to _check_sudo_commands. This caused an access error when trying to pay an order from the mobile. opw-5128747 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website header menus now automatically move extra items into the dropdown when header content changes size, preventing items from overflowing off-screen. Editing also behaves more reliably by keeping text selection active when a menu is moved and clearing it when a dropdown closes, avoiding lost typing or floating toolbars.
Original PR description
> [VBAL] Supported payment methods inner content (in the header): You can adjust the height, but this moves the elements on the right outside of the screen (can be fixed by zooming/unzooming on the…
> [VBAL] Supported payment methods inner content (in the header): You can adjust the height, but this moves the elements on the right outside of the screen (can be fixed by zooming/unzooming on the screen but not user friendly): https://drive.google.com/file/d/1J0Vp050kDzx_jnPVfWyHxy6GpQ6GvpBX/view?usp=drive_link ### [FIX] website: re-adapt extra menu on size changes of menu and navbar When the size available or needed for the the top menu changes (for other reasons than a window resize), the menus were not auto-hidden. They were auto-hidden only if the window changes size. If the user is editing the website and increase the width of some element in the header, it may overflow. The overflow disappears only once the user changes the size of the window (which causes some menu to be hidden again). This commit fixes that by replacing the listener for a window `resize` event by a `ResizeObserver` that observe the sizes of the navbar, the menu and the menu's siblings. Steps to reproduce: - Open website builder - Add text in the header until it gets too large - Bug: the last menu is not moved to the dropdown to make more space available task-4367641 ### [FIX] website: move selection with menu when auto-hiding menus When some menu are moved to be hidden in the dropdown, if the selection is inside a moved menu, it was lost. This commit fixes that by opening the dropdown and moving the selection if it is in a menu moved to the dropdown Steps to reproduce: - Open website builder - Add text in the label of a menu until it is moved to the dropdown - Bug: the selection is lost, keep writing does not write anywhere task-4367641 ### [FIX] website: remove selection in dropdown when it closes When the user has the selection inside a dropdown that closes, the selection was kept. If the toolbar was shown on the selection, then used to stays floating where the selection used to be. This commits listen for the closing of the dropdown to remove the selection if it was in the dropdown. Steps to reproduce: - Open website builder - Click on the user's name to open the dropdown - Select some text in the dropdown (the toolbar should appear) - Press "esc" (the dropdown should close) - Bug: the toolbar is left hanging where the selection used to be task-4367641 Forward-Port-Of: odoo/odoo#228135
Inventory valuation settings now require both a journal and valuation account before they can be saved. This prevents scheduled inventory valuation closing from failing when required accounting information is missing.
Original PR description
When the journal is not set in the inventory valuation settings, running the cron ``Stock Account: Inventory Valuation Closing`` results in a traceback. Steps to reproduce the error: - Install…
When the journal is not set in the inventory valuation settings, running the cron ``Stock Account: Inventory Valuation Closing`` results in a traceback. Steps to reproduce the error: - Install ``accountant`` and ``stock`` modules - Go to Settings > Inventory Valuation > Periodicity: Daily > Unset the Journal > Save - Run the cron ``Stock Account: Inventory Valuation Closing`` Traceback: ``` NotNullViolation: null value in column "journal_id" of relation "account_move" violates not-null constraint ``` https://github.com/odoo/odoo/blob/4cd1ad3aa46ad4645fc7b5e530b79d53382de6d5/addons/stock_account/models/res_company.py#L57-L63 This occurs because when the journal is unset, ``journal_id`` becomes null, leading to the above error when the cron runs. Error also occurs when the ``Valuation Account`` is unset. Traceback: ``` CheckViolation: new row for relation "account_move_line" violates check constraint "account_move_line_check_accountable_required_fields" ``` Solution: The ``Journal`` and ``Valuation Account`` fields in the Inventory Valuation settings are now marked as required in the view to ensure that valid values are always set, preventing the cron from failing. sentry-6925934391
Self-ordering now prevents customers from selecting time slots that have already reached their capacity. This avoids overbooking and fixes timezone handling so slot availability is checked against the correct time.
Original PR description
**Steps to reproduce:** - Have a preset that requires time slots - Make the slots_per_interval 1 and the interval_time long enough - Go to the self order, make a purchase and select a slot - Make…
**Steps to reproduce:** - Have a preset that requires time slots - Make the slots_per_interval 1 and the interval_time long enough - Go to the self order, make a purchase and select a slot - Make another purchase - The slot we chose before is still showing and available **Why the fix:** Once the capacity of a time slot has been reached, we should not allow customer to chose it. This behavior occured for 2 reasons: - In the xml file where we declare this select, we did not take the fact that a slot could be full into account, leading to it always being showed. This is now done using the isFull attribute, like it is done in the regular PoS. - This same isFull was not correctly set, as there was a mismatch in slots timezone and format. When we retrieved them from the server, they were in UTC timezone, but the current slot we were working with was in the locale timezone. It is now converted to UTC to check if we already hit max capacity. Before this, selecting a timezone was actually selecting the one that was two hours earlier (for Belgium). With this commit, the values that reached max capacity will not be displayed on the select for the time slots anymore. opw-5092888 Forward-Port-Of: odoo/odoo#228441
Project timesheet forecast date filters now handle local dates consistently instead of shifting them through UTC. This prevents records from being incorrectly included or excluded by one day for users in time zones far from UTC, improving report accuracy.
Original PR description
This commit fixes the timezone issues with the Date filters, in which we were comparing a UTC DateTime value to a local timezone's Date. In certain timezones, this leads to off-by-one errors in the records fetched from the DB, depending on how far ahead or behind UTC that timezone is. Specifically, we remove the UTC conversion within the filter domains. opw-5068870 Forward-Port-Of: odoo/enterprise#94032
Status receipts with QR codes now close the printer connection properly after printing. This prevents the IoT printer from timing out and blocking later status receipt prints, improving reliability for point-of-sale or hardware status checks.
Original PR description
Steps to reproduce: 1. Print a status receipt (that includes a QR code) 2. Wait a few minutes 3. Print another status receipt EXPECTED: - Receipt prints succesfully ACTUAL: - No receipt printed - Error logged by IoT: `ConnectionResetError: [Errno 104] Connection reset by peer` - Any further attempts to print status will fail In odoo/odoo#229731, a QR code was added to the status receipt by using the `escpos` library. However, the code is never closing the connection to the printer, and after some time the connection will timeout and attempting to print the status will throw an exception. We fix this by wrapping the commands in the `EscposIO` context, which will automatically close the printer connection after the context ends. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents errors when users create records or upload files before the system has fully saved the related attachment. File data is now handled consistently, so AI features can read the record context without crashing.
Original PR description
Before this fix, when unsaved binary fields are present in a record during quick creation or file uploading, the `ir.attachment` is not yet created for that record. This causes `raw bytes` to remain in `vals[fname]` and later crashes `_get_ai_context()` during `json.dumps()`. Now `_ai_read` always generates a proper `file_ref` for unsaved binaries, using the same logic as the non-attachment branch, ensuring consistent `files_dict` entries and preventing crashes. task-19060
The Unrealized Currency Gains/Losses report now correctly creates draft adjustment entries even when users customize how report lines are grouped. This prevents a misleading “No adjustment needed” error and helps finance teams complete currency revaluation workflows reliably.
Original PR description
**Steps to reproduce** - Edit "Unrealized Currency Gains/Losses" report configuration as follows: - Lines > Accounts To Adjust, set GroupBy to 'currency_id, partner_id, account_id, id' - Lines > Excluded Accounts, set GroupBy to 'currency_id, partner_id, account_id, id' - In Options, check 'Unfold All' - View the report > Click 'Adjustment Entry' **Issue** Instead of creating a draft journal entry an user error "No adjustment needed" will block the action **Solution** The issue occurs because when retrieving the lines we assume they are grouped as per default, by 'currency_id, account_id' In case users modify the expression line default grouping to something else, like 'currency_id, partner_id, account_id', we no longer collect values correctly. In order to fix the issue we can unfold all and manually group values by currency_id, account_id opw-4792502 Forward-Port-Of: odoo/enterprise#90894
This update fixes rental checkout behavior so products added from the shop page use the correct default rental dates instead of falling back to a 24-hour period. It also prevents overnight rental periods from being incorrectly combined with other rental durations, reducing pricing and booking errors.
Original PR description
task-5065762
Fixes tax returns that use review-based workflows so they are correctly marked complete when they reach their final state. It also prevents the system from trying to process a payment for returns that do not support a paid state, avoiding submission errors for affected localizations.
Original PR description
First. Returns that are generic_state_review and generic_state_review_submit weren't marked as completed once they reached their last state. Second, When submitting tax returns, we tried to automatically try to finalize the payment if there was nothing to pay. But some tax returns dont have a paid state since they use the generic_state_review_submit state_worfklow. This makes sure we are not trying to pay any returns that cannot be paid. Steps to reproduce: - Create a return with generic_state_review_submit or use a return with it, like l10n_lt_reports.vat_return_type - Validate every checks - Try to submit the return - 💥 Traceback 💥
Point of Sale now shows a clear message if the company country is not set, instead of letting the session open and then fail to load. This helps users understand and fix the setup issue quickly, reducing confusion and support needs.
Original PR description
Before this commit, if the fiscal country was not set on the company, it was still possible to open the PoS session, but the interface would fail to load due to an error in the round_base_lines_tax_details function, which requires the country. With this commit, a clear error message is displayed when the country is not set, preventing the session from opening and avoiding the silent loading failure. opw-5135750 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Purchase order deadlines now stay aligned when planned receipt dates are moved to a specific weekday, helping teams avoid misleading order dates. Manufacturing orders created through reception reporting are also linked back to the related sales order, making sales information easier to track.
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
This fix prevents the emoji picker from breaking when users work in non-English languages where translated emoji labels contain special line breaks. It ensures the picker opens reliably in Discuss and avoids confusing empty screens or errors.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ In some non-English translations, emoji strings include `\n`, which breaks JSON parsing in `emoji_data.js`. This causes `emojis.length === 0`, so the empty state is displayed instead of the main emoji picker UI. Some UI logic still executes on missing DOM elements, which triggers errors. **Current behavior before PR:** --------------------------------- - Switch to a non-English language - Open the emoji picker in Discuss - Errors are triggered due to missing DOM elements **Desired behavior after PR is merged:** ----------------------------------------- - Emoji JSON parses correctly - The emoji picker opens without errors in non-English languages - The emoji picker still opens when `emojis.length === 0` **Task:** 4978824 Forward-Port-Of: odoo/odoo#229795 Forward-Port-Of: odoo/odoo#223564
Publishing and sending planning schedules now respects the filters users selected in the planning view, such as a specific role. This prevents unrelated shifts from being included when users change the date period before publishing.
Original PR description
To reproduce: ============= -Reset all planning.slot to draft -Search "Dev" role -In weekly Gantt view, click on publish & send -Change date to match the current month (or any other period) -Publish Problem: ========= We filter only by datetime and ignore domain from context : https://github.com/odoo/enterprise/blob/20b45f6c65c78a572a3f26b78f6ed458accf7c9f/planning/wizard/planning_send.py#L31-L33 Solution: ========= - Get active domain from context and override only it's date_time since it changed. opw-5017014 Forward-Port-Of: odoo/enterprise#93295
This fix prevents duplicate manufacturing component entries from appearing in the Shop Floor view after a BoM component is removed. It helps manufacturing users continue work without encountering an error, and adds test coverage to keep the issue from returning.
Original PR description
### Steps to reproduce: 1. Create a BoM with two components to be consumed in an operation 2. Create a Manufacturing Order with this BoM and confirm it 3. On the BoM, remove one of the products and save 4. Go to the Shop Floor 5. Select the workcenter used in step 1 6. Got duplicate key in t-foreach ### Before this commit: Stock moves without quality checks, that are linked to a workorder but not linked to a BoM line, are included twice in the view, resulting into a traceback. ### After this commit: Include only once the stock moves, removing duplicates from the view. opw-5029970 Forward-Port-Of: odoo/enterprise#93482
Mobile users now get a cleaner, more usable spreadsheet dashboard control panel. The update fixes dropdown display issues, improves the search and filter layout, and adds an easier way to show or hide navigation.
Original PR description
The control panel of a dashboard (search bar + navigation buttons) was really ugly on mobile. This commit fixes most issues: - the global fitler values dropdown is now correctly rendered - there is now a button to hide/show the navbar - the layout of the share/search bar/date filter is now responsive - the search bar facets are now correctly truncated - the button to open the list of dashboard is now at the same level as the sahre button Task: [4996784](https://www.odoo.com/odoo/2328/tasks/4996784) 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 update ensures IoT-connected payment drivers send data in a format the database now accepts. It helps prevent communication failures for affected payment terminals after a recent platform change.
Original PR description
This PR fixes the bytestrings being sent as such when using ctypes C/C++ libraries in iot drivers. After the PR https://github.com/odoo/odoo/pull/206903 the bytestrings are not supported anymore in the requests sent to the database from the iot and need to be decoded first. Related PR for saas-18.4: https://github.com/odoo/enterprise/pull/96547 opw-5129596
This update prevents UK HMRC submissions from repeatedly failing when a user's browser has stored an invalid device identifier. Odoo now clears the bad saved value so a valid identifier can be used for future requests.
Original PR description
There are still Odoo requests that are sent to hmrc with invalid 'Gov-Client-Device-ID' header. They are showing this error: "Submit a UUID which is 128 bits or 32 hex characters long". A possible explanation, is that some users have some garbage value in the localStorage for 'hmrc_gov_client_device_id', that does not correspond to a uuid. This value would then be sent each time in the headers, and get rejected. The fix here is to clear the localStorage value if it is not a uuid. task-4627086 Forward-Port-Of: odoo/enterprise#96409 Forward-Port-Of: odoo/enterprise#87335
This fixes a problem where using the browser back button from an invalid form could make Odoo stop responding. Users can now continue interacting with the web client instead of being stuck on a locked screen.
Original PR description
Be in an invalid form view and do browser back. The form view can't be saved as it is invalid, so it can't be left. Before this commit, the body was `pointer-events: none`, i.e. the user couldn't…
Be in an invalid form view and do browser back. The form view can't be saved as it is invalid, so it can't be left. Before this commit, the body was `pointer-events: none`, i.e. the user couldn't interact with the webclient anymore. This is due to a code in webclient.js, which listens to the `ROUTE_CHANGE` event and calls `loadState`. PR [1] prevented the user to interact with the UI during the state loading, as it could lead to weird side-effects. To achieve this, it set the `point-events: none` rule on the body, and reset it once the promise returned by loadState was fullfilled. Unfortunately, in the above mentionned case, loadState returned a promise that was left pending forever, leading to a fully locked webclient. This commit fixes the issue by returning nothing, like we already do in other similar cases in the action service, when the requested action can't be executed. [1] https://github.com/odoo/odoo/pull/205290 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 fixes how inventory value is calculated when there is not enough FIFO stock history and stock temporarily goes negative. The system now uses the last known unit cost instead of the full previous move value, helping keep inventory and accounting valuations accurate.
Original PR description
Before this commit: If there are not enough FIFO in valuations, (i.e. going -ve) the extra value comes from the last known move. But we should not use the whole move value - just the unit value from it. After this commit: The move value is made a unit before multiplying. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The mail app now keeps blur settings adjustable in real time during call previews and active calls. This fixes an issue where users could not change background or edge blur once the blur effect was applied, improving the video call experience.
Original PR description
**Current behavior before PR:** - Before this commit, `applyBlurEffect` returned a partial object with only `stream` and `close` properties, preventing access to properties like `edgeBlur` and `backgroundBlur` needed for real-time adjustments during calls. **Desired behavior after PR is merged:** - This commit returns the `BlurManager` instance from `applyBlurEffect` and adds an `onChange` listener in `CallPreview`, enabling users to adjust blur characteristics in real-time during both preview and active calls. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where users could be blocked from validating a backordered delivery in warehouses using a two-step delivery process with packaged and lot-tracked products. The correction ensures stock reservations are adjusted only where appropriate, reducing interruptions during order fulfillment.
Original PR description
# Problem Unreserve issue preventing users from validating a delivery order with 2-step delivery warehouse configuration. Introduced in the following commit:…
# Problem Unreserve issue preventing users from validating a delivery order with 2-step delivery warehouse configuration. Introduced in the following commit: https://github.com/odoo/odoo/commit/13567aa27250f5798bbe42648eeac82241dbb780 # Steps to reproduce on the runbot: - Activate packages - Edit the warehouse to deliver in 2-steps - Create a product tracked by lot - Create two lots with 5 qty each - Create a sale order with 10 qty and confirm - Check the delivery order and assign: => 2 units to lot1 and create a pkg for it => 1 units to lot1 without pkg => 3 to lot2 without package - Validate the delivery and create a backorder - go to pick backorder and try to validate - Unreserve issue pops up - For further details, check: [#225948](https://github.com/odoo/odoo/issues/225948) # Solution: Conditional subtracting limited to new lines only. Task ID: opw-5086289 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229994 Forward-Port-Of: odoo/odoo#229420