+
1000000:
+ raise ValidationError("长度不能超过1000000")
+
+ @api.constrains('tool_width')
+ def _check_tool_width_size(self):
+ if self.tool_width > 1000000:
+ raise ValidationError("宽度不能超过1000000")
+
+ @api.constrains('tool_height')
+ def _check_tool_height_size(self):
+ if self.tool_height > 1000000:
+ raise ValidationError("高度不能超过1000000")
+
+ @api.constrains('tool_thickness')
+ def _check_tool_thickness_size(self):
+ if self.tool_thickness > 1000000:
+ raise ValidationError("厚度不能超过1000000")
+
+ @api.constrains('fixture_clamp_workpiece_length_max')
+ def _check_fixture_clamp_workpiece_length_max_size(self):
+ if self.fixture_clamp_workpiece_length_max > 1000000:
+ raise ValidationError("夹持工件长度MAX不能超过1000000")
+
+ @api.constrains('fixture_clamp_workpiece_width_max')
+ def _check_fixture_clamp_workpiece_width_max_size(self):
+ if self.fixture_clamp_workpiece_width_max > 1000000:
+ raise ValidationError("夹持工件宽度MAX不能超过1000000")
+
+ @api.constrains('fixture_clamp_workpiece_height_max')
+ def _check_fixture_clamp_workpiece_height_max_size(self):
+ if self.fixture_clamp_workpiece_height_max > 1000000:
+ raise ValidationError("夹持工件高度MAX不能超过1000000")
+
+ @api.constrains('fixture_maximum_clamping_force')
+ def _check_fixture_maximum_clamping_force_size(self):
+ if self.fixture_maximum_clamping_force > 100000000:
+ raise ValidationError("最大夹持力不能超过100000000")
+
+ @api.constrains('fixture_through_hole_size')
+ def _check_fixture_through_hole_size_size(self):
+ if self.fixture_through_hole_size > 1000000:
+ raise ValidationError("过孔大小不能超过1000000")
+
+ @api.constrains('fixture_screw_size')
+ def _check_fixture_through_hole_size_size(self):
+ if self.fixture_screw_size > 1000000:
+ raise ValidationError("螺牙大小不能超过1000000")
+
def _json_apply_machine_tool_type_item_code(self, item):
code_arr = []
for i in item.product_id.fixture_apply_machine_tool_type_ids:
diff --git a/sf_plan_management/models/calendar_base.py b/sf_plan_management/models/calendar_base.py
index b783f8b7..6ac7772c 100644
--- a/sf_plan_management/models/calendar_base.py
+++ b/sf_plan_management/models/calendar_base.py
@@ -24,7 +24,7 @@ class WorkLogSetting(models.Model):
return num
code = fields.Char(string='序号', default=_get_code)
- name = fields.Char(string='工作日历名称', required=True, size=15, length=30)
+ name = fields.Char(string='工作日历名称', required=True, size=15)
working_shift_ids = fields.Many2many('sf.working.shift', string='班次', required=True)
start_time = fields.Datetime(string='日开始时间', readonly=True, compute='_compute_working_shift_ids')
@@ -106,12 +106,12 @@ class WorkLogSetting(models.Model):
# 'calendar_code': self.code,
# 'date_time': target_date})
- @api.model
- def create(self, vals):
+ @api.model_create_multi
+ def create(self, vals_list):
"""
创建记录时,生成工作日历
"""
- record = super(WorkLogSetting, self).create(vals)
+ record = super(WorkLogSetting, self).create(vals_list)
record.generate_work_calendar()
return record
diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py
index 73f73f5b..fac229f5 100644
--- a/sf_sale/models/quick_easy_order.py
+++ b/sf_sale/models/quick_easy_order.py
@@ -101,6 +101,7 @@ class QuickEasyOrder(models.Model):
image_data = fileObj.read()
base64_data = base64.b64encode(image_data)
return base64_data
+
# return False
@api.onchange('upload_model_file')
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index 0e63b374..33bc1d4b 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -15,11 +15,11 @@ class FunctionalCuttingToolEntity(models.Model):
code = fields.Char('编码')
name = fields.Char('名称', required=True, size=20)
mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', string='刀具型号')
- mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', tracking=True,
- group_expand='_read_group_mrs_cutting_tool_type_ids')
+ mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型',
+ group_expand='_read_group_mrs_cutting_tool_type_id', compute_sudo=True)
@api.model
- def _read_group_mrs_cutting_tool_type_ids(self, categories, domain, order):
+ def _read_group_mrs_cutting_tool_type_id(self, categories, domain, order):
mrs_cutting_tool_type_ids = categories._search([], order=order, access_rights_uid=SUPERUSER_ID)
return categories.browse(mrs_cutting_tool_type_ids)
@@ -65,7 +65,6 @@ class FunctionalCuttingToolEntity(models.Model):
# record.mrs_cutting_tool_cutterbar_model_ids = None
# record.mrs_cutting_tool_cutterpad_model_ids = None
-
diameter = fields.Float('直径(mm)')
tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
string='刀具等级')
@@ -218,11 +217,11 @@ class FunctionalToolWarning(models.Model):
diameter = fields.Float('直径(mm)', readonly=True, related='functional_cutting_tool_id.diameter')
tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
- string='刀具等级', readonly=True, related='functional_cutting_tool_id.tool_grade')
+ string='刀具等级', readonly=True, compute='_compute_functional_cutting_tool_id')
machining_accuracy = fields.Float('加工精度(mm)', readonly=True,
related='functional_cutting_tool_id.machining_accuracy')
- tool_length = fields.Float('装刀长', readonly=True, related='functional_cutting_tool_id.tool_length')
+ # tool_length = fields.Float('装刀长', readonly=True, related='functional_cutting_tool_id.tool_length')
tool_length = fields.Float('装刀长(mm)', readonly=True, related='functional_cutting_tool_id.tool_length')
blade_number = fields.Integer('刃数', readonly=True, related='functional_cutting_tool_id.blade_number')
@@ -231,16 +230,24 @@ class FunctionalToolWarning(models.Model):
effective_blade_length = fields.Float('有效刃长(mm)', readonly=True,
related='functional_cutting_tool_id.effective_blade_length')
max_life = fields.Float('最大寿命值', readonly=True, related='functional_cutting_tool_id.max_life')
- is_standard = fields.Selection([('1', '是'), ('0', '否')],'是否标准刀', readonly=True, related='functional_cutting_tool_id.is_standard')
+ is_standard = fields.Selection([('1', '是'), ('0', '否')],'是否标准刀', readonly=True,
+ compute='_compute_functional_cutting_tool_id')
applicable_range = fields.Char('适用范围', readonly=True, related='functional_cutting_tool_id.applicable_range')
- image = fields.Binary('图片', readonly=True, related='functional_cutting_tool_id.image')
- # 功能刀具预警 特有字段
+ image = fields.Binary('图片', readonly=True, related='functional_cutting_tool_id.image')
install_tool_time = fields.Datetime("装刀时间", readonly=True,
related='functional_tool_assembly_id.tool_loading_time')
+
+ @api.depends('functional_cutting_tool_id')
+ def _compute_functional_cutting_tool_id(self):
+ if self.functional_cutting_tool_id:
+ self.tool_grade = self.functional_cutting_tool_id.tool_grade
+ self.is_standard = self.functional_cutting_tool_id.is_standard
+
+ # 功能刀具预警 特有字段
outbound_time = fields.Datetime('出库时间', readonly=True, related='functional_tool_assembly_id.receive_time')
on_board_time = fields.Datetime('上机时间', readonly=False)
- machine_table_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=True, tracking=True,
+ machine_table_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=True,
group_expand='_read_group_machine_table_name_ids')
@api.model
@@ -250,7 +257,7 @@ class FunctionalToolWarning(models.Model):
machine_tool_code = fields.Char('机台号', readonly=True, related='functional_tool_assembly_id.machine_tool_code')
cutting_tool_code = fields.Char('刀位号', readonly=True, related='functional_tool_assembly_id.cutter_spacing_code')
- idle_time = fields.Char('闲置时长', readonly=False)
+ # idle_time = fields.Char('闲置时长', readonly=False)
idle_time = fields.Char('闲置时长(h)', readonly=False)
alarm_value = fields.Char('报警值', readonly=False)
used_value = fields.Char('已使用值', readonly=False)
@@ -272,9 +279,9 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
functional_cutting_tool_id = fields.Many2one('sf.functional.cutting.tool.entity', '功能刀具', readonly=True)
mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True,
- tracking=True, group_expand='_read_mrs_cutting_tool_type_ids',
+ group_expand='_read_mrs_cutting_tool_type_ids',
store=True,
- compute='_compute_functional_cutting_tool_id')
+ compute='_compute_functional_cutting_tool_ids')
@api.model
def _read_mrs_cutting_tool_type_ids(self, categories, domain, order):
@@ -282,7 +289,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
return categories.browse(mrs_cutting_tool_type_ids)
@api.depends('functional_cutting_tool_id')
- def _compute_functional_cutting_tool_id(self):
+ def _compute_functional_cutting_tool_ids(self):
for record in self:
if record:
record.mrs_cutting_tool_type_id = record.functional_cutting_tool_id.mrs_cutting_tool_type_id.id
@@ -344,7 +351,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
diameter = fields.Float('直径(mm)', readonly=True, related='functional_cutting_tool_id.diameter')
tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
- string='刀具等级', readonly=True, related='functional_cutting_tool_id.tool_grade')
+ string='刀具等级', readonly=True, compute='_compute_functional_cutting_tool_id')
machining_accuracy = fields.Float('加工精度(mm)', readonly=True,
related='functional_cutting_tool_id.machining_accuracy')
tool_length = fields.Float('装刀长(mm)', readonly=True, related='functional_cutting_tool_id.tool_length')
@@ -354,10 +361,17 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
effective_blade_length = fields.Float('有效刃长(mm)', readonly=True,
related='functional_cutting_tool_id.effective_blade_length')
max_life = fields.Float('最大寿命值', readonly=True, related='functional_cutting_tool_id.max_life')
- is_standard = fields.Selection([('1', '是'), ('0', '否')],'是否标准刀', readonly=True, related='functional_cutting_tool_id.is_standard')
+ is_standard = fields.Selection([('1', '是'), ('0', '否')],'是否标准刀', readonly=True,
+ compute='_compute_functional_cutting_tool_id')
applicable_range = fields.Char('适用范围', readonly=True, related='functional_cutting_tool_id.applicable_range')
image = fields.Binary('图片', readonly=True, related='functional_cutting_tool_id.image')
+ @api.depends('functional_cutting_tool_id')
+ def _compute_functional_cutting_tool_id(self):
+ if self.functional_cutting_tool_id:
+ self.tool_grade = self.functional_cutting_tool_id.tool_grade
+ self.is_standard = self.functional_cutting_tool_id.is_standard
+
# 功能刀具实时分布
tool_stock_num = fields.Integer(string='刀具房库存数量', readonly=False)
side_shelf_num = fields.Integer(string='线边货架货架数量', readonly=False)
@@ -395,9 +409,9 @@ class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
functional_cutting_tool_id = fields.Many2one('sf.functional.cutting.tool.entity', '功能刀具', readonly=True)
mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True,
- tracking=True, group_expand='_read_mrs_cutting_tool_type_ids',
+ group_expand='_read_mrs_cutting_tool_type_ids',
store=True,
- compute='_compute_functional_cutting_tool_id')
+ compute='_compute_functional_cutting_tool_ids')
@api.model
def _read_mrs_cutting_tool_type_ids(self, categories, domain, order):
@@ -405,7 +419,7 @@ class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
return categories.browse(mrs_cutting_tool_type_ids)
@api.depends('functional_cutting_tool_id')
- def _compute_functional_cutting_tool_id(self):
+ def _compute_functional_cutting_tool_ids(self):
for record in self:
if record:
record.mrs_cutting_tool_type_id = record.functional_cutting_tool_id.mrs_cutting_tool_type_id.id
@@ -465,7 +479,7 @@ class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
diameter = fields.Float('直径(mm)', readonly=True, related='functional_cutting_tool_id.diameter')
tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
- string='刀具等级', readonly=True, related='functional_cutting_tool_id.tool_grade')
+ string='刀具等级', readonly=True, compute='_compute_functional_cutting_tool_id')
machining_accuracy = fields.Float('加工精度(mm)', readonly=True,
related='functional_cutting_tool_id.machining_accuracy')
tool_length = fields.Float('装刀长(mm)', readonly=True, related='functional_cutting_tool_id.tool_length')
@@ -475,10 +489,17 @@ class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
effective_blade_length = fields.Float('有效刃长(mm)', readonly=True,
related='functional_cutting_tool_id.effective_blade_length')
max_life = fields.Float('最大寿命值', readonly=True, related='functional_cutting_tool_id.max_life')
- is_standard = fields.Selection([('1', '是'), ('0', '否')],'是否标准刀', readonly=True, related='functional_cutting_tool_id.is_standard')
+ is_standard = fields.Selection([('1', '是'), ('0', '否')],'是否标准刀', readonly=True,
+ compute='_compute_functional_cutting_tool_id')
applicable_range = fields.Char('适用范围', readonly=True, related='functional_cutting_tool_id.applicable_range')
image = fields.Binary('图片', readonly=True, related='functional_cutting_tool_id.image')
+ @api.depends('functional_cutting_tool_id')
+ def _compute_functional_cutting_tool_id(self):
+ if self.functional_cutting_tool_id:
+ self.tool_grade = self.functional_cutting_tool_id.tool_grade
+ self.is_standard = self.functional_cutting_tool_id.is_standard
+
# 功能刀具出入库记录 特有字段
current_state = fields.Char(string='当前状态', readonly=False)
current_store_area = fields.Char(string='当前库区', readonly=False)
@@ -486,7 +507,7 @@ class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
tool_install_staff = fields.Char(string='装刀人', readonly=False)
tool_install_time = fields.Datetime(string='装刀时间', readonly=False)
thickness = fields.Selection([('1', '粗'), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=False)
- max_life_span = fields.Char(string='最大寿命值', readonly=False)
+ # max_life_span = fields.Char(string='最大寿命值', readonly=False)
alarm_value = fields.Char(string='报警值', readonly=False)
used_value = fields.Char(string='已使用值', readonly=False)
reason_application = fields.Char(string='申请原因', readonly=False)
@@ -528,12 +549,11 @@ class MachineTableToolChangingApply(models.Model):
# string='换刀需求信息',
# attrs="{'invisible': 1}")
-
- name = fields.Many2one('maintenance.equipment', string='CNC机床',required=True, readonly=False, tracking=True,
+ name = fields.Many2one('maintenance.equipment', string='CNC机床',required=True, readonly=False,
group_expand='_read_group_names')
machine_table_type_id = fields.Many2one('sf.machine_tool.category', string='机床类型', readonly=True,
compute='_compute_name')
- machine_tool_code = fields.Char(string='机台号', attrs="{'invisible': 1}", readonly=True, compute='_compute_name')
+ machine_tool_code = fields.Char(string='机台号', invisible=True, readonly=True, compute='_compute_name')
cutter_spacing_code = fields.Char(string='刀位号', readonly=False)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True, compute='_compute_functional_tool_name_id')
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=False)
@@ -555,7 +575,7 @@ class MachineTableToolChangingApply(models.Model):
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型',
readonly=True)
replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')],
- string='粗/中/精', readonly=True)
+ string='粗/中/精(待换)', readonly=True)
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
applicant = fields.Char(string='申请人', readonly=True)
used_tool_time = fields.Datetime(string='用刀时间', readonly=True)
@@ -692,7 +712,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
functional_tool_code = fields.Char(string='功能刀具编码', readonly=False)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=False)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False)
- machine_table_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=False, tracking=True,
+ machine_table_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=False,
group_expand='_read_group_machine_table_name_ids')
@api.model
@@ -786,7 +806,7 @@ class FunctionalToolAssembly(models.Model):
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
name = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True,
- tracking=True, group_expand='_read_group_functional_tool_type_ids')
+ group_expand='_read_group_functional_tool_type_ids')
@api.model
def _read_group_functional_tool_type_ids(self, categories, domain, order):
diff --git a/sf_tool_management/models/tool_material_search.py b/sf_tool_management/models/tool_material_search.py
index e85ffb69..84044f1c 100644
--- a/sf_tool_management/models/tool_material_search.py
+++ b/sf_tool_management/models/tool_material_search.py
@@ -23,9 +23,9 @@ class SfToolMaterialSearch(models.Model):
# mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', '刀具型号')
# 关联刀具物料模型
- mrs_cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料',tracking=True,
+ mrs_cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料',
group_expand='_read_group_mrs_cutting_tool_material_ids')
- cutting_tool_material_name = fields.Char(string='物料名称',invisible=True)
+ cutting_tool_material_name = fields.Char(string='物料名称', invisible=True)
@api.onchange('mrs_cutting_tool_material_id')
def _onchange_mrs_cutting_tool_material_id(self):
@@ -40,19 +40,19 @@ class SfToolMaterialSearch(models.Model):
# 刀片特有字段
blade_code = fields.Char('刀片编码', readonly=True)
- blade_length = fields.Float('长度L(mm)')
- blade_width = fields.Float('宽度D(mm)')
- blade_height = fields.Float('高度T(mm)')
- blade_top_angle = fields.Float('顶角(°)')
- blade_front_angle = fields.Float('前角(°)')
- blade_rear_angle = fields.Float('后角(°)')
- blade_main_included_angle = fields.Float('主偏角(°)')
- blade_r_angle = fields.Float('R角(°)')
- blade_hardness = fields.Char('加工硬度')
- blade_accuracy = fields.Char('精度等级')
- blade_coating_material_id = fields.Char('涂层材质')
- blade_radius = fields.Float('刀尖半径(mm)')
- blade_nut = fields.Float('配对螺母(mm)')
+ blade_length = fields.Float('刀片长度L(mm)')
+ blade_width = fields.Float('刀片宽度D(mm)')
+ blade_height = fields.Float('刀片高度T(mm)')
+ blade_top_angle = fields.Float('刀片顶角(°)')
+ blade_front_angle = fields.Float('刀片前角(°)')
+ blade_rear_angle = fields.Float('刀片后角(°)')
+ blade_main_included_angle = fields.Float('刀片主偏角(°)')
+ blade_r_angle = fields.Float('刀片R角(°)')
+ blade_hardness = fields.Char('刀片加工硬度')
+ blade_accuracy = fields.Char('刀片精度等级')
+ blade_coating_material_id = fields.Char('刀片涂层材质')
+ blade_radius = fields.Float('刀片刀尖半径(mm)')
+ blade_nut = fields.Float('刀片配对螺母(mm)')
mrs_cutting_tool_model_blade_cutter_bar_ids = fields.Many2many(
'sf.cutting.tool.model',
relation='sf_tool_material_search_blade_cutter_bar_rel',
@@ -74,79 +74,79 @@ class SfToolMaterialSearch(models.Model):
# 整体式刀具特有字段
integral_code = fields.Char('整体式刀具编码', readonly=True)
- integral_total_length = fields.Float('总长度(mm)')
- integral_shank_length = fields.Float('柄部长度(mm)')
- integral_blade_length = fields.Float('刃部长度(mm)')
- integral_diameter = fields.Float('直径(mm)')
- integral_blade_number = fields.Integer('刃数')
- integral_front_angle = fields.Float('前角(°)')
- integral_rear_angle = fields.Float('后角(°)')
- integral_main_included_angle = fields.Float('主偏角(°)')
- integral_accuracy = fields.Float('精度等级')
- integral_hardness = fields.Float('加工硬度(HRC)')
- integral_coating_material = fields.Char('涂层材质')
- integral_nut = fields.Float('配对螺母(mm)')
- integral_scope = fields.Char('适用范围')
+ integral_total_length = fields.Float('整体式刀具总长度(mm)')
+ integral_shank_length = fields.Float('整体式刀具柄部长度(mm)')
+ integral_blade_length = fields.Float('整体式刀具刃部长度(mm)')
+ integral_diameter = fields.Float('整体式刀具直径(mm)')
+ integral_blade_number = fields.Integer('整体式刀具刃数')
+ integral_front_angle = fields.Float('整体式刀具前角(°)')
+ integral_rear_angle = fields.Float('整体式刀具后角(°)')
+ integral_main_included_angle = fields.Float('整体式刀具主偏角(°)')
+ integral_accuracy = fields.Float('整体式刀具精度等级')
+ integral_hardness = fields.Float('整体式刀具加工硬度(HRC)')
+ integral_coating_material = fields.Char('整体式刀具涂层材质')
+ integral_nut = fields.Float('整体式刀具配对螺母(mm)')
+ integral_scope = fields.Char('整体式刀具适用范围')
# 刀杆特有字段
bar_code = fields.Char('刀杆编码', readonly=True)
# bar_name = fields.Char('刀杆名称', required=True)
- bar_c_diameter = fields.Float('C柄径(mm)')
- bar_total_length = fields.Float('L总长(mm)')
- bar_blade_number = fields.Integer('刃数')
- bar_d_diameter = fields.Float('D刃径(mm)')
+ bar_c_diameter = fields.Float('刀杆C柄径(mm)')
+ bar_total_length = fields.Float('刀杆L总长(mm)')
+ bar_blade_number = fields.Integer('刀杆刃数')
+ bar_d_diameter = fields.Float('刀杆D刃径(mm)')
mrs_cutting_tool_model_bar_blade_ids = fields.Many2many(
'sf.cutting.tool.model',
relation='sf_tool_material_search_bar_blade_rel',
column1='model_id_1',
column2='model_id_2',
domain="[('cutting_tool_type', '=', '刀片')]",
- string='适用刀片型号'
+ string='刀杆适用刀片型号'
)
- bar_wrench = fields.Float('配对扳手(mm)')
- bar_screw = fields.Float('配备螺丝(mm)')
- bar_radius = fields.Float('刀尖圆角半径')
- bar_accuracy = fields.Char('精度等级')
- bar_hardness = fields.Char('硬度(°)')
- bar_scope = fields.Char('适用范围')
+ bar_wrench = fields.Float('刀杆配对扳手(mm)')
+ bar_screw = fields.Float('刀杆配备螺丝(mm)')
+ bar_radius = fields.Float('刀杆刀尖圆角半径')
+ bar_accuracy = fields.Char('刀杆精度等级')
+ bar_hardness = fields.Char('刀杆硬度(°)')
+ bar_scope = fields.Char('刀杆适用范围')
# 刀盘特有字段
pad_code = fields.Char('刀盘编码', readonly=True)
# pad_name = fields.Char('刀盘名称', required=True)
- pad_c_diameter = fields.Float('C柄径(mm)')
- pad_total_length = fields.Float('L总长(mm)')
- pad_blade_number = fields.Integer('刃数')
- pad_d_diameter = fields.Float('D刃径(mm)')
+ pad_c_diameter = fields.Float('刀盘C柄径(mm)')
+ pad_total_length = fields.Float('刀盘L总长(mm)')
+ pad_blade_number = fields.Integer('刀盘刃数')
+ pad_d_diameter = fields.Float('刀盘D刃径(mm)')
mrs_cutting_tool_model_pad_blade_ids = fields.Many2many(
'sf.cutting.tool.model',
relation='sf_tool_material_search_pad_blade_rel',
column1='model_id_1',
column2='model_id_2',
domain="[('cutting_tool_type', '=', '刀片')]",
- string='适用刀片型号'
+ string='刀盘适用刀片型号'
)
- pad_wrench = fields.Float('配对扳手(mm)')
- pad_screw = fields.Float('配备螺丝(mm)')
- pad_radius = fields.Float('刀尖圆角半径')
- pad_accuracy = fields.Char('精度等级')
- pad_hardness = fields.Char('硬度(°)')
- pad_scope = fields.Char('适用范围')
+ pad_wrench = fields.Float('刀盘配对扳手(mm)')
+ pad_screw = fields.Float('刀盘配备螺丝(mm)')
+ pad_radius = fields.Float('刀盘刀尖圆角半径')
+ pad_accuracy = fields.Char('刀盘精度等级')
+ pad_hardness = fields.Char('刀盘硬度(°)')
+ pad_scope = fields.Char('刀盘适用范围')
# 刀柄特有字段
handle_code = fields.Char('刀柄编码', readonly=True)
# 柄长L(mm)、法兰柄长L1(mm)、法兰直径D1(mm)
- handle_length = fields.Float('柄长L(mm)')
- handle_diameter = fields.Float('直径D(mm)')
- handle_flange_length = fields.Float('法兰柄长L1(mm)')
- handle_flange_diameter = fields.Float('法兰直径D1(mm)')
+ handle_length = fields.Float('刀柄柄长L(mm)')
+ handle_diameter = fields.Float('刀柄直径D(mm)')
+ handle_flange_length = fields.Float('刀柄法兰柄长L1(mm)')
+ handle_flange_diameter = fields.Float('刀柄法兰直径D1(mm)')
# 夹持直径min、夹持直径max、径跳精度、最大转速n/min、3D模型图
- handle_clamping_diameter_min = fields.Float('夹持直径min')
- handle_clamping_diameter_max = fields.Float('夹持直径max')
- handle_jump_accuracy = fields.Float('径跳精度')
- handle_max_speed = fields.Float('最大转速n/min')
- handle_weight = fields.Float('重量(kg)')
- handle_body_accuracy = fields.Float('本体精度(mm)')
- handle_nut = fields.Float('配对螺母(mm)')
+ handle_clamping_diameter_min = fields.Float('刀柄夹持直径min')
+ handle_clamping_diameter_max = fields.Float('刀柄夹持直径max')
+ handle_jump_accuracy = fields.Float('刀柄径跳精度')
+ handle_max_speed = fields.Float('刀柄最大转速n/min')
+ handle_weight = fields.Float('刀柄重量(kg)')
+ handle_body_accuracy = fields.Float('刀柄本体精度(mm)')
+ handle_nut = fields.Float('刀柄配对螺母(mm)')
mrs_cutting_tool_model_handle_chuck_model_ids = fields.Many2many(
'sf.cutting.tool.model',
relation='sf_tool_material_search_handle_chuck_rel',
@@ -155,22 +155,22 @@ class SfToolMaterialSearch(models.Model):
domain="[('cutting_tool_type', '=', '夹头')]",
string='适用夹头型号'
)
- handle_clamping_range = fields.Float('夹持范围(mm)')
- handle_detection_accuracy = fields.Float('检测精度')
- handle_detection_hardness = fields.Char('检测硬度')
- handle_standard_speed = fields.Float('标准转速')
+ handle_clamping_range = fields.Float('刀柄夹持范围(mm)')
+ handle_detection_accuracy = fields.Float('刀柄检测精度')
+ handle_detection_hardness = fields.Char('刀柄检测硬度')
+ handle_standard_speed = fields.Float('刀柄标准转速')
# 夹头特有字段
chuck_code = fields.Char('夹头编码', readonly=True)
# chuck_name = fields.Char('夹头名称', required=True)
- chuck_accuracy = fields.Float('精度(mm)')
+ chuck_accuracy = fields.Float('夹头精度(mm)')
# 夹持直径min、夹持直径max、3D模型图
- chuck_clamping_diameter_min = fields.Float('夹持直径min')
- chuck_clamping_diameter_max = fields.Float('夹持直径max')
- chuck_diameter = fields.Float('外径(mm)')
- chuck_inner_diameter = fields.Float('内径(mm)')
- chuck_height = fields.Float('高度(mm)')
- chuck_nut = fields.Float('配对螺母(mm)')
+ chuck_clamping_diameter_min = fields.Float('夹头夹持直径min(mm)')
+ chuck_clamping_diameter_max = fields.Float('夹头夹持直径max(mm)')
+ chuck_diameter = fields.Float('夹头外径(mm)')
+ chuck_inner_diameter = fields.Float('夹头内径(mm)')
+ chuck_height = fields.Float('夹头高度(mm)')
+ chuck_nut = fields.Float('夹头配对螺母(mm)')
mrs_cutting_tool_model_chuck_handle_model_ids = fields.Many2many(
'sf.cutting.tool.model',
relation='sf_tool_material_search_chuck_handle_rel',
@@ -179,9 +179,9 @@ class SfToolMaterialSearch(models.Model):
domain="[('cutting_tool_type', '=', '刀柄')]",
string='适用刀柄型号'
)
- chuck_clamping_range = fields.Float('夹持范围(mm)')
- chuck_feature = fields.Char('特性')
- image = fields.Binary('图片')
+ chuck_clamping_range = fields.Float('夹头夹持范围(mm)')
+ chuck_feature = fields.Char('夹头特性')
+ image = fields.Binary('夹头图片')
# 数量、采购入库日期、采购批次、供应商、仓库名称、库区、库位、3D模型
number = fields.Integer('数量')
diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml
index 8ded8198..35338eac 100644
--- a/sf_tool_management/views/tool_base_views.xml
+++ b/sf_tool_management/views/tool_base_views.xml
@@ -674,7 +674,7 @@
-
+
diff --git a/sf_tool_management/views/tool_material_search.xml b/sf_tool_management/views/tool_material_search.xml
index 9e844bfd..c8e0a55c 100644
--- a/sf_tool_management/views/tool_material_search.xml
+++ b/sf_tool_management/views/tool_material_search.xml
@@ -168,22 +168,22 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -192,21 +192,21 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -214,19 +214,19 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -234,19 +234,19 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -254,23 +254,25 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -278,19 +280,19 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py
index 901dcda5..88e179f3 100644
--- a/sf_tool_management/wizard/wizard.py
+++ b/sf_tool_management/wizard/wizard.py
@@ -91,7 +91,6 @@ class ToolTransferRequestInformation(models.TransientModel):
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
functional_tool_name_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True)
- # todo 功能刀具类型为 Many2one
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True)
transfer_target = fields.Selection([('机台', '机台'),
('线边刀库', '线边刀库'),
@@ -99,13 +98,13 @@ class ToolTransferRequestInformation(models.TransientModel):
new_cnc_machine_table_id = fields.Many2one('sf.machine_tool', string='机床名称')
new_machine_tool_code = fields.Char(string='机床号')
- new_cutter_spacing_code = fields.Char(string='刀位号')
+ new_cutter_spacing_code = fields.Char(string='目标刀位号')
- magazine_tool_warehouse_district = fields.Char(string='库区')
- magazine_tool_warehouse_position = fields.Char(string='库位')
+ magazine_tool_warehouse_district = fields.Char(string='线边刀库库区')
+ magazine_tool_warehouse_position = fields.Char(string='线边刀库库位')
- tool_room_warehouse_district = fields.Char(string='库区')
- tool_room_warehouse_position = fields.Char(string='库位')
+ tool_room_warehouse_district = fields.Char(string='刀具房库区')
+ tool_room_warehouse_position = fields.Char(string='刀具房库位')
def tool_transfer_apply(self):
"""
diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml
index 02e4a766..4e871807 100644
--- a/sf_tool_management/wizard/wizard_view.xml
+++ b/sf_tool_management/wizard/wizard_view.xml
@@ -89,7 +89,7 @@
-
+
diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py
index ea707463..eafdffac 100644
--- a/sf_warehouse/models/model.py
+++ b/sf_warehouse/models/model.py
@@ -10,7 +10,7 @@ class SfLocation(models.Model):
# 重写字段定义
name = fields.Char('Location Name', required=True, size=20)
- barcode = fields.Char('Barcode', copy=False, required=True, size=15)
+ barcode = fields.Char('Barcode', copy=False, size=15)
# 仓库类别(selection:库区、库位、货位)
location_type = fields.Selection([
@@ -34,14 +34,14 @@ class SfLocation(models.Model):
# 产品类别 (关联:product.category)
product_type = fields.Many2many('product.category', string='产品类别')
# 货架独有字段:通道、方向、货架高度(m)、货架层数、层数容量
- channel = fields.Char(string='通道', required=True)
+ channel = fields.Char(string='通道')
direction = fields.Selection([
('R', 'R'),
('L', 'L')
- ], string='方向', required=True)
+ ], string='方向')
shelf_height = fields.Float(string='货架高度(m)')
- shelf_layer = fields.Integer(string='货架层数', required=True)
- layer_capacity = fields.Integer(string='层数容量', required=True)
+ shelf_layer = fields.Integer(string='货架层数')
+ layer_capacity = fields.Integer(string='层数容量')
# 货位独有字段:货位状态、产品(关联产品对象)、产品序列号(关联产品序列号对象)
location_status = fields.Selection([
@@ -54,9 +54,9 @@ class SfLocation(models.Model):
product_sn_id = fields.Many2one('stock.lot', string='产品序列号')
# time_test = fields.Char(string='time')
# 添加SQL约束
- _sql_constraints = [
- ('name_uniq', 'unique(name)', '位置名称必须唯一!'),
- ]
+ # _sql_constraints = [
+ # ('name_uniq', 'unique(name)', '位置名称必须唯一!'),
+ # ]
hide_location_type = fields.Boolean(compute='_compute_hide_what', string='隐藏仓库')
hide_area = fields.Boolean(compute='_compute_hide_what', string='隐藏库区')
diff --git a/web_widget_model_viewer/__manifest__.py b/web_widget_model_viewer/__manifest__.py
index 9cc75c66..94da93a4 100644
--- a/web_widget_model_viewer/__manifest__.py
+++ b/web_widget_model_viewer/__manifest__.py
@@ -4,6 +4,7 @@
"description": "3D模型展示模块(限odoo16)",
"author": "Van",
"website": "https://jikimo.com",
+ "license": "LGPL-3",
"category": "Tutorials",
"version": "16.0.0.1",
"depends": ['web'],