Odoo create stock.move.line to reserve stock

331 Views Asked by At
product_id = 465
location_id =8
product_qty =1
lot_id = 118
env['stock.move.line'].create(  {
  'company_id':1,
  'picking_id':record.id,
  'lot_id':lot_id,
  'date':record.date,
  'location_dest_id':5,
  'location_id':location_id ,
  'product_uom_qty':product_qty,
  'product_uom_id':32,
  'product_id':product_id
  })

I am trying to create stock move line to programmtically create stock.move.line. However, after using this code, stock move line is created but it is not working normally. The Transfer can't be processed even after pressing validating without any error popping. When cancel is pressed, it say It is not possible to unreserve more products of xxxxx than you have in stock. After some researching, i am not sure if I should update stock.quant to reserve the products. Then I added these two lines of code at the bottom of the code above. However, it leads to error that said 'int' object has no attribute 'categ_id'" while evaluating........ Is my code for reservation of stock wrong or is there other way that can make this works. Thanks

if env['stock.quant']._get_available_quantity(product_id,location_id, lot_id,strict=True)>=1:
  env['stock.quant']._update_available_quantity(product_id,location_id, -product_qty, lot_id,package_id=False, owner_id=False)
1

There are 1 best solutions below

0
Kenly On

The _get_available_quantity function will call _gather function which will call the _get_removal_strategy function and if you provide the product_id as an integer, it will fail to get the removal_strategy_id from the product categ_id

You may notice that the _get_available_quantity function expects a recordset because of the way Odoo defines the variable rounding.