diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index f53c5e2b..8f58b1ad 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -16,6 +16,8 @@ + + + + + mrp.group_mrp_manager,sf_base.group_sf_mrp_manager,sf_base.group_sf_equipment_user,sf_base.group_sf_order_user + + + diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index a7123d44..a00ed056 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -58,17 +58,8 @@ 订单发货提醒 stock.picking - - - - - - - - - - + 装夹预调工单逾期预警 mrp.workorder @@ -77,12 +68,12 @@ mrp.workorder - + CNC加工工单逾期预警 mrp.workorder - CNC工单已逾期 + CNC加工工单已逾期 mrp.workorder @@ -96,7 +87,7 @@ mrp.workorder - + 表面工艺工单逾期预警 mrp.workorder diff --git a/sf_message/data/cron_data.xml b/sf_message/data/cron_data.xml index f095c9bd..736e3e91 100644 --- a/sf_message/data/cron_data.xml +++ b/sf_message/data/cron_data.xml @@ -26,7 +26,7 @@ - + 检查工单是否完成并恢复正常时效 code diff --git a/sf_message/models/sf_message_mrp_production.py b/sf_message/models/sf_message_mrp_production.py index 44a100f3..a60f2161 100644 --- a/sf_message/models/sf_message_mrp_production.py +++ b/sf_message/models/sf_message_mrp_production.py @@ -1,3 +1,4 @@ +import logging import re from odoo import models, fields, api, _ from urllib.parse import urlencode @@ -35,19 +36,20 @@ class SFMessageMrpProduction(models.Model): [('origin', '=', mrp_production.origin), ('picking_type_id.sequence_code', '=', 'SFP'), ('state', '=', 'assigned')], limit=1) if stock_picking_sfp: - url = self.request_url() + url = self.request_url(stock_picking_sfp.id) content = content.replace('{{name}}', stock_picking_sfp.name).replace( '{{sale_order_name}}', mrp_production.origin).replace('{{request_url}}', url) contents.append(content) + logging.info('生产完工入库提醒: %s' % contents) return contents - def request_url(self): + def request_url(self, id): url = self.env['ir.config_parameter'].get_param('web.base.url') - action_id = self.env.ref('mrp.mrp_production_action').id + action_id = self.env.ref('stock.action_picking_tree_all').id menu_id = self.env['ir.model.data'].search([('name', '=', 'module_theme_treehouse')]).id # 查询参数 - params = {'menu_id': menu_id, 'action': action_id, 'model': 'mrp.production', - 'view_type': 'kanban'} + params = {'id': id, 'menu_id': menu_id, 'action': action_id, 'model': 'mrp.production', + 'view_type': 'form'} # 拼接查询参数 query_string = urlencode(params) # 拼接URL diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index d98b475f..9d7c7f0e 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -1,3 +1,4 @@ +import logging import re from odoo import models, fields, api, _ from urllib.parse import urlencode @@ -40,9 +41,10 @@ class SFMessageStockPicking(models.Model): ('picking_type_id.sequence_code', '=', 'OUT')]) if stock_picking_out and len(stock_picking_out) > 0: content = message_queue_id.message_template_id.content - url = self.request_url() + url = self.request_url1(stock_picking_out.id) content = content.replace('{{name}}', stock_picking_out.name).replace( '{{sale_order_name}}', stock_picking_out.origin).replace('{{request_url}}', url) + logging.info('订单发货提醒: %s' % content) return content def _get_message(self, message_queue_ids): @@ -96,3 +98,16 @@ class SFMessageStockPicking(models.Model): # 拼接URL full_url = url + "/web#" + query_string return full_url + + def request_url1(self, id): + url = self.env['ir.config_parameter'].get_param('web.base.url') + action_id = self.env.ref('stock.action_picking_tree_all').id + menu_id = self.env['ir.model.data'].search([('name', '=', 'module_theme_treehouse')]).id + # 查询参数 + params = {'id': id, 'menu_id': menu_id, 'action': action_id, 'model': 'stock.picking', + 'view_type': 'form'} + # 拼接查询参数 + query_string = urlencode(params) + # 拼接URL + full_url = url + "/web#" + query_string + return full_url diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 505b6f93..9c3cb9f5 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -12,7 +12,7 @@ class SFMessageWork(models.Model): _name = 'mrp.workorder' _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] - @api.depends('production_availability', 'blocked_by_workorder_ids.state') + @api.depends('production_availability', 'blocked_by_workorder_ids.state', 'production_id.tool_state') def _compute_state(self): super(SFMessageWork, self)._compute_state() for workorder in self: diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index 35a7d3a3..39b4ad8a 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -104,6 +104,7 @@ class Sf_Mrs_Connect(http.Controller, MultiInheritController): # 对制造订单所以面的cnc工单的程序用刀进行校验 try: + logging.info(f'已更新制造订单:{productions}') productions.production_cnc_tool_checkout() except Exception as e: logging.info(f'对cnc工单的程序用刀进行校验报错:{e}') diff --git a/sf_quality/models/quality_cnc_test.py b/sf_quality/models/quality_cnc_test.py index cc39bd11..f911fb43 100644 --- a/sf_quality/models/quality_cnc_test.py +++ b/sf_quality/models/quality_cnc_test.py @@ -31,19 +31,31 @@ class SfQualityCncTest(models.Model): ("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因") detailed_reason = fields.Text('详细原因') + # machining_drawings = fields.Binary(related='workorder_id.machining_drawings', string='2D加工图纸', readonly=True) + # quality_standard = fields.Binary(related='workorder_id.quality_standard', string='质检标准', readonly=True) + def submit_pass(self): - self.write({'result': 'pass', 'test_results': self.test_results, 'state': 'done'}) + if self.test_results in ['返工', '报废']: + raise UserError(_('请重新选择【判定结果】-【检测结果】')) + self.write({'result': 'pass', 'test_results': '合格', 'state': 'done'}) self.workorder_id.write({'test_results': self.test_results}) self.workorder_id.button_finish() def submit_fail(self): - if not self.reason and not self.detailed_reason and not self.test_results: + if not self.test_results: raise UserError(_('请填写【判定结果】里的信息')) - else: - self.write({'result': 'fail', 'test_results': self.test_results, 'state': 'done'}) - self.workorder_id.write( - {'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason}) - self.workorder_id.button_finish() + if self.test_results == '合格': + raise UserError(_('请重新选择【判定结果】-【检测结果】')) + self.write({'result': 'fail', 'test_results': self.test_results, 'state': 'done'}) + self.workorder_id.write( + {'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason}) + self.workorder_id.button_finish() + + @api.onchange('test_results') + def _onchange_test_results(self): + if self.test_results == '合格': + self.reason = False + self.detailed_reason = False class SfQualityWorkOrder(models.Model): diff --git a/sf_quality/views/quality_cnc_test_view.xml b/sf_quality/views/quality_cnc_test_view.xml index a9bceffe..85f92bfb 100644 --- a/sf_quality/views/quality_cnc_test_view.xml +++ b/sf_quality/views/quality_cnc_test_view.xml @@ -5,7 +5,7 @@ 加工质检单编码规则 quality.cnc.test QCT - 4 + 5 @@ -20,10 +20,12 @@ - - - - + + @@ -89,7 +91,6 @@ - @@ -99,17 +100,19 @@ - - + + - + - + - + @@ -171,7 +174,7 @@ 驾驶舱 ir.actions.act_window quality.cnc.test - kanban,form + kanban,tree,form [] diff --git a/sf_quality/views/view.xml b/sf_quality/views/view.xml index 1ed999d6..e0b2064b 100644 --- a/sf_quality/views/view.xml +++ b/sf_quality/views/view.xml @@ -34,36 +34,36 @@ - - quality.point.form.inherit.sf - quality.point - - - - - - - custom_required - 1 - - - custom_required - 1 - - - + + quality.point.form.inherit.sf + quality.point + + + + + + + custom_required + 1 + + + custom_required + 1 + + + - - sf.quality.point.form.inherit.sf - quality.point - - - - custom_required - - - custom_required - - - + + sf.quality.point.form.inherit.sf + quality.point + + + + custom_required + + + custom_required + + + diff --git a/sf_sale/views/quick_easy_order_view.xml b/sf_sale/views/quick_easy_order_view.xml index aebb4e97..9111403d 100644 --- a/sf_sale/views/quick_easy_order_view.xml +++ b/sf_sale/views/quick_easy_order_view.xml @@ -80,8 +80,8 @@ - - + + diff --git a/sf_tool_management/models/mrp_workorder.py b/sf_tool_management/models/mrp_workorder.py index 9326b511..d346937a 100644 --- a/sf_tool_management/models/mrp_workorder.py +++ b/sf_tool_management/models/mrp_workorder.py @@ -170,6 +170,7 @@ class MrpProduction(models.Model): # 修改cnc程序的‘刀具状态’ workorder_ids = self.env['mrp.workorder'].sudo().search([('production_id', 'in', self.ids)]) if invalid_tool: + logging.info(f'无效刀:{invalid_tool}') # 修改cnc程序的‘刀具状态’为 ‘无效刀’ cnc_ids = self.env['sf.cnc.processing'].sudo().search( [('workorder_id', 'in', workorder_ids.ids), ('cutting_tool_name', 'in', invalid_tool)]) @@ -194,20 +195,25 @@ class MrpProduction(models.Model): # 自动调用重新获取编程的方法 logging.info('cnc用刀校验到无效刀自动调用重新编程方法:update_programming_state()') self[0].update_programming_state() + self[0].write({'is_rework': False}) # 修改制造订单 编程状态变为“编程中” 制造订单状态为‘返工’ self.write({'programming_state': '编程中', 'work_state': '编程中', 'state': 'rework'}) if missing_tool_1: + logging.info(f'线边、机内缺刀:{missing_tool_1}') # 修改 修改cnc程序的‘刀具状态’ 为 ‘缺刀’ cnc_ids = self.env['sf.cnc.processing'].sudo().search( [('workorder_id', 'in', workorder_ids.ids), ('cutting_tool_name', 'in', missing_tool_1)]) if cnc_ids: cnc_ids.write({'tool_state': '1'}) - if missing_tool_2 and not invalid_tool: + if missing_tool_2 and invalid_tool == []: + logging.info(f'库存缺刀:{missing_tool_2}') # 调用CAM工单程序用刀计划创建方法 cnc_ids = self.env['sf.cnc.processing'].sudo().search( - [('workorder_id', 'in', workorder_ids.filtered(lambda a: a.production_id == self[0].id).ids), + [('workorder_id', 'in', workorder_ids.filtered(lambda a: a.production_id == self[0]).ids), ('cutting_tool_name', 'in', missing_tool_2)]) if cnc_ids: logging.info('调用CAM工单程序用刀计划创建方法!!!') self.env['sf.cam.work.order.program.knife.plan'].sudo().create_cam_work_plan(cnc_ids) + if not invalid_tool and not missing_tool_1: + logging.info('校验cnc用刀正常!!!') logging.info('工单cnc程序用刀校验完成!!!')