添加工艺设计

This commit is contained in:
jinling.yang
2024-11-06 10:40:11 +08:00
parent 7d6699fe7a
commit aa9bdfe372
6 changed files with 52 additions and 44 deletions

View File

@@ -11,3 +11,4 @@ from . import production_line_base
from . import agv_setting from . import agv_setting
from . import agv_scheduling from . import agv_scheduling
from . import res_config_setting from . import res_config_setting
from . import sf_technology_design

View File

@@ -98,6 +98,7 @@ class MrpProduction(models.Model):
# ]) # ])
state = fields.Selection([ state = fields.Selection([
('draft', '草稿'), ('draft', '草稿'),
('technology_to_confirmed', '待工艺确认'),
('confirmed', '待排程'), ('confirmed', '待排程'),
('pending_cam', '待加工'), ('pending_cam', '待加工'),
('progress', '加工中'), ('progress', '加工中'),
@@ -158,6 +159,7 @@ class MrpProduction(models.Model):
is_remanufacture = fields.Boolean('是否重新制造', default=False) is_remanufacture = fields.Boolean('是否重新制造', default=False)
remanufacture_count = fields.Integer("重新制造订单数量", compute='_compute_remanufacture_production_ids') remanufacture_count = fields.Integer("重新制造订单数量", compute='_compute_remanufacture_production_ids')
remanufacture_production_id = fields.Many2one('mrp.production', string='') remanufacture_production_id = fields.Many2one('mrp.production', string='')
technology_design_ids = fields.One2many('sf.technology.design', 'production_id', string='工艺设计')
@api.depends('remanufacture_production_id') @api.depends('remanufacture_production_id')
def _compute_remanufacture_production_ids(self): def _compute_remanufacture_production_ids(self):
@@ -1217,10 +1219,6 @@ class sf_detection_result(models.Model):
'type': 'ir.actions.act_window', 'type': 'ir.actions.act_window',
'res_id': self.id, 'res_id': self.id,
'views': [(self.env.ref('sf_manufacturing.sf_test_report_form').id, 'form')], 'views': [(self.env.ref('sf_manufacturing.sf_test_report_form').id, 'form')],
# 'view_mode': 'form',
# 'context': {
# 'default_id': self.id
# },
'target': 'new' 'target': 'new'
} }

View File

@@ -1068,37 +1068,6 @@ class ResMrpWorkOrder(models.Model):
workorder.state = 'waiting' workorder.state = 'waiting'
continue 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): def button_start(self):
if self.routing_type == 'CNC加工': if self.routing_type == 'CNC加工':

View 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

View File

@@ -284,6 +284,7 @@ class StockRule(models.Model):
'product_id': production.product_id.id, 'product_id': production.product_id.id,
'state': 'draft', 'state': 'draft',
}) })
technology_design_values = []
all_production = productions all_production = productions
grouped_product_ids = {k: list(g) for k, g in groupby(all_production, key=lambda x: x.product_id.id)} grouped_product_ids = {k: list(g) for k, g in groupby(all_production, key=lambda x: x.product_id.id)}
# 初始化一个字典来存储每个product_id对应的生产订单名称列表 # 初始化一个字典来存储每个product_id对应的生产订单名称列表
@@ -355,15 +356,32 @@ class StockRule(models.Model):
self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i], self.env['purchase.order'].get_purchase_order(sorted_process_parameters[i],
production_item, production_item,
product_id_to_production_names) 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并将所有生产订单的名称作为字符串传递 # # 只调用一次fetchCNC并将所有生产订单的名称作为字符串传递
if not production_item.programming_no: # if not production_item.programming_no:
if not production_programming.programming_no: # if not production_programming.programming_no:
production_item.fetchCNC( # production_item.fetchCNC(
', '.join(product_id_to_production_names[production_item.product_id.id])) # ', '.join(product_id_to_production_names[production_item.product_id.id]))
else: # else:
production_item.write({'programming_no': production_programming.programming_no, # production_item.write({'programming_no': production_programming.programming_no,
'programming_state': '编程中'}) # 'programming_state': '编程中'})
return True return True

View File

@@ -70,7 +70,7 @@
<!-- <attribute name="statusbar_visible">draft,confirmed,progress,pending_processing,completed,done --> <!-- <attribute name="statusbar_visible">draft,confirmed,progress,pending_processing,completed,done -->
<!-- </attribute> --> <!-- </attribute> -->
<attribute name="statusbar_visible"> <attribute name="statusbar_visible">
confirmed,pending_cam,progress,rework,scrap,done technology_to_confirmed,confirmed,pending_cam,progress,rework,scrap,done
</attribute> </attribute>
</xpath> </xpath>
<xpath expr="//sheet//group//group[2]//label" position="before"> <xpath expr="//sheet//group//group[2]//label" position="before">