Wednesday, December 11, 2024
17 changes · saas-17.4
Resolved issues and error corrections
The Point of Sale furniture onboarding flow now avoids crashing if the default down payment product was deleted. This helps users continue setting up the furniture scenario without being blocked by a missing setup record.
Original PR description
Currently, an error occurs when trying to load onboarding 'Furnitures' without a product name 'Down Payment (POS). Step to produce: - Install the 'pos_sale' module. - Delete a product name 'Down…
Currently, an error occurs when trying to load onboarding 'Furnitures' without a product name 'Down Payment (POS).
Step to produce:
- Install the 'pos_sale' module.
- Delete a product name 'Down Payment (POS)'.
- Open a point of sale and archive all sessions, Click on the 'Furnitures' scenario card.
Traceback On Sentry:
```
ValueError: No record found for unique ID pos_sale.default_downpayment_product. It may have been deleted.
File "odoo/http.py", line 2373, in __call__
response = request._serve_db()
File "odoo/http.py", line 1903, in _serve_db
return self._transactioning(
File "odoo/http.py", line 1966, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1933, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2177, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 223, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 754, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 35, in call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 459, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "addons/pos_sale/models/pos_config.py", line 35, in load_onboarding_furniture_scenario
self._ensure_downpayment_product()
File "addons/pos_sale/models/pos_config.py", line 30, in _ensure_downpayment_product
pos_config.write({'down_payment_product_id': self.env.ref('pos_sale.default_downpayment_product').id})
File "odoo/api.py", line 593, in ref
raise ValueError('No record found for unique ID %s. It may have been deleted.' % (xml_id))
```
An error occurs when the system tries to retrieve an external ID of product 'Down Payment (POS)' at [1] When opening a 'Furnitures' scenario card in POS, but it is not available.
To handle this issue, add 'raise_if_not_found=False' so that if the external id of a product 'Down Payment (POS)' is not found, then it will return a None value instead of raising an error.
Sentry-5690826936
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prRefreshing the event barcode page no longer changes how attendee records open. This keeps registration desk staff in the intended dialog workflow, avoiding confusion and extra navigation during check-in.
Original PR description
Steps to reproduce =================== - Open the barcode interface by selecting attendee from the barcode in the registration desk. - Click on any record it will open a dialog and the attendee is registered. - Now refresh the page again click on any record. - Form view will be opened this time instead of dialog. Technical ========== Context is added to the action from the js side when we click on the `select attendee` button and we loose that when we refresh the page. This commit resolves the issue by adding the context directly in the action from XML side so when we refresh the page, the action will be loaded again and we will not lose the context. task-4273707
When users create a spreadsheet from Documents, template choices now display their names instead of appearing unnamed. This makes it easier to identify and select the right template, reducing confusion during spreadsheet creation.
Original PR description
when creating a new spreadsheet in document, the user is prompted to either choose a blank spreadsheet or choose to create them from a template. The view didn't list the name of the template. This commit shows the name of the template Task: 4363974
Miscellaneous changes
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys should be able to generate the certification PDF. **Steps to reproduce:** - Activate Survey app and ensure there are, at least, 2 companies; - Create a survey with certification and ensure `Require Login` is unchecked; - Share the survey (copy the `Survey Link`); - Navigate to Settings /
Original PR description
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys…
**Issue:** Survey's PDF certifications generation is only allowed to users having rights on the company of the user who answered the survey. **Expected:** Any user having generation rights to surveys should be able to generate the certification PDF. **Steps to reproduce:** - Activate Survey app and ensure there are, at least, 2 companies; - Create a survey with certification and ensure `Require Login` is unchecked; - Share the survey (copy the `Survey Link`); - Navigate to Settings / Users & Companies / Users; - Filter on `Inactive Users` and select `Public user`; - Setup the user's `Default Company` on Company A; - Setup an active user's `Default Company` on Company B and ensure its `Allowed Companies` don't contain Company A; - In a private navigator (to ensure no login data are saved), answer the survey (using the copied link above); - Log in as the active user and go to Surveys / Participations; - Look for the record of your test (`Contact` field should be empty); - Click the `Certifications` action button; **Cause:** The user is not allowed to retrieve the other company's data to fill needed texts to display on the certificate. **Fix:** Allow any user to retrieve the logo and name of the restricted company using a `sudo` on these fields. opw-4266445 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189368
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in their email. This bug only occurs if the quotation is set to "online signature" only. The bug is not reproducible when the quotation is set to both "online signature" and "online payment" or if website_sale_loyalty is not installed. Purpose: It is expected that customers should receive their reward
Original PR description
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in…
Problem: A loyalty rewards points member don't receive their points for their confirmed order if they don't sign into their account when signing their quotation online from a link they received in their email. This bug only occurs if the quotation is set to "online signature" only. The bug is not reproducible when the quotation is set to both "online signature" and "online payment" or if website_sale_loyalty is not installed. Purpose: It is expected that customers should receive their reward points for their order without needing to sign in because they accessed the link to sign the quotation from their email. It should be consistent with the behavior exhibited from having "online payment" set for the quotation or without website_sale_loyalty installed. Steps to Reproduce on Runbot: 1. Install Sales app, website_sale_loyalty, loyalty, sale_loyalty 2. Create a loyalty program that reward points based on orders 3. Create a quotation for a partner, set "online signature" in Other info, and click "Send by email" 4. Access the email in Settings > Technical > Emails 5. Copy the "Accept & sign" link and paste into incognito window 6. Sign the quote as a public user 7. Observe that the loyalty card for the partner did not update the points opw-4205826 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#182545
Trapping the focus in modal dialogs and refocusing the last focused element when closing the dialog are requirements from the WCAG. It was not done up to now for popup snippets in the website. As popups without backdrop aren't dialogs (they don't prevent interacting with the rest of the page), we don't trap the focus in these. Steps to reproduce (Chrome/Firefox): - Drop a popup and save - Wait for the popup to appear - Use tab / shift + tab to navigate around the page => Without the fix,
Original PR description
Trapping the focus in modal dialogs and refocusing the last focused element when closing the dialog are requirements from the WCAG. It was not done up to now for popup snippets in the website. As popups without backdrop aren't dialogs (they don't prevent interacting with the rest of the page), we don't trap the focus in these. Steps to reproduce (Chrome/Firefox): - Drop a popup and save - Wait for the popup to appear - Use tab / shift + tab to navigate around the page => Without the fix, you're able to focus elements outside of the popup. task-4256274 Forward-Port-Of: odoo/odoo#190183 Forward-Port-Of: odoo/odoo#183558
Steps to reproduce: 1. Add a stored computed field on `res.users` that depends on `groups_id` 2. Add a constraint on `res.users` that depends on `groups_id` 3. Give the user a group 4. Modify the given group and add an implied group Result: - The computed field is not recomputed - The constraint is not checked The reason for this is that the users groups are updated with a raw SQL query, and the ORM is not aware of the changes. This is a regression since 5f12e244. This issue w
Original PR description
Steps to reproduce: 1. Add a stored computed field on `res.users` that depends on `groups_id` 2. Add a constraint on `res.users` that depends on `groups_id` 3. Give the user a group 4. Modify the given group and add an implied group Result: - The computed field is not recomputed - The constraint is not checked The reason for this is that the users groups are updated with a raw SQL query, and the ORM is not aware of the changes. This is a regression since 5f12e244. This issue was partially detected and fixed in 459e6dc1, but only for a single constraint. This commit makes sure that the ORM properly propagates the changes to computed fields and all constraints, not just the one that was explicitly checked. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#177301
Before this commit, if the orderline quantity was zero, it would cause a division by zero error when calculating the anglo-saxon price unit. opw-4370055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189357
Original PR description
Before this commit, if the orderline quantity was zero, it would cause a division by zero error when calculating the anglo-saxon price unit. opw-4370055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189357
Content of the IMP: --- In the form picking view, it is possible to edit the move lines that are related to a given move by using the `SMLX2ManyField`. However, untill you save the record, available quantity of quants present in the DB are not updated. This commit ensures that the quants proposed for your move line creation have an available quantity (even if currenlty dirty) and that the quantity used for the next move line creation is both related to the demand of the move, and the real
Original PR description
Content of the IMP: --- In the form picking view, it is possible to edit the move lines that are related to a given move by using the `SMLX2ManyField`. However, untill you save the record, available…
Content of the IMP: --- In the form picking view, it is possible to edit the move lines that are related to a given move by using the `SMLX2ManyField`. However, untill you save the record, available quantity of quants present in the DB are not updated. This commit ensures that the quants proposed for your move line creation have an available quantity (even if currenlty dirty) and that the quantity used for the next move line creation is both related to the demand of the move, and the real availability of the quant used to create it. [FIX] stock: avoid move line reset when opening detailled ops --- This reverts [1] commit b45e249f8f5f36cffdb1ff615953eac7bb45b995. ### Steps to reproduce: - Enable Multi-step routes - Create a storable product: put 5 units on shelf 1 and 5 on shelf 2 - Create and "mark as todo" a delivery order for 3 units - Click on the detailed operation and change the reservation from shelf 1 to shelf 2 > save (the subrecord not the record) - Reopen the details operation #### > The records get resets in front of you ### Cause of the issue: One of the main problems of [1] is that it modifies dirrectly the data's of the props of the component used by the X2many dialog: https://github.com/odoo/odoo/blob/7e01d83ac08f9b076e0cd7d7e644679d5264ff7d/addons/stock/static/src/fields/stock_move_line_x2_many_field.js#L48 As such, as soon as you mount that component, you will reset the data's used by that same component. Worse, the component is doing this to itself. Hence, if you did not perform a save before opening the details operation you will reset the values to match the DB's data. Furthermore this data change modifying the props of the component we are looking at will force to reload the component with the newly hardcoded data (which explains that you see your last change resetting in front of you). In addition, the `quant_id` field of the stock.move.line model is a very particular field as it is neither stored or computed but is used by the create and the write for the stock.move.line data's to match some of the quant informations: https://github.com/odoo/odoo/blob/7e01d83ac08f9b076e0cd7d7e644679d5264ff7d/addons/stock/models/stock_move_line.py#L85 https://github.com/odoo/odoo/blob/7e01d83ac08f9b076e0cd7d7e644679d5264ff7d/addons/stock/models/stock_move_line.py#L310-L311 Therefore this field will never be set on a move. line that was not modified in JS and is not saved yet. In order to take into account the offset between the DB Data and the data's we are setting on the form of stock move it is therefore necessary to perform an rpc to **guess** what quant was used to create a given line. HOWEVER, as teached by the JS framework formation: ``` The first rule of customizing Odoo in JS is: do it in python ``` So that you should not do that matching in JS but rather where it belongs. Finally, modifying the props of a component during the `onMounted` is a super hacky way to use OWL as it is the first Hook for which OWL does not destroy the component because of props inconsistency... opw-4294650 Original issue of the reverted "FIX": --- ### Steps to reproduce - In the setting enable Multi Step Routes - Create a storable prodcut and put 5 units on shelf 1 - Create and Mark as Todo a delivery order for 3 units of your product - Set the quantity of the move to 0 and save the record - Click on the "burger list icon" of the stock move to edit the detailed operations and make the reservations for your 3 units - We want to make the reservation in 2 lines targetting the same quant - Add a new line selecting your shelf 1 quant and set the qty to 1 - Try to add a second one the quant is not proposed ### Cause of the issue: When a quant has been selected at least once and the record is not yet saved the js data of the record contains the info of the quant used to create/update the move line because of the non stored not computed dummy field `quant_id` of the stock move. As such the quant will be considered to already having been used in this transaction and hence not available: https://github.com/odoo/odoo/blame/54e06a1b25ed9e317e368e89979c7c77ddbffc08/addons/stock/static/src/fields/stock_move_line_x2_many_field.js#L52-L54 ### Note: The IMP fixes the original issue + more. This reverted commit already required an other fix: Commit ea4fca8faa4ee84693e645514085a65b92364842 opw-4072541 opw-4294650 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187462 Forward-Port-Of: odoo/odoo#186400
**Current behavior:** Setting a global lead time may result in this time being counted twice in the breakdown of the replenishment for some orderpoint. **Expected behavior:** The global lead time should be counted one time. **Steps to reproduce:** 1. Create a product with a subcontracted BoM 2. Set the system parameter stock.visiblity_days = 365 3. Create a supplierinfo (vendor) on the subcontracted product with 0 delay (lead time) 4. Create a sale order for the subcontracted p
Original PR description
**Current behavior:** Setting a global lead time may result in this time being counted twice in the breakdown of the replenishment for some orderpoint. **Expected behavior:** The global lead time should be counted one time. **Steps to reproduce:** 1. Create a product with a subcontracted BoM 2. Set the system parameter stock.visiblity_days = 365 3. Create a supplierinfo (vendor) on the subcontracted product with 0 delay (lead time) 4. Create a sale order for the subcontracted product 5. In the replenishment report, create an orderpoint for the product and click the (i) on the tree view line 6. See that global visibility days are double-counted **Cause of the issue:** `_get_lead_days()` is called twice here, the second time it ignores vendor lead time but re-counts global visibility days. **Fix:** Ignore the global visibility in a similar manner via context the second time. opw-4370201 Forward-Port-Of: odoo/odoo#189857
**Current behavior:** Having a manufactured product with components, all with 'average' costing, a series of receiptions for the components at difference price points, followed by an MO, followed by another reception at (again) a new price point will result in an imbalanced "Cost of Production" journal if the aforementioned MO is unbuilt. **Expected behavior:** The unbuild operation doesn't leave the journal imbalanced. **Steps to reproduce:** 1. Create a stored product with averag
Original PR description
**Current behavior:** Having a manufactured product with components, all with 'average' costing, a series of receiptions for the components at difference price points, followed by an MO, followed by…
**Current behavior:** Having a manufactured product with components, all with 'average' costing, a series of receiptions for the components at difference price points, followed by an MO, followed by another reception at (again) a new price point will result in an imbalanced "Cost of Production" journal if the aforementioned MO is unbuilt. **Expected behavior:** The unbuild operation doesn't leave the journal imbalanced. **Steps to reproduce:** 1. Create a stored product with average, real_time costing 2. Create a BoM for this product, with 2 stored components (also with average, real_time costing) 3. Create a PO for the components (price is arbitrary), confirm and receive the product 4. Create another PO for the components with a different price from the previous PO, confirm and receive 5. Create an MO for the final product, confirm and consume/produce all 6. Create a final PO for the components with prices different from the previous two orders, confirm and receive 7. Create a second MO for the final product and confirm/consume/produce-all 8. Unbuild the MO from step 5 -> in the "Cost of Production" journal, observe that there is an outstanding balance **Cause of the issue:** When the unbuild operation happens, the current price of the final product informs the SVL's `value` and `unit_price` fields- which of course is not the same as when the MO was completed. We end up with a `unit_price` on the SVL for the final product which is not equal to the sum of the component SVLs' `unit_price` which leads to the generation of account move lines that won't be balanced. **Fix:** During an ubuild operation, stock moves for finished products which may have this issue (i.e., have non-standard costing) with linked SVL records will use that SVL's unit cost for the unbuild SVL (and ensuing journal entries) as opposed to taking the current cost. opw-4062415 Forward-Port-Of: odoo/odoo#188016
Currently a ``ParseError`` is arising when the user installs the ``website_sale`` module after deleting the one shipping method from the ``sale`` module. Steps to reproduce: --- - Install ``sale`` and ``delivery`` modules - Open ``Shipping Methods`` and delete one shipping method - Now try to install the ``website_sale`` module. - The error appears in the log. Traceback: --- ``` ParseError while parsing /home/odoo/src/odoo/18.0/addons/website_sale/data/data.xml:62, somewhere insi
Original PR description
Currently a ``ParseError`` is arising when the user installs the ``website_sale`` module after deleting the one shipping method from the ``sale`` module.
Steps to reproduce:
---
- Install ``sale`` and ``delivery`` modules
- Open ``Shipping Methods`` and delete one shipping method
- Now try to install the ``website_sale`` module.
- The error appears in the log.
Traceback:
---
```
ParseError
while parsing /home/odoo/src/odoo/18.0/addons/website_sale/data/data.xml:62, somewhere inside <record id="delivery.free_delivery_carrier" model="delivery.carrier">
<field name="is_published" eval="True"/>
</record>
```
This commit solves the above issue by using ``forcecreate="False"`` to bypass record creation if it violates checks.
sentry-5731062091
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#189674Versions -------- - 17.0 - saas-17.2 - saas-17.4 - 18.0 Steps ----- 1. Install appointment pre efd76940c999; 2. install website post efd76940c999. Issue ----- Template rendering issue. Cause ----- The commit added a xpath to website_appointment relying on an updated appointment module, which isn't always the case in stable. Solution -------- Make the xpath in website_appointment not rely on the appointment change. opw-4394557 Forward-Port-Of: odoo/enterprise#75417
Original PR description
Versions -------- - 17.0 - saas-17.2 - saas-17.4 - 18.0 Steps ----- 1. Install appointment pre efd76940c999; 2. install website post efd76940c999. Issue ----- Template rendering issue. Cause ----- The commit added a xpath to website_appointment relying on an updated appointment module, which isn't always the case in stable. Solution -------- Make the xpath in website_appointment not rely on the appointment change. opw-4394557 Forward-Port-Of: odoo/enterprise#75417
**Steps to reproduce:** - Make sure that PyPDF2 is in version 1.26.0 - Install l10n_mx_edi - Switch to a Mexican company - Create an invoice: * Customer: [a Mexican customer] * Payment Way: [Effectivo] * An invoice line with a product having a UNSPSC Category - Confirm the invoice - Generate CFDI via "Send & Print" button - Register a payment with "Efectivo" Payment Way - Update Payments on the invoice - Go to the payment - Force CFDI - Make sure the CFDI status of the paymen
Original PR description
**Steps to reproduce:** - Make sure that PyPDF2 is in version 1.26.0 - Install l10n_mx_edi - Switch to a Mexican company - Create an invoice: * Customer: [a Mexican customer] * Payment Way:…
**Steps to reproduce:**
- Make sure that PyPDF2 is in version 1.26.0
- Install l10n_mx_edi
- Switch to a Mexican company
- Create an invoice:
* Customer: [a Mexican customer]
* Payment Way: [Effectivo]
* An invoice line with a product having a UNSPSC Category
- Confirm the invoice
- Generate CFDI via "Send & Print" button
- Register a payment with "Efectivo" Payment Way
- Update Payments on the invoice
- Go to the payment
- Force CFDI
- Make sure the CFDI status of the payment is "Signed"
- Print "Payment Receipt"
**Issue:**
PyPDF2 raises a traceback:
"IndexError: list index out of range".
**Cause:**
PyPDF2 is executing this code to format a warning: file = filename.replace("/", "\\").rsplit("\\", 1)[1] where filename is something liked "<xxx>" (coming from the qweb compilation). Therefore, there is no index 1.
The warning is coming from lxml and is due to the fact that we are evaluating a xml value as it is in a qweb template:
"FutureWarning: Use specific 'len(elem)' or 'elem is not None' test instead." And since this commit:
https://github.com/odoo/odoo/commit/fd67b56fc695526d09706d2b6218519ea255fc30 Python's "warning.py" is overridden in PyPDF2.
**Solution:**
Use "len(cfdi['cfdi_node'])" as advised to check if the xml node has children in the payment receipt template.
opw-4359466
opw-4366016
Forward-Port-Of: odoo/enterprise#75227To reproduce: ============= - assign a user U without any group access to Appraisal app as manager of an appraisal - login as this user U and ask for feedback on the appraisal - fill the feedback, and change it's deadline to the past - try to consult the answers as user U -> redirected to survey expired error page Problem: ======== the access to appraisal feedback is checked based on the user's group access, but the user can be the manager of the appraisal without any group access to t
Original PR description
To reproduce: ============= - assign a user U without any group access to Appraisal app as manager of an appraisal - login as this user U and ask for feedback on the appraisal - fill the feedback, and change it's deadline to the past - try to consult the answers as user U -> redirected to survey expired error page Problem: ======== the access to appraisal feedback is checked based on the user's group access, but the user can be the manager of the appraisal without any group access to the appraisal app Solution: ========= in addition to the group access, check if the user is the manager of the appraisal opw-4354685 Forward-Port-Of: odoo/enterprise#75360
The multipage computation of xslx files was a bit overkill as it would convert the xlsx file to an o-spreadsheet json friendly form where it could simply explore the zip files. Furthermore, that convertion would create attachments for each media file present in the xlsx file. This is bad in 2 ways: - the created attachment would never be used again - we were creating attachment while calling a computed field (read/write mix is bad) Task-4213183 Forward-Port-Of: odoo/enterprise#70722
Original PR description
The multipage computation of xslx files was a bit overkill as it would convert the xlsx file to an o-spreadsheet json friendly form where it could simply explore the zip files. Furthermore, that convertion would create attachments for each media file present in the xlsx file. This is bad in 2 ways: - the created attachment would never be used again - we were creating attachment while calling a computed field (read/write mix is bad) Task-4213183 Forward-Port-Of: odoo/enterprise#70722
### Steps to reproduce: - Create two storable product: Final Product (FP) and Component (COMP) - Create and confirm an MO for FP with a raw move: 1 x COMP > The move should be: "not available" since 0 unit of COMP are in Stock - Go to the barcode module > Operations > Manufacturing - Remove the MO Ready filter > Click on your MO and then exit barcode - Go back to the MO in the back end (mrp module) #### > The raw move has been reserved and is hence marked as available. ### Cause of the
Original PR description
### Steps to reproduce: - Create two storable product: Final Product (FP) and Component (COMP) - Create and confirm an MO for FP with a raw move: 1 x COMP > The move should be: "not available" since…
### Steps to reproduce: - Create two storable product: Final Product (FP) and Component (COMP) - Create and confirm an MO for FP with a raw move: 1 x COMP > The move should be: "not available" since 0 unit of COMP are in Stock - Go to the barcode module > Operations > Manufacturing - Remove the MO Ready filter > Click on your MO and then exit barcode - Go back to the MO in the back end (mrp module) #### > The raw move has been reserved and is hence marked as available. ### Cause of the issue: Exiting the barcode will launch an rpc call of the `split_uncompleted_moves` in order to split uncomplete moves in 2 if necessary (for the records to be appropriately set the next time you enter the barcode): https://github.com/odoo/enterprise/blob/71f979d5bdf88207cb94c83bd6a69633da649d1e/stock_barcode/static/src/models/barcode_picking_model.js#L1327-L1329 https://github.com/odoo/enterprise/blob/71f979d5bdf88207cb94c83bd6a69633da649d1e/stock_barcode/models/stock_move.py#L9-L11 Furthermore, since c29f61fdded2e80d0bb3c06199c6a196feac8076 in case of a production the component move are rather splitted on the move lines to avoid odd split of the component moves on the MO. However, in that case if a unassigned move is splitted, a move line will be generated and associated to that move, which makes it reserved and hence available. opw-4338827 --- Forward-Port-Of: odoo/enterprise#74244