From ac383797e06836cb5f98e7928d4227e871090193 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 28 Dec 2022 16:44:24 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=B0=86=E4=B8=89=E5=85=83=E8=A1=A5?= =?UTF-8?q?=E5=81=BF=E5=80=BC=E5=86=99=E5=85=A5CNC=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 2fb49715..f1545a7d 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -104,7 +104,11 @@ class ResMrpWorkOrder(models.Model): print("(%.2f,%.2f)" % (x, y)) self.material_center_point = ("(%.2f,%.2f,%.2f)" % (x, y, z)) self.X_deviation_angle = jdz - return self.material_center_point + # 将补偿值写入CNC加工工单 + workorder = self.env['mrp.workorder'].browse(self.ids) + work = workorder.production_id.workorder_ids + work.compensation_value_x = eval(self.material_center_point)[0] + work.compensation_value_y = eval(self.material_center_point)[1] def json_workorder_str(self, k, production, route): workorders_values_str = [0, '', { From a5f79ea97d3c4125f3efa55c77eed8fff10aab87 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Tue, 3 Jan 2023 11:08:39 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E9=87=8D=E5=86=99=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=96=B9=E6=B3=95=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 55 ++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index f1545a7d..cdffe09f 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -31,7 +31,7 @@ class ResMrpWorkOrder(models.Model): ], string="工序类型") cnc_worksheet = fields.Binary( '工作指令', readonly=True) - material_center_point = fields.Char(string='配料中心点') + material_center_point = fields.Char(string='胚料中心点') X1_axis = fields.Float(default=0) Y1_axis = fields.Float(default=0) Z1_axis = fields.Float(default=0) @@ -284,6 +284,20 @@ class ResMrpWorkOrder(models.Model): def button_start(self): if self.state == 'waiting' or self.state == 'ready': self.ensure_one() + + if self.routing_type == '获取CNC加工程序': + json = { + 'params': { + 'model_name': 'jikimo.process.order', + 'field_name': 'name', + 'default_code': 'PO-2022-1123-0014', + 'state': '加工中', + 'date_start': datetime.now(), + }, + } + url = 'https://bfm.cs.jikimo.com/api/get/state' + requests.post(url, json=json, data=None) + if any(not time.date_end for time in self.time_ids.filtered(lambda t: t.user_id.id == self.env.user.id)): return True # As button_start is automatically called in the new view @@ -329,6 +343,41 @@ class ResMrpWorkOrder(models.Model): else: raise ValidationError(_('请先完成上一步工单')) + # 重写完成按钮 + def button_finish(self): + end_date = datetime.now() + + if self.routing_type == '解除装夹': + json = { + 'params': { + 'model_name': 'jikimo.process.order', + 'field_name': 'name', + 'default_code': 'PO-2022-1123-0014', + 'state': '加工中', + 'date_finishi': datetime.now(), + }, + } + url = 'https://bfm.cs.jikimo.com/api/get/state' + requests.post(url, json=json, data=None) + + for workorder in self: + if workorder.state in ('done', 'cancel'): + continue + workorder.end_all() + vals = { + 'qty_produced': workorder.qty_produced or workorder.qty_producing or workorder.qty_production, + 'state': 'done', + 'date_finished': end_date, + 'date_planned_finished': end_date, + 'costs_hour': workorder.workcenter_id.costs_hour + } + if not workorder.date_start: + vals['date_start'] = end_date + if not workorder.date_planned_start or end_date < workorder.date_planned_start: + vals['date_planned_start'] = end_date + workorder.write(vals) + return True + class CNCprocessing(models.Model): _name = 'sf.cnc.processing' @@ -345,13 +394,13 @@ class CNCprocessing(models.Model): depth_of_processing_z = fields.Char('加工深度(Z)') cutting_tool_extension_length = fields.Char('刀具伸出长度') cutting_tool_handle_type = fields.Char('刀柄型号') - estimated_processing_time = fields.Datetime('预计加工时间') + estimated_processing_time = fields.Char('预计加工时间') remark = fields.Text('备注') workorder_id = fields.Many2one('mrp.workorder', string="工单") # mrs下发编程单创建CNC加工 def cnc_processing_create(self, obj): - workorder = self.env['mrp.workorder'].search([('production_id.name', '=', obj['manufacturing_order_no']), + workorder = self.env['mrp.workorder'].search([('production_id.name', '=', obj['production_order_no']), ('processing_panel', '=', obj['processing_panel']), ('routing_type', '=', 'CNC加工')]) vals = { From be90cd933bc52bb85e6f9c81a8b2588a9c48a771 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Tue, 3 Jan 2023 15:05:09 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 48 ------------------------ 1 file changed, 48 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index cdffe09f..2dc88cc8 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -285,19 +285,6 @@ class ResMrpWorkOrder(models.Model): if self.state == 'waiting' or self.state == 'ready': self.ensure_one() - if self.routing_type == '获取CNC加工程序': - json = { - 'params': { - 'model_name': 'jikimo.process.order', - 'field_name': 'name', - 'default_code': 'PO-2022-1123-0014', - 'state': '加工中', - 'date_start': datetime.now(), - }, - } - url = 'https://bfm.cs.jikimo.com/api/get/state' - requests.post(url, json=json, data=None) - if any(not time.date_end for time in self.time_ids.filtered(lambda t: t.user_id.id == self.env.user.id)): return True # As button_start is automatically called in the new view @@ -343,41 +330,6 @@ class ResMrpWorkOrder(models.Model): else: raise ValidationError(_('请先完成上一步工单')) - # 重写完成按钮 - def button_finish(self): - end_date = datetime.now() - - if self.routing_type == '解除装夹': - json = { - 'params': { - 'model_name': 'jikimo.process.order', - 'field_name': 'name', - 'default_code': 'PO-2022-1123-0014', - 'state': '加工中', - 'date_finishi': datetime.now(), - }, - } - url = 'https://bfm.cs.jikimo.com/api/get/state' - requests.post(url, json=json, data=None) - - for workorder in self: - if workorder.state in ('done', 'cancel'): - continue - workorder.end_all() - vals = { - 'qty_produced': workorder.qty_produced or workorder.qty_producing or workorder.qty_production, - 'state': 'done', - 'date_finished': end_date, - 'date_planned_finished': end_date, - 'costs_hour': workorder.workcenter_id.costs_hour - } - if not workorder.date_start: - vals['date_start'] = end_date - if not workorder.date_planned_start or end_date < workorder.date_planned_start: - vals['date_planned_start'] = end_date - workorder.write(vals) - return True - class CNCprocessing(models.Model): _name = 'sf.cnc.processing' From 08efe7813dbfe8be57de27b629c43a9fcf6551a3 Mon Sep 17 00:00:00 2001 From: gqh Date: Wed, 4 Jan 2023 10:13:29 +0800 Subject: [PATCH 4/7] =?UTF-8?q?sf=E5=B7=A5=E5=8D=95=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8F=8A=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/__manifest__.py | 2 +- sf_manufacturing/models/__init__.py | 1 + sf_manufacturing/models/mrp_workcenter.py | 2 + sf_manufacturing/models/mrp_workorder.py | 16 +++++ sf_manufacturing/models/res_user.py | 7 +++ .../views/mrp_workcenter_views.xml | 60 +++++++++++++------ sf_manufacturing/views/mrp_workorder_view.xml | 32 ++++++++-- 7 files changed, 96 insertions(+), 24 deletions(-) create mode 100644 sf_manufacturing/models/res_user.py diff --git a/sf_manufacturing/__manifest__.py b/sf_manufacturing/__manifest__.py index 2f73f417..a133d6f6 100644 --- a/sf_manufacturing/__manifest__.py +++ b/sf_manufacturing/__manifest__.py @@ -17,8 +17,8 @@ 'report/tray_report.xml', 'views/mrp_maintenance_views.xml', 'views/mrp_routing_workcenter_view.xml', - 'views/mrp_workorder_view.xml', 'views/mrp_workcenter_views.xml', + 'views/mrp_workorder_view.xml', 'views/tray_view.xml', 'views/model_type_view.xml', diff --git a/sf_manufacturing/models/__init__.py b/sf_manufacturing/models/__init__.py index 8f632de7..419dee46 100644 --- a/sf_manufacturing/models/__init__.py +++ b/sf_manufacturing/models/__init__.py @@ -6,6 +6,7 @@ from . import mrp_routing_workcenter from . import mrp_workorder from . import model_type from . import stock +from . import res_user diff --git a/sf_manufacturing/models/mrp_workcenter.py b/sf_manufacturing/models/mrp_workcenter.py index ad7a0419..e853ab3f 100644 --- a/sf_manufacturing/models/mrp_workcenter.py +++ b/sf_manufacturing/models/mrp_workcenter.py @@ -7,6 +7,8 @@ class ResWorkcenter(models.Model): _inherit = "mrp.workcenter" machine_tool_id = fields.Many2one('sf.machine_tool', '机床') + users_ids = fields.Many2many("res.users", 'users_workcenter') + equipment_ids = fields.One2many( 'maintenance.equipment', 'workcenter_id', string="Maintenance Equipment", check_company=True) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 882f687f..e2b5033f 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -19,6 +19,7 @@ class ResMrpWorkOrder(models.Model): _order = 'sequence' workcenter_id = fields.Many2one('mrp.workcenter', required=False) + users_ids = fields.Many2many("res.users", 'users_workorder', related="workcenter_id.users_ids") processing_panel = fields.Char('加工面') sequence = fields.Integer(string='工序') routing_type = fields.Selection([ @@ -29,6 +30,21 @@ class ResMrpWorkOrder(models.Model): ('后置三元质量检测', '后置三元质量检测'), ('解除装夹', '解除装夹'), ], string="工序类型") + + @api.onchange('users_ids') + def get_user_permissions(self): + uid = self.env.uid + for workorder in self: + if workorder.users_ids: + for item in workorder.users_ids: + if item.id == uid: + workorder.user_permissions = True + else: + workorder.user_permissions = False + else:workorder.user_permissions=False + + + user_permissions = fields.Boolean('用户权限', compute='get_user_permissions') cnc_worksheet = fields.Binary( '工作指令', readonly=True) material_center_point = fields.Char(string='配料中心点') diff --git a/sf_manufacturing/models/res_user.py b/sf_manufacturing/models/res_user.py new file mode 100644 index 00000000..d79313db --- /dev/null +++ b/sf_manufacturing/models/res_user.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +from odoo import SUPERUSER_ID, _, api, fields, models, registry + +class Users(models.Model): + _inherit = 'res.users' + + workcenter_ids = fields.Many2many("mrp.workcenter", 'users_workcenter') \ No newline at end of file diff --git a/sf_manufacturing/views/mrp_workcenter_views.xml b/sf_manufacturing/views/mrp_workcenter_views.xml index 11777e58..186dce3c 100644 --- a/sf_manufacturing/views/mrp_workcenter_views.xml +++ b/sf_manufacturing/views/mrp_workcenter_views.xml @@ -24,14 +24,16 @@ - + mrp.workcenter.view.kanban.inherit.mrp.workorder mrp.workcenter -