diff --git a/jikimo_frontend/__manifest__.py b/jikimo_frontend/__manifest__.py
index 7c17b18a..fc3c7549 100644
--- a/jikimo_frontend/__manifest__.py
+++ b/jikimo_frontend/__manifest__.py
@@ -10,7 +10,7 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['account', 'base', 'mrp_workorder', 'sale'],
+ 'depends': [],
'data': [
],
@@ -21,6 +21,7 @@
'web.assets_qweb': [
],
'web.assets_backend': [
+ 'jikimo_frontend/static/src/fields/custom_many2many_checkboxes/*',
'jikimo_frontend/static/src/scss/test.scss',
],
diff --git a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.css b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.css
new file mode 100644
index 00000000..de17fabb
--- /dev/null
+++ b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.css
@@ -0,0 +1,6 @@
+.zoomed {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%) scale(20);
+}
diff --git a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.js b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.js
new file mode 100644
index 00000000..f3cadea1
--- /dev/null
+++ b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.js
@@ -0,0 +1,26 @@
+/** @odoo-module **/
+
+import { Many2ManyCheckboxesField } from "@web/views/fields/many2many_checkboxes/many2many_checkboxes_field";
+import { registry } from "@web/core/registry";
+
+export class MyCustomWidget extends Many2ManyCheckboxesField {
+ // 你可以重写或者添加一些方法和属性
+ // 例如,你可以重写setup方法来添加一些事件监听器或者初始化一些变量
+ setup() {
+ super.setup(); // 调用父类的setup方法
+ // 你自己的代码
+ }
+ onImageClick(event) {
+ // 放大图片逻辑
+ // 获取图片元素
+ const img = event.target;
+
+ // 实现放大图片逻辑
+ // 比如使用 CSS 放大
+ img.classList.add('zoomed');
+ }
+}
+MyCustomWidget.template = "sf_plan.MyCustomWidget"
+// MyCustomWidget.supportedTypes = ['many2many'];
+
+registry.category("fields").add("custom_many2many_checkboxes", MyCustomWidget);
diff --git a/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.xml b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.xml
new file mode 100644
index 00000000..91eaff59
--- /dev/null
+++ b/jikimo_frontend/static/src/fields/custom_many2many_checkboxes/custom_many2many_checkboxes.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sf_base/models/tool_other_features.py b/sf_base/models/tool_other_features.py
index 52acf25c..129b0199 100644
--- a/sf_base/models/tool_other_features.py
+++ b/sf_base/models/tool_other_features.py
@@ -38,4 +38,36 @@ class SuitableCoolant(models.Model):
_description = '适合冷却液'
name = fields.Char('名称')
- image = fields.Image('图片')
\ No newline at end of file
+ image = fields.Image('图片')
+
+
+class CuttingSpeed(models.Model):
+ _name = 'sf.cutting.speed'
+ _description = '切削速度Vc'
+
+ # def _get_order(self):
+ # last_tool = self.search([], order='id desc', limit=1)
+ # if last_tool:
+ # last_order = int(last_tool.order)
+ # new_order = last_order + 1
+ # else:
+ # new_order = '1'
+ # return new_order
+ #
+ # order = fields.Char('序', default=_get_order, readonly=True)
+
+ execution_standard_id = fields.Char('执行标准')
+ material_code = fields.Char('材料代号')
+ material_name = fields.Char('材料名称')
+ material_grade = fields.Char('材料牌号')
+ tensile_strength = fields.Char('拉伸强度 (N/mm²)')
+ hardness = fields.Char('硬度(HRC)')
+
+ cutting_speed_n1 = fields.Char('径向切宽 ae=100%D1 ap=1*D1 切削速度Vc')
+ cutting_speed_n2 = fields.Char('径向切宽 ae=50%D1 ap=1.5*D1 切削速度Vc')
+ cutting_speed_n3 = fields.Char('径向切宽 ae=25%D1 ap=L1max 切削速度Vc')
+ cutting_speed_n4 = fields.Char('径向切宽 ae=15%D1 ap=L1max 切削速度Vc')
+ cutting_speed_n5 = fields.Char('径向切宽 ae=5%D1 ap=L1max 切削速度Vc')
+ rough_machining = fields.Char('粗加工 Vc(m/min)')
+ precision_machining = fields.Char('精加工 Vc(m/min)')
+ application = fields.Selection([('主应用', '主应用'), ('次应用', '次应用')], '主/次应用')
\ No newline at end of file
diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv
index ba3fb3d0..73661ae8 100644
--- a/sf_base/security/ir.model.access.csv
+++ b/sf_base/security/ir.model.access.csv
@@ -29,6 +29,7 @@ access_sf_blade_tip_characteristics,sf_blade_tip_characteristics,model_sf_blade_
access_sf_handle_type,sf_handle_type,model_sf_handle_type,base.group_user,1,1,1,1
access_sf_cutting_direction,sf_cutting_direction,model_sf_cutting_direction,base.group_user,1,1,1,1
access_sf_suitable_coolant,sf_suitable_coolant,model_sf_suitable_coolant,base.group_user,1,1,1,1
+access_sf_cutting_speed,sf_cutting_speed,model_sf_cutting_speed,base.group_user,1,1,1,1
diff --git a/sf_base/views/tool_other_features_view.xml b/sf_base/views/tool_other_features_view.xml
index e094a376..df614171 100644
--- a/sf_base/views/tool_other_features_view.xml
+++ b/sf_base/views/tool_other_features_view.xml
@@ -98,4 +98,37 @@
sf.suitable.coolant
tree
+
+
+
+
+ 切削速度Vc
+ sf.cutting.speed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 切削速度Vc
+ ir.actions.act_window
+ sf.cutting.speed
+ tree
+
\ No newline at end of file
diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml
index 5c858f9a..de7c9ee0 100644
--- a/sf_dlm/views/product_template_view.xml
+++ b/sf_dlm/views/product_template_view.xml
@@ -359,6 +359,9 @@
+
+
+
diff --git a/sf_machine_connect/views/compensation.xml b/sf_machine_connect/views/compensation.xml
index 5ec6f382..f79c539e 100644
--- a/sf_machine_connect/views/compensation.xml
+++ b/sf_machine_connect/views/compensation.xml
@@ -6,7 +6,8 @@
-
+
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index e6b7c1a9..9729d1c9 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -1,8 +1,8 @@
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
import logging
import base64
import hashlib
@@ -66,9 +66,9 @@ class ResProductMo(models.Model):
domain="[('cutting_tool_material_id.name', '=', cutting_tool_type)]")
brand_id = fields.Many2one('sf.machine.brand', '品牌')
- tool_length = fields.Integer('长度(mm)')
- tool_width = fields.Integer('宽度(mm)')
- tool_height = fields.Integer('高度(mm)')
+ tool_length = fields.Float('长度(mm)')
+ tool_width = fields.Float('宽度(mm)')
+ tool_height = fields.Float('高度(mm)')
tool_thickness = fields.Integer('厚度(mm)')
tool_weight = fields.Float('重量(kg)')
tool_hardness = fields.Integer('硬度(hrc)')
@@ -86,7 +86,7 @@ class ResProductMo(models.Model):
cutting_tool_shank_diameter = fields.Float('柄部直径(mm)', digits=(6, 1))
cutting_tool_blade_tip_diameter = fields.Float('刀尖直径(mm)', digits=(6, 1))
cutting_tool_blade_tip_taper = fields.Float('刀尖锥度(°)', digits=(6, 1))
- cutting_tool_blade_helix_angle = fields.Char('刃部螺旋角(°)')
+ cutting_tool_blade_helix_angle = fields.Integer('刃部螺旋角(°)')
cutting_tool_blade_type = fields.Char('刃部类型')
cutting_tool_coarse_medium_fine = fields.Selection([('粗', '粗'), ('中', '中'), ('精', '精')], '粗/中/精')
cutting_tool_run_out_accuracy_max = fields.Float('端跳精度max', digits=(6, 1))
@@ -170,15 +170,23 @@ class ResProductMo(models.Model):
# if self.integral_run_out_accuracy_min <= 0 and self.cutting_tool_type == '整体式刀具':
# raise ValidationError("端跳精度最小(min)不能为0")
+ cutting_speed_ids = fields.Many2many('sf.cutting.speed', 'rel_sf_cutting_speed', '切削速度Vc')
+
+ # @api.constrains('suitable_machining_method_ids')
+ # def _check_suitable_machining_method_ids(self):
+ # for record in self:
+ # if len(record.suitable_machining_method_ids) == 0 and self.cutting_tool_type == '整体式刀具':
+ # raise ValidationError("适合加工方式不能为空!")
+
# @api.constrains('integral_run_out_accuracy_max')
# def _check_integral_run_out_accuracy_max(self):
# if self.integral_run_out_accuracy_max <= 0 and self.cutting_tool_type == '整体式刀具':
# raise ValidationError("端跳精度最大(max)不能为0")
cutting_tool_diameter = fields.Float('直径(mm)')
- cutting_tool_front_angle = fields.Float('前角(°)')
- cutting_tool_rear_angle = fields.Float('后角(°)')
- cutting_tool_main_included_angle = fields.Float('主偏角(°)')
+ cutting_tool_front_angle = fields.Integer('前角(°)')
+ cutting_tool_rear_angle = fields.Integer('后角(°)')
+ cutting_tool_main_included_angle = fields.Integer('主偏角(°)')
# cutting_tool_material_model_id = fields.Many2one('sf.materials.model', '材料型号')
cutting_tool_nut = fields.Float('配对螺母(mm)')
# 适用夹头型号可以多选
@@ -190,7 +198,7 @@ class ResProductMo(models.Model):
domain="[('cutting_tool_type', '=', '夹头')]",
string='适用夹头型号')
# 刀片参数
- cutting_tool_top_angle = fields.Float('顶角(°)')
+ cutting_tool_top_angle = fields.Integer('顶角(°)')
cutting_tool_jump_accuracy = fields.Float('径跳精度(mm)')
cutting_tool_working_hardness = fields.Char('加工硬度(hrc)')
cutting_tool_cutter_bar_ids = fields.Many2many(
@@ -246,8 +254,8 @@ class ResProductMo(models.Model):
cutting_tool_body_accuracy = fields.Float('本体精度(mm)')
apply_lock_nut_model = fields.Char('适用锁紧螺母型号')
apply_lock_wrench_model = fields.Char('适用锁紧扳手型号')
- cutting_tool_detection_accuracy_max = fields.Char('最大检测精度(mm)')
- cutting_tool_detection_accuracy_min = fields.Char('最小检测精度(mm)')
+ cutting_tool_detection_accuracy_max = fields.Float('最大检测精度(mm)')
+ cutting_tool_detection_accuracy_min = fields.Float('最小检测精度(mm)')
# 夹头参数
cutting_tool_taper = fields.Integer('锥度(°)')
cutting_tool_outer_diameter = fields.Float('外径(mm)')
@@ -776,11 +784,14 @@ class ResMrpBomMo(models.Model):
# 选取当前坯料原材料
raw_bom_line = self.get_raw_bom(embryo)
if raw_bom_line:
+ qty = 1
+ if round(embryo.volume * raw_bom_line.materials_type_id.density / 1000000) > 1:
+ qty = round(embryo.volume * raw_bom_line.materials_type_id.density / 1000000)
bom_line = self.env['mrp.bom.line'].create({
'bom_id': self.id,
'product_id': raw_bom_line.id,
'product_tmpl_id': raw_bom_line.product_tmpl_id.id,
- 'product_qty': round(embryo.volume * raw_bom_line.materials_type_id.density / 1000000),
+ 'product_qty': qty,
'product_uom_id': raw_bom_line.uom_id.id,
})
return bom_line
diff --git a/sf_sale/models/auto_quatotion_common.py b/sf_sale/models/auto_quatotion_common.py
index 09ea3f0f..d1bdb65a 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__)
@@ -24,14 +24,14 @@ class AutoQuatotion(models.Model):
def get_process_time_db_path(self):
return get_resource_path('sf_sale', 'models', 'process_time.db')
- def get_auto_quatotion(self, stp_url, feature_full_path, process_time_db_path, model_code):
- '''
- 通过打包好的.so库,
- 以调用autoQuatotion库中Quatotion类,
- 初始化后调用类的analyseShape方法对模型文件进行价格预测
- '''
- # 初始化自动报价类(输入特征数据库和加工时间数据库)
- reader = auto_quatotion.Quatotion(feature_full_path, process_time_db_path)
- # 获取价格、加工时间、尺寸、XYZ、翻面次数
- feature_info = reader.analyseShape(stp_url, InfoJson={})
- return feature_info
+ # def get_auto_quatotion(self, stp_url, feature_full_path, process_time_db_path, model_code):
+ # '''
+ # 通过打包好的.so库,
+ # 以调用autoQuatotion库中Quatotion类,
+ # 初始化后调用类的analyseShape方法对模型文件进行价格预测
+ # '''
+ # # 初始化自动报价类(输入特征数据库和加工时间数据库)
+ # reader = auto_quatotion.Quatotion(feature_full_path, process_time_db_path)
+ # # 获取价格、加工时间、尺寸、XYZ、翻面次数
+ # feature_info = reader.analyseShape(stp_url, InfoJson={})
+ # return feature_info
diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py
index eed2be57..08d5ae30 100644
--- a/sf_sale/models/quick_easy_order.py
+++ b/sf_sale/models/quick_easy_order.py
@@ -1,7 +1,7 @@
from odoo import models, fields, api
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
from odoo.exceptions import ValidationError, UserError
from odoo.addons.sf_base.commons.common import Common
from datetime import datetime
@@ -87,10 +87,10 @@ class QuickEasyOrder(models.Model):
# 将attach的datas内容转为glb文件
def transition_glb_file(self, report_path, model_code):
- shapes = read_step_file(report_path)
+ # shapes = read_step_file(report_path)
# output_file = os.path.join('C:/Users/43484/Desktop/机企猫工作文档', str(model_code) + '.stl')
output_file = os.path.join('/tmp', str(model_code) + '.stl')
- write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
+ # write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
# 转化为glb
# output_glb_file = os.path.join('C:/Users/43484/Desktop/机企猫工作文档', str(model_code) + '.glb')
output_glb_file = os.path.join('/tmp', str(model_code) + '.glb')