From 9d157d608379f48b737c872adc5c39c2e677de81 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Mon, 6 May 2024 11:29:17 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E4=B8=BA=E8=AE=B0=E5=BD=95=E9=9B=86=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 95 ++++++++++++------------ 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 12d7505b..b32ffdce 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -772,55 +772,56 @@ class ResMrpWorkOrder(models.Model): raise UserError(_('请先完成上一步工单')) def button_finish(self): - if self.routing_type == '装夹预调': - if not self.material_center_point and self.X_deviation_angle > 0: - raise UserError("请对前置三元检测定位参数进行计算定位") - if not self.rfid_code: - raise UserError("请扫RFID码进行绑定") - self.workpiece_delivery_ids[0].write({'status': '待下发'}) + for record in self: + if record.routing_type == '装夹预调': + if not record.material_center_point and record.X_deviation_angle > 0: + raise UserError("请对前置三元检测定位参数进行计算定位") + if not record.rfid_code: + raise UserError("请扫RFID码进行绑定") + record.workpiece_delivery_ids[0].write({'status': '待下发'}) - if self.routing_type == '解除装夹': - ''' - 记录结束时间 - ''' - self.date_finished = datetime.now() + if record.routing_type == '解除装夹': + ''' + 记录结束时间 + ''' + record.date_finished = datetime.now() - if self.picking_out_id: - picking_out = self.env['stock.picking'].search([('id', '=', self.picking_out_id.id)]) - if picking_out.workorder_out_id: - order_line_ids = [] - for item in picking_out.workorder_out_id: - server_product = self.env['product.template'].search( - [('server_product_process_parameters_id', '=', item.surface_technics_parameters_id.id), - ('detailed_type', '=', 'service')]) - if server_product: - order_line_ids.append((0, 0, { - 'product_id': server_product.product_variant_id.id, - 'product_qty': 1, - 'product_uom': server_product.uom_id.id - })) - else: - raise UserError( - '请先在产品中配置表面工艺为%s相关的外协服务产品' % item.surface_technics_parameters_id.name) - self.env['purchase.order'].create({ - 'partner_id': server_product.seller_ids.partner_id.id, - 'state': 'draft', - 'order_line': order_line_ids, - }) - super().button_finish() - is_production_id = True - for workorder in self.production_id.workorder_ids: - if workorder.state != 'done': - is_production_id = False - if is_production_id == True and self.name == '解除装夹': - for workorder in self.production_id.workorder_ids: - workorder.rfid_code_old = workorder.rfid_code - workorder.rfid_code = None - for move_raw_id in self.production_id.move_raw_ids: - move_raw_id.quantity_done = move_raw_id.product_uom_qty - self.process_state = '已完工' - self.production_id.button_mark_done1() - # self.production_id.state = 'done' + if record.picking_out_id: + picking_out = record.env['stock.picking'].search([('id', '=', record.picking_out_id.id)]) + if picking_out.workorder_out_id: + order_line_ids = [] + for item in picking_out.workorder_out_id: + server_product = record.env['product.template'].search( + [('server_product_process_parameters_id', '=', item.surface_technics_parameters_id.id), + ('detailed_type', '=', 'service')]) + if server_product: + order_line_ids.append((0, 0, { + 'product_id': server_product.product_variant_id.id, + 'product_qty': 1, + 'product_uom': server_product.uom_id.id + })) + else: + raise UserError( + '请先在产品中配置表面工艺为%s相关的外协服务产品' % item.surface_technics_parameters_id.name) + record.env['purchase.order'].create({ + 'partner_id': server_product.seller_ids.partner_id.id, + 'state': 'draft', + 'order_line': order_line_ids, + }) + super().button_finish() + is_production_id = True + for workorder in record.production_id.workorder_ids: + if workorder.state != 'done': + is_production_id = False + if is_production_id == True and record.name == '解除装夹': + for workorder in record.production_id.workorder_ids: + workorder.rfid_code_old = workorder.rfid_code + workorder.rfid_code = None + for move_raw_id in record.production_id.move_raw_ids: + move_raw_id.quantity_done = move_raw_id.product_uom_qty + record.process_state = '已完工' + record.production_id.button_mark_done1() + # self.production_id.state = 'done' # 将FTP的检测报告文件下载到临时目录 def download_reportfile_tmp(self, workorder, reportpath): From 5eacc017555a5329a7635156c9e01ec7d816c744 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Wed, 8 May 2024 16:50:13 +0800 Subject: [PATCH 2/8] =?UTF-8?q?1=E3=80=81=E8=A7=A3=E5=86=B3=20=E8=A3=85?= =?UTF-8?q?=E5=A4=B9=E9=A2=84=E8=B0=83=E5=B7=A5=E5=8D=95=E6=89=AB=E6=8F=8F?= =?UTF-8?q?Rfid=E7=A0=81=E6=97=B6=E6=8F=90=E7=A4=BA=E8=AF=AD=E7=9A=84?= =?UTF-8?q?=E5=88=B6=E9=80=A0=E8=AE=A2=E5=8D=95=E5=8F=B7=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E4=BA=86=20=E7=9A=84=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=EF=BC=8C=20=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E7=9A=84Rfid=E4=B8=8D=E6=98=AF=E6=89=98=E7=9B=98?= =?UTF-8?q?=E6=98=AF=E5=85=B6=E4=BB=96=E7=89=A9=E6=96=99=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=EF=BC=9B2=E3=80=81=E8=A7=A3=E5=86=B3=E5=88=80?= =?UTF-8?q?=E5=85=B7=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97=E7=9A=84=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E4=BE=9D=E8=B5=96=E9=97=AE=E9=A2=98=EF=BC=9B3?= =?UTF-8?q?=E3=80=81=E7=AE=A1=E7=90=86=E5=91=98=E6=B7=BB=E5=8A=A0=E8=B4=A7?= =?UTF-8?q?=E4=BD=8D=E7=9A=84=E6=93=8D=E4=BD=9C=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 9 ++++++--- sf_tool_management/__manifest__.py | 2 +- .../views/fixture_material_search_views.xml | 8 -------- sf_tool_management/views/menu_view.xml | 8 ++++++++ sf_warehouse/security/ir.model.access.csv | 1 + 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 25436081..8d42f33f 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1040,10 +1040,11 @@ class SfWorkOrderBarcodes(models.Model): workorder = self.env['mrp.workorder'].browse(self.ids) # workorder_preset = self.env['mrp.workorder'].search( # [('routing_type', '=', '装夹预调'), ('rfid_code', '=', barcode)]) - workorder_old = self.env['mrp.workorder'].search([('rfid_code', '=', barcode)]) - if workorder_old: + workorder_olds = self.env['mrp.workorder'].search( + [('routing_type', '=', '装夹预调'), ('rfid_code', '=', barcode)]) + if workorder_olds: name = '' - for workorder in workorder_old: + for workorder in workorder_olds: name = '%s %s' % (name, workorder.production_id.name) raise UserError('该托盘已绑定【%s】制造订单,请先解除绑定!!!' % name) if workorder: @@ -1073,6 +1074,8 @@ class SfWorkOrderBarcodes(models.Model): for item in workorder_rfid: item.write({'rfid_code': barcode}) logging.info("Rfid绑定成功!!!") + else: + raise UserError('该Rfid【%s】绑定的是【%s】, 不是托盘!!!' % (barcode, lot.product_id.name)) self.process_state = '待检测' self.date_start = datetime.now() else: diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index fc556283..64d08d05 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -19,9 +19,9 @@ 'views/functional_tool_views.xml', 'views/mrp_workcenter_views.xml', 'views/sf_maintenance_equipment.xml', - 'views/menu_view.xml', 'views/tool_material_search.xml', 'views/fixture_material_search_views.xml', + 'views/menu_view.xml', 'data/tool_data.xml', ], 'demo': [ diff --git a/sf_tool_management/views/fixture_material_search_views.xml b/sf_tool_management/views/fixture_material_search_views.xml index 546d968e..429be323 100644 --- a/sf_tool_management/views/fixture_material_search_views.xml +++ b/sf_tool_management/views/fixture_material_search_views.xml @@ -95,12 +95,4 @@ sf.fixture.material.search tree,form - - \ No newline at end of file diff --git a/sf_tool_management/views/menu_view.xml b/sf_tool_management/views/menu_view.xml index c964bb35..1228fe07 100644 --- a/sf_tool_management/views/menu_view.xml +++ b/sf_tool_management/views/menu_view.xml @@ -120,5 +120,13 @@ parent="menu_sf_tool_material" /> + + diff --git a/sf_warehouse/security/ir.model.access.csv b/sf_warehouse/security/ir.model.access.csv index 3d7d9a98..8755d7a1 100644 --- a/sf_warehouse/security/ir.model.access.csv +++ b/sf_warehouse/security/ir.model.access.csv @@ -137,6 +137,7 @@ access_sf_shelf_location_wizard_group_sf_stock_user_group_sf_stock_user,sf_shelf access_sf_shelf_location_wizard_group_sf_stock_manager,sf_shelf_location_wizard_group_sf_stock_manager,model_sf_shelf_location_wizard,sf_warehouse.group_sf_stock_manager,1,1,1,0 access_sf_shelf_location_group_sf_tool_user,sf.shelf.location.group_sf_tool_user,model_sf_shelf_location,sf_base.group_sf_tool_user,1,1,0,0 +access_sf_shelf_group_user,sf.shelf.location.group_user,model_sf_shelf_location,base.group_user,1,1,0,0 From af822c90394695fecde3ca2f3375bde900e53b6c Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 8 May 2024 21:49:04 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=85=AC=E7=94=A8=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/commons/Email.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 sf_base/commons/Email.py diff --git a/sf_base/commons/Email.py b/sf_base/commons/Email.py new file mode 100644 index 00000000..d55fda9e --- /dev/null +++ b/sf_base/commons/Email.py @@ -0,0 +1,27 @@ +from odoo import api, models + + +class MailSender(models.Model): + _name = 'mail.sender' + _description = 'Mail Sender' + + def mail_sender(self, mail_server_name, subject_name, email_to, error_message): + mail_server = self.env['ir.mail_server'].sudo().search([('name', '=', mail_server_name)], limit=1) + if not mail_server: + _logger.info('管理员还未配置名称为 %s 的smtp服务器信息,请联系管理员配置!' % mail_server_name) + return + if not mail_server.smtp_user or not mail_server.smtp_pass: + _logger.info("邮件发送账号未正确设置,请联系管理员!") + return + mail_values = { + 'message_type': 'email', 'subject': subject_name, + 'mail_server_id': mail_server.id, 'email_from': mail_server.smtp_user, + 'email_to': email_to + } + temp_mail_html = """ + Hi,

这里是异常提醒通知:

+ """ + + temp_mail_html += """ %s """ % error_message + mail_values['body_html'] = temp_mail_html + self.env['mail.mail'].sudo().create(mail_values).send(auto_commit=True) From 5c68dd45eef0d680d48bcd36a0eba61d9671dee7 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 9 May 2024 09:21:13 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/commons/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sf_base/commons/__init__.py b/sf_base/commons/__init__.py index 63b820e7..da64fd48 100644 --- a/sf_base/commons/__init__.py +++ b/sf_base/commons/__init__.py @@ -1,2 +1,3 @@ from . import common from . import Printer +from . import Email From 4e84562ba7c1444610628a6e6485d4ffb0fb820e Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 9 May 2024 09:43:54 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=92=E7=A8=8B?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E7=94=9F=E4=BA=A7=E7=BA=BFbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_plan/models/custom_plan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py index bcb15d69..60618f1d 100644 --- a/sf_plan/models/custom_plan.py +++ b/sf_plan/models/custom_plan.py @@ -85,7 +85,7 @@ class sf_production_plan(models.Model): item.sudo().production_id.workorder_ids.filtered( lambda b: b.routing_type == "装夹预调").workpiece_delivery_ids.write( {'production_line_id': item.production_line_id.id, - 'plan_start_processing_time': item.plan_start_processing_time}) + 'plan_start_processing_time': item.date_planned_start}) # item.sudo().production_id.plan_start_processing_time = item.date_planned_start # @api.onchange('state') From 07cf13dce761039088f2b928058ff6b42852fba3 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 9 May 2024 10:09:26 +0800 Subject: [PATCH 6/8] =?UTF-8?q?sf=5Ft=E5=88=87=E6=8D=A2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odoo.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/odoo.conf b/odoo.conf index 8db2413f..d07acc43 100644 --- a/odoo.conf +++ b/odoo.conf @@ -4,7 +4,8 @@ csv_internal_sep = , data_dir = /var/lib/odoo db_host = 172.17.0.2 db_maxconn = 64 -db_name = sf_t_0430 +# db_name = sf_t_0430 +db_name = t_240509 db_password = sf db_port = 5432 db_sslmode = prefer From 54a08802d9f4d649c87c441a9251633dc67f9857 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Thu, 9 May 2024 10:45:14 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A3=85=E5=A4=B9?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 817e6421..4bb54548 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -643,10 +643,13 @@ class ResMrpWorkOrder(models.Model): def _compute_state(self): for workorder in self: if workorder.routing_type == '装夹预调': - if not workorder.cnc_ids: + cnc_workorder = self.search( + [('production_id', '=', workorder.production_id.id), ('routing_type', '=', 'CNC加工')], + limit=1, order='id asc') + if not cnc_workorder: workorder.state = 'waiting' else: - for item in workorder.cnc_ids: + for item in cnc_workorder.cnc_ids: functional_cutting_tool = self.env['sf.functional.cutting.tool.entity'].search( [('tool_name_id.name', '=', item.cutting_tool_name)]) if not functional_cutting_tool: From 1a63f82f4b458d9882b4e5b14d8168ff96bb8b07 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Thu, 9 May 2024 11:04:59 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BC=98=E5=8C=96agv=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E4=B8=AD=E6=8E=A7=E6=8E=A5=E9=A9=B3=E7=AB=99=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/agv_setting.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sf_manufacturing/models/agv_setting.py b/sf_manufacturing/models/agv_setting.py index d0104bc3..8526627c 100644 --- a/sf_manufacturing/models/agv_setting.py +++ b/sf_manufacturing/models/agv_setting.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import requests import logging +import time from odoo import fields, models @@ -21,10 +22,15 @@ class AgvSetting(models.Model): config = self.env['res.config.settings'].get_values() # token = sf_sync_config['token'Ba F2CF5DCC-1A00-4234-9E95-65603F70CC8A] headers = {'Authorization': config['center_control_Authorization']} - center_control_url = config['center_control_url'] + "/AutoDeviceApi/GetAgvStationState" + center_control_url = config['center_control_url'] + "/AutoDeviceApi/GetAgvStationState?date=" + timestamp = int(time.time()) + center_control_url += str(timestamp) + logging.info('工件配送-请求中控地址:%s' % center_control_url) center_control_r = requests.get(center_control_url, params={}, headers=headers) ret = center_control_r.json() logging.info('工件配送-请求中控站点信息:%s' % ret) + self.env['center_control.interface.log'].sudo().create( + {'content': ret, 'name': 'AutoDeviceApi/GetAgvStationState?date=%s' % str(timestamp)}) if ret['Succeed'] is True: datas = ret['Datas'] for item in self: