From 08ac2978a13bbf0c5a616da71e0547513c874841 Mon Sep 17 00:00:00 2001 From: "qihao.gong@jikimo.com" Date: Thu, 17 Aug 2023 16:33:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=89=98=E7=9B=98=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=20=E5=B9=B6=E6=B8=85=E9=99=A4=E6=89=80=E6=9C=89?= =?UTF-8?q?=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/common.py | 20 +- sf_base/security/ir.model.access.csv | 1 - sf_base/views/common_view.xml | 114 ++++----- sf_base/views/menu_view.xml | 14 +- .../views/WorkCenterBarcodes.xml | 2 +- sf_maintenance/__manifest__.py | 2 +- sf_manufacturing/__manifest__.py | 4 +- sf_manufacturing/models/mrp_production.py | 2 +- sf_manufacturing/models/mrp_workorder.py | 228 +++++++++--------- sf_manufacturing/models/tray.py | 120 ++++----- sf_manufacturing/views/mrp_workorder_view.xml | 20 +- sf_manufacturing/views/tray_view.xml | 56 ++--- 12 files changed, 291 insertions(+), 292 deletions(-) diff --git a/sf_base/models/common.py b/sf_base/models/common.py index 419caf17..d163a024 100644 --- a/sf_base/models/common.py +++ b/sf_base/models/common.py @@ -124,16 +124,16 @@ class MrsProcessingOrder(models.Model): production_process_id = fields.Many2one('sf.production.process', string="表面工艺") -class Tray(models.Model): - _name = 'sf.tray' - _description = '托盘' - - code = fields.Char('编码', copy=False) - name = fields.Char('名称') - state = fields.Selection( - [("空闲", "空闲"), ("占用", "占用"), ("报损", "报损")], - default="空闲", string="状态") - active = fields.Boolean('有效', default=True) +# class Tray(models.Model): +# _name = 'sf.tray' +# _description = '托盘' +# +# code = fields.Char('编码', copy=False) +# name = fields.Char('名称') +# state = fields.Selection( +# [("空闲", "空闲"), ("占用", "占用"), ("报损", "报损")], +# default="空闲", string="状态") +# active = fields.Boolean('有效', default=True) class SupplierSort(models.Model): diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index 8fd172b6..03e2a81b 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -9,7 +9,6 @@ access_sf_production_process,sf_production_process,model_sf_production_process,b access_sf_production_materials,sf_production_materials,model_sf_production_materials,base.group_user,1,1,1,1 access_sf_materials_model,sf_materials_model,model_sf_materials_model,base.group_user,1,1,1,1 access_sf_processing_technology,sf_processing_technology,model_sf_processing_technology,base.group_user,1,1,1,1 -access_sf_tray,sf_tray,model_sf_tray,base.group_user,1,1,1,1 access_sf_supplier_sort,sf_supplier_sort,model_sf_supplier_sort,base.group_user,1,1,1,1 access_sf_production_process_parameter,sf_production_process_parameter,model_sf_production_process_parameter,base.group_user,1,1,1,1 access_sf_production_process_category,sf_production_process_category,model_sf_production_process_category,base.group_user,1,1,1,1 diff --git a/sf_base/views/common_view.xml b/sf_base/views/common_view.xml index e15d644c..77f902b1 100644 --- a/sf_base/views/common_view.xml +++ b/sf_base/views/common_view.xml @@ -335,66 +335,66 @@ tree,form - #------------------托盘------------------ - - 托盘 - ir.actions.act_window - sf.tray - tree,form - -

- 创建托盘吧 -

-
-
+ + + + + + + + + + + + - - sf.tray.search - sf.tray - - - - - - - - + + + + + + + + + + + - - + + - - sf.tray.tree - sf.tray - - - - - - - - + + + + + + + + + + + - - sf.tray.form - sf.tray - -
-
- -
- - - - - - - - - - -
-
-
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sf_base/views/menu_view.xml b/sf_base/views/menu_view.xml index 9525bbd3..cb8e85d9 100644 --- a/sf_base/views/menu_view.xml +++ b/sf_base/views/menu_view.xml @@ -44,13 +44,13 @@ sequence="2" action="action_sf_machine_tool_type"/> - + + + + + + + - + diff --git a/sf_maintenance/__manifest__.py b/sf_maintenance/__manifest__.py index edfea97e..7bfe057d 100644 --- a/sf_maintenance/__manifest__.py +++ b/sf_maintenance/__manifest__.py @@ -10,8 +10,8 @@ 'data': [ 'security/group_security.xml', 'security/ir.model.access.csv', - 'views/maintenance_views.xml', 'views/maintenance_logs_views.xml', + 'views/maintenance_views.xml', 'views/equipment_maintenance_standards_views.xml', 'views/maintenance_request_views.xml', ], diff --git a/sf_manufacturing/__manifest__.py b/sf_manufacturing/__manifest__.py index a3c2c70c..be18f685 100644 --- a/sf_manufacturing/__manifest__.py +++ b/sf_manufacturing/__manifest__.py @@ -16,13 +16,13 @@ 'security/group_security.xml', 'security/ir.model.access.csv', 'views/mrp_production_addional_change.xml', - 'report/tray_report.xml', + # 'report/tray_report.xml', # 'views/mrp_maintenance_views.xml', 'views/mrp_routing_workcenter_view.xml', 'views/mrp_workcenter_views.xml', 'views/mrp_workorder_view.xml', 'views/production_line_view.xml', - 'views/tray_view.xml', + # 'views/tray_view.xml', 'views/model_type_view.xml', # 'views/kanban_change.xml' diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 05bacce5..67c1f14c 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -8,7 +8,7 @@ class MrpProduction(models.Model): _description = "制造订单" _order = 'create_date desc' - tray_ids = fields.One2many('sf.tray', 'production_id', string="托盘") + # tray_ids = fields.One2many('sf.tray', 'production_id', string="托盘") maintenance_count = fields.Integer(compute='_compute_maintenance_count', string="Number of maintenance requests") request_ids = fields.One2many('maintenance.request', 'production_id') model_file = fields.Binary('模型文件', related='product_id.model_file') diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index a5b110d7..b81e6d1e 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -99,7 +99,7 @@ class ResMrpWorkOrder(models.Model): test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格', string="检测结果") cnc_ids = fields.One2many("sf.cnc.processing", 'workorder_id', string="CNC加工") - tray_code = fields.Char(string="托盘") + tray_code = fields.Char(string="托盘编码") glb_file = fields.Binary("glb模型文件") is_subcontract = fields.Boolean(string='是否外协') surface_technics_parameters_id = fields.Many2one('sf.production.process.parameter', string="表面工艺可选参数") @@ -252,32 +252,32 @@ class ResMrpWorkOrder(models.Model): 'domain': [('workorder_id', '=', self.id)] } - tray_id = fields.Many2one('sf.tray', string="托盘信息", tracking=True) + # tray_id = fields.Many2one('sf.tray', string="托盘信息", tracking=True) # 扫码绑定托盘方法 - def gettray(self): - if self.tray_code != False: - values = self.env['sf.tray'].search([("code", "=", self.tray_code)]) - if values: - if values.state == "占用": - raise UserError('该托盘已占用') - if values.state == "报损": - raise UserError('该托盘已损坏') - else: - values.update({ - 'workorder_id': self, - 'production_id': self.production_id, - 'state': '占用', - }) - self.work_state = "已绑定" - orders = self.env['mrp.workorder'].search([('production_id', '=', self.production_id.id)]) - for a in orders: - a.tray_id = values - else: - raise UserError('该托盘编码已失效') - else: - raise UserError('托盘码不能为空') + # def gettray(self): + # if self.tray_code != False: + # values = self.env['sf.tray'].search([("code", "=", self.tray_code)]) + # if values: + # if values.state == "占用": + # raise UserError('该托盘已占用') + # if values.state == "报损": + # raise UserError('该托盘已损坏') + # else: + # values.update({ + # 'workorder_id': self, + # 'production_id': self.production_id, + # 'state': '占用', + # }) + # self.work_state = "已绑定" + # orders = self.env['mrp.workorder'].search([('production_id', '=', self.production_id.id)]) + # for a in orders: + # a.tray_id = values + # else: + # raise UserError('该托盘编码已失效') + # else: + # raise UserError('托盘码不能为空') # 验证坯料序列号是否正确 def pro_code_is_ok(self, barcode): @@ -293,50 +293,50 @@ class ResMrpWorkOrder(models.Model): pro_code_ok = fields.Boolean(default=False) # 托盘扫码绑定 - def gettray_auto(self, barcode): - if barcode != False: - values = self.env['sf.tray'].search([("code", "=", barcode)]) - - if values: - if values.state == "占用": - raise UserError('该托盘已占用') - if values.state == "报损": - raise UserError('该托盘已损坏') - else: - values.update({ - 'workorder_id': self, - 'production_id': self.production_id, - 'state': '占用', - }) - self.work_state = "已绑定" - orders = self.env['mrp.workorder'].search([('production_id', '=', self.production_id.id)]) - for a in orders: - a.tray_id = values - - return values - - # return { - # 'name': _('New Maintenance Request'), - # 'view_mode': 'form', - # 'res_model': 'maintenance.request', - # 'type': 'ir.actions.act_window', - # 'context': { - # 'default_company_id': self.company_id.id, - # 'default_production_id': self.id, - # }, - # 'domain': [('production_id', '=', self.id)], - # } - else: - raise UserError('该托盘编码已失效') - else: - raise UserError('托盘码不能为空') + # def gettray_auto(self, barcode): + # if barcode != False: + # values = self.env['sf.tray'].search([("code", "=", barcode)]) + # + # if values: + # if values.state == "占用": + # raise UserError('该托盘已占用') + # if values.state == "报损": + # raise UserError('该托盘已损坏') + # else: + # values.update({ + # 'workorder_id': self, + # 'production_id': self.production_id, + # 'state': '占用', + # }) + # self.work_state = "已绑定" + # orders = self.env['mrp.workorder'].search([('production_id', '=', self.production_id.id)]) + # for a in orders: + # a.tray_id = values + # + # return values + # + # # return { + # # 'name': _('New Maintenance Request'), + # # 'view_mode': 'form', + # # 'res_model': 'maintenance.request', + # # 'type': 'ir.actions.act_window', + # # 'context': { + # # 'default_company_id': self.company_id.id, + # # 'default_production_id': self.id, + # # }, + # # 'domain': [('production_id', '=', self.id)], + # # } + # else: + # raise UserError('该托盘编码已失效') + # else: + # raise UserError('托盘码不能为空') # 解除托盘绑定 - def unbindtray(self): - tray = self.env['sf.tray'].search([("production_id", "=", self.production_id.id)]) - if tray: - tray.unclamp() - self.tray_id = False + # def unbindtray(self): + # tray = self.env['sf.tray'].search([("production_id", "=", self.production_id.id)]) + # if tray: + # tray.unclamp() + # self.tray_id = False # return { # 'name': _('New Maintenance Request'), @@ -682,51 +682,51 @@ class SfWorkOrderBarcodes(models.Model): _name = "mrp.workorder" _inherit = ["mrp.workorder", "barcodes.barcode_events_mixin"] - def on_barcode_scanned(self, barcode): - workorder = self.env['mrp.workorder'].browse(self.ids) - if "*" not in barcode: - if self.routing_type == '装夹': - tray_code = self.env['sf.tray'].search([('code', '=', barcode)]) - self.tray_code = tray_code.code - self.tray_id = workorder.gettray_auto(barcode) - elif self.routing_type == '前置三元定位检测': - print('我是前置三元检测') - logging.info('我是前置三元检测') - elif self.routing_type == 'CNC加工': - if barcode == 'UP-ALL': - print("我是一键合并下发") - logging.info('我是一键合并下发') - self.up_merge_all() - else: - print('CNC加工') - # print(barcode) - # a = self.env['sf.tray'].search([('code', '=', barcode)]) - # print(a) - # # workorder_obj = self.env['mrp.workorder'].search([('tray_code', '=', barcode)], limit=1) - # workorder_obj = self.env['mrp.workorder'].search([('tray_code', '=', barcode)]) - # e = workorder_obj.id - # print(workorder_obj) - # action = { - # 'name': '工单', - # 'type': 'ir.actions.act_window', - # # 'view_type': 'form', - # 'view_mode': 'form', - # 'res_model': 'mrp.workorder', - # 'view_id': self.env.ref('mrp.mrp_production_workorder_form_view_inherit').id, - # # 'res_id': workorder_obj.id, - # 'res_id': 1023, - # 'target': 'current', - # # 'context': self.env.context, - # # 'flags': {'initial_mode': 'edit'}, - # } - # return action - - elif self.routing_type == '后置三元质量检测': - print('后置三元检测') - elif self.routing_type == '解除装夹': - print("我是解除装夹") - else: - pass - - else: - self.pro_code_ok = workorder.pro_code_is_ok(barcode) + # def on_barcode_scanned(self, barcode): + # workorder = self.env['mrp.workorder'].browse(self.ids) + # if "*" not in barcode: + # if self.routing_type == '装夹': + # tray_code = self.env['sf.tray'].search([('code', '=', barcode)]) + # self.tray_code = tray_code.code + # self.tray_id = workorder.gettray_auto(barcode) + # elif self.routing_type == '前置三元定位检测': + # print('我是前置三元检测') + # logging.info('我是前置三元检测') + # elif self.routing_type == 'CNC加工': + # if barcode == 'UP-ALL': + # print("我是一键合并下发") + # logging.info('我是一键合并下发') + # self.up_merge_all() + # else: + # print('CNC加工') + # # print(barcode) + # # a = self.env['sf.tray'].search([('code', '=', barcode)]) + # # print(a) + # # # workorder_obj = self.env['mrp.workorder'].search([('tray_code', '=', barcode)], limit=1) + # # workorder_obj = self.env['mrp.workorder'].search([('tray_code', '=', barcode)]) + # # e = workorder_obj.id + # # print(workorder_obj) + # # action = { + # # 'name': '工单', + # # 'type': 'ir.actions.act_window', + # # # 'view_type': 'form', + # # 'view_mode': 'form', + # # 'res_model': 'mrp.workorder', + # # 'view_id': self.env.ref('mrp.mrp_production_workorder_form_view_inherit').id, + # # # 'res_id': workorder_obj.id, + # # 'res_id': 1023, + # # 'target': 'current', + # # # 'context': self.env.context, + # # # 'flags': {'initial_mode': 'edit'}, + # # } + # # return action + # + # elif self.routing_type == '后置三元质量检测': + # print('后置三元检测') + # elif self.routing_type == '解除装夹': + # print("我是解除装夹") + # else: + # pass + # + # else: + # self.pro_code_ok = workorder.pro_code_is_ok(barcode) diff --git a/sf_manufacturing/models/tray.py b/sf_manufacturing/models/tray.py index 1ba0bea7..de1a639b 100644 --- a/sf_manufacturing/models/tray.py +++ b/sf_manufacturing/models/tray.py @@ -1,60 +1,60 @@ -# -*- coding: utf-8 -*- -# Part of SmartGo. See LICENSE file for full copyright and licensing details. -import base64 -from io import BytesIO -from odoo import api, fields, models -#from pystrich.code128 import Code128Encoder - - -class Tray(models.Model): - _inherit = 'sf.tray' - _description = '托盘' - qr_image = fields.Binary(string="托盘二维码", compute='compute_qr_image') - production_id = fields.Many2one('mrp.production', string='制造订单', - related='workorder_id.production_id' - ) - workorder_id = fields.Many2one('mrp.workorder', string="工单" - ) - - @api.onchange('production_id') - def updateTrayState(self): - if self.workorder_id != False and self.create_date != False: - - self.state = '占用' - else: - self.state = '空闲' - - #解绑托盘 - def unclamp(self): - self.workorder_id = False - self.production_id = False - self.state = '空闲' - - @api.depends('code') - def compute_qr_image(self): - for item in self: - if not item.code: - item.qr_image = False - continue - # 根据code动态生成二维码图片 - # qr = qrcode.QRCode( - # version=1, - # error_correction=qrcode.constants.ERROR_CORRECT_L, - # box_size=10, - # border=4, - # ) - # qr.add_data(item.code) - # qr.make(fit=True) - # img = qr.make_image() - # 生成条形码文件 - # bar = barcode.get("ean13", "123456789102", writer=ImageWriter()) - # a = bar.get_fullcode() - # b = bar.save('occ') - # 生成条形码图片 - partner_encoder = Code128Encoder(item.code) - # 转换bytes流 - temp = BytesIO() - partner_encoder.save(temp) - # img.save(temp, format='PNG') - qr_image = base64.b64encode(temp.getvalue()) - item.qr_image = qr_image +# # -*- coding: utf-8 -*- +# # Part of SmartGo. See LICENSE file for full copyright and licensing details. +# import base64 +# from io import BytesIO +# from odoo import api, fields, models +# #from pystrich.code128 import Code128Encoder +# +# +# class Tray(models.Model): +# _inherit = 'sf.tray' +# _description = '托盘' +# qr_image = fields.Binary(string="托盘二维码", compute='compute_qr_image') +# production_id = fields.Many2one('mrp.production', string='制造订单', +# related='workorder_id.production_id' +# ) +# workorder_id = fields.Many2one('mrp.workorder', string="工单" +# ) +# +# @api.onchange('production_id') +# def updateTrayState(self): +# if self.workorder_id != False and self.create_date != False: +# +# self.state = '占用' +# else: +# self.state = '空闲' +# +# #解绑托盘 +# def unclamp(self): +# self.workorder_id = False +# self.production_id = False +# self.state = '空闲' +# +# @api.depends('code') +# def compute_qr_image(self): +# for item in self: +# if not item.code: +# item.qr_image = False +# continue +# # 根据code动态生成二维码图片 +# # qr = qrcode.QRCode( +# # version=1, +# # error_correction=qrcode.constants.ERROR_CORRECT_L, +# # box_size=10, +# # border=4, +# # ) +# # qr.add_data(item.code) +# # qr.make(fit=True) +# # img = qr.make_image() +# # 生成条形码文件 +# # bar = barcode.get("ean13", "123456789102", writer=ImageWriter()) +# # a = bar.get_fullcode() +# # b = bar.save('occ') +# # 生成条形码图片 +# partner_encoder = Code128Encoder(item.code) +# # 转换bytes流 +# temp = BytesIO() +# partner_encoder.save(temp) +# # img.save(temp, format='PNG') +# qr_image = base64.b64encode(temp.getvalue()) +# item.qr_image = qr_image diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 8ec84006..66afcc56 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -425,16 +425,16 @@ - -
-
-
-
+ + + + + + + + + +
diff --git a/sf_manufacturing/views/tray_view.xml b/sf_manufacturing/views/tray_view.xml index 07068211..33b8db9a 100644 --- a/sf_manufacturing/views/tray_view.xml +++ b/sf_manufacturing/views/tray_view.xml @@ -1,30 +1,30 @@ - - - - - 托盘条形码生成 - sf.tray - - - - - - - - - - -
-
+ + + + + + + + + + + + + + + + + + + + + -
+ -
-
-
-
-
-
\ No newline at end of file + + + + + + \ No newline at end of file