Kenjx

Lots assignment(Serial)

Oct 31st, 2024
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.54 KB | None | 0 0
  1. def create_stock_picking(self):
  2.      pick_obj = self.env["stock.picking"]
  3.         for data in self:
  4.             if (data.no_of_children - data.no_of_death_children) > 0:
  5.                 kid_no = data.no_of_children - data.no_of_death_children
  6.                 move_vals = []
  7.                 ml_vals = []
  8.                 animal_tags = []
  9.  
  10.                 for animal in data.livestock_ids.filtered(lambda kid: kid.livestock_state != 'dead'):
  11.                     # Search for an existing lot based on the tag
  12.                     lot2 = self.env['stock.lot'].search(
  13.                         [('name', '=', animal.tag), ('product_id', '=', data.livestock_id.product_id.id)], limit=1)
  14.  
  15.                     # # If the lot does not exist, create it
  16.                     if not lot2:
  17.                         lot2 = self.env['stock.lot'].create({
  18.                             'name': animal.tag,
  19.                             'product_id': data.livestock_id.product_id.id,
  20.                         })
  21.  
  22.                     # Append move line values
  23.                     ml_vals.append((0, 0, {
  24.                         'product_id': data.livestock_id.product_id.id,
  25.                         'reserved_uom_qty': 1,
  26.                         'qty_done': 1,
  27.                         'product_uom_id': data.livestock_id.product_id.uom_id.id,
  28.                         'location_dest_id': data.get_default_mrp_location_dest_id(),
  29.                         'location_id': data.get_default_mrp_location_src_id(),
  30.                         'lot_id': lot2.id
  31.                     }))
  32.                     animal_tags.append(lot2.id)
  33.  
  34.                 move_vals.append((0, 0, {
  35.                     'name': f'({data.livestock_id.product_id.name}) production from {data.livestock_id.tag}',
  36.                     'product_id': data.livestock_id.product_id.id,
  37.                     'product_uom_qty': kid_no,
  38.                     'quantity_done': kid_no,
  39.                     'product_uom': data.livestock_id.product_id.uom_id.id,
  40.                     'location_dest_id': data.get_default_mrp_location_dest_id(),
  41.                     'location_id': data.get_default_mrp_location_src_id(),
  42.                     'move_line_ids': ml_vals,
  43.                     # 'lot_ids': [(4, id) for id in animal_tags]
  44.                 }))
  45.  
  46.                 pick_values = {
  47.                     'note': f'Animal Production from {self.name}',
  48.                     'company_id': data.company_id.id if data.company_id else 1,
  49.                     'location_dest_id': data.get_default_mrp_location_dest_id(),
  50.                     'location_id': data.get_default_mrp_location_src_id(),
  51.                     # 'move_ids_without_package': move_vals,
  52.                     'move_line_ids_without_package': ml_vals,
  53.                     'move_type': 'direct',
  54.                     'picking_type_id': data.get_default_mrp_picking_type(),
  55.                     'origin': data.name,
  56.                     'livestock_id': data.livestock_id.id,
  57.                     'livestock_production_id': data.id
  58.                 }
  59.  
  60.                 pick_id = pick_obj.create(pick_values)
  61.  
  62.                 pick_id.action_confirm()
  63.  
  64.                 # Check if quantities are reserved or done, and then validate
  65.                 if any(line.qty_done or line.product_uom_qty for line in pick_id.move_line_ids):
  66.                     pick_id.button_validate()
  67.                 else:
  68.                     raise ValidationError("Cannot validate transfer: no quantities reserved or done.")
  69.  
  70.                 data.write({'picking_id': pick_id.id, 'state': 'confirmed'})
  71.         return True
Advertisement
Add Comment
Please, Sign In to add comment