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程序用刀校验完成!!!')