diff --git a/sf_manufacturing/models/__init__.py b/sf_manufacturing/models/__init__.py
index 7d6aa8ae..234d208e 100644
--- a/sf_manufacturing/models/__init__.py
+++ b/sf_manufacturing/models/__init__.py
@@ -11,3 +11,4 @@ from . import production_line_base
from . import agv_setting
from . import agv_scheduling
from . import res_config_setting
+from . import sf_technology_design
diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py
index 43cfc434..ebe08942 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -98,6 +98,7 @@ class MrpProduction(models.Model):
# ])
state = fields.Selection([
('draft', '草稿'),
+ ('technology_to_confirmed', '待工艺确认'),
('confirmed', '待排程'),
('pending_cam', '待加工'),
('progress', '加工中'),
@@ -158,6 +159,7 @@ class MrpProduction(models.Model):
is_remanufacture = fields.Boolean('是否重新制造', default=False)
remanufacture_count = fields.Integer("重新制造订单数量", compute='_compute_remanufacture_production_ids')
remanufacture_production_id = fields.Many2one('mrp.production', string='')
+ technology_design_ids = fields.One2many('sf.technology.design', 'production_id', string='工艺设计')
@api.depends('remanufacture_production_id')
def _compute_remanufacture_production_ids(self):
@@ -838,7 +840,7 @@ class MrpProduction(models.Model):
backorders = backorders - productions_to_backorder
productions_not_to_backorder._post_inventory(cancel_backorder=True)
- #查出最后一张工单完成入库操作
+ # 查出最后一张工单完成入库操作
# if self.workorder_ids.filtered(lambda w: w.routing_type in ['表面工艺']):
# move_finish = self.env['stock.move'].search([('created_production_id', '=', self.id)])
# if move_finish:
@@ -1217,10 +1219,6 @@ class sf_detection_result(models.Model):
'type': 'ir.actions.act_window',
'res_id': self.id,
'views': [(self.env.ref('sf_manufacturing.sf_test_report_form').id, 'form')],
- # 'view_mode': 'form',
- # 'context': {
- # 'default_id': self.id
- # },
'target': 'new'
}
diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py
index 37d42b42..649d51bc 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -1068,37 +1068,6 @@ class ResMrpWorkOrder(models.Model):
workorder.state = 'waiting'
continue
- # elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'cancel', 'progress',
- # 'rework']:
- # per_work = self.env['mrp.workorder'].search(
- # [('routing_type', '=', '装夹预调'), ('production_id', '=', workorder.production_id.id),
- # ('processing_panel', '=', workorder.processing_panel), ('is_rework', '=', True)])
- # if per_work:
- # workorder.state = 'waiting'
- # if workorder.routing_type == 'CNC加工' and workorder.state == 'progress':
- # workorder.state = 'to be detected'
-
- # for workorder in self:
- # if workorder.is_rework is True and workorder.state == 'done':
- # cnc_work = self.env['mrp.workorder'].search([('routing_type','=','CNC加工'),('production_id','=',workorder.production_id.id)])
- # if cnc_work:
- # cnc_work.state = 'waiting'
- # if workorder.state == 'pending':
- # if all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]):
- # workorder.state = 'ready' if workorder.production_id.reservation_state == 'assigned' else 'waiting'
- # continue
- # if workorder.state not in ('waiting', 'ready'):
- # continue
- # if not all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]):
- # workorder.state = 'pending'
- # continue
- # if workorder.production_id.reservation_state not in ('waiting', 'confirmed', 'assigned'):
- # continue
- # if workorder.production_id.reservation_state == 'assigned' and workorder.state == 'waiting':
- # workorder.state = 'ready'
- # elif workorder.production_id.reservation_state != 'assigned' and workorder.state == 'ready':
- # workorder.state = 'waiting'
-
# 重写工单开始按钮方法
def button_start(self):
if self.routing_type == 'CNC加工':
diff --git a/sf_manufacturing/models/sf_technology_design.py b/sf_manufacturing/models/sf_technology_design.py
new file mode 100644
index 00000000..f4e4d176
--- /dev/null
+++ b/sf_manufacturing/models/sf_technology_design.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+from odoo import fields, models
+
+
+class sf_technology_design(models.Model):
+ _name = 'sf.technology.design'
+ _description = "工艺设计"
+
+ name = fields.Char('工序')
+ panel = fields.Char('加工面')
+ sequence = fields.Integer('序号')
+ time_cycle_manual = fields.Float('预计时长')
+ production_id = fields.Many2one('mrp.production')
+ active = fields.Boolean('有效', default=True)
+
+ def json_technology_design_str(self, k, route):
+ workorders_values_str = [0, '', {
+ 'name': route.route_workcenter_id.name,
+ 'panel': k,
+ 'sequence': False,
+ 'time_cycle_manual':route.route_workcenter_id.time_cycle_manual }]
+ return workorders_values_str
diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py
index 40d159d5..a48d9461 100644
--- a/sf_manufacturing/models/stock.py
+++ b/sf_manufacturing/models/stock.py
@@ -284,6 +284,7 @@ class StockRule(models.Model):
'product_id': production.product_id.id,
'state': 'draft',
})
+ technology_design_values = []
all_production = productions
grouped_product_ids = {k: list(g) for k, g in groupby(all_production, key=lambda x: x.product_id.id)}
# 初始化一个字典来存储每个product_id对应的生产订单名称列表
@@ -355,15 +356,32 @@ class StockRule(models.Model):
self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i],
production_item,
product_id_to_production_names)
+
+ if production.product_id.categ_id.type == '成品':
+ # 根据加工面板的面数及成品工序模板生成工序设计
+ i = 0
+ for k in (production.product_id.model_processing_panel.split(',')):
+ product_routing_workcenter = self.env['sf.product.model.type.routing.sort'].search(
+ [('product_model_type_id', '=', production.product_id.product_model_type_id.id)],
+ order='sequence asc'
+ )
+ i += 1
+ for route in product_routing_workcenter:
+ technology_design_values.append(
+ self.env['sf.technology.design'].json_technology_design_str(k, route))
+ for process in sorted_process_parameters:
+ technology_design_values.append(
+ self.env['sf.technology.design'].json_technology_design_str(k, process))
+
# # 同一个产品多个制造订单对应一个编程单和模型库
# # 只调用一次fetchCNC,并将所有生产订单的名称作为字符串传递
- if not production_item.programming_no:
- if not production_programming.programming_no:
- production_item.fetchCNC(
- ', '.join(product_id_to_production_names[production_item.product_id.id]))
- else:
- production_item.write({'programming_no': production_programming.programming_no,
- 'programming_state': '编程中'})
+ # if not production_item.programming_no:
+ # if not production_programming.programming_no:
+ # production_item.fetchCNC(
+ # ', '.join(product_id_to_production_names[production_item.product_id.id]))
+ # else:
+ # production_item.write({'programming_no': production_programming.programming_no,
+ # 'programming_state': '编程中'})
return True
diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml
index 4c06c544..3d5aa625 100644
--- a/sf_manufacturing/views/mrp_production_addional_change.xml
+++ b/sf_manufacturing/views/mrp_production_addional_change.xml
@@ -70,7 +70,7 @@
- confirmed,pending_cam,progress,rework,scrap,done
+ technology_to_confirmed,confirmed,pending_cam,progress,rework,scrap,done