diff --git a/jikimo_sale_multiple_supply_methods/models/mrp_bom.py b/jikimo_sale_multiple_supply_methods/models/mrp_bom.py
index 2528d0a4..aa9d6c60 100644
--- a/jikimo_sale_multiple_supply_methods/models/mrp_bom.py
+++ b/jikimo_sale_multiple_supply_methods/models/mrp_bom.py
@@ -9,5 +9,6 @@ class MrpBom(models.Model):
# 成品的供应商从模板中获取
if product_type == 'product':
- bom_id.subcontractor_id = product.product_tmpl_id.seller_ids.partner_id.id
+ if product.product_tmpl_id.seller_ids:
+ bom_id.subcontractor_id = product.product_tmpl_id.seller_ids[-1].partner_id.id
return bom_id
diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py
index f64fe473..264878e9 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="联装类型")
brand_id = fields.Many2one('sf.machine.brand', string="品牌")
model_file = fields.Binary(string="图片")
+ glb_url = fields.Char(string="图片")
status = fields.Boolean('状态')
active = fields.Boolean('有效', default=False)
diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml
index 07dadd33..1149875d 100644
--- a/sf_base/views/fixture_view.xml
+++ b/sf_base/views/fixture_view.xml
@@ -158,6 +158,8 @@
+
diff --git a/sf_bf_connect/controllers/controllers.py b/sf_bf_connect/controllers/controllers.py
index d79e7137..7f46765d 100644
--- a/sf_bf_connect/controllers/controllers.py
+++ b/sf_bf_connect/controllers/controllers.py
@@ -29,7 +29,7 @@ class Sf_Bf_Connect(http.Controller):
bfm_process_order_list = json.loads(kw['bfm_process_order_list'])
order_id = request.env['sale.order'].with_user(request.env.ref("base.user_admin")).sale_order_create(
company_id, kw['delivery_name'], kw['delivery_telephone'], kw['delivery_address'],
- kw['delivery_end_date'], kw['payments_way'], kw['pay_way'])
+ kw['delivery_end_date'], kw['payments_way'], kw['pay_way'], model_display_version=kw.get('model_display_version'))
i = 1
# 给sale_order的default_code字段赋值
aa = request.env['sale.order'].sudo().search([('name', '=', order_id.name)])
diff --git a/sf_dlm/models/product_template.py b/sf_dlm/models/product_template.py
index 1e37be2b..f9825c88 100644
--- a/sf_dlm/models/product_template.py
+++ b/sf_dlm/models/product_template.py
@@ -44,7 +44,7 @@ class ResProductTemplate(models.Model):
else:
return self.env.ref('sf_dlm.product_uom_cubic_millimeter')
- # model_file = fields.Binary('模型文件')
+ model_file = fields.Binary('模型文件')
# 胚料的库存路线设置
# def _get_routes(self, route_type):
diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml
index 1f3dc50b..01c2f51b 100644
--- a/sf_dlm_management/views/product_template_management_view.xml
+++ b/sf_dlm_management/views/product_template_management_view.xml
@@ -16,15 +16,21 @@
+
-
+
-
+
+
+
+
+
diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index 64c1c7a8..c1f165fd 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -251,7 +251,8 @@
-
+
+
-
+
-
+
+
+
+
+
diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py
index b3932481..9d762e4e 100644
--- a/sf_quality/models/quality.py
+++ b/sf_quality/models/quality.py
@@ -26,6 +26,7 @@ class QualityCheck(models.Model):
string='生产线')
equipment_id = fields.Many2one(related='workorder_id.equipment_id', string='加工设备')
model_file = fields.Binary(related='workorder_id.glb_file', string='加工模型')
+ glb_url = fields.Char(related='workorder_id.glb_url', string='加工模型')
detection_report = fields.Binary(related='workorder_id.detection_report', readonly=True, string='检测报告')
test_results = fields.Selection([("合格", "合格"), ("返工", "返工")], string="检测结果",
diff --git a/sf_quality/models/quality_cnc_test.py b/sf_quality/models/quality_cnc_test.py
index 9810b0e0..1e89ef92 100644
--- a/sf_quality/models/quality_cnc_test.py
+++ b/sf_quality/models/quality_cnc_test.py
@@ -12,6 +12,7 @@ class SfQualityCncTest(models.Model):
production_id = fields.Many2one(related='workorder_id.production_id', string='制造订单')
product_id = fields.Many2one(related='workorder_id.product_id', string='产品')
model_file = fields.Binary(related='workorder_id.glb_file', string='加工模型')
+ glb_url = fields.Char(related='workorder_id.glb_url', string='加工模型')
processing_panel = fields.Char(related='workorder_id.processing_panel', string='加工面')
equipment_id = fields.Many2one(related='workorder_id.equipment_id', string='加工设备')
production_line_id = fields.Many2one(related='workorder_id.production_line_id',
diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml
index c584eb8d..cadedc8e 100644
--- a/sf_quality/views/quality_check_view.xml
+++ b/sf_quality/views/quality_check_view.xml
@@ -13,6 +13,8 @@
+
diff --git a/sf_quality/views/quality_cnc_test_view.xml b/sf_quality/views/quality_cnc_test_view.xml
index d2d37686..188ff7be 100644
--- a/sf_quality/views/quality_cnc_test_view.xml
+++ b/sf_quality/views/quality_cnc_test_view.xml
@@ -87,7 +87,8 @@
-
+
+
diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py
index 081807a4..d164d8cc 100644
--- a/sf_sale/models/quick_easy_order.py
+++ b/sf_sale/models/quick_easy_order.py
@@ -314,7 +314,7 @@ class QuickEasyOrder(models.Model):
company_id = self.env.ref('base.main_company').sudo()
# user_id = request.env.ref('base.user_admin').sudo()
order_id = self.env['sale.order'].sale_order_create(company_id, 'XXXXX', 'XXXXX', 'XXXXX',
- str(datetime.now()), '现结', '支付宝')
+ str(datetime.now()), '现结', '支付宝', 'v2')
i = 1
# 给sale_order的default_code字段赋值
aa = self.env['sale.order'].sudo().search([('name', '=', order_id.name)])
diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py
index 87848e3a..cbf0f8f1 100644
--- a/sf_sale/models/quick_easy_order_old.py
+++ b/sf_sale/models/quick_easy_order_old.py
@@ -237,7 +237,7 @@ class QuickEasyOrder(models.Model):
company_id = self.env.ref('base.main_company').sudo()
# user_id = request.env.ref('base.user_admin').sudo()
order_id = self.env['sale.order'].sale_order_create(company_id, 'XXXXX', 'XXXXX', 'XXXXX',
- str(datetime.now()), '现结', '支付宝')
+ str(datetime.now()), '现结', '支付宝', 'v2')
i = 1
# 给sale_order的default_code字段赋值
aa = self.env['sale.order'].sudo().search([('name', '=', order_id.name)])
diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py
index 51e7ca3c..09dc24dd 100644
--- a/sf_sale/models/sale_order.py
+++ b/sf_sale/models/sale_order.py
@@ -61,9 +61,12 @@ class ReSaleOrder(models.Model):
order_code = fields.Char('平台订单号', readonly=True)
+ model_display_version = fields.Char('模型展示版本', default="v1")
+
# 业务平台分配工厂后在智能工厂先创建销售订单
def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address,
- deadline_of_delivery, payments_way, pay_way, order_number, state='sale'):
+ deadline_of_delivery, payments_way, pay_way, order_number, state='sale',
+ model_display_version='v1'):
now_time = datetime.datetime.now()
partner = self.get_customer()
data = {
@@ -80,6 +83,7 @@ class ReSaleOrder(models.Model):
'payments_way': payments_way,
'pay_way': pay_way,
'order_code': order_number,
+ 'model_display_version': model_display_version,
}
if deadline_of_delivery:
# deadline_of_delivery字段存在为false字符串情况
@@ -138,11 +142,14 @@ class ReSaleOrder(models.Model):
product.materials_id.name),
'price_unit': product.list_price,
'product_uom_qty': item['number'],
- 'model_glb_file': base64.b64decode(item['model_file']) if item['model_file'] else None,
+ # 'model_glb_file': base64.b64decode(item['model_file']) if item['model_file'] else None,
+ 'model_url': item['model_url'],
+ 'glb_url': item['glb_url'],
'remark': item.get('remark'),
'embryo_redundancy_id': item.get('embryo_redundancy_id'),
'is_incoming_material': True if item.get('embryo_redundancy_id') else False,
- 'manual_quotation': item.get('manual_quotation')
+ 'manual_quotation': item.get('manual_quotation'),
+ 'model_id': item['model_id'],
}
return self.env['sale.order.line'].with_context(skip_procurement=True).create(vals)
@@ -245,6 +252,7 @@ class ResaleOrderLine(models.Model):
# part_number = fields.Char('零件图号', related='product_id.part_number', readonly=True)
part_name = fields.Char('零件名称', related='product_id.part_name', readonly=True)
model_glb_file = fields.Binary('模型的glb文件', compute='_compute_model_glb_file', store=True)
+ glb_url = fields.Char('glb文件地址', compute='_compute_model_glb_file', store=True)
# product_template_id = fields.Many2one(
# string="产品",
# comodel_name='product.template',
@@ -261,6 +269,8 @@ class ResaleOrderLine(models.Model):
is_incoming_material = fields.Boolean('客供料', compute='_compute_is_incoming_material', store=True)
embryo_redundancy_id = fields.Many2one('sf.embryo.redundancy', '坯料冗余')
manual_quotation = fields.Boolean('人工编程', default=False)
+ model_url = fields.Char('模型文件地址')
+ model_id = fields.Char('模型id')
@api.depends('embryo_redundancy_id')
def _compute_is_incoming_material(self):
@@ -273,6 +283,8 @@ class ResaleOrderLine(models.Model):
if line.product_template_id:
if not line.model_glb_file:
line.model_glb_file = line.product_id.product_tmpl_id.model_file
+ if not line.glb_url:
+ line.glb_url = line.product_id.product_tmpl_id.glb_url
if not line.price_unit:
line.price_unit = line.product_id.product_tmpl_id.list_price
diff --git a/sf_sale/views/quick_easy_order_view.xml b/sf_sale/views/quick_easy_order_view.xml
index 89792a49..d8af409a 100644
--- a/sf_sale/views/quick_easy_order_view.xml
+++ b/sf_sale/views/quick_easy_order_view.xml
@@ -50,9 +50,13 @@
-
+
+
+
+
-
+ string="模型文件" readonly="1" attrs="{'column_invisible': [('parent.model_display_version', '!=', 'v1')]}"/>
+
+
diff --git a/sf_stock/models/stock_picking.py b/sf_stock/models/stock_picking.py
index 7b73485b..4623c4ed 100644
--- a/sf_stock/models/stock_picking.py
+++ b/sf_stock/models/stock_picking.py
@@ -94,7 +94,7 @@ class StockPicking(models.Model):
if send_move_ids:
for item in send_move_ids:
val = {
- 'name': item.product_id.upload_model_file.display_name,
+ 'name': item.product_id.upload_model_file.display_name if item.product_id.upload_model_file else item.product_id.model_name,
'quantity_done': item.quantity_done,
'date': date_utils.json_default(item.date) if item.date else None,
'description_picking': item.description_picking,
diff --git a/web_widget_model_viewer/static/src/js/3d_viewer.js b/web_widget_model_viewer/static/src/js/3d_viewer.js
index 6e4b969c..de3d581b 100644
--- a/web_widget_model_viewer/static/src/js/3d_viewer.js
+++ b/web_widget_model_viewer/static/src/js/3d_viewer.js
@@ -27,7 +27,10 @@ export class StepViewer extends Component {
formatUrl() {
var url = '';
if (this.props.value) {
- if (this.props.value.slice(-1) == 'b' && !isNaN(this.props.value.split(' ')[0])) {
+ if (this.props.value.startsWith('http')) {
+ // 从url读取文件内容
+ url = this.props.value;
+ } else if (this.props.value.slice(-1) == 'b' && !isNaN(this.props.value.split(' ')[0])) {
var url_props = {
base_url: session['web.base.url'],
model: this.props.record.resModel,
@@ -37,21 +40,19 @@ export class StepViewer extends Component {
url = url_props['base_url'].replace('http://', 'https://') + '/web/content/' + url_props['model'] + '/' + url_props['id'] + '/' + url_props['field'] + '?download=true';
// url = 'http://localhost:8069'+'/web/content/'+url_props['model']+'/'+url_props['id']+'/'+url_props['field']+'?download=true'
// console.log('url111111', url)
- return url;
+
} else {
url = "data:model/gltf-binary;base64," + this.props.value;
// console.log('url2', url)
- return url;
+
// localStorage.setItem('url',url)
// let new_url = localStorage.getItem(('url'))
// var oViewer = document.getElementsByTagName('model-viewer')[0];
// return new_url
// url = "web_widget_model_viewer/static/src/images/not_model.png";
}
- } else {
- // var oImg = document.getElementsByClassName('test')[0]
- // console.log(oImg)
- }
+ }
+ return url;
}
}