diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index fdbd674b..5a8c2d84 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -49,24 +49,29 @@ td.o_required_modifier { display: flex; flex-direction: column; position: absolute; - top: 0; + top: 28px; bottom: 0; - right: 8px; + right: 18px; margin: auto; - height: 34px; + //height: 34px; + height: unset !important; + align-items: center; } .show_state > div { - width: 12px; + width: 20px; height: 12px; border: 1px solid #000 } -.show_state > div:nth-child(2) { - border-top: none; +.show_state > div:nth-child(1) { border-bottom: none; } +.show_state > div:nth-child(2) { + border-top: 1px solid black !important; +} + .oe_kanban_card.kanban_color_2 { background-color: #FF4343 !important; color: #fff; @@ -83,6 +88,11 @@ td.o_required_modifier { color: #fff; } +.my-image div { + width: 122px !important; + height: 122px !important; +} + .my-image img { width: 100%; height: 100%; @@ -149,6 +159,7 @@ td.o_required_modifier { } //----------------------------------------------------------- + //图文展示换行及对齐 .many2many_flex { flex-wrap: wrap; @@ -160,4 +171,64 @@ td.o_required_modifier { display: flex; flex-direction: column; align-items: flex-start; -} \ No newline at end of file +} + +div[class="o_content o_component_with_search_panel"] .oe_kanban_color_0 { + position: relative; + padding: 0 !important; +} + +div[class="o_content o_component_with_search_panel"] img[name="equipment_image"] { + width: 150px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_card_content button { + position: absolute; + top: -52px; + left: -55px; + width: 80px; +} + +div[class="o_content o_component_with_search_panel"] .o_primary > span:nth-of-type(1) { + position: absolute; + top: 10px; + left: 168px; +} + +div[class="o_content o_component_with_search_panel"] .o_primary > span:nth-of-type(2) { + margin-left: 18px; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_dashboard:not(.o_legacy_kanban_view) .o_kanban_record > div .o_kanban_manage_toggle_button { + top: 10px !important; + right: 17px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_record_headings .ml8 { + margin-left: 0px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_dashboard:not(.o_legacy_kanban_view) .o_kanban_record > div .o_kanban_card_content { + min-height: 0 !important; + height: 0 !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_dashboard:not(.o_legacy_kanban_view) .o_kanban_record > div .o_kanban_card_header + .container.o_kanban_card_content { + margin-top: -5px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_primary_left { + right: 10px; + padding: 0 !important; +} + +div[class="o_content o_component_with_search_panel"] .show_state { + right: 10px !important; + top: 45px !important; +} + +div[class="o_content o_component_with_search_panel"] .show_state span { + margin-top: 10px; + font-size: 12px; +} + diff --git a/sf_bf_connect/controllers/controllers.py b/sf_bf_connect/controllers/controllers.py index 4442567e..69fb8f30 100644 --- a/sf_bf_connect/controllers/controllers.py +++ b/sf_bf_connect/controllers/controllers.py @@ -27,7 +27,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['delivery_end_date'], kw['payments_way'], kw['pay_way']) i = 1 # 给sale_order的default_code字段赋值 aa = request.env['sale.order'].sudo().search([('name', '=', order_id.name)]) diff --git a/sf_dlm/__manifest__.py b/sf_dlm/__manifest__.py index 20211cde..ed717647 100644 --- a/sf_dlm/__manifest__.py +++ b/sf_dlm/__manifest__.py @@ -11,7 +11,7 @@ 'category': 'sf', 'website': 'https://www.sf.jikimo.com', 'depends': ['mrp', 'base', 'sale', 'sf_manufacturing', 'web_widget_model_viewer', 'mrp_subcontracting', 'purchase_stock', - 'uom'], + 'uom','jikimo_frontend'], 'data': [ 'data/product_data.xml', 'data/uom_data.xml', diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index 19327a82..dd86fc86 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -336,23 +336,24 @@ - + + widget="custom_many2many_checkboxes"/> - + - + - + diff --git a/sf_maintenance/models/sf_equipment_maintenance_standards.py b/sf_maintenance/models/sf_equipment_maintenance_standards.py index 47e7ddaf..7c8740f5 100644 --- a/sf_maintenance/models/sf_equipment_maintenance_standards.py +++ b/sf_maintenance/models/sf_equipment_maintenance_standards.py @@ -62,7 +62,6 @@ class SfSaintenanceStandards(models.Model): fault_type = fields.Selection( [('电气类', '电气类'), ('机械类', '机械类'), ('程序类', '程序类'), ('系统类', '系统类')], string='类别') equipment_maintenance_standards_id = fields.Many2one('equipment.maintenance.standards', string='设备维保标准') - maintenance_request_id = fields.Many2one('maintenance.request', string='设备维保计划') images = fields.One2many('maintenance.standard.image', 'standard_id', string='反馈图片') Period = fields.Integer('周期/频次(天)') remark = fields.Char('备注说明') diff --git a/sf_maintenance/models/sf_maintenance.py b/sf_maintenance/models/sf_maintenance.py index d66de31e..e71f1bf8 100644 --- a/sf_maintenance/models/sf_maintenance.py +++ b/sf_maintenance/models/sf_maintenance.py @@ -44,11 +44,9 @@ class SfMaintenanceEquipment(models.Model): overhaul_period = fields.Integer(string='预防检修频次') overhaul_duration = fields.Float(string='检修时长') - overhaul_id = fields.Many2one('equipment.maintenance.standards', string='设备检修标准', domain="[('maintenance_type','=','检修')]") - @api.onchange('eq_maintenance_id', 'overhaul_id') def _compute_equipment_maintenance_standards_ids(self): for record in self: @@ -145,7 +143,6 @@ class SfMaintenanceEquipment(models.Model): machine_tool_id = fields.Many2one('sf.machine_tool', '机床') sf_maintenance_logs_ids = fields.One2many('sf.maintenance.logs', 'maintenance_equipment_id', '设备故障日志') - def name_get(self): result = [] for parameter in self: @@ -156,7 +153,6 @@ class SfMaintenanceEquipment(models.Model): result.append((parameter.id, name)) return result - @api.constrains('rotate_speed') def _check_rotate_speed(self): if self.rotate_speed <= 0: @@ -478,14 +474,17 @@ class SfMaintenanceEquipment(models.Model): image_id = fields.Many2many('maintenance.equipment.image', 'equipment_id', string='设备图文') + class MaintenanceStandardImage(models.Model): _name = 'maintenance.equipment.image' - _description = '设备图文展示' - + _description = '能力特征库' active = fields.Boolean('有效', default=True) - name = fields.Char('加工能力') - image = fields.Binary(string='设备图文') + name = fields.Char('名称') + image = fields.Binary(string='图文') + type = fields.Selection( + [('加工能力', '加工能力'), ('刀尖特征', '刀尖特征'), ('柄部类型', '柄部类型'), ('走刀方向', '走刀方向'), ('冷却液', '冷却液')], + string='特征') equipment_id = fields.Many2many('maintenance.equipment', 'image_id', string='设备') @api.model @@ -518,6 +517,3 @@ class MaintenanceStandardImage(models.Model): new_res.append([id, name, data_uri]) # 返回新的结果列表 return new_res - - - diff --git a/sf_maintenance/models/sf_maintenance_requests.py b/sf_maintenance/models/sf_maintenance_requests.py index 8a8ce54b..fad9e55f 100644 --- a/sf_maintenance/models/sf_maintenance_requests.py +++ b/sf_maintenance/models/sf_maintenance_requests.py @@ -25,7 +25,7 @@ class SfMaintenanceEquipmentCategory(models.Model): if not record.equipment_maintenance_id: record.equipment_maintenance_id = False - maintenance_standards = fields.One2many('maintenance.standards', 'maintenance_request_id', string='维保标准') + maintenance_standards = fields.Many2many('maintenance.standards', string='维保标准') @api.constrains('equipment_maintenance_id') def _check_equipment_maintenance_id(self): diff --git a/sf_maintenance/views/maintenance_views.xml b/sf_maintenance/views/maintenance_views.xml index cbb063a0..85be0a1c 100644 --- a/sf_maintenance/views/maintenance_views.xml +++ b/sf_maintenance/views/maintenance_views.xml @@ -381,8 +381,9 @@ maintenance.equipment.image.tree maintenance.equipment.image - + + @@ -394,11 +395,12 @@ maintenance.equipment.image.form maintenance.equipment.image -
+ - - + + + @@ -408,14 +410,14 @@ - 设备图文图文 + 能力特征库 maintenance.equipment.image tree,form [] - + + mrp.workcenter.view.kanban.inherit.mrp.workorder + mrp.workcenter + + + + + + + + + + + + + + + + + + + mrp.workcenter.kanban.inherit + mrp.workcenter + + + +

+

+
+
+ + + +

+
+
+
+ mrp.workcenter.kanban.inherit @@ -126,202 +167,203 @@ - - mrp.workcenter.view.kanban.inherit.maintenance - mrp.workcenter - - - - - - - + + mrp.workcenter.view.kanban.inherit.maintenance + mrp.workcenter + + + + + + + - + - - - - - - - - - - - - - - - - - - - - --> - --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + --> + + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -350,18 +392,18 @@ - - - mrp.workcenter.inherit - mrp.workcenter - - - - - - - - - + + + mrp.workcenter.inherit + mrp.workcenter + + + + + + + + + diff --git a/sf_sale/__manifest__.py b/sf_sale/__manifest__.py index b3cb99a1..bfb221ca 100644 --- a/sf_sale/__manifest__.py +++ b/sf_sale/__manifest__.py @@ -10,7 +10,7 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['sale_management', 'web_widget_model_viewer',], + 'depends': ['sale', 'web_widget_model_viewer'], 'data': [ 'security/group_security.xml', 'security/ir.model.access.csv', diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index eed2be57..6599cd09 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -16,6 +16,7 @@ import requests class QuickEasyOrder(models.Model): _name = 'quick.easy.order' _description = '简易下单' + _order = 'id desc' name = fields.Char('订单编号', default=lambda self: self.env['ir.sequence'].next_by_code('quick.easy.order')) model_length = fields.Float('长(mm)', digits=(16, 3)) @@ -48,6 +49,7 @@ class QuickEasyOrder(models.Model): model_color_state = fields.Selection([ ('success', '成功'), ('fail', '失败')], string='模型上色状态') + processing_time = fields.Integer('加工时长(min)') @api.depends('unit_price', 'quantity') def _compute_total_amount(self): @@ -77,10 +79,10 @@ class QuickEasyOrder(models.Model): model_code = hashlib.sha1(base64_datas.encode('utf-8')).hexdigest() report_path = attachment._full_path(attachment.store_fname) vals['model_file'] = self.transition_glb_file(report_path, model_code) - logging.info('create-model_file:%s' % len(vals['model_file'])) + # logging.info('create-model_file:%s' % len(vals['model_file'])) obj = super(QuickEasyOrder, self).create(vals) - self.model_coloring(obj) + # self.model_coloring(obj) self.distribute_to_factory(obj) obj.state = '待接单' return obj @@ -88,14 +90,14 @@ class QuickEasyOrder(models.Model): # 将attach的datas内容转为glb文件 def transition_glb_file(self, report_path, model_code): 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') + 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) # 转化为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') + 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') util_path = get_resource_path('sf_dlm', 'static/util') - cmd = 'python3 %s/stl2gltf.py %s %s -b' % (util_path, output_file, output_glb_file) + cmd = 'python %s/stl2gltf.py %s %s -b' % (util_path, output_file, output_glb_file) os.system(cmd) # 转base64 with open(output_glb_file, 'rb') as fileObj: @@ -120,17 +122,17 @@ class QuickEasyOrder(models.Model): model_code = hashlib.sha1(base64_datas.encode('utf-8')).hexdigest() logging.info("模型编码: %s" % model_code) item.model_file = self.transition_glb_file(report_path, model_code) - ret = self.feature_recognition(report_path, model_code) - logging.info("自动报价返回值: %s" % ret) - boxshape = ret['boxshape'].tolist() - logging.info("自动报价boxshape: %s" % boxshape) - logging.info('自动报价feature_infos:%s' % ret['feature_infos']) - item.model_length = boxshape[0] # 长 单位mm - item.model_width = boxshape[1] # 宽 - item.model_height = boxshape[2] # 高 - item.model_volume = boxshape[0] * boxshape[1] * boxshape[2] - item.model_feature = json.dumps(ret['feature_infos'], ensure_ascii=False) - self._get_price(item) + # ret = self.feature_recognition(report_path, model_code) + # logging.info("自动报价返回值: %s" % ret) + # boxshape = ret['boxshape'].tolist() + # logging.info("自动报价boxshape: %s" % boxshape) + # logging.info('自动报价feature_infos:%s' % ret['feature_infos']) + # item.model_length = boxshape[0] # 长 单位mm + # item.model_width = boxshape[1] # 宽 + # item.model_height = boxshape[2] # 高 + # item.model_volume = boxshape[0] * boxshape[1] * boxshape[2] + # item.model_feature = json.dumps(ret['feature_infos'], ensure_ascii=False) + # self._get_price(item) else: item.model_file = False item.model_feature = False @@ -151,7 +153,7 @@ class QuickEasyOrder(models.Model): base64_data = base64.b64encode(attachment.datas) base64_datas = base64_data.decode('utf-8') barcode = hashlib.sha1(base64_datas.encode('utf-8')).hexdigest() - logging.info('model_file-size: %s' % len(item.model_file)) + # logging.info('model_file-size: %s' % len(item.model_file)) res['bfm_process_order_list'].append({ 'model_long': item.model_length, 'model_width': item.model_width, diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 8d9dfd5a..c57aa780 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -6,14 +6,16 @@ import base64 class ReSaleOrder(models.Model): _inherit = 'sale.order' - deadline_of_delivery = fields.Date('交货截止日期') + deadline_of_delivery = fields.Date('订单交期') person_of_delivery = fields.Char('交货人') telephone_of_delivery = fields.Char('交货人电话号码') address_of_delivery = fields.Char('交货人地址') + payments_way = fields.Selection([('现结', '现结'), ('月结', '月结')], '结算方式', default='现结') + pay_way = fields.Selection([('转账', '转账'), ('微信', '微信'), ('支付宝', '支付宝')], '支付方式') # 业务平台分配工厂后在智能工厂先创建销售订单 def sale_order_create(self, company_id, delivery_name, delivery_telephone, delivery_address, - deadline_of_delivery): + deadline_of_delivery, payments_way, pay_way): now_time = datetime.datetime.now() partner = self.get_customer() order_id = self.env['sale.order'].sudo().create({ @@ -22,11 +24,12 @@ class ReSaleOrder(models.Model): 'name': self.env['ir.sequence'].next_by_code('sale.order', sequence_date=now_time), 'partner_id': partner.id, 'state': 'draft', - # 'user_id': user_id.id, 'person_of_delivery': delivery_name, 'telephone_of_delivery': delivery_telephone, 'address_of_delivery': delivery_address, - 'deadline_of_delivery': deadline_of_delivery + 'deadline_of_delivery': deadline_of_delivery, + 'payments_way': payments_way, + 'pay_way': pay_way, }) return order_id @@ -49,7 +52,7 @@ 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']), + 'model_glb_file': base64.b64decode(item['model_file']), } return self.env['sale.order.line'].create(vals) diff --git a/sf_sale/views/quick_easy_order_view.xml b/sf_sale/views/quick_easy_order_view.xml index a5ce9da2..063c119f 100644 --- a/sf_sale/views/quick_easy_order_view.xml +++ b/sf_sale/views/quick_easy_order_view.xml @@ -16,16 +16,18 @@ quick.easy.order - - + + + @@ -74,6 +76,7 @@ options="{'format': false}"/> +
diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index a8f14c62..93545342 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -1,6 +1,7 @@ + sale.order.form.inherit.sf sale.order @@ -8,6 +9,8 @@ + + sale.order + + 下单日期 + @@ -39,5 +45,31 @@ + + + sale.order.quotation.tree.inherit.sf + sale.order + + + + 订单号 + + + 下单时间 + + + + + + sale.order.tree + sale.order + + + + 订单号 + + + + \ No newline at end of file diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 33bc1d4b..9ae2a422 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -551,7 +551,7 @@ class MachineTableToolChangingApply(models.Model): name = fields.Many2one('maintenance.equipment', string='CNC机床',required=True, readonly=False, group_expand='_read_group_names') - machine_table_type_id = fields.Many2one('sf.machine_tool.category', string='机床类型', readonly=True, + machine_table_type_id = fields.Many2one('maintenance.equipment.category', string='机床类型', readonly=True, compute='_compute_name') machine_tool_code = fields.Char(string='机台号', invisible=True, readonly=True, compute='_compute_name') cutter_spacing_code = fields.Char(string='刀位号', readonly=False) @@ -595,7 +595,7 @@ class MachineTableToolChangingApply(models.Model): def _compute_name(self): for record in self: if record: - record.machine_table_type_id = record.name.machine_tool_category.id + record.machine_table_type_id = record.name.category_id.id record.machine_tool_code = record.name.code @api.depends('functional_tool_name_id') diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 7192c8f0..31b69188 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -870,7 +870,7 @@

- +

@@ -879,7 +879,7 @@ - + @@ -999,19 +999,19 @@

- +

- + - - + + @@ -1027,7 +1027,7 @@ - + diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml index 4e871807..2c7f1bed 100644 --- a/sf_tool_management/wizard/wizard_view.xml +++ b/sf_tool_management/wizard/wizard_view.xml @@ -23,15 +23,15 @@ - + - + - - + + diff --git a/web_widget_model_viewer/static/src/js/3d_viewer.xml b/web_widget_model_viewer/static/src/js/3d_viewer.xml index 587c1ac4..73f142c9 100644 --- a/web_widget_model_viewer/static/src/js/3d_viewer.xml +++ b/web_widget_model_viewer/static/src/js/3d_viewer.xml @@ -25,7 +25,7 @@ -
当前制造订单暂无模型
+
暂无模型