添加工艺设计
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
|
||||
@@ -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加工':
|
||||
|
||||
22
sf_manufacturing/models/sf_technology_design.py
Normal file
22
sf_manufacturing/models/sf_technology_design.py
Normal file
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<!-- <attribute name="statusbar_visible">draft,confirmed,progress,pending_processing,completed,done -->
|
||||
<!-- </attribute> -->
|
||||
<attribute name="statusbar_visible">
|
||||
confirmed,pending_cam,progress,rework,scrap,done
|
||||
technology_to_confirmed,confirmed,pending_cam,progress,rework,scrap,done
|
||||
</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//sheet//group//group[2]//label" position="before">
|
||||
|
||||
Reference in New Issue
Block a user