外协出入库修复
This commit is contained in:
@@ -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):
|
||||||
"""
|
"""
|
||||||
工单工序排序方法(旧)
|
工单工序排序方法(旧)
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user