From 73c3e06900129236d88d6919d3598379fd11838a Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 2 Jan 2024 17:25:49 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E6=89=80=E4=BB=A5?= =?UTF-8?q?=E5=A4=B9=E5=85=B7=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF=E8=BD=AC?= =?UTF-8?q?=E6=8E=A5=E6=9D=BF=E5=A4=B9=E5=85=B7=E4=B8=BA=E8=BD=AC=E6=8E=A5?= =?UTF-8?q?=E6=9D=BF(=E9=94=81=E6=9D=BF)=E5=A4=B9=E5=85=B7=EF=BC=9B2?= =?UTF-8?q?=E3=80=81=E4=BC=98=E5=8C=96=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98=E8=A7=A6=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E5=8D=95=E6=97=B6=E9=87=8D=E5=A4=8D=E8=A7=A6=E5=8F=91=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B3=E3=80=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E5=AE=89=E5=85=A8=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=A8=A1=E5=9E=8B=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=8F=AA=E6=9C=89=E5=9C=A8=E5=88=9B=E5=BB=BA=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E5=8F=AF=E4=BB=A5=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E6=97=B6=E5=80=99=E6=98=AF=E5=8F=AA=E8=AF=BB=EF=BC=9B?= =?UTF-8?q?4=E3=80=81=E4=BC=98=E5=8C=96=E5=8A=9F=E8=83=BD=E5=88=80?= =?UTF-8?q?=E5=85=B7=E7=BB=84=E8=A3=85=E5=8D=95=E7=BB=84=E8=A3=85=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8E=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E4=BD=8D=E7=BD=AE=E4=B8=8D=E6=98=AF=E5=88=80=E5=85=B7?= =?UTF-8?q?=E6=88=BF=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/basic_parameters_fixture.py | 2 +- sf_base/models/fixture.py | 4 +- sf_base/views/fixture_view.xml | 2 +- sf_tool_management/models/base.py | 50 ++++++++++++-------- sf_tool_management/views/tool_base_views.xml | 27 +++++++---- sf_tool_management/wizard/wizard.py | 2 + 6 files changed, 53 insertions(+), 34 deletions(-) diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py index 0dfb4b6d..57d55bde 100644 --- a/sf_base/models/basic_parameters_fixture.py +++ b/sf_base/models/basic_parameters_fixture.py @@ -59,7 +59,7 @@ class BasicParametersFixture(models.Model): magnetic_field_height = fields.Float('磁场高度(mm)', digits=(16, 2)) magnetic_pole_plate_grinding_allowance = fields.Float('磁极板磨削余量(mm)', digits=(16, 2)) - # '转接板夹具' 字段 + # '转接板(锁板)夹具' 字段 screw_size = fields.Float('螺牙大小(mm)', digits=(16, 2)) via_hole_diameter = fields.Float('过孔直径(mm)', digits=(16, 2)) diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index 91aec75e..d6455550 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -45,7 +45,7 @@ class FixtureModel(models.Model): magnet_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='磁吸夹具基本参数') adapter_board_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', - string='转接板夹具基本参数') + string='转接板(锁板)夹具基本参数') scroll_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='三爪卡盘基本参数') @@ -67,7 +67,7 @@ class FixtureModel(models.Model): if fixture_material_id: if self.fixture_material_id.name == "气动夹具": code = self._get_code("JKM-C-JJWL-QDJJ-") - elif self.fixture_material_id.name == "转接板夹具": + elif self.fixture_material_id.name == "转接板(锁板)夹具": code = self._get_code("JKM-C-JJWL-ZJJJ-") elif self.fixture_material_id.name == "磁吸夹具": code = self._get_code("JKM-C-JJWL-CXJJ-") diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index 15f43fb1..0a7d1e8e 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -341,7 +341,7 @@ + attrs="{'invisible': [('fixture_material_type', '!=', '转接板(锁板)夹具')]}"> diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index e1d1010b..9f5721a5 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- +import re from datetime import timedelta - from odoo import fields, models, api from odoo import SUPERUSER_ID from odoo.exceptions import ValidationError @@ -234,6 +234,7 @@ class FunctionalToolWarning(models.Model): class StockMoveLine(models.Model): _inherit = 'stock.move.line' _description = '功能刀具出入库记录' + _order = 'install_tool_time desc' functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称') functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', store=True, @@ -253,11 +254,11 @@ class RealTimeDistributionOfFunctionalTools(models.Model): _name = 'sf.real.time.distribution.of.functional.tools' _description = '功能刀具安全库存' - name = fields.Char('功能刀具名称') - sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', + name = fields.Char('功能刀具名称', readonly=False) + sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False, group_expand='_read_mrs_cutting_tool_type_ids', store=True) - diameter = fields.Integer(string='刀具直径(mm)') - knife_tip_r_angle = fields.Float(string='刀尖R角(mm)') + diameter = fields.Integer(string='刀具直径(mm)', readonly=False) + knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=False) tool_stock_num = fields.Integer(string='刀具房数量') side_shelf_num = fields.Integer(string='线边刀库数量') on_tool_stock_num = fields.Integer(string='机内刀库数量') @@ -266,10 +267,10 @@ class RealTimeDistributionOfFunctionalTools(models.Model): max_stock_num = fields.Integer('最高库存量') batch_replenishment_num = fields.Integer('批次补货量', readonly=True, compute='_compute_batch_replenishment_num') unit = fields.Char('单位') - image = fields.Binary('图片') + image = fields.Binary('图片', readonly=False) - coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精') - whether_standard_knife = fields.Boolean(string='是否标准刀', default=True) + coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=False) + whether_standard_knife = fields.Boolean(string='是否标准刀', default=True, readonly=False) # 能力特征信息 suitable_machining_method_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_machining_product_template_distribution', '适合加工方式', @@ -299,7 +300,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model): @api.constrains('min_stock_num', 'max_stock_num') def _check_stock_num(self): for obj in self: - if obj.min_stock_num > obj.min_stock_num: + if obj.min_stock_num > obj.max_stock_num: raise ValidationError('【最低安全库存】不能高于【最高安全库存】!!!') @api.model @@ -326,31 +327,31 @@ class RealTimeDistributionOfFunctionalTools(models.Model): if tool.tool_stock_total < tool.min_stock_num: tool.batch_replenishment_num = tool.max_stock_num - tool.tool_stock_total # 根据判断创建功能刀具组装单 - if not tool.sf_functional_tool_assembly_ids: + if not tool.sf_functional_tool_assembly_ids and re.match(r'^\d+$', str(tool.id)): for i in range(tool.batch_replenishment_num): - tool.create_functional_tool_assembly() + tool.create_functional_tool_assembly(tool) print(i, ": ", tool.sf_functional_tool_assembly_ids) else: tool.batch_replenishment_num = 0 - def create_functional_tool_assembly(self): + def create_functional_tool_assembly(self, tool): """ 创建功能刀具组装单 """ - functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({ - 'functional_tool_name': self.name, - 'functional_tool_type_id': self.sf_cutting_tool_type_id.id, - 'functional_tool_diameter': self.diameter, - 'knife_tip_r_angle': self.knife_tip_r_angle, - 'coarse_middle_thin': self.coarse_middle_thin, + functional_tool_assembly = tool.env['sf.functional.tool.assembly'].sudo().create({ + 'functional_tool_name': tool.name, + 'functional_tool_type_id': tool.sf_cutting_tool_type_id.id, + 'functional_tool_diameter': tool.diameter, + 'knife_tip_r_angle': tool.knife_tip_r_angle, + 'coarse_middle_thin': tool.coarse_middle_thin, 'loading_task_source': '2', 'use_tool_time': fields.Datetime.now() + timedelta(hours=4), 'applicant': '系统自动', 'apply_time': fields.Datetime.now(), - 'whether_standard_knife': self.whether_standard_knife, + 'whether_standard_knife': tool.whether_standard_knife, 'reason_for_applying': '安全库存', }) - self.sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)] + tool.sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)] def estimate_functional_tool_assembly_ids(self, tool): """ @@ -394,6 +395,15 @@ class RealTimeDistributionOfFunctionalTools(models.Model): vals['sf_functional_cutting_tool_entity_ids'] = sf_functional_cutting_tool_entity_ids.ids self.env['sf.real.time.distribution.of.functional.tools'].create(vals) + status_create = fields.Boolean('是否是新增状态', default=True) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + vals['status_create'] = False + records = super(RealTimeDistributionOfFunctionalTools, self).create(vals_list) + return records + class MachineTableToolChangingApply(models.Model): _name = 'sf.machine.table.tool.changing.apply' diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 86c42c92..42bb103b 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -310,22 +310,29 @@

- +

+ - - - - - + + + + + - + @@ -366,7 +373,7 @@ - + @@ -1162,7 +1169,7 @@ - + @@ -1173,7 +1180,7 @@ ir.actions.act_window sf.functional.tool.assembly tree,form,search - + {'search_default_no_assemble_status':1} diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 89b9f854..f98da62e 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -537,6 +537,8 @@ class StockPicking(models.Model): self.env['stock.move.line'].create({ 'picking_id': picking_id.id, 'product_id': stock_lot.product_id.id, + 'location_id': picking_id.location_id.id, + 'location_dest_id': picking_id.location_dest_id.id, 'lot_id': stock_lot.id, 'qty_done': 1, 'functional_tool_name_id': functional_tool_assembly.id