@@ -178,7 +178,7 @@
-
+
From 939a255c2ee1bbf2e1c0b4a59a0a4e1bc7f7c99b Mon Sep 17 00:00:00 2001
From: "qihao.gong@jikimo.com"
Date: Fri, 29 Dec 2023 14:17:27 +0800
Subject: [PATCH 03/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BE=E5=A4=87?=
=?UTF-8?q?=E6=B3=A8=E5=86=8C=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_maintenance/models/sf_maintenance.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sf_maintenance/models/sf_maintenance.py b/sf_maintenance/models/sf_maintenance.py
index 6aac4f91..aa9a7dcb 100644
--- a/sf_maintenance/models/sf_maintenance.py
+++ b/sf_maintenance/models/sf_maintenance.py
@@ -449,7 +449,7 @@ class SfMaintenanceEquipment(models.Model):
sf_secret_key = sf_sync_config['sf_secret_key']
headers = Common.get_headers(self, token, sf_secret_key)
strurl = sf_sync_config['sf_url'] + self.crea_url
- objs_all = self.env['maintenance.equipment'].search([('MTcode', '=', self.MTcode)])
+ objs_all = self.env['maintenance.equipment'].search([('id', '=', self.id)])
machine_tool_list = []
if objs_all:
for item in objs_all:
@@ -552,7 +552,7 @@ class SfMaintenanceEquipment(models.Model):
kw = json.dumps(machine_tool_list, ensure_ascii=False)
r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers)
ret = r.json()
- self.code = ret['message']
+ self.code = ret['data']
self.state_zc = "已注册"
if r == 200:
return "机床注册成功"
From 8ec038847ace47c0cbda88b31e1a50e1780cf3fa Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Fri, 29 Dec 2023 15:28:15 +0800
Subject: [PATCH 04/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9D=83=E9=99=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_quality/security/ir.model.access.csv | 3 +--
sf_sale/security/ir.model.access.csv | 2 ++
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/sf_quality/security/ir.model.access.csv b/sf_quality/security/ir.model.access.csv
index a26c135b..45811bc7 100644
--- a/sf_quality/security/ir.model.access.csv
+++ b/sf_quality/security/ir.model.access.csv
@@ -62,7 +62,6 @@ access_quality_tag_group_quality_director,quality_tag_group_quality_director,qua
access_quality_reason_type_group_quality,quality_reason_group_quality,quality.model_quality_reason,sf_base.group_quality,1,0,0,0
access_quality_reason_type_group_quality_director,quality_reason_group_quality_director,quality.model_quality_reason,sf_base.group_quality_director,1,0,0,0
-
-
+access_quality_alert_stage,quality.alert.stage,quality.model_quality_alert_stage,sf_base.group_plan_dispatch,1,0,0,0
diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv
index 9489a6cc..3e3a8df0 100644
--- a/sf_sale/security/ir.model.access.csv
+++ b/sf_sale/security/ir.model.access.csv
@@ -67,3 +67,5 @@ access_purchase_order_wizard_group_purchase,purchase_order_wizard_group_purchase
access_purchase_order_wizard_group_purchase_director,purchase_order_wizard_group_purchase_director,model_purchase_order_wizard,sf_base.group_purchase_director,1,1,1,0
access_crm_tag_group_sale_salemanager,crm_tag_group_sale_salemanager,sales_team.model_crm_tag,sf_base.group_sale_salemanager,1,0,0,0
access_crm_tag_group_sale_director,crm_tag_group_sale_director,sales_team.model_crm_tag,sf_base.group_sale_director,1,1,1,0
+
+access_sale_order,sale.order,sale.model_sale_order,sf_base.group_plan_dispatch,1,0,0,0
\ No newline at end of file
From 56d8190fc6ae9197038f8402987768e37af957ef Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Tue, 2 Jan 2024 11:47:40 +0800
Subject: [PATCH 05/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=9A=E5=8A=A1?=
=?UTF-8?q?=E9=80=BB=E8=BE=91:=E5=BD=93=E4=B8=BB=E5=88=B6=E9=80=A0?=
=?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=8E=92=E7=A8=8B=E5=90=8E=EF=BC=8C=E5=AD=90?=
=?UTF-8?q?bom=E8=87=AA=E5=8A=A8=E6=94=B9=E7=8A=B6=E6=80=81=E4=B8=BA?=
=?UTF-8?q?=E5=B7=B2=E6=8E=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_plan/models/custom_plan.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py
index 075c7e21..ddc7ed1c 100644
--- a/sf_plan/models/custom_plan.py
+++ b/sf_plan/models/custom_plan.py
@@ -173,6 +173,10 @@ class sf_production_plan(models.Model):
item.date_planned_start, item.date_planned_finished
self.state = 'done'
self.production_id.schedule_state = '已排'
+ mrp_production_ids = self.production_id._get_children().ids
+ print('mrp_production_ids', mrp_production_ids)
+ for i in mrp_production_ids:
+ self.env['mrp.production'].browse(i).schedule_state = '已排'
# self.production_id.date_planned_start = self.date_planned_start
# self.production_id.date_planned_finished = self.date_planned_finished
else:
From 77db3d57c9730d278df681b7a7eedd03eae85c1c Mon Sep 17 00:00:00 2001
From: "qihao.gong@jikimo.com"
Date: Tue, 2 Jan 2024 17:31:48 +0800
Subject: [PATCH 06/18] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=B1=BB=E5=88=AB?=
=?UTF-8?q?=E9=9D=9E=E5=BF=85=E5=A1=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_maintenance/views/maintenance_equipment_category_views.xml | 2 +-
sf_manufacturing/models/product_template.py | 4 ++--
sf_sale/models/auto_quatotion_common.py | 2 +-
sf_sale/models/quick_easy_order.py | 4 ++--
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/sf_maintenance/views/maintenance_equipment_category_views.xml b/sf_maintenance/views/maintenance_equipment_category_views.xml
index fa9c571c..2cdb47a3 100644
--- a/sf_maintenance/views/maintenance_equipment_category_views.xml
+++ b/sf_maintenance/views/maintenance_equipment_category_views.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index 285d43f0..8d9ce216 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -6,8 +6,8 @@ import os
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
from odoo.modules import get_resource_path
-from OCC.Extend.DataExchange import read_step_file
-from OCC.Extend.DataExchange import write_stl_file
+#from OCC.Extend.DataExchange import read_step_file
+#from OCC.Extend.DataExchange import write_stl_file
class ResProductMo(models.Model):
diff --git a/sf_sale/models/auto_quatotion_common.py b/sf_sale/models/auto_quatotion_common.py
index 09ea3f0f..1b29c6d2 100644
--- a/sf_sale/models/auto_quatotion_common.py
+++ b/sf_sale/models/auto_quatotion_common.py
@@ -2,7 +2,7 @@
import logging
from odoo.modules import get_resource_path
from odoo import fields, models, api
-from quatotion import readSql, feature_recognize, auto_quatotion
+#from quatotion import readSql, feature_recognize, auto_quatotion
__author__ = 'jinling.yang'
_logger = logging.getLogger(__name__)
diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py
index 1e5f274c..5ec1fd52 100644
--- a/sf_sale/models/quick_easy_order.py
+++ b/sf_sale/models/quick_easy_order.py
@@ -5,8 +5,8 @@ import os
import json
from datetime import datetime
import requests
-from OCC.Extend.DataExchange import read_step_file
-from OCC.Extend.DataExchange import write_stl_file
+#from OCC.Extend.DataExchange import read_step_file
+#from OCC.Extend.DataExchange import write_stl_file
from odoo import models, fields, api
from odoo.modules import get_resource_path
from odoo.exceptions import ValidationError, UserError
From ccdbfda0192a81dfb1c89140f3df46cceab49a1a Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Tue, 2 Jan 2024 17:55:02 +0800
Subject: [PATCH 07/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=A3=80=E6=B5=8B=E4=BA=BA=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_machine_connect/views/machine_monitor.xml | 156 +++++++++----------
sf_manufacturing/models/mrp_workorder.py | 5 +-
sf_manufacturing/models/stock.py | 3 +-
3 files changed, 83 insertions(+), 81 deletions(-)
diff --git a/sf_machine_connect/views/machine_monitor.xml b/sf_machine_connect/views/machine_monitor.xml
index 83b89598..9c9a21a3 100644
--- a/sf_machine_connect/views/machine_monitor.xml
+++ b/sf_machine_connect/views/machine_monitor.xml
@@ -29,44 +29,44 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -216,46 +216,46 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py
index 1edbb62f..48edcf7f 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -137,7 +137,10 @@ class ResMrpWorkOrder(models.Model):
"""
检测is_ok(是否合格)被修改的话,就将当前用户赋值给inspection_user_id
"""
- self.inspection_user_id = self.env.user.id
+ if not self.inspection_user_id:
+ self.inspection_user_id = self.env.user.id
+ else:
+ self.inspection_user_id = False
@api.onchange('functional_fixture_id')
def _onchange_functional_fixture_id(self):
diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py
index 4f2c43f3..27edc40f 100644
--- a/sf_manufacturing/models/stock.py
+++ b/sf_manufacturing/models/stock.py
@@ -202,8 +202,7 @@ class StockRule(models.Model):
sale_order = self.env['sale.order'].sudo().search([('name', '=', production.origin)])
if sale_order:
sale_order.write({'schedule_status': 'to schedule'})
- self.env['sf.production.plan'].sudo().with_company(company_id). \
- create({
+ self.env['sf.production.plan'].sudo().with_company(company_id).create({
'name': production.name,
'order_deadline': sale_order.deadline_of_delivery,
'production_id': production.id,
From 583f6503ec4187ef584bc646503912ffe3fe92a3 Mon Sep 17 00:00:00 2001
From: "qihao.gong@jikimo.com"
Date: Wed, 3 Jan 2024 17:29:37 +0800
Subject: [PATCH 08/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9cnc=E8=8E=B7=E5=8F=96?=
=?UTF-8?q?=E5=9C=A8=E5=88=B6=E9=80=A0=E8=AE=A2=E5=8D=95=E7=9A=84=E9=80=BB?=
=?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=88=B6=E9=80=A0=E8=AE=A2=E5=8D=95=E6=89=80?=
=?UTF-8?q?=E6=9C=89=E5=B7=A5=E5=8D=95=E5=AE=8C=E6=88=90=E6=97=B6=20?=
=?UTF-8?q?=E5=88=B6=E9=80=A0=E8=AE=A2=E5=8D=95=E8=87=AA=E5=8A=A8=E5=AE=8C?=
=?UTF-8?q?=E6=88=90=EF=BC=8C=E4=BB=A5=E5=8F=8A=E7=BB=84=E4=BB=B6=E8=87=AA?=
=?UTF-8?q?=E5=8A=A8=E6=B6=88=E8=80=97=E6=8E=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_manufacturing/models/mrp_production.py | 51 ++++++++++++++++++-
sf_manufacturing/models/mrp_workorder.py | 15 +++++-
.../views/mrp_production_addional_change.xml | 4 ++
sf_mrs_connect/controllers/controllers.py | 14 +++--
4 files changed, 74 insertions(+), 10 deletions(-)
diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py
index 4b15299d..b28c0125 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -1,6 +1,10 @@
# -*- coding: utf-8 -*-
+import base64
+import logging
import re
from odoo import api, fields, models, _
+from odoo.exceptions import UserError
+from odoo.addons.sf_base.commons.common import Common
class MrpProduction(models.Model):
@@ -17,6 +21,9 @@ class MrpProduction(models.Model):
check_status = fields.Boolean(string='启用状态', default=False, readonly=True)
active = fields.Boolean(string='已归档', default=True)
+ programming_no = fields.Char('编程单号')
+ work_state = fields.Char('业务状态')
+ programming_state = fields.Char('编程状态')
def action_check(self):
"""
@@ -47,6 +54,47 @@ class MrpProduction(models.Model):
for production in self:
production.maintenance_count = len(production.request_ids)
+ # cnc程序获取
+ def fetchCNC(self, requests=None):
+ cnc = self.env['mrp.production'].search([('id', '=', self.id)])
+ try:
+ res = {'model_code': '' if not cnc.product_id.model_code else cnc.product_id.model_code,
+ 'production_no': cnc.name,
+ 'machine_tool_code': "",
+ 'material_code': self.env['sf.production.materials'].search(
+ [('id', '=', cnc.product_id.materials_id.id)]).materials_no,
+ 'material_type_code': self.env['sf.materials.model'].search(
+ [('id', '=', cnc.product_id.materials_type_id.id)]).materials_no,
+ 'machining_processing_panel': cnc.product_id.model_processing_panel,
+ 'machining_precision': cnc.product_id.model_machining_precision,
+ 'embryo_long': cnc.product_id.bom_ids.bom_line_ids.product_id.length,
+ 'embryo_height': cnc.product_id.bom_ids.bom_line_ids.product_id.height,
+ 'embryo_width': cnc.product_id.bom_ids.bom_line_ids.product_id.width,
+ 'order_no': cnc.origin,
+ 'model_order_no': cnc.product_id.default_code.rsplit(' -', 1)[0],
+ 'user': cnc.env.user.name,
+ 'model_file': '' if not cnc.product_id.model_file else base64.b64encode(
+ cnc.product_id.model_file).decode('utf-8')
+ }
+ logging.info('res:%s' % res)
+ configsettings = self.env['res.config.settings'].get_values()
+ config_header = Common.get_headers(self, configsettings['token'], configsettings['sf_secret_key'])
+ url = '/api/intelligent_programming/create'
+ config_url = configsettings['sf_url'] + url
+ # res_str = json.dumps(res)
+ ret = requests.post(config_url, json={}, data=res, headers=config_header)
+ ret = ret.json()
+ logging.info('fetchCNC-ret:%s' % ret)
+ if ret['status'] == 1:
+ self.write(
+ {'programming_no': ret['programming_no'], 'programming_state': '编程中', 'work_state': '编程中'})
+ else:
+ raise UserError(ret['message'])
+ except Exception as e:
+ logging.info('fetchCNC error:%s' % e)
+ raise UserError("cnc程序获取编程单失败,请联系管理员")
+
+
# 维修模块按钮
def button_maintenance_req(self):
self.ensure_one()
@@ -366,7 +414,8 @@ class MrpProduction(models.Model):
current_sequence += 1
if work.name == '获取CNC加工程序':
work.button_start()
- work.fetchCNC()
+ #work.fetchCNC()
+ work.button_finish()
# 创建工单并进行排序
def _create_workorder(self):
diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py
index 1edbb62f..1103b004 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -447,7 +447,7 @@ class ResMrpWorkOrder(models.Model):
'embryo_height': cnc.product_id.bom_ids.bom_line_ids.product_id.height,
'embryo_width': cnc.product_id.bom_ids.bom_line_ids.product_id.width,
'order_no': cnc.production_id.origin,
- 'model_order_no': cnc.product_id.default_code.rsplit('-', 1)[0],
+ 'model_order_no': cnc.product_id.default_code.rsplit(' -', 1)[0],
'user': self.env.user.name,
'model_file': '' if not cnc.product_id.model_file else base64.b64encode(
cnc.product_id.model_file).decode('utf-8')
@@ -571,6 +571,18 @@ class ResMrpWorkOrder(models.Model):
'order_line': order_line_ids,
})
super().button_finish()
+ is_production_id = True
+ for workorder in self.production_id.workorder_ids:
+ if workorder.state != 'done':
+ is_production_id = False
+ if is_production_id == True and self.name == '解除装夹':
+ for move_raw_id in self.production_id.move_raw_ids:
+ move_raw_id.quantity_done = move_raw_id.product_uom_qty
+ self.production_id.state = 'done'
+
+
+
+
class CNCprocessing(models.Model):
@@ -592,6 +604,7 @@ class CNCprocessing(models.Model):
estimated_processing_time = fields.Char('预计加工时间')
remark = fields.Text('备注')
workorder_id = fields.Many2one('mrp.workorder', string="工单")
+ workorder_id = fields.Many2one('mrp.production', string="制造定单")
button_state = fields.Boolean(string='是否已经下发')
# mrs下发编程单创建CNC加工
diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml
index 3727bb10..755c6e52 100644
--- a/sf_manufacturing/views/mrp_production_addional_change.xml
+++ b/sf_manufacturing/views/mrp_production_addional_change.xml
@@ -64,6 +64,10 @@
+
+
+
diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py
index a6a1b25f..d728f569 100644
--- a/sf_mrs_connect/controllers/controllers.py
+++ b/sf_mrs_connect/controllers/controllers.py
@@ -23,12 +23,10 @@ class Sf_Mrs_Connect(http.Controller):
ret = json.loads(datas)
ret = json.loads(ret['result'])
# 查询状态为进行中且类型为获取CNC加工程序的工单
- cnc_workorder = request.env['mrp.workorder'].with_user(
- request.env.ref("base.user_admin")).search([('production_id.name', '=', ret['production_order_no']),
- ('routing_type', '=', '获取CNC加工程序'),
- ('state', '=', 'progress')])
- if cnc_workorder:
- cnc_workorder.glb_file = base64.b64encode(ret['glb_file'])
+ cnc_production = request.env['mrp.production'].with_user(
+ request.env.ref("base.user_admin")).search([('name', '=', ret['production_order_no'])])
+ if cnc_production:
+ cnc_production.glb_file = base64.b64encode(ret['glb_file'])
# 拉取所有加工面的程序文件
# i = 1
for r in ret['processing_panel']:
@@ -37,10 +35,10 @@ class Sf_Mrs_Connect(http.Controller):
ret['folder_name'], r)
if not download_state:
res['status'] = -2
- res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_workorder.production_id.name)
+ res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_production.production_id.name)
return json.JSONEncoder().encode(res)
request.env['sf.cnc.processing'].with_user(
- request.env.ref("base.user_admin")).cnc_processing_create(cnc_workorder, ret)
+ request.env.ref("base.user_admin")).cnc_processing_create(cnc_production, ret)
return json.JSONEncoder().encode(res)
else:
res = {'status': 0, 'message': '该制造订单暂未开始'}
From ce6912725096e4e7a5000027b4814f60cb99eb02 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Wed, 3 Jan 2024 17:31:16 +0800
Subject: [PATCH 09/18] =?UTF-8?q?1=E3=80=81=E5=A4=B9=E5=85=B7=E5=9E=8B?=
=?UTF-8?q?=E5=8F=B7=E5=90=8C=E6=AD=A5(=E8=BF=9B=E8=A1=8C=E4=B8=AD)?=
=?UTF-8?q?=EF=BC=9B2=E3=80=81=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E7=9A=84=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E5=88=80=E5=85=B7=E5=88=87=E5=89=8A=E7=B1=BB=E5=9E=8B=E5=AD=97?=
=?UTF-8?q?=E6=AE=B5=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 | 175 ++++++++++++++++++-
sf_tool_management/models/base.py | 2 +-
sf_tool_management/views/tool_base_views.xml | 6 +-
sf_tool_management/wizard/wizard.py | 2 +-
sf_tool_management/wizard/wizard_view.xml | 2 +-
5 files changed, 179 insertions(+), 8 deletions(-)
diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py
index 57d55bde..ad696831 100644
--- a/sf_base/models/basic_parameters_fixture.py
+++ b/sf_base/models/basic_parameters_fixture.py
@@ -65,4 +65,177 @@ class BasicParametersFixture(models.Model):
# '三爪卡盘' 字段
mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2))
- centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2))
\ No newline at end of file
+ centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2))
+
+ def _json_zero_chuck_param(self, obj):
+ zero_chuck_param_str = (0, '', {
+ 'name': obj['name'],
+ 'length': obj['length'],
+ 'width': obj['width'],
+ 'height': obj['height'],
+ 'diameter': obj['diameter'],
+ 'weight': obj['weight'],
+ 'orientation_dish_diameter': obj['orientation_dish_diameter'],
+ 'clamping_diameter': obj['clamping_diameter'],
+ 'clamping_num': obj['clamping_num'],
+ 'chucking_power_max': obj['chucking_power_max'],
+ 'repeated_positioning_accuracy': obj['repeated_positioning_accuracy'],
+ 'boolean_transposing_hole': obj['boolean_transposing_hole'],
+ 'unlocking_method': obj['unlocking_method'],
+ 'boolean_chip_blowing_function': obj['boolean_chip_blowing_function'],
+ 'carrying_capacity_max': obj['carrying_capacity_max'],
+ 'rigidity': obj['rigidity'],
+ 'materials_model_id': obj['materials_model_id'],
+ 'machine_tool_type_id': obj['machine_tool_type_id'],
+ })
+ return zero_chuck_param_str
+
+ def _json_zero_tray_param(self, obj):
+ zero_tray_param_str = (0, '', {
+ 'name': obj['name'],
+ 'length': obj['length'],
+ 'width': obj['width'],
+ 'height': obj['height'],
+ 'diameter': obj['diameter'],
+ 'weight': obj['weight'],
+ 'clamping_diameter': obj['clamping_diameter'],
+ 'connector_diameter': obj['connector_diameter'],
+ 'chucking_power_max': obj['chucking_power_max'],
+ 'repeated_positioning_accuracy': obj['repeated_positioning_accuracy'],
+ 'boolean_chip_blowing_function': obj['boolean_chip_blowing_function'],
+ 'way_to_install': obj['way_to_install'],
+ 'type_of_drive': obj['type_of_drive'],
+ 'carrying_capacity_max': obj['carrying_capacity_max'],
+ 'materials_model_id': obj['materials_model_id'],
+ 'rigidity': obj['rigidity'],
+ })
+ return zero_tray_param_str
+
+ def _json_pneumatic_fixture_param(self, obj):
+ pneumatic_fixture_param_str = (0, '', {
+ 'name': obj['name'],
+ 'length': obj['length'],
+ 'width': obj['width'],
+ 'height': obj['height'],
+ 'weight': obj['weight'],
+ 'gripper_length_min': obj['gripper_length_min'],
+ 'gripper_width_min': obj['gripper_width_min'],
+ 'gripper_height_min': obj['gripper_height_min'],
+ 'gripper_diameter_min': obj['gripper_diameter_min'],
+ 'gripper_length_max': obj['gripper_length_max'],
+ 'gripper_width_max': obj['gripper_width_max'],
+ 'gripper_height_max': obj['gripper_height_max'],
+ 'gripper_diameter_max': obj['gripper_diameter_max'],
+ 'chucking_power_max': obj['chucking_power_max'],
+ 'carrying_capacity_max': obj['carrying_capacity_max'],
+ 'rated_air_pressure': obj['rated_air_pressure'],
+ 'materials_model_id': obj['materials_model_id'],
+ 'rigidity': obj['rigidity'],
+ 'interface_materials_model_id': obj['interface_materials_model_id'],
+ 'type_of_drive': obj['type_of_drive'],
+ })
+ return pneumatic_fixture_param_str
+
+ def _json_jaw_vice_fixture_param(self, obj):
+ jaw_vice_fixture_param_str = (0, '', {
+ 'name': obj['name'],
+ 'length': obj['length'],
+ 'width': obj['width'],
+ 'height': obj['height'],
+ 'weight': obj['weight'],
+ 'gripper_length_min': obj['gripper_length_min'],
+ 'gripper_width_min': obj['gripper_width_min'],
+ 'gripper_height_min': obj['gripper_height_min'],
+ 'gripper_diameter_min': obj['gripper_diameter_min'],
+ 'gripper_length_max': obj['gripper_length_max'],
+ 'gripper_width_max': obj['gripper_width_max'],
+ 'gripper_height_max': obj['gripper_height_max'],
+ 'gripper_diameter_max': obj['gripper_diameter_max'],
+ 'chucking_power_max': obj['chucking_power_max'],
+ 'carrying_capacity_max': obj['carrying_capacity_max'],
+ 'transverse_groove': obj['transverse_groove'],
+ 'longitudinal_fitting_groove': obj['longitudinal_fitting_groove'],
+ 'materials_model_id': obj['materials_model_id'],
+ 'rigidity': obj['rigidity'],
+ 'interface_materials_model_id': obj['interface_materials_model_id'],
+ 'type_of_drive': obj['type_of_drive'],
+ })
+ return jaw_vice_fixture_param_str
+
+ def _json_magnet_fixture_param(self, obj):
+ magnet_fixture_param_str = (0, '', {
+ 'name': obj['name'],
+ 'length': obj['length'],
+ 'width': obj['width'],
+ 'height': obj['height'],
+ 'height_tolerance_value': obj['height_tolerance_value'],
+ 'weight': obj['weight'],
+ 'gripper_length_min': obj['gripper_length_min'],
+ 'gripper_width_min': obj['gripper_width_min'],
+ 'gripper_height_min': obj['gripper_height_min'],
+ 'gripper_diameter_min': obj['gripper_diameter_min'],
+ 'gripper_length_max': obj['gripper_length_max'],
+ 'gripper_width_max': obj['gripper_width_max'],
+ 'gripper_height_max': obj['gripper_height_max'],
+ 'gripper_diameter_max': obj['gripper_diameter_max'],
+ 'rated_adsorption_force': obj['rated_adsorption_force'],
+ 'magnetic_field_height': obj['magnetic_field_height'],
+ 'magnetic_pole_plate_grinding_allowance': obj['magnetic_pole_plate_grinding_allowance'],
+ 'carrying_capacity_max': obj['carrying_capacity_max'],
+ 'materials_model_id': obj['materials_model_id'],
+ 'rigidity': obj['rigidity'],
+ 'interface_materials_model_id': obj['interface_materials_model_id'],
+ 'type_of_drive': obj['type_of_drive'],
+ })
+ return magnet_fixture_param_str
+
+ def _json_adapter_board_fixture_param(self, obj):
+ adapter_board_fixture_param_str = (0, '', {
+ 'name': obj['name'],
+ 'length': obj['length'],
+ 'width': obj['width'],
+ 'height': obj['height'],
+ 'weight': obj['weight'],
+ 'gripper_length_min': obj['gripper_length_min'],
+ 'gripper_width_min': obj['gripper_width_min'],
+ 'gripper_height_min': obj['gripper_height_min'],
+ 'gripper_diameter_min': obj['gripper_diameter_min'],
+ 'gripper_length_max': obj['gripper_length_max'],
+ 'gripper_width_max': obj['gripper_width_max'],
+ 'gripper_height_max': obj['gripper_height_max'],
+ 'gripper_diameter_max': obj['gripper_diameter_max'],
+ 'chucking_power_max': obj['chucking_power_max'],
+ 'carrying_capacity_max': obj['carrying_capacity_max'],
+ 'materials_model_id': obj['materials_model_id'],
+ 'rigidity': obj['rigidity'],
+ 'screw_size': obj['screw_size'],
+ 'via_hole_diameter': obj['via_hole_diameter'],
+ 'type_of_drive': obj['type_of_drive'],
+ })
+ return adapter_board_fixture_param_str
+
+ def _json_scroll_chuck_param(self, obj):
+ scroll_chuck_param_str = (0, '', {
+ 'name': obj['name'],
+ 'length': obj['length'],
+ 'width': obj['width'],
+ 'height': obj['height'],
+ 'diameter': obj['diameter'],
+ 'weight': obj['weight'],
+ 'gripper_length_min': obj['gripper_length_min'],
+ 'gripper_width_min': obj['gripper_width_min'],
+ 'gripper_height_min': obj['gripper_height_min'],
+ 'gripper_diameter_min': obj['gripper_diameter_min'],
+ 'gripper_length_max': obj['gripper_length_max'],
+ 'gripper_width_max': obj['gripper_width_max'],
+ 'gripper_height_max': obj['gripper_height_max'],
+ 'gripper_diameter_max': obj['gripper_diameter_max'],
+ 'chucking_power_max': obj['chucking_power_max'],
+ 'carrying_capacity_max': obj['carrying_capacity_max'],
+ 'materials_model_id': obj['materials_model_id'],
+ 'rigidity': obj['rigidity'],
+ 'mounting_hole_depth': obj['mounting_hole_depth'],
+ 'centering_diameter': obj['centering_diameter'],
+ 'type_of_drive': obj['type_of_drive'],
+ })
+ return scroll_chuck_param_str
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index 9f5721a5..80ac3811 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -791,7 +791,7 @@ class FunctionalToolAssembly(models.Model):
L_D_number = fields.Float(string='L/D值(mm)', readonly=True)
hiding_length = fields.Float(string='避空长(mm)', readonly=True)
- functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
+ # functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
tool_loading_person = fields.Char(string='装刀人', readonly=True)
tool_loading_time = fields.Datetime(string='装刀时间', readonly=True)
remark = fields.Char(string='备注说明', readonly=True)
diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml
index 42bb103b..62c0f0eb 100644
--- a/sf_tool_management/views/tool_base_views.xml
+++ b/sf_tool_management/views/tool_base_views.xml
@@ -878,7 +878,7 @@
-
+
@@ -937,7 +936,6 @@
'default_new_former':new_former,
'default_use_tool_time':use_tool_time,
'default_reason_for_applying':reason_for_applying,
- 'default_functional_tool_cutting_type':functional_tool_cutting_type,
}"
attrs="{'invisible': [('assemble_status', '!=', '0')]}"
class="btn-primary"/>
@@ -1116,7 +1114,7 @@
-
+
diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py
index f98da62e..a8b10fd1 100644
--- a/sf_tool_management/wizard/wizard.py
+++ b/sf_tool_management/wizard/wizard.py
@@ -330,7 +330,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
L_D_number = fields.Float(string='L/D值(mm)', compute='_compute_l_d_number')
hiding_length = fields.Float(string='避空长(mm)')
- functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
+ # functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
@api.onchange('integral_code_id')
def _onchange_after_assembly_functional_tool_diameter(self):
diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml
index 7b3d2ab5..7586a513 100644
--- a/sf_tool_management/wizard/wizard_view.xml
+++ b/sf_tool_management/wizard/wizard_view.xml
@@ -190,7 +190,7 @@
-
+
From b9bb528db02aa2ea4a4bdea9b3dab98bd4ec67da Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Wed, 3 Jan 2024 23:03:08 +0800
Subject: [PATCH 10/18] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E5=85=AC=E5=8F=B8=E7=B1=BB=E5=9E=8B=E5=8D=A1=E7=89=87=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E7=A8=8EID=EF=BC=8C=E8=AE=A1=E5=88=92=E5=A4=84tree?=
=?UTF-8?q?=E8=A7=86=E5=9B=BE=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F=E6=8E=92?=
=?UTF-8?q?=E7=A8=8Bbutton?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_base/__manifest__.py | 1 +
sf_base/views/change_base_view.xml | 15 +++++++++++++++
sf_plan/views/view.xml | 3 +++
3 files changed, 19 insertions(+)
create mode 100644 sf_base/views/change_base_view.xml
diff --git a/sf_base/__manifest__.py b/sf_base/__manifest__.py
index e2fb731c..59ad967a 100644
--- a/sf_base/__manifest__.py
+++ b/sf_base/__manifest__.py
@@ -23,6 +23,7 @@
'views/tool_basic_param.xml',
'views/tool_menu.xml',
'views/menu_fixture_view.xml',
+ 'views/change_base_view.xml',
],
'demo': [
diff --git a/sf_base/views/change_base_view.xml b/sf_base/views/change_base_view.xml
new file mode 100644
index 00000000..3c02351a
--- /dev/null
+++ b/sf_base/views/change_base_view.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ sf.base.res.partner.kanban
+ res.partner
+
+
+
+
+
+
+
+
+
diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml
index fbca7218..4e872b5a 100644
--- a/sf_plan/views/view.xml
+++ b/sf_plan/views/view.xml
@@ -6,6 +6,9 @@
sf.production.plan
+
From ce58e989dda44df9a74cc198bc99c539e71988f9 Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Thu, 4 Jan 2024 08:51:25 +0800
Subject: [PATCH 11/18] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E7=9A=84=E6=89=B9?=
=?UTF-8?q?=E9=87=8F=E6=8E=92=E7=A8=8B=E5=B7=B2=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_plan/models/custom_plan.py | 75 ++++++++++++++++++-----------------
sf_plan/views/view.xml | 2 +-
2 files changed, 39 insertions(+), 38 deletions(-)
diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py
index ddc7ed1c..a60af7f3 100644
--- a/sf_plan/models/custom_plan.py
+++ b/sf_plan/models/custom_plan.py
@@ -153,44 +153,45 @@ class sf_production_plan(models.Model):
"""
排程方法
"""
- if not self.production_line_id:
- raise ValidationError("未选择生产线")
- else:
- workorder_id_list = self.production_id.workorder_ids.ids
- if self.production_id.workorder_ids:
- for item in self.production_id.workorder_ids:
- if item.name == 'CNC加工':
- item.date_planned_finished = datetime.now() + timedelta(days=100)
- item.date_planned_start = self.date_planned_start
- item.date_planned_finished = item.date_planned_start + timedelta(
- minutes=self.env['mrp.routing.workcenter'].sudo().search(
- [('name', '=', 'CNC加工')]).time_cycle)
- item.duration_expected = self.env['mrp.routing.workcenter'].sudo().search(
- [('name', '=', 'CNC加工')]).time_cycle
- self.calculate_plan_time_before(item, workorder_id_list)
- self.calculate_plan_time_after(item, workorder_id_list)
- self.date_planned_start, self.date_planned_finished = \
- item.date_planned_start, item.date_planned_finished
- self.state = 'done'
- self.production_id.schedule_state = '已排'
- mrp_production_ids = self.production_id._get_children().ids
- print('mrp_production_ids', mrp_production_ids)
- for i in mrp_production_ids:
- self.env['mrp.production'].browse(i).schedule_state = '已排'
- # self.production_id.date_planned_start = self.date_planned_start
- # self.production_id.date_planned_finished = self.date_planned_finished
+ for record in self:
+ if not record.production_line_id:
+ raise ValidationError("未选择生产线")
else:
- raise ValidationError("未找到工单")
- # self.date_planned_finished = self.date_planned_start + timedelta(days=3)
- # self.state = 'done'
- return {
- 'name': '排程甘特图',
- 'type': 'ir.actions.act_window',
- 'res_model': 'sf.production.plan', # 要跳转的模型名称
- # 要显示的视图类型,可以是'form', 'tree', 'kanban', 'graph', 'calendar', 'pivot'等
- 'view_mode': 'gantt,tree,form',
- 'target': 'current', # 跳转的目标窗口,可以是'current'或'new'
- }
+ workorder_id_list = record.production_id.workorder_ids.ids
+ if record.production_id.workorder_ids:
+ for item in record.production_id.workorder_ids:
+ if item.name == 'CNC加工':
+ item.date_planned_finished = datetime.now() + timedelta(days=100)
+ item.date_planned_start = record.date_planned_start
+ item.date_planned_finished = item.date_planned_start + timedelta(
+ minutes=record.env['mrp.routing.workcenter'].sudo().search(
+ [('name', '=', 'CNC加工')]).time_cycle)
+ item.duration_expected = record.env['mrp.routing.workcenter'].sudo().search(
+ [('name', '=', 'CNC加工')]).time_cycle
+ record.calculate_plan_time_before(item, workorder_id_list)
+ record.calculate_plan_time_after(item, workorder_id_list)
+ record.date_planned_start, record.date_planned_finished = \
+ item.date_planned_start, item.date_planned_finished
+ record.state = 'done'
+ record.production_id.schedule_state = '已排'
+ mrp_production_ids = record.production_id._get_children().ids
+ print('mrp_production_ids', mrp_production_ids)
+ for i in mrp_production_ids:
+ record.env['mrp.production'].browse(i).schedule_state = '已排'
+ # record.production_id.date_planned_start = record.date_planned_start
+ # record.production_id.date_planned_finished = record.date_planned_finished
+ else:
+ raise ValidationError("未找到工单")
+ # record.date_planned_finished = record.date_planned_start + timedelta(days=3)
+ # record.state = 'done'
+ return {
+ 'name': '排程甘特图',
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'sf.production.plan', # 要跳转的模型名称
+ # 要显示的视图类型,可以是'form', 'tree', 'kanban', 'graph', 'calendar', 'pivot'等
+ 'view_mode': 'gantt,tree,form',
+ 'target': 'current', # 跳转的目标窗口,可以是'current'或'new'
+ }
def calculate_plan_time_before(self, item, workorder_id_list):
"""
diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml
index 4e872b5a..c1bdf5fe 100644
--- a/sf_plan/views/view.xml
+++ b/sf_plan/views/view.xml
@@ -5,7 +5,7 @@
sf.production.plan.tree
sf.production.plan
-
+
From 2b117e9192aa7f6127b037a7c4e1c7e46c3d0c0e Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Thu, 4 Jan 2024 11:39:38 +0800
Subject: [PATCH 12/18] =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=BA=8F=E5=88=97?=
=?UTF-8?q?=E5=8F=B7=E6=9D=83=E9=99=90=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_warehouse/security/ir.model.access.csv | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sf_warehouse/security/ir.model.access.csv b/sf_warehouse/security/ir.model.access.csv
index 87ddef13..8d0025e0 100644
--- a/sf_warehouse/security/ir.model.access.csv
+++ b/sf_warehouse/security/ir.model.access.csv
@@ -100,7 +100,8 @@ access_stock_move,stock.move,stock.model_stock_move,sf_base.group_plan_dispatch,
access_stock_scrap_user,stock.scrap.user,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,0,0,0
access_stock_scrap_manager,stock.scrap.manager,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,0,0,0
access_stock_picking,stock.picking,stock.model_stock_picking,sf_base.group_plan_dispatch,1,0,0,0
-access_stock_lot,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,1,1,0
+access_stock_lot,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,0,0,0
+access_stock_lot,stock.lot,stock.model_stock_lot,sf_base.group_plan_director,1,1,1,0
access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,stock.model_stock_warehouse_orderpoint,sf_base.group_plan_dispatch,1,0,0,0
access_stock_quant,stock.quant,stock.model_stock_quant,sf_base.group_plan_dispatch,1,0,0,0
From 57f5d138e8cdb45f55438720fb63f6f99b6afdb2 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Thu, 4 Jan 2024 17:44:22 +0800
Subject: [PATCH 13/18] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E5=A4=B9?=
=?UTF-8?q?=E8=A3=85=E5=8D=95=E5=85=83=E6=95=B0=E4=BF=AE=E6=94=B9=E6=88=90?=
=?UTF-8?q?=E8=A3=85=E5=A4=B9=E5=8D=95=E5=85=83=E6=95=B0=EF=BC=9B2?=
=?UTF-8?q?=E3=80=81=E9=87=8D=E6=9E=84=E4=BA=A7=E5=93=81=E7=9A=84=E5=A4=B9?=
=?UTF-8?q?=E5=85=B7=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF(=E8=BF=9B?=
=?UTF-8?q?=E8=A1=8C=E4=B8=AD)=EF=BC=9B3=E3=80=81=E5=AE=8C=E5=96=84?=
=?UTF-8?q?=E5=A4=B9=E5=85=B7=E7=89=A9=E6=96=99=E7=9A=84=E5=90=8C=E6=AD=A5?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=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 | 1 +
.../product_template_management_view.xml | 104 ++++----
sf_manufacturing/models/product_template.py | 96 +++++--
sf_mrs_connect/models/sync_common.py | 249 ++++++++++--------
5 files changed, 258 insertions(+), 194 deletions(-)
diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py
index ad696831..a1b1a9a6 100644
--- a/sf_base/models/basic_parameters_fixture.py
+++ b/sf_base/models/basic_parameters_fixture.py
@@ -16,7 +16,7 @@ class BasicParametersFixture(models.Model):
weight = fields.Float('重量(mm)', digits=(16, 2))
orientation_dish_diameter = fields.Float('定位盘直径(mm)', digits=(16, 2))
clamping_diameter = fields.Float('装夹直径(mm)', digits=(16, 2))
- clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='夹装单元数')
+ clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='装夹单元数')
chucking_power_max = fields.Float('最大夹持力(KN)', digits=(16, 2))
repeated_positioning_accuracy = fields.Char('重复定位精度(mm)', size=20)
boolean_transposing_hole = fields.Boolean('是否有转位孔')
diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py
index d6455550..c1591745 100644
--- a/sf_base/models/fixture.py
+++ b/sf_base/models/fixture.py
@@ -32,6 +32,7 @@ class FixtureModel(models.Model):
multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True)
brand_id = fields.Many2one('sf.machine.brand', string="品牌")
model_file = fields.Binary(string="3D模型图")
+ status = fields.Boolean('状态')
active = fields.Boolean('有效', default=False)
zero_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id',
diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml
index 737d56db..a072fc28 100644
--- a/sf_dlm_management/views/product_template_management_view.xml
+++ b/sf_dlm_management/views/product_template_management_view.xml
@@ -41,6 +41,10 @@
+
+
{'readonly': [('categ_id', '!=', False)]}
@@ -89,8 +93,7 @@
-
-
+
product.template.only.form.inherit.sf
product.template
@@ -101,7 +104,15 @@
-
+
+
+
+
+ product.template.only.form.inherit.sf
+ product.template
+
+
+
@@ -483,64 +494,41 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index 285d43f0..d5d5a9ed 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -486,28 +486,6 @@ class ResProductMo(models.Model):
string='适用刀柄型号'
)
- # 夹具参数
- fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料")
- fixture_model_id = fields.Many2one('sf.fixture.model', string="夹具型号")
- fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name')
- fixture_multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型")
- fixture_clamping_way = fields.Char(string="装夹方式")
- fixture_port_type = fields.Char(string="接口类型")
- fixture_model_file = fields.Binary(string="3D模型图")
-
- fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度max(mm)")
- fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度max(mm)")
- fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度max(mm)")
- fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径max(mm)", digits=(16, 6))
-
- fixture_maximum_carrying_weight = fields.Float(string="最大承载重量(kg)", digits=(16, 4))
- fixture_maximum_clamping_force = fields.Integer(string="最大夹持力(n)")
- fixture_driving_way = fields.Char(string="驱动方式")
- fixture_apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_product_machine_tool_type',
- string="适用机床型号")
- fixture_through_hole_size = fields.Integer(string="过孔大小(mm)")
- fixture_screw_size = fields.Integer(string="螺牙大小(mm)")
-
# 注册状态
register_state = fields.Selection([('未注册', '未注册'), ('已注册', '已注册'), ('注册失败', '注册失败')],
string='注册状态', default='未注册')
@@ -826,6 +804,80 @@ class ResProductMo(models.Model):
return base64_data
+class ResProductFixture(models.Model):
+ _inherit = 'product.template'
+ _description = '夹具产品信息'
+
+ fixture_model_id = fields.Many2one('sf.fixture.model', '夹具型号')
+ specification_fixture_id = fields.Many2one('sf.fixture.materials.basic.parameters', '夹具规格')
+
+ fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", required=True)
+ fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name')
+ multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True)
+ model_file = fields.Binary(string="3D模型图")
+
+ # 夹具物料基本参数
+ # length = fields.Float('长度(mm)', digits=(16, 2))
+ # width = fields.Float('宽度(mm)', digits=(16, 2))
+ # height = fields.Float('高度(mm)', digits=(16, 2))
+ diameter = fields.Float('直径(mm)', digits=(16, 2))
+
+ # '零点卡盘' 字段
+ weight = fields.Float('重量(mm)', digits=(16, 2))
+ orientation_dish_diameter = fields.Float('定位盘直径(mm)', digits=(16, 2))
+ clamping_diameter = fields.Float('装夹直径(mm)', digits=(16, 2))
+ clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='装夹单元数')
+ chucking_power_max = fields.Float('最大夹持力(KN)', digits=(16, 2))
+ repeated_positioning_accuracy = fields.Char('重复定位精度(mm)', size=20)
+ boolean_transposing_hole = fields.Boolean('是否有转位孔')
+ unlocking_method = fields.Selection(
+ [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], string='解锁方式')
+ boolean_chip_blowing_function = fields.Boolean('是否有吹屑功能')
+ carrying_capacity_max = fields.Float('最大承载重量(kg)', digits=(16, 2))
+ rigidity = fields.Integer('硬度HRC')
+ materials_model_id = fields.Many2one('sf.materials.model', '夹具材质')
+ machine_tool_type_id = fields.Many2one('sf.machine_tool.type', '适用机床型号')
+
+ # ’零点托盘‘ 字段
+ connector_diameter = fields.Selection([('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('8', '8')],
+ string='连接头直径(mm)')
+ way_to_install = fields.Selection(
+ [('接口式', '接口式'), ('螺栓固定', '螺栓固定'), ('磁吸式', '磁吸式'), ('其他', '其他')], string='安装方式')
+ type_of_drive = fields.Selection(
+ [('气动式', '气动式'), ('液压式', '液压式'), ('机械式', '机械式'), ('电动式', '电动式'), ('其他', '其他')],
+ string='驱动方式')
+
+ # ’气动夹具‘ 字段
+ gripper_length_min = fields.Float('夹持工件最小长度(mm)', digits=(16, 2))
+ gripper_width_min = fields.Float('夹持工件最小宽度(mm)', digits=(16, 2))
+ gripper_height_min = fields.Float('夹持工件最小高度(mm)', digits=(16, 2))
+ gripper_diameter_min = fields.Float('夹持工件最小直径(mm)', digits=(16, 2))
+ gripper_length_max = fields.Float('夹持工件最大长度(mm)', digits=(16, 2))
+ gripper_width_max = fields.Float('夹持工件最大宽度(mm)', digits=(16, 2))
+ gripper_height_max = fields.Float('夹持工件最大高度(mm)', digits=(16, 2))
+ gripper_diameter_max = fields.Float('夹持工件最大直径(mm)', digits=(16, 2))
+ rated_air_pressure = fields.Float('额定气压(Mpa)', digits=(16, 2))
+ interface_materials_model_id = fields.Many2one('sf.materials.model', '接口类型')
+
+ # ‘虎钳夹具' 字段
+ transverse_groove = fields.Float('横向配合槽n(mm)', digits=(16, 2))
+ longitudinal_fitting_groove = fields.Float('纵向配合槽l(mm)', digits=(16, 2))
+
+ # '磁吸夹具' 字段
+ height_tolerance_value = fields.Char('高度公差(mm)')
+ rated_adsorption_force = fields.Float('额定吸附力(N/cm²)', digits=(16, 2))
+ 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))
+
+ # '三爪卡盘' 字段
+ mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2))
+ centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2))
+
+
class SfMaintenanceEquipmentAndProductTemplate(models.Model):
_inherit = 'maintenance.equipment'
_description = '设备'
diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py
index fe7bd12e..bb4b631f 100644
--- a/sf_mrs_connect/models/sync_common.py
+++ b/sf_mrs_connect/models/sync_common.py
@@ -649,24 +649,24 @@ class MachineToolType(models.Model):
'machine_tool_picture': image,
"heightened_way": item['heightened_way'],
"workpiece_load": item['workpiece_load'],
- #"lead_screw": item['lead_screw'],
+ # "lead_screw": item['lead_screw'],
"workbench_L": item['workbench_L'],
"workbench_W": item['workbench_W'],
- #"guide_rail": item['guide_rail'],
+ # "guide_rail": item['guide_rail'],
"machine_tool_L": item['machine_tool_L'],
"machine_tool_W": item['machine_tool_W'],
"machine_tool_H": item['machine_tool_H'],
- #"feed_speed": item['feed_speed'],
- #"tool_speed": item['tool_speed'],
+ # "feed_speed": item['feed_speed'],
+ # "tool_speed": item['tool_speed'],
"distance_min": item['distance_min'],
"distance_max": item['distance_max'],
- #"taper": item['taper'],
- #"torque": item['torque'],
- #"motor_power": item['motor_power'],
+ # "taper": item['taper'],
+ # "torque": item['torque'],
+ # "motor_power": item['motor_power'],
"tool_quality_max": item['tool_quality_max'],
"tool_long_max": item['tool_long_max'],
- #"tool_diameter_max": item['tool_diameter_max'],
- #"tool_diameter_min": item['tool_diameter_min'],
+ # "tool_diameter_max": item['tool_diameter_max'],
+ # "tool_diameter_min": item['tool_diameter_min'],
"machine_tool_category": category.id,
'taper_type_id': taper_type_id.id,
"function_type": item['function_type'],
@@ -731,24 +731,24 @@ class MachineToolType(models.Model):
'machine_tool_picture': image,
"heightened_way": item['heightened_way'],
"workpiece_load": item['workpiece_load'],
- #"lead_screw": item['lead_screw'],
+ # "lead_screw": item['lead_screw'],
"workbench_L": item['workbench_L'],
"workbench_W": item['workbench_W'],
- #"guide_rail": item['guide_rail'],
+ # "guide_rail": item['guide_rail'],
"machine_tool_L": item['machine_tool_L'],
"machine_tool_W": item['machine_tool_W'],
"machine_tool_H": item['machine_tool_H'],
- #"feed_speed": item['feed_speed'],
- #"tool_speed": item['tool_speed'],
+ # "feed_speed": item['feed_speed'],
+ # "tool_speed": item['tool_speed'],
"distance_min": item['distance_min'],
"distance_max": item['distance_max'],
- #"taper": item['taper'],
- #"torque": item['torque'],
- #"motor_power": item['motor_power'],
+ # "taper": item['taper'],
+ # "torque": item['torque'],
+ # "motor_power": item['motor_power'],
"tool_quality_max": item['tool_quality_max'],
"tool_long_max": item['tool_long_max'],
- #"tool_diameter_max": item['tool_diameter_max'],
- #"tool_diameter_min": item['tool_diameter_min'],
+ # "tool_diameter_max": item['tool_diameter_max'],
+ # "tool_diameter_min": item['tool_diameter_min'],
"machine_tool_category": category.id,
'taper_type_id': taper_type_id.id,
"function_type": item['function_type'],
@@ -844,24 +844,24 @@ class MachineToolType(models.Model):
'machine_tool_picture': image,
"heightened_way": item['heightened_way'],
"workpiece_load": item['workpiece_load'],
- #"lead_screw": item['lead_screw'],
+ # "lead_screw": item['lead_screw'],
"workbench_L": item['workbench_L'],
"workbench_W": item['workbench_W'],
- #"guide_rail": item['guide_rail'],
+ # "guide_rail": item['guide_rail'],
"machine_tool_L": item['machine_tool_L'],
"machine_tool_W": item['machine_tool_W'],
"machine_tool_H": item['machine_tool_H'],
- #"feed_speed": item['feed_speed'],
- #"tool_speed": item['tool_speed'],
+ # "feed_speed": item['feed_speed'],
+ # "tool_speed": item['tool_speed'],
"distance_min": item['distance_min'],
"distance_max": item['distance_max'],
- #"taper": item['taper'],
- #"torque": item['torque'],
- #"motor_power": item['motor_power'],
+ # "taper": item['taper'],
+ # "torque": item['torque'],
+ # "motor_power": item['motor_power'],
"tool_quality_max": item['tool_quality_max'],
"tool_long_max": item['tool_long_max'],
- #"tool_diameter_max": item['tool_diameter_max'],
- #"tool_diameter_min": item['tool_diameter_min'],
+ # "tool_diameter_max": item['tool_diameter_max'],
+ # "tool_diameter_min": item['tool_diameter_min'],
"machine_tool_category": category.id,
'taper_type_id': taper_type_id.id,
"function_type": item['function_type'],
@@ -903,7 +903,6 @@ class MachineToolType(models.Model):
"jg_image_id": jg_image_id.ids,
"lq_image_id": lq_image_id.ids,
-
})
else:
machine_tool_type.update({
@@ -927,24 +926,24 @@ class MachineToolType(models.Model):
'machine_tool_picture': image,
"heightened_way": item['heightened_way'],
"workpiece_load": item['workpiece_load'],
- #"lead_screw": item['lead_screw'],
+ # "lead_screw": item['lead_screw'],
"workbench_L": item['workbench_L'],
"workbench_W": item['workbench_W'],
- #"guide_rail": item['guide_rail'],
+ # "guide_rail": item['guide_rail'],
"machine_tool_L": item['machine_tool_L'],
"machine_tool_W": item['machine_tool_W'],
"machine_tool_H": item['machine_tool_H'],
- #"feed_speed": item['feed_speed'],
- #"tool_speed": item['tool_speed'],
+ # "feed_speed": item['feed_speed'],
+ # "tool_speed": item['tool_speed'],
"distance_min": item['distance_min'],
"distance_max": item['distance_max'],
- #"taper": item['taper'],
- #"torque": item['torque'],
- #"motor_power": item['motor_power'],
+ # "taper": item['taper'],
+ # "torque": item['torque'],
+ # "motor_power": item['motor_power'],
"tool_quality_max": item['tool_quality_max'],
"tool_long_max": item['tool_long_max'],
- #"tool_diameter_max": item['tool_diameter_max'],
- #"tool_diameter_min": item['tool_diameter_min'],
+ # "tool_diameter_max": item['tool_diameter_max'],
+ # "tool_diameter_min": item['tool_diameter_min'],
"machine_tool_category": category.id,
'taper_type_id': taper_type_id.id,
"function_type": item['function_type'],
@@ -1459,6 +1458,39 @@ class SyncFixtureModel(models.Model):
for item in result['fixture_model_yesterday_list']:
if item:
fixture_model = self.search([("code", '=', item['code'])])
+ zero_chuck_list = []
+ for zero_chuck_id in item['zero_chuck_ids']:
+ zero_chuck_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_zero_chuck_param(zero_chuck_id))
+ zero_tray_list = []
+ for zero_tray_id in item['zero_tray_ids']:
+ zero_tray_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_zero_tray_param(zero_tray_id))
+ pneumatic_fixture_list = []
+ for pneumatic_fixture_id in item['pneumatic_fixture_ids']:
+ pneumatic_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_pneumatic_fixture_param(
+ pneumatic_fixture_id))
+ jaw_vice_fixture_list = []
+ for jaw_vice_fixture_id in item['jaw_vice_fixture_ids']:
+ jaw_vice_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_jaw_vice_fixture_param(
+ jaw_vice_fixture_id))
+ magnet_fixture_list = []
+ for magnet_fixture_id in item['magnet_fixture_ids']:
+ magnet_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_magnet_fixture_param(
+ magnet_fixture_id))
+ adapter_board_fixture_list = []
+ for adapter_board_fixture_id in item['adapter_board_fixture_ids']:
+ adapter_board_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_adapter_board_fixture_param(
+ adapter_board_fixture_id))
+ scroll_chuck_list = []
+ for scroll_chuck_id in item['scroll_chuck_ids']:
+ scroll_chuck_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_scroll_chuck_param(
+ scroll_chuck_id))
if not fixture_model:
self.create({
"name": item['name'],
@@ -1468,56 +1500,35 @@ class SyncFixtureModel(models.Model):
"multi_mounting_type_id": self.env['sf.multi_mounting.type'].search(
[('code', '=', item['multi_mounting_type_code'])]).id,
"brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id,
- "clamping_way": item['clamping_way'],
- "port_type": item['port_type'],
"model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']),
- "length": item['length'],
- "width": item['width'],
- "height": item['height'],
- "weight": item['weight'],
- "clamp_workpiece_length_max": item['clamp_workpiece_length_max'],
- "clamp_workpiece_width_max": item['clamp_workpiece_width_max'],
- "clamp_workpiece_height_max": item['clamp_workpiece_height_max'],
- "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'],
- "maximum_carrying_weight": item['maximum_carrying_weight'],
- "maximum_clamping_force": item['maximum_clamping_force'],
- "materials_model_id": self.env['sf.materials.model'].search(
- [('materials_no', '=', item['materials_model_code'])]).id,
- "driving_way": item['driving_way'],
- "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids(
- item['apply_machine_tool_type_code']),
- "through_hole_size": item['through_hole_size'],
- "screw_size": item['screw_size'],
+ "zero_chuck_ids": zero_chuck_list,
+ "zero_tray_ids": zero_tray_list,
+ "pneumatic_fixture_ids": pneumatic_fixture_list,
+ "jaw_vice_fixture_ids": jaw_vice_fixture_list,
+ "magnet_fixture_ids": magnet_fixture_list,
+ "adapter_board_fixture_ids": adapter_board_fixture_list,
+ "scroll_chuck_ids": scroll_chuck_list,
+ "status": item['status'],
"active": item['active'],
})
else:
fixture_model.write({
"name": item['name'],
+ "code": item['code'],
"fixture_material_id": self.env['sf.fixture.material'].search(
[('code', '=', item['fixture_material_code'])]).id,
"multi_mounting_type_id": self.env['sf.multi_mounting.type'].search(
[('code', '=', item['multi_mounting_type_code'])]).id,
"brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id,
- "clamping_way": item['clamping_way'],
- "port_type": item['port_type'],
"model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']),
- "length": item['length'],
- "width": item['width'],
- "height": item['height'],
- "weight": item['weight'],
- "clamp_workpiece_length_max": item['clamp_workpiece_length_max'],
- "clamp_workpiece_width_max": item['clamp_workpiece_width_max'],
- "clamp_workpiece_height_max": item['clamp_workpiece_height_max'],
- "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'],
- "maximum_carrying_weight": item['maximum_carrying_weight'],
- "maximum_clamping_force": item['maximum_clamping_force'],
- "materials_model_id": self.env['sf.materials.model'].search(
- [('materials_no', '=', item['materials_model_code'])]).id,
- "driving_way": item['driving_way'],
- "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids(
- item['apply_machine_tool_type_code']),
- "through_hole_size": item['through_hole_size'],
- "screw_size": item['screw_size'],
+ "zero_chuck_ids": zero_chuck_list,
+ "zero_tray_ids": zero_tray_list,
+ "pneumatic_fixture_ids": pneumatic_fixture_list,
+ "jaw_vice_fixture_ids": jaw_vice_fixture_list,
+ "magnet_fixture_ids": magnet_fixture_list,
+ "adapter_board_fixture_ids": adapter_board_fixture_list,
+ "scroll_chuck_ids": scroll_chuck_list,
+ "status": item['status'],
"active": item['active'],
})
else:
@@ -1537,6 +1548,39 @@ class SyncFixtureModel(models.Model):
for item in result['fixture_model_all_list']:
if item:
fixture_model = self.search([("code", '=', item['code'])])
+ zero_chuck_list = []
+ for zero_chuck_id in item['zero_chuck_ids']:
+ zero_chuck_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_zero_chuck_param(zero_chuck_id))
+ zero_tray_list = []
+ for zero_tray_id in item['zero_tray_ids']:
+ zero_tray_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_zero_tray_param(zero_tray_id))
+ pneumatic_fixture_list = []
+ for pneumatic_fixture_id in item['pneumatic_fixture_ids']:
+ pneumatic_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_pneumatic_fixture_param(
+ pneumatic_fixture_id))
+ jaw_vice_fixture_list = []
+ for jaw_vice_fixture_id in item['jaw_vice_fixture_ids']:
+ jaw_vice_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_jaw_vice_fixture_param(
+ jaw_vice_fixture_id))
+ magnet_fixture_list = []
+ for magnet_fixture_id in item['magnet_fixture_ids']:
+ magnet_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_magnet_fixture_param(
+ magnet_fixture_id))
+ adapter_board_fixture_list = []
+ for adapter_board_fixture_id in item['adapter_board_fixture_ids']:
+ adapter_board_fixture_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_adapter_board_fixture_param(
+ adapter_board_fixture_id))
+ scroll_chuck_list = []
+ for scroll_chuck_id in item['scroll_chuck_ids']:
+ scroll_chuck_list.append(
+ self.env['sf.fixture.materials.basic.parameters']._json_scroll_chuck_param(
+ scroll_chuck_id))
if not fixture_model:
self.create({
"name": item['name'],
@@ -1546,56 +1590,35 @@ class SyncFixtureModel(models.Model):
"multi_mounting_type_id": self.env['sf.multi_mounting.type'].search(
[('code', '=', item['multi_mounting_type_code'])]).id,
"brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id,
- "clamping_way": item['clamping_way'],
- "port_type": item['port_type'],
"model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']),
- "length": item['length'],
- "width": item['width'],
- "height": item['height'],
- "weight": item['weight'],
- "clamp_workpiece_length_max": item['clamp_workpiece_length_max'],
- "clamp_workpiece_width_max": item['clamp_workpiece_width_max'],
- "clamp_workpiece_height_max": item['clamp_workpiece_height_max'],
- "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'],
- "maximum_carrying_weight": item['maximum_carrying_weight'],
- "maximum_clamping_force": item['maximum_clamping_force'],
- "materials_model_id": self.env['sf.materials.model'].search(
- [('materials_no', '=', item['materials_model_code'])]).id,
- "driving_way": item['driving_way'],
- "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids(
- item['apply_machine_tool_type_code']),
- "through_hole_size": item['through_hole_size'],
- "screw_size": item['screw_size'],
+ "zero_chuck_ids": zero_chuck_list,
+ "zero_tray_ids": zero_tray_list,
+ "pneumatic_fixture_ids": pneumatic_fixture_list,
+ "jaw_vice_fixture_ids": jaw_vice_fixture_list,
+ "magnet_fixture_ids": magnet_fixture_list,
+ "adapter_board_fixture_ids": adapter_board_fixture_list,
+ "scroll_chuck_ids": scroll_chuck_list,
+ "status": item['status'],
"active": item['active'],
})
else:
fixture_model.write({
"name": item['name'],
+ "code": item['code'],
"fixture_material_id": self.env['sf.fixture.material'].search(
[('code', '=', item['fixture_material_code'])]).id,
"multi_mounting_type_id": self.env['sf.multi_mounting.type'].search(
[('code', '=', item['multi_mounting_type_code'])]).id,
"brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id,
- "clamping_way": item['clamping_way'],
- "port_type": item['port_type'],
"model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']),
- "length": item['length'],
- "width": item['width'],
- "height": item['height'],
- "weight": item['weight'],
- "clamp_workpiece_length_max": item['clamp_workpiece_length_max'],
- "clamp_workpiece_width_max": item['clamp_workpiece_width_max'],
- "clamp_workpiece_height_max": item['clamp_workpiece_height_max'],
- "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'],
- "maximum_carrying_weight": item['maximum_carrying_weight'],
- "maximum_clamping_force": item['maximum_clamping_force'],
- "materials_model_id": self.env['sf.materials.model'].search(
- [('materials_no', '=', item['materials_model_code'])]).id,
- "driving_way": item['driving_way'],
- "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids(
- item['apply_machine_tool_type_code']),
- "through_hole_size": item['through_hole_size'],
- "screw_size": item['screw_size'],
+ "zero_chuck_ids": zero_chuck_list,
+ "zero_tray_ids": zero_tray_list,
+ "pneumatic_fixture_ids": pneumatic_fixture_list,
+ "jaw_vice_fixture_ids": jaw_vice_fixture_list,
+ "magnet_fixture_ids": magnet_fixture_list,
+ "adapter_board_fixture_ids": adapter_board_fixture_list,
+ "scroll_chuck_ids": scroll_chuck_list,
+ "status": item['status'],
"active": item['active'],
})
else:
From 974b112b3a8a178c3c17dcc1b721fccc45c0de8a Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Fri, 5 Jan 2024 08:53:39 +0800
Subject: [PATCH 14/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AE=BE=E5=A4=87?=
=?UTF-8?q?=E3=80=81=E5=BA=93=E5=AD=98=E6=9D=83=E9=99=90=E7=9B=B8=E5=85=B3?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_maintenance/security/ir.model.access.csv | 14 +++++++++-----
sf_warehouse/security/ir.model.access.csv | 11 ++++++-----
2 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/sf_maintenance/security/ir.model.access.csv b/sf_maintenance/security/ir.model.access.csv
index 4f693af2..54e54d01 100644
--- a/sf_maintenance/security/ir.model.access.csv
+++ b/sf_maintenance/security/ir.model.access.csv
@@ -7,8 +7,12 @@ access_maintenance_standard_image,maintenance_standard_image,model_maintenance_s
access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equipment_user,1,1,1,1
-access_maintenance_request,maintenance.request,maintenance.model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0
-access_maintenance_equipment,maintenance_equipment,model_maintenance_equipment,sf_base.group_plan_dispatch,1,0,0,0
-access_sf_maintenance_logs,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0
-access_maintenance_standard_image,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0
-access_equipment_maintenance_standards,equipment_maintenance_standards,model_equipment_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0
\ No newline at end of file
+access_maintenance_request_group_plan_dispatch,maintenance.request,maintenance.model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0
+access_maintenance_equipment_group_plan_dispatch,maintenance.equipment,maintenance.model_maintenance_equipment,sf_base.group_plan_dispatch,1,1,1,1
+access_sf_maintenance_logs_group_plan_dispatch,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0
+access_maintenance_standard_image_group_plan_dispatch,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0
+access_equipment_maintenance_standards_group_plan_dispatch,equipment_maintenance_standards,model_equipment_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0
+access_maintenance_standards_group_plan_dispatch,maintenance_standards,model_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0
+
+access_maintenance_equipment_tool_group_plan_dispatch,maintenance.equipment.tool,sf_manufacturing.model_maintenance_equipment_tool,sf_base.group_plan_dispatch,1,0,0,0
+access_sf_robot_axis_num_group_plan_dispatch,sf.robot.axis.num,model_sf_robot_axis_num,sf_base.group_plan_dispatch,1,0,0,0
\ No newline at end of file
diff --git a/sf_warehouse/security/ir.model.access.csv b/sf_warehouse/security/ir.model.access.csv
index 8d0025e0..b5954085 100644
--- a/sf_warehouse/security/ir.model.access.csv
+++ b/sf_warehouse/security/ir.model.access.csv
@@ -1,4 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+
access_sf_shelf_location,sf.shelf.location,model_sf_shelf_location,sf_warehouse.group_sf_stock_user,1,1,1,0
access_procurement_group,procurement.group,stock.model_procurement_group,base.group_user,1,1,1,0
@@ -95,15 +96,15 @@ access_stock_lot_label_layout_user,lot.label.layout.user,stock.model_lot_label_l
access_stock_replenish_option,stock.replenishment.option,stock.model_stock_replenishment_option,sf_warehouse.group_sf_stock_user,1,1,1,0
access_mrp_production,mrp.production,mrp.model_mrp_production,sf_warehouse.group_sf_stock_user,1,1,1,0
-access_sf_shelf_location,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,0,0,0
+access_sf_shelf_location_group_plan_dispatch,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,1,0,0
access_stock_move,stock.move,stock.model_stock_move,sf_base.group_plan_dispatch,1,1,1,0
access_stock_scrap_user,stock.scrap.user,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,0,0,0
access_stock_scrap_manager,stock.scrap.manager,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,0,0,0
access_stock_picking,stock.picking,stock.model_stock_picking,sf_base.group_plan_dispatch,1,0,0,0
-access_stock_lot,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,0,0,0
-access_stock_lot,stock.lot,stock.model_stock_lot,sf_base.group_plan_director,1,1,1,0
-access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,stock.model_stock_warehouse_orderpoint,sf_base.group_plan_dispatch,1,0,0,0
-access_stock_quant,stock.quant,stock.model_stock_quant,sf_base.group_plan_dispatch,1,0,0,0
+access_stock_lot_group_plan_dispatch,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,0,0,0
+access_stock_lot_group_plan_director,stock.lot,stock.model_stock_lot,sf_base.group_plan_director,1,1,1,0
+access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,stock.model_stock_warehouse_orderpoint,sf_base.group_plan_dispatch,1,1,0,0
+access_stock_quant,stock.quant,stock.model_stock_quant,sf_base.group_plan_dispatch,1,1,1,0
access_product_product,product.product,product.model_product_product,sf_base.group_plan_dispatch,1,0,0,0
access_product_template,product.template,product.model_product_template,sf_base.group_plan_dispatch,1,0,0,0
From 0c67b2b65990460738b473c1f4f3f6f0db20eeec Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Fri, 5 Jan 2024 10:22:48 +0800
Subject: [PATCH 15/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BE=E5=A4=87?=
=?UTF-8?q?=E6=B8=85=E5=8D=95=E6=97=A0=E6=B3=95=E8=A2=AB=E8=AE=A1=E5=88=92?=
=?UTF-8?q?=E4=BA=BA=E5=91=98=E7=9C=8B=E5=88=B0=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_maintenance/__manifest__.py | 1 +
sf_maintenance/security/ir_rule_data.xml | 15 +++++++++++++++
2 files changed, 16 insertions(+)
create mode 100644 sf_maintenance/security/ir_rule_data.xml
diff --git a/sf_maintenance/__manifest__.py b/sf_maintenance/__manifest__.py
index cec0b7e3..e5a4f03b 100644
--- a/sf_maintenance/__manifest__.py
+++ b/sf_maintenance/__manifest__.py
@@ -10,6 +10,7 @@
'data': [
'security/group_security.xml',
'security/ir.model.access.csv',
+ 'security/ir_rule_data.xml',
'views/maintenance_logs_views.xml',
'views/maintenance_views.xml',
'views/equipment_maintenance_standards_views.xml',
diff --git a/sf_maintenance/security/ir_rule_data.xml b/sf_maintenance/security/ir_rule_data.xml
new file mode 100644
index 00000000..3aa4366f
--- /dev/null
+++ b/sf_maintenance/security/ir_rule_data.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ Maintenance Equipment Plan Dispatch Rule
+
+
+
+ True
+ False
+ False
+ False
+
+
+
From c81dc99aef6857c9247d12edc563a6601977ba7a Mon Sep 17 00:00:00 2001
From: "qihao.gong@jikimo.com"
Date: Fri, 5 Jan 2024 11:23:27 +0800
Subject: [PATCH 16/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96CNC?=
=?UTF-8?q?=E7=A8=8B=E5=BA=8F=E4=BB=8E=E5=B7=A5=E5=8D=95=E5=88=B0=E5=88=B6?=
=?UTF-8?q?=E9=80=A0=E8=AE=A2=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_base/models/base.py | 2 +-
sf_maintenance/models/sf_maintenance.py | 3 ++-
sf_maintenance/models/sf_maintenance_logs.py | 1 +
.../views/maintenance_logs_views.xml | 20 ++++++++++++++++++-
sf_maintenance/views/maintenance_views.xml | 3 ++-
sf_manufacturing/models/mrp_production.py | 6 +++++-
sf_manufacturing/models/mrp_workcenter.py | 2 +-
sf_manufacturing/models/mrp_workorder.py | 6 +++---
sf_manufacturing/models/product_template.py | 4 ++--
.../views/mrp_production_addional_change.xml | 9 +++++----
sf_mrs_connect/controllers/controllers.py | 5 +++--
sf_sale/models/auto_quatotion_common.py | 2 +-
sf_sale/models/quick_easy_order.py | 4 ++--
13 files changed, 47 insertions(+), 20 deletions(-)
diff --git a/sf_base/models/base.py b/sf_base/models/base.py
index 36a39f49..a2565d6d 100644
--- a/sf_base/models/base.py
+++ b/sf_base/models/base.py
@@ -92,7 +92,7 @@ class MachineTool(models.Model):
type_id = fields.Many2one('sf.machine_tool.type', '型号')
brand_id = fields.Many2one('sf.machine.brand', string='品牌')
state = fields.Selection(
- [("正常", "正常"), ("故障", "故障"), ("不可用", "不可用")],
+ [("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"),("空闲", "空闲"),("封存(报废)", "封存(报废)")],
default='正常', string="机床状态")
# 0606新增字段
machine_tool_picture = fields.Binary('图片')
diff --git a/sf_maintenance/models/sf_maintenance.py b/sf_maintenance/models/sf_maintenance.py
index aa9a7dcb..97deb883 100644
--- a/sf_maintenance/models/sf_maintenance.py
+++ b/sf_maintenance/models/sf_maintenance.py
@@ -160,8 +160,9 @@ class SfMaintenanceEquipment(models.Model):
type_id = fields.Many2one('sf.machine_tool.type', '型号')
state = fields.Selection(
- [("正常", "正常"), ("故障", "故障"), ("不可用", "不可用")],
+ [("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"),("空闲", "空闲"),("封存(报废)", "封存(报废)")],
default='正常', string="机床状态")
+ run_time = fields.Char('总运行时长')
# 0606新增字段
machine_tool_picture = fields.Binary('图片')
heightened_way = fields.Selection([
diff --git a/sf_maintenance/models/sf_maintenance_logs.py b/sf_maintenance/models/sf_maintenance_logs.py
index 5c798754..791f66f8 100644
--- a/sf_maintenance/models/sf_maintenance_logs.py
+++ b/sf_maintenance/models/sf_maintenance_logs.py
@@ -26,3 +26,4 @@ class SfMaintenanceLogs(models.Model):
recovery_time = fields.Datetime(string='复原时间')
fault_duration = fields.Float(string='故障时长')
note = fields.Text(string='备注')
+ active = fields.Boolean('Active', default=True)
diff --git a/sf_maintenance/views/maintenance_logs_views.xml b/sf_maintenance/views/maintenance_logs_views.xml
index a4e8d605..b0d6af79 100644
--- a/sf_maintenance/views/maintenance_logs_views.xml
+++ b/sf_maintenance/views/maintenance_logs_views.xml
@@ -105,9 +105,10 @@
- 设备故障日志
+ 设备故障日志
ir.actions.act_window
sf.maintenance.logs
+
tree,form
@@ -117,6 +118,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sf_maintenance/views/maintenance_views.xml b/sf_maintenance/views/maintenance_views.xml
index 4735cb29..5266bced 100644
--- a/sf_maintenance/views/maintenance_views.xml
+++ b/sf_maintenance/views/maintenance_views.xml
@@ -27,7 +27,7 @@
@@ -56,6 +56,7 @@
domain="[('brand_id', '=', brand_id)]"/>
+
-->
-
-
-
+
+
+
+
+
diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py
index d728f569..bb6fd591 100644
--- a/sf_mrs_connect/controllers/controllers.py
+++ b/sf_mrs_connect/controllers/controllers.py
@@ -26,7 +26,8 @@ class Sf_Mrs_Connect(http.Controller):
cnc_production = request.env['mrp.production'].with_user(
request.env.ref("base.user_admin")).search([('name', '=', ret['production_order_no'])])
if cnc_production:
- cnc_production.glb_file = base64.b64encode(ret['glb_file'])
+ if ret['glb_file']:
+ cnc_production.glb_file = base64.b64encode(ret['glb_file'])
# 拉取所有加工面的程序文件
# i = 1
for r in ret['processing_panel']:
@@ -35,7 +36,7 @@ class Sf_Mrs_Connect(http.Controller):
ret['folder_name'], r)
if not download_state:
res['status'] = -2
- res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_production.production_id.name)
+ res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_production.name)
return json.JSONEncoder().encode(res)
request.env['sf.cnc.processing'].with_user(
request.env.ref("base.user_admin")).cnc_processing_create(cnc_production, ret)
diff --git a/sf_sale/models/auto_quatotion_common.py b/sf_sale/models/auto_quatotion_common.py
index 1b29c6d2..09ea3f0f 100644
--- a/sf_sale/models/auto_quatotion_common.py
+++ b/sf_sale/models/auto_quatotion_common.py
@@ -2,7 +2,7 @@
import logging
from odoo.modules import get_resource_path
from odoo import fields, models, api
-#from quatotion import readSql, feature_recognize, auto_quatotion
+from quatotion import readSql, feature_recognize, auto_quatotion
__author__ = 'jinling.yang'
_logger = logging.getLogger(__name__)
diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py
index 5ec1fd52..1e5f274c 100644
--- a/sf_sale/models/quick_easy_order.py
+++ b/sf_sale/models/quick_easy_order.py
@@ -5,8 +5,8 @@ import os
import json
from datetime import datetime
import requests
-#from OCC.Extend.DataExchange import read_step_file
-#from OCC.Extend.DataExchange import write_stl_file
+from OCC.Extend.DataExchange import read_step_file
+from OCC.Extend.DataExchange import write_stl_file
from odoo import models, fields, api
from odoo.modules import get_resource_path
from odoo.exceptions import ValidationError, UserError
From e29883d0de94b4129882d70a7ee50437a1855be3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E7=84=B1?=
Date: Fri, 5 Jan 2024 14:10:43 +0800
Subject: [PATCH 17/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A1=A8=E6=A0=BC?=
=?UTF-8?q?=EF=BC=8C=E7=AD=89=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../static/src/scss/custom_style.scss | 29 +++++++++++----
.../static/src/scss/rowno_in_tree.scss | 2 +-
sf_dlm_management/static/js/changeCss.js | 35 +++++++++++++++++++
.../product_template_management_view.xml | 4 ++-
sf_sale/__manifest__.py | 5 +++
sf_sale/static/js/setTableWidth.js | 28 +++++++++++++++
sf_tool_management/__manifest__.py | 2 ++
sf_tool_management/static/src/change.scss | 10 ++++++
8 files changed, 107 insertions(+), 8 deletions(-)
create mode 100644 sf_dlm_management/static/js/changeCss.js
create mode 100644 sf_sale/static/js/setTableWidth.js
diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss
index 5d660025..eddf019b 100644
--- a/jikimo_frontend/static/src/scss/custom_style.scss
+++ b/jikimo_frontend/static/src/scss/custom_style.scss
@@ -132,11 +132,11 @@ td.o_required_modifier {
//font-weight: bold;
}
-.text-truncate {
- overflow: unset !important;
- text-overflow: unset !important;
- white-space: nowrap!important;
-}
+//.text-truncate {
+// overflow: unset !important;
+// text-overflow: unset !important;
+// white-space: nowrap!important;
+//}
.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove) {
white-space: nowrap !important;
@@ -383,7 +383,9 @@ div:has(.o_required_modifier) > label::before {
}
}
}
-
+.oe_kanban_details li.o_text_overflow {
+ display: block;
+}
.o_stock_kanban .o_kanban_card_content {
.row {
align-items: center;
@@ -411,4 +413,19 @@ div:has(.o_required_modifier) > label::before {
.o_inner_group.processingMethod {
grid-template-columns: auto;
}
+}
+
+// 设置所有表格序号列padding为0
+.o_form_view .o_notebook > .tab-content > .tab-pane > :first-child:not(.o_group) .o_field_x2many.o_field_x2many_list tr > :first-child, .o_form_view .o_notebook > .tab-content > .tab-pane > :first-child.o_invisible_modifier + .o_field_widget .o_field_x2many.o_field_x2many_list tr > :first-child {
+ padding: 0;
+ text-align: center;
+}
+
+// 设置剩余number类型数据表格列 left
+.o_list_renderer .o_list_table thead .o_list_number_th {
+ text-align:left;
+}
+
+.o_list_renderer .flex-row-reverse {
+ flex-direction: unset!important;
}
\ No newline at end of file
diff --git a/jikimo_frontend/static/src/scss/rowno_in_tree.scss b/jikimo_frontend/static/src/scss/rowno_in_tree.scss
index c244ad7d..5f8a2648 100644
--- a/jikimo_frontend/static/src/scss/rowno_in_tree.scss
+++ b/jikimo_frontend/static/src/scss/rowno_in_tree.scss
@@ -1,4 +1,4 @@
.row_no {
- width: 3.2% !important;
+ width: 35px !important;
vertical-align: middle;
}
diff --git a/sf_dlm_management/static/js/changeCss.js b/sf_dlm_management/static/js/changeCss.js
new file mode 100644
index 00000000..9510a207
--- /dev/null
+++ b/sf_dlm_management/static/js/changeCss.js
@@ -0,0 +1,35 @@
+// 因为表格可以拖动设置宽度,所以需要用js设置初始宽度
+function setBasicParamTableWidth() {
+
+
+ const basicParamDom = $('.fixTableCss')
+ let dom = []
+ try {
+ dom = basicParamDom.find('table').find('thead').children().children()
+
+ } catch {
+ dom = []
+ }
+ if (!dom) return
+ dom.each(function () {
+ if ($(this).hasClass('row_no') >= 0) { // 序号列
+ // 不设置 通过css设置
+ }
+ const text = $(this).text()
+ $(this).find('span').removeClass('text-truncate')
+ if (text.length > 5) {
+ $(this).width('150px')
+ } else if (text.length == 5) {
+ $(this).width('100px')
+ } else if (text.length == 4) {
+ $(this).width('80px')
+ } else if (text.length == 3) {
+ $(this).width('65px')
+ } else if (text.length == 2) {
+ $(this).width('50px')
+ }
+
+ })
+}
+
+setTimeout(setBasicParamTableWidth, 500)
diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml
index 737d56db..b1bd8751 100644
--- a/sf_dlm_management/views/product_template_management_view.xml
+++ b/sf_dlm_management/views/product_template_management_view.xml
@@ -444,7 +444,7 @@
+ attrs="{'readonly': [('categ_type', '=', '刀具')]}" class="fixTableCss">
@@ -463,6 +463,8 @@
+
+
diff --git a/sf_sale/__manifest__.py b/sf_sale/__manifest__.py
index ba6a99db..6d340058 100644
--- a/sf_sale/__manifest__.py
+++ b/sf_sale/__manifest__.py
@@ -22,6 +22,11 @@
'views/purchase_order_view.xml',
'views/quick_easy_order_view.xml'
],
+ 'assets': {
+ 'web.assets_backend': [
+ 'sf_sale/static/js/setTableWidth.js',
+ ]
+ },
'demo': [
],
'qweb': [
diff --git a/sf_sale/static/js/setTableWidth.js b/sf_sale/static/js/setTableWidth.js
new file mode 100644
index 00000000..7cae3950
--- /dev/null
+++ b/sf_sale/static/js/setTableWidth.js
@@ -0,0 +1,28 @@
+function setTableWidth() {
+ let timer = null
+ const dom = $('.o_list_renderer ')
+ if(!dom.length) {
+ timer = setTimeout(setTableWidth, 500)
+ return
+ }
+ const widthTest = ''
+ $('body').append(widthTest)
+ clearTimeout(timer)
+ const tbody_tr = dom.find('tbody').children('tr')
+ dom.find('thead').children('tr').children().each(function () {
+ $('#widthTest').text($(this).text())
+ const width = $('#widthTest').width()
+ const i = $(this).index()
+ console.log(111)
+ tbody_tr.each(function () {
+ if($(this).children().length > 2) {
+ $(this).children().eq(i).css('min-width', width + 'px')
+ }
+ })
+ })
+}
+
+$(function () {
+ setTableWidth()
+})
+
diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py
index e334c32a..c56f9463 100644
--- a/sf_tool_management/__manifest__.py
+++ b/sf_tool_management/__manifest__.py
@@ -27,6 +27,8 @@
'web.assets_qweb': [
],
'web.assets_backend': [
+ 'sf_tool_management/static/src/change.scss'
+
]
},
diff --git a/sf_tool_management/static/src/change.scss b/sf_tool_management/static/src/change.scss
index 40fdcc8e..a4e64f97 100644
--- a/sf_tool_management/static/src/change.scss
+++ b/sf_tool_management/static/src/change.scss
@@ -8,4 +8,14 @@
.modal-content .o_list_button {
+}
+
+.o_form_view .o_field_widget .o_list_renderer {
+ width: calc(100% - 64px) !important;
+ margin:0 auto;
+ overflow: auto;
+}
+
+.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector).o_list_number {
+ text-align: left;
}
\ No newline at end of file
From 831a91c9258227bc7ec75d00f749c0b68cf9c3b8 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Fri, 5 Jan 2024 14:42:38 +0800
Subject: [PATCH 18/18] =?UTF-8?q?1=E3=80=81=E4=BA=A7=E5=93=81=E6=96=B0?=
=?UTF-8?q?=E6=B7=BB=E4=B8=83=E7=A7=8D=E5=A4=B9=E5=85=B7=E7=89=A9=E6=96=99?=
=?UTF-8?q?=E5=89=8D=E7=AB=AF=E5=AD=97=E6=AE=B5=E5=AE=8C=E6=88=90=E5=B8=83?=
=?UTF-8?q?=E5=B1=80=E5=B1=95=E7=A4=BA=EF=BC=9B2=E3=80=81=E4=BA=A7?=
=?UTF-8?q?=E5=93=81=E9=80=89=E5=8F=96=E5=A4=B9=E5=85=B7=E5=9E=8B=E5=8F=B7?=
=?UTF-8?q?=E8=A7=84=E6=A0=BC=E5=90=8E=E8=87=AA=E5=8A=A8=E5=B8=A6=E5=85=A5?=
=?UTF-8?q?=E8=A7=84=E6=A0=BC=E6=95=B0=E6=8D=AE=E5=88=B0=E4=BA=A7=E5=93=81?=
=?UTF-8?q?=E5=A4=B9=E5=85=B7=E7=89=A9=E6=96=99=E5=8F=82=E6=95=B0=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../product_template_management_view.xml | 99 +++++++++++++++----
sf_manufacturing/models/product_template.py | 44 +++++++++
2 files changed, 126 insertions(+), 17 deletions(-)
diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml
index a072fc28..cb26cfc8 100644
--- a/sf_dlm_management/views/product_template_management_view.xml
+++ b/sf_dlm_management/views/product_template_management_view.xml
@@ -498,37 +498,102 @@
-
-
-
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
-
-
-
-
-
-
-
+
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index d5d5a9ed..333da9aa 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -877,6 +877,50 @@ class ResProductFixture(models.Model):
mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2))
centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2))
+ @api.onchange('specification_fixture_id')
+ def _onchange_specification_fixture_id(self):
+ if self.specification_fixture_id:
+ self.length = self.specification_fixture_id.length
+ self.width = self.specification_fixture_id.width
+ self.height = self.specification_fixture_id.height
+ self.weight = self.specification_fixture_id.weight
+ self.diameter = self.specification_fixture_id.diameter
+ self.orientation_dish_diameter = self.specification_fixture_id.orientation_dish_diameter
+ self.clamping_diameter = self.specification_fixture_id.clamping_diameter
+ self.clamping_num = self.specification_fixture_id.clamping_num
+ self.chucking_power_max = self.specification_fixture_id.chucking_power_max
+ self.repeated_positioning_accuracy = self.specification_fixture_id.repeated_positioning_accuracy
+ self.boolean_transposing_hole = self.specification_fixture_id.boolean_transposing_hole
+ self.unlocking_method = self.specification_fixture_id.unlocking_method
+ self.boolean_chip_blowing_function = self.specification_fixture_id.boolean_chip_blowing_function
+ self.carrying_capacity_max = self.specification_fixture_id.carrying_capacity_max
+ self.rigidity = self.specification_fixture_id.rigidity
+ self.materials_model_id = self.specification_fixture_id.materials_model_id
+ self.machine_tool_type_id = self.specification_fixture_id.machine_tool_type_id
+ self.connector_diameter = self.specification_fixture_id.connector_diameter
+ self.way_to_install = self.specification_fixture_id.way_to_install
+ self.type_of_drive = self.specification_fixture_id.type_of_drive
+ self.gripper_length_min = self.specification_fixture_id.gripper_length_min
+ self.gripper_width_min = self.specification_fixture_id.gripper_width_min
+ self.gripper_height_min = self.specification_fixture_id.gripper_height_min
+ self.gripper_diameter_min = self.specification_fixture_id.gripper_diameter_min
+ self.gripper_length_max = self.specification_fixture_id.gripper_length_max
+ self.gripper_width_max = self.specification_fixture_id.gripper_width_max
+ self.gripper_height_max = self.specification_fixture_id.gripper_height_max
+ self.gripper_diameter_max = self.specification_fixture_id.gripper_diameter_max
+ self.rated_air_pressure = self.specification_fixture_id.rated_air_pressure
+ self.interface_materials_model_id = self.specification_fixture_id.interface_materials_model_id
+ self.transverse_groove = self.specification_fixture_id.transverse_groove
+ self.longitudinal_fitting_groove = self.specification_fixture_id.longitudinal_fitting_groove
+ self.height_tolerance_value = self.specification_fixture_id.height_tolerance_value
+ self.rated_adsorption_force = self.specification_fixture_id.rated_adsorption_force
+ self.magnetic_field_height = self.specification_fixture_id.magnetic_field_height
+ self.magnetic_pole_plate_grinding_allowance = self.specification_fixture_id.magnetic_pole_plate_grinding_allowance
+ self.screw_size = self.specification_fixture_id.screw_size
+ self.via_hole_diameter = self.specification_fixture_id.via_hole_diameter
+ self.mounting_hole_depth = self.specification_fixture_id.mounting_hole_depth
+ self.centering_diameter = self.specification_fixture_id.centering_diameter
+
class SfMaintenanceEquipmentAndProductTemplate(models.Model):
_inherit = 'maintenance.equipment'