外协出入库修复

This commit is contained in:
jinling.yang
2024-11-18 11:24:32 +08:00
parent a8e9fe40ac
commit 9671efeced
2 changed files with 68 additions and 92 deletions

View File

@@ -701,7 +701,6 @@ class MrpProduction(models.Model):
for workorder in production.workorder_ids: for workorder in production.workorder_ids:
workorder.duration_expected = workorder._get_duration_expected() workorder.duration_expected = workorder._get_duration_expected()
# 外协出入库单处理 # 外协出入库单处理
def get_subcontract_pick_purchase(self): def get_subcontract_pick_purchase(self):
production_all = self.sorted(lambda x: x.id) production_all = self.sorted(lambda x: x.id)
@@ -715,67 +714,43 @@ class MrpProduction(models.Model):
[('surface_technics_parameters_id', '!=', False), ('production_id', '=', production.id), [('surface_technics_parameters_id', '!=', False), ('production_id', '=', production.id),
('is_subcontract', '=', True)], order='sequence asc') ('is_subcontract', '=', True)], order='sequence asc')
if process_parameter_workorder: if process_parameter_workorder:
is_pick = False
consecutive_workorders = [] consecutive_workorders = []
m = 0
sorted_workorders = sorted(process_parameter_workorder, key=lambda w: w.sequence) sorted_workorders = sorted(process_parameter_workorder, key=lambda w: w.sequence)
for i in range(len(sorted_workorders) - 1): for i, workorder in enumerate(sorted_workorders):
if m == 0: # 检查当前工作订单和下一个工作订单是否连续,并且供应商相同
is_pick = False if workorder.sequence == 1:
logging.info(sorted_workorders[i].sequence) consecutive_workorders.append(workorder)
logging.info(sorted_workorders[i + 1].sequence) elif workorder.sequence == sorted_workorders[
logging.info(sorted_workorders[i + 1].sequence - 1) i - 1].sequence + 1 and workorder.supplier_id.id == sorted_workorders[i - 1].supplier_id.id:
if sorted_workorders[i].supplier_id.id == sorted_workorders[i + 1].supplier_id.id and \ consecutive_workorders.append(workorder)
sorted_workorders[i].sequence == sorted_workorders[i + 1].sequence - 1:
if sorted_workorders[i] not in consecutive_workorders:
consecutive_workorders.append(sorted_workorders[i])
consecutive_workorders.append(sorted_workorders[i + 1])
m += 1
continue
else: else:
if m == len(consecutive_workorders) - 1 and m != 0: # 处理连续组,如果它不为空
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, if consecutive_workorders:
production) # 创建出库拣货单和采购订单
self.env['purchase.order'].get_purchase_order(consecutive_workorders, self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
production, self.env['purchase.order'].get_purchase_order(consecutive_workorders, production,
product_id_to_production_names) product_id_to_production_names)
if sorted_workorders[i] in consecutive_workorders: if i < len(sorted_workorders) - 1:
is_pick = True # 重置连续组,并添加当前工作订单
consecutive_workorders = [] consecutive_workorders = [workorder]
m = 0 else:
# 当前面的连续工序生成对应的外协出入库单再生成当前工序的外协出入库单 # 判断最后一笔:
if is_pick is False: if workorder.sequence == sorted_workorders[
self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], i - 1].sequence and workorder.supplier_id.id == sorted_workorders[
production) i - 1].supplier_id.id:
self.env['purchase.order'].get_purchase_order(sorted_workorders[i], consecutive_workorders = [workorder]
production, else:
product_id_to_production_names) # 立即创建出库拣货单和采购订单
if m == len(consecutive_workorders) - 1 and m != 0: self.env['stock.picking'].create_outcontract_picking(workorder, production)
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, self.env['purchase.order'].get_purchase_order(workorder, production,
production) product_id_to_production_names)
self.env['purchase.order'].get_purchase_order(consecutive_workorders, consecutive_workorders = []
production,
product_id_to_production_names) # 处理最后一个组,即使它可能只有一个工作订单
if sorted_workorders[i] in consecutive_workorders: if consecutive_workorders:
is_pick = True
consecutive_workorders = []
m = 0
if m == len(consecutive_workorders) - 1 and m != 0:
self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production) self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production)
self.env['purchase.order'].get_purchase_order(consecutive_workorders, self.env['purchase.order'].get_purchase_order(consecutive_workorders, production,
production,
product_id_to_production_names) product_id_to_production_names)
if is_pick is False and m == 0:
if len(sorted_workorders) == 1:
self.env['stock.picking'].create_outcontract_picking(sorted_workorders, production)
self.env['purchase.order'].get_purchase_order(sorted_workorders,
production,
product_id_to_production_names)
else:
self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production)
self.env['purchase.order'].get_purchase_order(sorted_workorders[i],
production,
product_id_to_production_names)
# 工单排序 # 工单排序
def _reset_work_order_sequence1(self, k): def _reset_work_order_sequence1(self, k):
@@ -875,7 +850,6 @@ class MrpProduction(models.Model):
if td_ids: if td_ids:
work.sequence = td_ids[0].sequence work.sequence = td_ids[0].sequence
def _reset_work_order_sequence_1(self): def _reset_work_order_sequence_1(self):
""" """
工单工序排序方法(旧) 工单工序排序方法(旧)

View File

@@ -647,40 +647,43 @@ class StockPicking(models.Model):
# 创建 外协出库入单 # 创建 外协出库入单
def create_outcontract_picking(self, sorted_workorders_arr, item): def create_outcontract_picking(self, sorted_workorders_arr, item):
for sorted_workorders in sorted_workorders_arr: if len(sorted_workorders_arr) > 1:
# pick_ids = [] sorted_workorders_arr = sorted_workorders_arr[0]
if not sorted_workorders.picking_ids: stock_picking = self.env['stock.picking'].search(
outcontract_stock_move = self.env['stock.move'].search( [('origin', '=', sorted_workorders_arr.production_id.name), ('name', 'ilike', 'OCOUT')])
[('workorder_id', '=', sorted_workorders.id), ('production_id', '=', item.id)]) if not stock_picking:
if not outcontract_stock_move: for sorted_workorders in sorted_workorders_arr:
new_picking = True # pick_ids = []
location_id = self.env['stock.location'].search( if not sorted_workorders.picking_ids:
[('barcode', 'ilike', 'VL-SPOC')]).id, outcontract_stock_move = self.env['stock.move'].search([('production_id', '=', item.id)])
location_dest_id = self.env['stock.location'].search( if not outcontract_stock_move:
[('barcode', 'ilike', 'WH-PREPRODUCTION')]).id, new_picking = True
outcontract_picking_type_in = self.env.ref( location_id = self.env['stock.location'].search(
'sf_manufacturing.outcontract_picking_in').id, [('barcode', 'ilike', 'VL-SPOC')]).id,
outcontract_picking_type_out = self.env.ref( location_dest_id = self.env['stock.location'].search(
'sf_manufacturing.outcontract_picking_out').id, [('barcode', 'ilike', 'WH-PREPRODUCTION')]).id,
moves_out = self.env['stock.move'].sudo().create( outcontract_picking_type_in = self.env.ref(
self.env['stock.move']._get_stock_move_values_Res(item, location_dest_id, location_id, 'sf_manufacturing.outcontract_picking_in').id,
outcontract_picking_type_out)) outcontract_picking_type_out = self.env.ref(
picking_out = self.create( 'sf_manufacturing.outcontract_picking_out').id,
moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/')) moves_out = self.env['stock.move'].sudo().create(
# pick_ids.append(picking_out.id) self.env['stock.move']._get_stock_move_values_Res(item, location_dest_id, location_id,
moves_out.write( outcontract_picking_type_out))
{'picking_id': picking_out.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id}) picking_out = self.create(
moves_out._assign_picking_post_process(new=new_picking) moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/'))
moves_in = self.env['stock.move'].sudo().create( # pick_ids.append(picking_out.id)
self.env['stock.move']._get_stock_move_values_Res(item, location_id, location_dest_id, moves_out.write(
outcontract_picking_type_in)) {'picking_id': picking_out.id, 'state': 'waiting'})
picking_in = self.create( moves_out._assign_picking_post_process(new=new_picking)
moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/')) moves_in = self.env['stock.move'].sudo().create(
# pick_ids.append(picking_in.id) self.env['stock.move']._get_stock_move_values_Res(item, location_id, location_dest_id,
moves_in.write( outcontract_picking_type_in))
{'picking_id': picking_in.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id}) picking_in = self.create(
moves_in._assign_picking_post_process(new=new_picking) moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/'))
# sorted_workorders.write({'picking_ids': [(6, 0, pick_ids)]}) # pick_ids.append(picking_in.id)
moves_in.write(
{'picking_id': picking_in.id, 'state': 'waiting'})
moves_in._assign_picking_post_process(new=new_picking)
class ReStockMove(models.Model): class ReStockMove(models.Model):
@@ -786,7 +789,6 @@ class ReStockMove(models.Model):
elif self.product_id.tracking == "lot": elif self.product_id.tracking == "lot":
self._put_tool_lot(self.company_id, self.product_id, self.origin) self._put_tool_lot(self.company_id, self.product_id, self.origin)
return { return {
'name': _('Detailed Operations'), 'name': _('Detailed Operations'),
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',