Impacted versions: 9.0

Steps to reproduce:

* Create an MTO product with 
  * Product Type: Stockable Product
  * Routes: "Buy" and "Make to Order"
* Update Qty on Hand to any quantity (i.e, 2).
* Create a sales order with this product and a number <= to the one in the step before.
* Confirm the sales order.

Current behavior:

The created delivery picking appears in state "Reserved" and the current quantity on stock has been reserved, allowing you to transfer that stock.

Expected behavior:

The created delivery picking should be in "Waiting another operation", or at least in "Waiting availability" until the purchase order is confirmed (if you have defined a supplier for the product and the procurement creates the purchase order), which seems to be the current behavior when there's no stock available (is this also correct, as it allows to manually reserve?).
'state': 'confirmed',
            'restrict_lot_id': inventory_line.prod_lot_id.id,
            'restrict_partner_id': inventory_line.partner_id.id,
            'location_id': location_id,
            'location_dest_id': location_dest_id,
        }
    def _fixup_negative_quants(self, cr, uid, inventory_line):
        """ This will handle the irreconciable quants created by a force availability followed by a
        return. When generating the moves of an inventory line, we look for quants of this line's
        product created to compensate a force availability. If there are some and if the quant
        which it is propagated from is still in the same location, we move it to the inventory
        adjustment location before getting it back. Getting the quantity from the inventory
        location will allow the negative quant to be compensated.
        """
        quant_obj = self.pool.get('stock.quant')
        stock_move_obj = self.pool.get('stock.move')
        quant_ids = self._get_quants(cr, uid, inventory_line)
        for quant in quant_obj.browse(cr, uid, quant_ids).filtered(lambda q: q.propagated_from_id.location_id.id == inventory_line.location_id.id):
            
            move_out_vals = self._get_move_values(cr, uid, inventory_line, quant.qty, inventory_line.location_id.id, inventory_line.product_id.property_stock_inventory.id)
            move_out = stock_move_obj.create(cr, uid, move_out_vals)
            move_out = stock_move_obj.browse(cr, uid, [move_out])
            quant_obj.quants_reserve(cr, uid, [(quant, quant.qty)], move_out)
            move_out.action_done()
            
            move_in_vals = self._get_move_values(cr, uid, inventory_line, quant.qty, inventory_line.product_id.property_stock_inventory.id, inventory_line.location_id.id)
            move_in = stock_move_obj.create(cr, uid, move_in_vals)
            move_in = stock_move_obj.browse(cr, uid, [move_in])
            move_in.action_done()
    def _resolve_inventory_line(self, cr, uid, inventory_line, context=None):