From 642007d29b25d077b483584961ba2883f26845cd Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Mon, 21 Aug 2023 17:20:52 +0800 Subject: [PATCH] =?UTF-8?q?cnc=E5=B7=A5=E5=8D=95=E5=A4=84=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0NC=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=B7=B2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_machine_connect/__manifest__.py | 5 +- sf_machine_connect/models/ftp_client.py | 78 +++++++++++++++++++---- sf_machine_connect/views/compensation.xml | 3 + 3 files changed, 70 insertions(+), 16 deletions(-) diff --git a/sf_machine_connect/__manifest__.py b/sf_machine_connect/__manifest__.py index 9642c087..92a4548e 100644 --- a/sf_machine_connect/__manifest__.py +++ b/sf_machine_connect/__manifest__.py @@ -22,11 +22,10 @@ 'views/ftp_button.xml', 'views/compensation.xml', - - 'views/SfWorkOrderBarcodes.xml', + # 'views/SfWorkOrderBarcodes.xml', 'views/WorkCenterBarcodes.xml', 'views/Stock_picking_Barcodes.xml', - 'views/machine_monitor.xml', + # 'views/machine_monitor.xml', 'views/machine_info_present.xml', 'views/delivery_record.xml', 'views/res_config_settings_views.xml', diff --git a/sf_machine_connect/models/ftp_client.py b/sf_machine_connect/models/ftp_client.py index f782d6d4..cc4d60e2 100644 --- a/sf_machine_connect/models/ftp_client.py +++ b/sf_machine_connect/models/ftp_client.py @@ -13,6 +13,11 @@ from odoo.exceptions import ValidationError from odoo.exceptions import UserError from odoo.addons.sf_machine_connect.models import py2opcua, ftp_operate +import shutil +from io import BytesIO +from zipfile import ZipFile +from odoo.exceptions import MissingError + _logger = logging.getLogger(__name__) @@ -537,21 +542,69 @@ class WorkCenterBarcode(models.Model): else: return False + def cnc_file_download(self): + """ + 一个下载当前cnc所有nc文件为一个zip包的功能 + """ + self.ensure_one() -class CuttingTimeToolType(models.Model): - _inherit = 'sf.cutting_tool.type' - total_cut_time = fields.Char(string='总切削时长') - predict_life_time = fields.Char(string='预估寿命') - # 只能看到未被占用的刀位,或者有提示说占没占用 - tool_position = fields.Char(string='选择刀位') - # cnc_ids = fields.One2many(string='选择机床') - is_connect_tool_position = fields.Boolean(string='是否已绑定刀位', default=False) + # 如果没有附件,直接返回 + if not self.cnc_ids: + return - def tool_connect_machine(self): - pass + # 处理第一个附件的文件名 + first_attachment = self.cnc_ids[0].cnc_id + file_name = first_attachment.display_name.split('-')[0] + '.zip' - def tool_unconnect_machine(self): - pass + # 创建一个内存文件和一个zip文件 + memory_file = BytesIO() + with ZipFile(memory_file, 'w') as zipf: + # 遍历需要下载的附件 + for item in self.cnc_ids: + a = item.cnc_id + datas = base64.standard_b64decode(a.datas) + + # 将nc文件写入zip文件 + zipf.writestr(a.display_name, datas) + + # 然后可以创建一个ir.attachment对象,将生成的zip文件保存为一个新的附件 + memory_file.seek(0) + output = base64.b64encode(memory_file.read()) + memory_file.close() + + attachment_data = { + 'name': file_name, + 'type': 'binary', + 'res_model': self._name, + 'res_id': self.id, + 'datas': output + } + attachment = self.env['ir.attachment'].create(attachment_data) + + # 返回附件的下载链接 + download_url = '/web/content/%s?download=true' % attachment.id + base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + return { + 'type': 'ir.actions.act_url', + 'url': str(base_url) + download_url, + 'target': 'self', + } + + +# class CuttingTimeToolType(models.Model): +# _inherit = 'sf.cutting_tool.type' +# total_cut_time = fields.Char(string='总切削时长') +# predict_life_time = fields.Char(string='预估寿命') +# # 只能看到未被占用的刀位,或者有提示说占没占用 +# tool_position = fields.Char(string='选择刀位') +# # cnc_ids = fields.One2many(string='选择机床') +# is_connect_tool_position = fields.Boolean(string='是否已绑定刀位', default=False) +# +# def tool_connect_machine(self): +# pass +# +# def tool_unconnect_machine(self): +# pass class DeliveryRecord(models.Model): @@ -579,4 +632,3 @@ class DeliveryRecord(models.Model): # return super().create(values) # except: # raise Exception('b_purchase_order.py:create()') - diff --git a/sf_machine_connect/views/compensation.xml b/sf_machine_connect/views/compensation.xml index a6f47b23..5ec6f382 100644 --- a/sf_machine_connect/views/compensation.xml +++ b/sf_machine_connect/views/compensation.xml @@ -5,6 +5,9 @@ mrp.workorder + +