Accept Merge Request #1603: (feature/sale_order_route_pick -> develop)
Merge Request: 解决删除表面工艺,多增加了采购单的bug Created By: @胡尧 Accepted By: @胡尧 URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1603
This commit is contained in:
@@ -724,8 +724,13 @@ class MrpProduction(models.Model):
|
|||||||
proc_workorders = []
|
proc_workorders = []
|
||||||
process_parameter_workorder = self.env['mrp.workorder'].search(
|
process_parameter_workorder = self.env['mrp.workorder'].search(
|
||||||
[('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), ('state', '!=', 'cancel')], order='sequence asc')
|
||||||
if process_parameter_workorder:
|
if process_parameter_workorder:
|
||||||
|
# 将这些特殊表面工艺工单的采购单与调拨单置为失效
|
||||||
|
for workorder in process_parameter_workorder:
|
||||||
|
workorder._get_surface_technics_purchase_ids().write({'state': 'cancel'})
|
||||||
|
workorder.move_subcontract_workorder_ids.write({'state': 'cancel'})
|
||||||
|
workorder.move_subcontract_workorder_ids.picking_id.write({'state': 'cancel'})
|
||||||
consecutive_workorders = []
|
consecutive_workorders = []
|
||||||
sorted_workorders = sorted(process_parameter_workorder, key=lambda w: w.sequence)
|
sorted_workorders = sorted(process_parameter_workorder, key=lambda w: w.sequence)
|
||||||
for i, workorder in enumerate(sorted_workorders):
|
for i, workorder in enumerate(sorted_workorders):
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
def _get_surface_technics_purchase_ids(self):
|
def _get_surface_technics_purchase_ids(self):
|
||||||
domain = [('origin', '=', self.production_id.name), ('purchase_type', '=', 'consignment')]
|
domain = [('origin', '=', self.production_id.name), ('purchase_type', '=', 'consignment')]
|
||||||
purchase_orders = self.env['purchase.order'].search(domain)
|
purchase_orders = self.env['purchase.order'].search(domain)
|
||||||
purchase_orders_id = None
|
purchase_orders_id = self.env['purchase.order']
|
||||||
for po in purchase_orders:
|
for po in purchase_orders:
|
||||||
for line in po.order_line:
|
for line in po.order_line:
|
||||||
if line.product_id.server_product_process_parameters_id == self.surface_technics_parameters_id:
|
if line.product_id.server_product_process_parameters_id == self.surface_technics_parameters_id:
|
||||||
|
|||||||
@@ -654,54 +654,47 @@ class StockPicking(models.Model):
|
|||||||
|
|
||||||
# 创建 外协出库入单
|
# 创建 外协出库入单
|
||||||
def create_outcontract_picking(self, workorders, item, sorted_workorders):
|
def create_outcontract_picking(self, workorders, item, sorted_workorders):
|
||||||
domain = [('origin', '=', item.name), ('name', 'ilike', 'OCOUT')]
|
for workorder in workorders:
|
||||||
if len(workorders) > 1:
|
if workorder.move_subcontract_workorder_ids:
|
||||||
workorders = workorders[0]
|
workorder.move_subcontract_workorder_ids.write({'state': 'draft'})
|
||||||
else:
|
workorder.move_subcontract_workorder_ids.picking_id.write({'state': 'draft'})
|
||||||
domain += [
|
else:
|
||||||
('surface_technics_parameters_id', '=', workorders[0].surface_technics_parameters_id.id)]
|
# 创建一个新的补货组
|
||||||
stock_picking = self.env['stock.picking'].search(domain)
|
procurement_group_id = self.env['procurement.group'].create({
|
||||||
if not stock_picking:
|
'name': workorder.name,
|
||||||
for workorder in workorders:
|
'partner_id': self.partner_id.id,
|
||||||
# pick_ids = []
|
})
|
||||||
if not workorder.picking_ids:
|
move_dest_id = False
|
||||||
# outcontract_stock_move = self.env['stock.move'].search([('production_id', '=', item.id)])
|
# 如果当前工单是是制造订单的最后一个工单
|
||||||
# if not outcontract_stock_move:
|
if workorder == item.workorder_ids[-1]:
|
||||||
# 创建一个新的补货组
|
move_dest_id = item.move_raw_ids[0].id
|
||||||
procurement_group_id = self.env['procurement.group'].create({
|
else:
|
||||||
'name': workorder.name,
|
# 从sorted_workorders中找到上一工单的move
|
||||||
'partner_id': self.partner_id.id,
|
if sorted_workorders.index(workorder) > 0:
|
||||||
})
|
|
||||||
move_dest_id = False
|
|
||||||
# 如果当前工单是是制造订单的最后一个工单
|
|
||||||
if workorder == item.workorder_ids[-1]:
|
|
||||||
move_dest_id = item.move_raw_ids[0].id
|
|
||||||
else:
|
|
||||||
# 从sorted_workorders中找到上一工单的move
|
|
||||||
move_dest_id = sorted_workorders[sorted_workorders.index(workorder) - 1].move_subcontract_workorder_ids[1].id
|
move_dest_id = sorted_workorders[sorted_workorders.index(workorder) - 1].move_subcontract_workorder_ids[1].id
|
||||||
new_picking = True
|
new_picking = True
|
||||||
outcontract_picking_type_in = self.env.ref(
|
outcontract_picking_type_in = self.env.ref(
|
||||||
'sf_manufacturing.outcontract_picking_in').id,
|
'sf_manufacturing.outcontract_picking_in').id,
|
||||||
outcontract_picking_type_out = self.env.ref(
|
outcontract_picking_type_out = self.env.ref(
|
||||||
'sf_manufacturing.outcontract_picking_out').id,
|
'sf_manufacturing.outcontract_picking_out').id,
|
||||||
moves_in = self.env['stock.move'].sudo().create(
|
moves_in = self.env['stock.move'].sudo().create(
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in, procurement_group_id.id, move_dest_id))
|
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_in, procurement_group_id.id, move_dest_id))
|
||||||
picking_in = self.create(
|
picking_in = self.create(
|
||||||
moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/'))
|
moves_in._get_new_picking_values_Res(item, workorder, 'WH/OCIN/'))
|
||||||
# pick_ids.append(picking_in.id)
|
# pick_ids.append(picking_in.id)
|
||||||
moves_in.write(
|
moves_in.write(
|
||||||
{'picking_id': picking_in.id, 'state': 'waiting'})
|
{'picking_id': picking_in.id, 'state': 'waiting'})
|
||||||
moves_in._assign_picking_post_process(new=new_picking)
|
moves_in._assign_picking_post_process(new=new_picking)
|
||||||
moves_out = self.env['stock.move'].sudo().create(
|
moves_out = self.env['stock.move'].sudo().create(
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out, procurement_group_id.id, moves_in.id))
|
self.env['stock.move']._get_stock_move_values_Res(item, outcontract_picking_type_out, procurement_group_id.id, moves_in.id))
|
||||||
workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]})
|
workorder.write({'move_subcontract_workorder_ids': [(6, 0, [moves_in.id, moves_out.id])]})
|
||||||
picking_out = self.create(
|
picking_out = self.create(
|
||||||
moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/'))
|
moves_out._get_new_picking_values_Res(item, workorder, 'WH/OCOUT/'))
|
||||||
# pick_ids.append(picking_out.id)
|
# pick_ids.append(picking_out.id)
|
||||||
moves_out.write(
|
moves_out.write(
|
||||||
{'picking_id': picking_out.id, 'state': 'waiting'})
|
{'picking_id': picking_out.id, 'state': 'waiting'})
|
||||||
moves_out._assign_picking_post_process(new=new_picking)
|
moves_out._assign_picking_post_process(new=new_picking)
|
||||||
|
|
||||||
|
|
||||||
@api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id')
|
@api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id')
|
||||||
def _compute_state(self):
|
def _compute_state(self):
|
||||||
|
|||||||
@@ -66,30 +66,30 @@ class ProductionTechnologyReAdjustWizard(models.TransientModel):
|
|||||||
# 工单采购单外协出入库单皆需取消
|
# 工单采购单外协出入库单皆需取消
|
||||||
domain = [('production_id', '=', special.production_id.id)]
|
domain = [('production_id', '=', special.production_id.id)]
|
||||||
if special.process_parameters_id:
|
if special.process_parameters_id:
|
||||||
domain += [('surface_technics_parameters_id', '=', special.process_parameters_id.id)]
|
domain += [('surface_technics_parameters_id', '=', special.process_parameters_id.id), ('state', '!=', 'cancel')]
|
||||||
else:
|
else:
|
||||||
domain += [('technology_design_id', '=', special.id)]
|
domain += [('technology_design_id', '=', special.id), ('state', '!=', 'cancel')]
|
||||||
workorder = self.env['mrp.workorder'].search(domain)
|
workorder = self.env['mrp.workorder'].search(domain)
|
||||||
previous_workorder = self.env['mrp.workorder'].search(
|
# previous_workorder = self.env['mrp.workorder'].search(
|
||||||
[('sequence', '=', workorder.sequence - 1), ('routing_type', '=', '表面工艺'),
|
# [('sequence', '=', workorder.sequence - 1), ('routing_type', '=', '表面工艺'),
|
||||||
('production_id', '=', workorder.production_id.id)])
|
# ('production_id', '=', workorder.production_id.id)])
|
||||||
if previous_workorder:
|
# if previous_workorder:
|
||||||
if previous_workorder.supplier_id != workorder.supplier_id:
|
# if previous_workorder.supplier_id != workorder.supplier_id:
|
||||||
is_cancel = True
|
# is_cancel = True
|
||||||
else:
|
# else:
|
||||||
is_cancel = True
|
# is_cancel = True
|
||||||
if workorder.state != 'cancel' and is_cancel is True:
|
# if workorder.state != 'cancel' and is_cancel is True:
|
||||||
workorder.write({'state': 'cancel'})
|
# workorder.write({'state': 'cancel'})
|
||||||
workorder.picking_ids.write({'state': 'cancel'})
|
# workorder.picking_ids.write({'state': 'cancel'})
|
||||||
workorder.picking_ids.move_ids.write({'state': 'cancel'})
|
# workorder.picking_ids.move_ids.write({'state': 'cancel'})
|
||||||
purchase_order = self.env['purchase.order'].search(
|
# purchase_order = self.env['purchase.order'].search(
|
||||||
[('origin', '=', workorder.production_id.name)])
|
# [('origin', '=', workorder.production_id.name)])
|
||||||
for line in purchase_order.order_line:
|
# for line in purchase_order.order_line:
|
||||||
if line.product_id.server_product_process_parameters_id == workorder.surface_technics_parameters_id:
|
# if line.product_id.server_product_process_parameters_id == workorder.surface_technics_parameters_id:
|
||||||
purchase_order.write({'state': 'cancel'})
|
# purchase_order.write({'state': 'cancel'})
|
||||||
else:
|
else:
|
||||||
workorder = self.env['mrp.workorder'].search(
|
workorder = self.env['mrp.workorder'].search(
|
||||||
[('technology_design_id', '=', special.id), ('production_id', '=', special.production_id.id)])
|
[('technology_design_id', '=', special.id), ('production_id', '=', special.production_id.id), ('state', '!=', 'cancel')])
|
||||||
if not workorder:
|
if not workorder:
|
||||||
if special.route_id.routing_type == '表面工艺':
|
if special.route_id.routing_type == '表面工艺':
|
||||||
product_production_process = self.env['product.template'].search(
|
product_production_process = self.env['product.template'].search(
|
||||||
@@ -110,11 +110,12 @@ class ProductionTechnologyReAdjustWizard(models.TransientModel):
|
|||||||
workorder.blocked_by_workorder_ids = None
|
workorder.blocked_by_workorder_ids = None
|
||||||
else:
|
else:
|
||||||
if workorder.blocked_by_workorder_ids:
|
if workorder.blocked_by_workorder_ids:
|
||||||
workorder.blocked_by_workorder_ids = blocked_by_workorder_ids[0]
|
workorder.blocked_by_workorder_ids = workorder.blocked_by_workorder_ids[0]
|
||||||
productions._reset_work_order_sequence()
|
productions._reset_work_order_sequence()
|
||||||
if self.production_id.product_id.categ_id.type == '成品':
|
# 退回时不对外协出入库单和采购单做处理
|
||||||
productions._reset_subcontract_pick_purchase()
|
# if self.production_id.product_id.categ_id.type == '成品':
|
||||||
productions.get_subcontract_pick_purchase()
|
# productions._reset_subcontract_pick_purchase()
|
||||||
|
# productions.get_subcontract_pick_purchase()
|
||||||
productions.is_adjust = True
|
productions.is_adjust = True
|
||||||
for item in productions:
|
for item in productions:
|
||||||
workorders = item.workorder_ids.filtered(lambda wo: wo.state not in ('cancel')).sorted(
|
workorders = item.workorder_ids.filtered(lambda wo: wo.state not in ('cancel')).sorted(
|
||||||
|
|||||||
@@ -63,9 +63,9 @@ class ProductionTechnologyWizard(models.TransientModel):
|
|||||||
# 工单采购单外协出入库单皆需取消
|
# 工单采购单外协出入库单皆需取消
|
||||||
domain = [('production_id', '=', special.production_id.id)]
|
domain = [('production_id', '=', special.production_id.id)]
|
||||||
if special.process_parameters_id:
|
if special.process_parameters_id:
|
||||||
domain += [('surface_technics_parameters_id', '=', special.process_parameters_id.id)]
|
domain += [('surface_technics_parameters_id', '=', special.process_parameters_id.id), ('state', '!=', 'cancel')]
|
||||||
else:
|
else:
|
||||||
domain += [('technology_design_id', '=', special.id)]
|
domain += [('technology_design_id', '=', special.id), ('state', '!=', 'cancel')]
|
||||||
workorder = self.env['mrp.workorder'].search(domain)
|
workorder = self.env['mrp.workorder'].search(domain)
|
||||||
previous_workorder = self.env['mrp.workorder'].search(
|
previous_workorder = self.env['mrp.workorder'].search(
|
||||||
[('sequence', '=', workorder.sequence - 1), ('routing_type', '=', '表面工艺'),
|
[('sequence', '=', workorder.sequence - 1), ('routing_type', '=', '表面工艺'),
|
||||||
@@ -87,7 +87,7 @@ class ProductionTechnologyWizard(models.TransientModel):
|
|||||||
else:
|
else:
|
||||||
if special.production_id.workorder_ids:
|
if special.production_id.workorder_ids:
|
||||||
workorder = self.env['mrp.workorder'].search(
|
workorder = self.env['mrp.workorder'].search(
|
||||||
[('technology_design_id', '=', special.id), ('production_id', '=', special.production_id.id)])
|
[('technology_design_id', '=', special.id), ('production_id', '=', special.production_id.id), ('state', '!=', 'cancel')])
|
||||||
if not workorder:
|
if not workorder:
|
||||||
if special.route_id.routing_type == '表面工艺':
|
if special.route_id.routing_type == '表面工艺':
|
||||||
product_production_process = self.env['product.template'].search(
|
product_production_process = self.env['product.template'].search(
|
||||||
@@ -100,7 +100,7 @@ class ProductionTechnologyWizard(models.TransientModel):
|
|||||||
else:
|
else:
|
||||||
workorders_values.append(
|
workorders_values.append(
|
||||||
self.env['mrp.workorder'].json_workorder_str(special.production_id, special))
|
self.env['mrp.workorder'].json_workorder_str(special.production_id, special))
|
||||||
special.production_id.write({'workorder_ids': workorders_values})
|
special.production_id.write({'workorder_ids': workorders_values})
|
||||||
else:
|
else:
|
||||||
if len(workorder.blocked_by_workorder_ids) > 1:
|
if len(workorder.blocked_by_workorder_ids) > 1:
|
||||||
if workorder.sequence == 1:
|
if workorder.sequence == 1:
|
||||||
|
|||||||
@@ -248,38 +248,19 @@ class RePurchaseOrder(models.Model):
|
|||||||
|
|
||||||
def get_purchase_order(self, consecutive_process_parameters, production, product_id_to_production_names):
|
def get_purchase_order(self, consecutive_process_parameters, production, product_id_to_production_names):
|
||||||
server_product_process = []
|
server_product_process = []
|
||||||
production_process = product_id_to_production_names.get(
|
|
||||||
production.product_id.id)
|
|
||||||
purchase_order = self.env['purchase.order'].search(
|
|
||||||
[('state', '=', 'draft'), ('origin', '=', production.name),
|
|
||||||
('purchase_type', '=', 'consignment')], order='name asc')
|
|
||||||
for pp in consecutive_process_parameters:
|
for pp in consecutive_process_parameters:
|
||||||
server_template = self.env['product.template'].search(
|
purchase_order = pp._get_surface_technics_purchase_ids()
|
||||||
[('server_product_process_parameters_id', '=', pp.surface_technics_parameters_id.id),
|
if purchase_order:
|
||||||
('detailed_type', '=', 'service')])
|
purchase_order.write({'state': 'draft'})
|
||||||
if not purchase_order:
|
else:
|
||||||
|
server_template = self.env['product.template'].search(
|
||||||
|
[('server_product_process_parameters_id', '=', pp.surface_technics_parameters_id.id),
|
||||||
|
('detailed_type', '=', 'service')])
|
||||||
server_product_process.append((0, 0, {
|
server_product_process.append((0, 0, {
|
||||||
'product_id': server_template.product_variant_id.id,
|
'product_id': server_template.product_variant_id.id,
|
||||||
'product_qty': 1,
|
'product_qty': 1,
|
||||||
'product_uom': server_template.uom_id.id
|
'product_uom': server_template.uom_id.id
|
||||||
}))
|
}))
|
||||||
for purchase in purchase_order:
|
|
||||||
for po in purchase.order_line:
|
|
||||||
if po.product_id == server_template.product_variant_id:
|
|
||||||
continue
|
|
||||||
if server_template.server_product_process_parameters_id != po.product_id.server_product_process_parameters_id:
|
|
||||||
purchase_order_line = self.env['purchase.order.line'].search(
|
|
||||||
[('product_id', '=', server_template.product_variant_id.id),
|
|
||||||
('product_qty', '=', 1.0), ('id', '=', purchase.id)], limit=1,
|
|
||||||
order='id desc')
|
|
||||||
if not purchase_order_line:
|
|
||||||
server_product_process.append((0, 0, {
|
|
||||||
'product_id': server_template.product_variant_id.id,
|
|
||||||
'product_qty': 1,
|
|
||||||
'product_uom': server_template.uom_id.id
|
|
||||||
}))
|
|
||||||
|
|
||||||
if server_product_process:
|
|
||||||
purchase_order = self.env['purchase.order'].sudo().create({
|
purchase_order = self.env['purchase.order'].sudo().create({
|
||||||
'partner_id': server_template.seller_ids[0].partner_id.id,
|
'partner_id': server_template.seller_ids[0].partner_id.id,
|
||||||
'origin': production.name,
|
'origin': production.name,
|
||||||
|
|||||||
Reference in New Issue
Block a user