diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py
index ebe08942..54b1a61c 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -254,6 +254,44 @@ class MrpProduction(models.Model):
if production.tool_state == '2':
production.state = 'rework'
+ def technology_confirm(self):
+ # 判断同一个加工面的标准工序的顺序是否依次排序
+ technology_design = self.technology_design_ids.sorted(key=lambda m: m.sequence)
+ current_design_index = None
+ for index, design in enumerate(technology_design.filtered(lambda a: a.routing_tag == 'standard')):
+ if design == current_design:
+ current_design_index = index
+ break # 找到了 current_design,跳出循环
+
+ # 现在我们有了 current_design 的索引,我们可以找到下一条设计
+ if current_design_index is not None and current_design_index + 1 < len(technology_design):
+ next_design = technology_design[current_design_index + 1]
+ # 下一条设计是 next_design
+ else:
+ # 如果 current_design_index 为 None 或者没有下一条设计,则 next_design 为 None
+ next_design = None
+ for design in technology_design.filtered(lambda a: a.routing_tag == 'standard'):
+ routing_type = design.route_id.routing_type
+ if routing_type in ['装夹预调', 'CNC加工', '解除装夹']:
+ # standard_designs = [d for d in technology_design_ids if d.routing_tag == 'standard']
+ # last_design = technology_design[technology_design.index(design) - 1]
+ next_design = technology_design[2]
+ for next_design in technology_design:
+ next_design_routing_type = next_design.route_id.routing_type
+ logging.info('next_design:%s' % next_design.route_id.name)
+ logging.info('next_design面:%s' % next_design.panel)
+ logging.info('design:%s' % design.route_id.name)
+ logging.info('design面:%s' % design.panel)
+ if next_design == design:
+ break
+ if design.panel != next_design.panel and routing_type not in ['解除装夹']:
+ raise UserError('【加工面】为%s的标准工序里含有其他加工面的工序,请调整后重试' % design.panel)
+ if design.panel == next_design.panel:
+ if (routing_type == '装夹预调' and next_design_routing_type == '解除装夹') or (
+ routing_type == 'CNC加工' and next_design_routing_type == '装夹预调'):
+ raise UserError('【加工面】为%s的标准工序顺序有误,请调整后重试' % design.panel)
+ return True
+
def action_check(self):
"""
审核启用
diff --git a/sf_manufacturing/models/mrp_routing_workcenter.py b/sf_manufacturing/models/mrp_routing_workcenter.py
index ef451df7..2916bdce 100644
--- a/sf_manufacturing/models/mrp_routing_workcenter.py
+++ b/sf_manufacturing/models/mrp_routing_workcenter.py
@@ -14,7 +14,7 @@ class ResMrpRoutingWorkcenter(models.Model):
('表面工艺', '表面工艺')
], string="工序类型")
routing_tag = fields.Selection([
- ('Standard', '标准'),
+ ('standard', '标准'),
('special', '特殊')
], string="标签")
is_repeat = fields.Boolean('重复', default=False)
@@ -23,6 +23,7 @@ class ResMrpRoutingWorkcenter(models.Model):
bom_id = fields.Many2one('mrp.bom', required=False)
surface_technics_id = fields.Many2one('sf.production.process', string="表面工艺")
reserved_duration = fields.Float('预留时长', default=30, tracking=True)
+
def get_no(self):
international_standards = self.search(
[('code', '!=', ''), ('active', 'in', [True, False])],
@@ -79,3 +80,13 @@ class ResMrpRoutingWorkcenter(models.Model):
else:
workcenter_id = workcenter_ids[0]
return workcenter_id
+
+ @api.model
+ def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
+ if self._context.get('production_id'):
+ technology_design = self.env['sf.technology.design'].search(
+ [('production_id', '=', self._context.get('production_id'))])
+ route_ids = [t.route_id.id for t in technology_design]
+ domain = [('id', 'not in', route_ids)]
+ return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
+ return super()._name_search(name, args, operator, limit, name_get_uid)
diff --git a/sf_manufacturing/models/sf_technology_design.py b/sf_manufacturing/models/sf_technology_design.py
index afb5f05b..e5ce0c69 100644
--- a/sf_manufacturing/models/sf_technology_design.py
+++ b/sf_manufacturing/models/sf_technology_design.py
@@ -6,22 +6,23 @@ class sf_technology_design(models.Model):
_name = 'sf.technology.design'
_description = "工艺设计"
- name = fields.Char('工序')
+ route_id = fields.Many2one('mrp.routing.workcenter', '工序')
panel = fields.Char('加工面')
sequence = fields.Integer('序号')
- time_cycle_manual = fields.Float('预计时长')
+ routing_tag = fields.Selection(related='route_id.routing_tag', string='标签', store=True)
+ time_cycle_manual = fields.Float(related='route_id.time_cycle_manual', string='预计时长')
production_id = fields.Many2one('mrp.production')
is_auto = fields.Boolean('是否自动生成', default=False)
active = fields.Boolean('有效', default=True)
- def json_technology_design_str(self, k, route_name, time_cycle_manual, i):
+ def json_technology_design_str(self, k, route, i):
workorders_values_str = [0, '', {
- 'name': route_name,
+ 'route_id': route.id,
'panel': k,
'sequence': i,
- 'is_auto': True,
- 'time_cycle_manual': time_cycle_manual}]
+ 'is_auto': True}]
return workorders_values_str
def unlink_technology_design(self):
self.active = False
+
diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py
index 64c89d46..70dbdf68 100644
--- a/sf_manufacturing/models/stock.py
+++ b/sf_manufacturing/models/stock.py
@@ -367,10 +367,7 @@ class StockRule(models.Model):
for route in product_routing_workcenter:
i += 1
technology_design_values.append(
- self.env['sf.technology.design'].json_technology_design_str(k,
- route.route_workcenter_id.name,
- route.route_workcenter_id.time_cycle_manual,
- i))
+ self.env['sf.technology.design'].json_technology_design_str(k, route, i))
surface_technics_arr = []
route_workcenter_arr = []
for process_param in production.product_id.product_model_type_id.surface_technics_routing_tmpl_ids.filtered(
@@ -403,8 +400,7 @@ class StockRule(models.Model):
('id', 'in', route_workcenter_arr)])
technology_design_values.append(
self.env['sf.technology.design'].json_technology_design_str(k,
- process_parameter.display_name,
- route_production_process.time_cycle_manual,
+ route_production_process,
i))
productions.technology_design_ids = technology_design_values
@@ -624,12 +620,12 @@ class StockPicking(models.Model):
item.telephone_of_delivery = sale_id.telephone_of_delivery
item.address_of_delivery = sale_id.address_of_delivery
- bom = self.env['mrp.bom'].sudo().search([('bom_line_ids.product_id', '=', self.move_ids.product_id.id)])
- if bom:
- if item.picking_type_id.sequence_code == 'DL':
- item.retrospect_ref = bom.product_tmpl_id.default_code
- elif item.picking_type_id.sequence_code in ['INT', 'PC']:
- item.retrospect_ref = bom.product_tmpl_id.name
+ # bom = self.env['mrp.bom'].sudo().search([('bom_line_ids.product_id', '=', self.move_ids.product_id.id)])
+ # if bom:
+ # if item.picking_type_id.sequence_code == 'DL':
+ # item.retrospect_ref = bom.product_tmpl_id.default_code
+ # elif item.picking_type_id.sequence_code in ['INT', 'PC']:
+ # item.retrospect_ref = bom.product_tmpl_id.name
# 设置外协出入单的名称
def _get_name_Res(self, rescode):
diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml
index 42b68eae..1899aad2 100644
--- a/sf_manufacturing/views/mrp_production_addional_change.xml
+++ b/sf_manufacturing/views/mrp_production_addional_change.xml
@@ -114,12 +114,18 @@
string="验证" type="object" class="oe_highlight"
confirm="There are no components to consume. Are you still sure you want to continue?"
data-hotkey="g" groups="sf_base.group_sf_mrp_user"/>
+
+
+
@@ -341,10 +347,15 @@
-
-
-
+
+
+
+
+