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