优化制造订单报废

This commit is contained in:
jinling.yang
2024-11-21 17:12:50 +08:00
parent 60cc49238c
commit 310d8b33df
4 changed files with 131 additions and 68 deletions

View File

@@ -278,7 +278,7 @@ class MrpProduction(models.Model):
@api.depends(
'move_raw_ids.state', 'move_raw_ids.quantity_done', 'move_finished_ids.state', 'tool_state',
'workorder_ids.state', 'product_qty', 'qty_producing', 'schedule_state')
'workorder_ids.state', 'product_qty', 'qty_producing', 'schedule_state', 'programming_state')
def _compute_state(self):
for production in self:
if not production.state or not production.product_uom_id:
@@ -680,7 +680,8 @@ class MrpProduction(models.Model):
if production.product_id.categ_id.type in ['成品', '坯料']:
# # 根据工序设计生成工单
for route in production.technology_design_ids:
workorder_has = self.env['mrp.workorder'].search([('name', '=', route.route_id.name)])
workorder_has = self.env['mrp.workorder'].search(
[('name', '=', route.route_id.name), ('production_id', '=', production.id)])
if not workorder_has:
if route.route_id.routing_type not in ['表面工艺']:
workorders_values.append(
@@ -692,16 +693,6 @@ class MrpProduction(models.Model):
self.env[
'mrp.workorder']._json_workorder_surface_process_str(
production, route, product_production_process.seller_ids[0].partner_id.id))
# elif production.product_id.categ_id.type == '坯料':
# embryo_routing_workcenter = self.env['sf.embryo.model.type.routing.sort'].search(
# [('embryo_model_type_id', '=', production.product_id.embryo_model_type_id.id)],
# order='sequence asc'
# )
# for route_embryo in embryo_routing_workcenter:
# workorder_embryo_has = self.env['mrp.workorder'].search([('name', '=', route_embryo.route_id.name)])
# if not workorder_embryo_has:
# workorders_values.append(
# self.env['mrp.workorder'].json_workorder_str('', production, route_embryo))
production.workorder_ids = workorders_values
for workorder in production.workorder_ids:
workorder.duration_expected = workorder._get_duration_expected()
@@ -1269,6 +1260,7 @@ class MrpProduction(models.Model):
重新生成制造订单
"""
if self.is_scrap is True:
technology_design_values = []
procurement_requests = []
sale_order = self.env['sale.order'].sudo().search([('name', '=', self.origin)])
values = self.env['mrp.production'].create_production1_values(self)
@@ -1299,11 +1291,13 @@ class MrpProduction(models.Model):
[('origin', '=', self.origin)], order='id desc', limit=1)
move = self.env['stock.move'].search([('origin', '=', productions.name)], order='id desc')
for mo in move:
domain = []
if mo.procure_method == 'make_to_order' and mo.name != productions.name:
if mo.name == '/':
domain = [('barcode', '=', 'WH-PC'), ('sequence_code', '=', 'PC')]
elif mo.name == '':
domain = [('barcode', '=', 'WH-INTERNAL'), ('sequence_code', '=', 'INT')]
if domain:
picking_type = self.env['stock.picking.type'].search(domain)
mo.write({'picking_type_id': picking_type.id})
mo._assign_picking()
@@ -1355,10 +1349,72 @@ class MrpProduction(models.Model):
if purchase_orders.origin.find(productions.name) == -1:
purchase_orders.origin += ',' + productions.name
if item['is_reprogramming'] is False:
productions._create_workorder(item)
productions.programming_state = '已编程'
else:
productions.programming_state = '编程中'
if not technology_design_values:
i = 0
if self.product_id.categ_id.type == '成品':
# 根据加工面板的面数及成品工序模板生成工序设计
for k in (self.product_id.model_processing_panel.split(',')):
if self.production_type == '自动化产线加工':
product_routing_workcenter = self.env['sf.product.model.type.routing.sort'].search(
[('product_model_type_id', '=',
self.product_id.product_model_type_id.id)],
order='sequence asc'
)
else:
product_routing_workcenter = self.env[
'sf.manual.product.model.type.routing.sort'].search(
[('manual_product_model_type_id', '=',
self.product_id.product_model_type_id.id)],
order='sequence asc'
)
for route in product_routing_workcenter:
i += 1
technology_design_values.append(
self.env['sf.technology.design'].json_technology_design_str(k, route, i, False))
elif self.product_id.categ_id.type == '坯料':
i = 0
embryo_routing_workcenter = self.env['sf.embryo.model.type.routing.sort'].search(
[('embryo_model_type_id', '=', self.product_id.embryo_model_type_id.id)],
order='sequence asc'
)
for route_embryo in embryo_routing_workcenter:
i += 1
technology_design_values.append(
self.env['sf.technology.design'].json_technology_design_str(False, route_embryo, i,
False))
surface_technics_arr = []
route_workcenter_arr = []
for item in self.product_id.product_model_type_id.surface_technics_routing_tmpl_ids:
if item.route_workcenter_id.surface_technics_id.id:
for process_param in self.product_id.model_process_parameters_ids:
if item.route_workcenter_id.surface_technics_id == process_param.process_id:
surface_technics_arr.append(
item.route_workcenter_id.surface_technics_id.id)
route_workcenter_arr.append(item.route_workcenter_id.id)
if surface_technics_arr:
production_process = self.env['sf.production.process'].search(
[('id', 'in', surface_technics_arr)],
order='sequence asc'
)
for p in production_process:
# logging.info('production_process:%s' % p.name)
process_parameter = self.product_id.model_process_parameters_ids.filtered(
lambda pm: pm.process_id.id == p.id)
if process_parameter:
i += 1
route_production_process = self.env[
'mrp.routing.workcenter'].search(
[('surface_technics_id', '=', p.id),
('id', 'in', route_workcenter_arr)])
technology_design_values.append(
self.env['sf.technology.design'].json_technology_design_str(False,
route_production_process,
i,
process_parameter))
productions.technology_design_ids = technology_design_values
return productions
# 在之前的销售单上重新生成制造订单