diff --git a/sf_base/models/tool_other_features.py b/sf_base/models/tool_other_features.py
index f67e69fd..9dd30710 100644
--- a/sf_base/models/tool_other_features.py
+++ b/sf_base/models/tool_other_features.py
@@ -21,8 +21,9 @@ class ToolMaterialsBasicParameters(models.Model):
neck_length = fields.Float('颈部长度(mm)')
handle_diameter = fields.Float('柄部直径(mm)')
handle_length = fields.Float('柄部长度(mm)')
- blade_tip_diameter = fields.Integer('刀尖直径(mm)')
- blade_tip_working_size = fields.Char('刀尖处理尺寸(R半径mm/倒角度)', size=20)
+ blade_tip_diameter = fields.Float('刀尖直径(mm)')
+ blade_tip_working_size = fields.Char('刀尖倒角度(°)', size=20)
+ tip_r_size = fields.Float('刀尖R角(mm)')
blade_tip_taper = fields.Integer('刀尖锥度(°)')
blade_diameter = fields.Float('刃部直径(mm)')
blade_length = fields.Float('刃部长度(mm)')
diff --git a/sf_base/static/src/js/custom_barcode_handlers.js b/sf_base/static/src/js/custom_barcode_handlers.js
index 220d2cbb..18db64e7 100644
--- a/sf_base/static/src/js/custom_barcode_handlers.js
+++ b/sf_base/static/src/js/custom_barcode_handlers.js
@@ -30,6 +30,7 @@ patch(barcodeGenericHandlers, "start", {
"O-CMD.PAGER-FIRST": () => updatePager("first"),
"O-CMD.PAGER-LAST": () => updatePager("last"),
"O-CMD.CONFIRM": () => customClickOnButton(".jikimo_button_confirm"),
+ "O-CMD.FLUSHED": () => customClickOnButton(".jikimo_button_flushed"),
};
barcode.bus.addEventListener("barcode_scanned", (ev) => {
diff --git a/sf_base/views/tool_basic_param.xml b/sf_base/views/tool_basic_param.xml
index d138eeb8..06bb80bb 100644
--- a/sf_base/views/tool_basic_param.xml
+++ b/sf_base/views/tool_basic_param.xml
@@ -15,6 +15,7 @@
+
@@ -95,6 +96,7 @@
+
@@ -139,6 +141,7 @@
+
diff --git a/sf_base/views/tool_views.xml b/sf_base/views/tool_views.xml
index b90d1a5c..8b429f89 100644
--- a/sf_base/views/tool_views.xml
+++ b/sf_base/views/tool_views.xml
@@ -222,6 +222,7 @@
+
diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml
index caefcb34..f53c5e2b 100644
--- a/sf_dlm_management/views/product_template_management_view.xml
+++ b/sf_dlm_management/views/product_template_management_view.xml
@@ -191,6 +191,8 @@
attrs="{'invisible': [('cutting_tool_type', '!=', '整体式刀具')],'readonly': [('id', '!=', False)]}"/>
+
+ string="获取数据" attrs='{"invisible": [("state","!=","progress"), ("routing_type","!=","装夹预调")]}'/>
diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py
index 713a4a5e..cdfef4bd 100644
--- a/sf_message/__manifest__.py
+++ b/sf_message/__manifest__.py
@@ -11,10 +11,9 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['base', 'sf_plan', 'sf_sale'],
+ 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify'],
'data': [
- 'security/ir.model.access.csv',
- 'views/sf_message_template_view.xml',
+ 'data/bussiness_node.xml'
],
'test': [
],
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
new file mode 100644
index 00000000..eeb7cbe7
--- /dev/null
+++ b/sf_message/data/bussiness_node.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ 待接单
+ sale.order
+
+
+
+ 确认接单
+ sale.order
+
+
+
\ No newline at end of file
diff --git a/sf_message/models/sf_message_cam_program.py b/sf_message/models/sf_message_cam_program.py
index 5a6154e5..38fb6ae2 100644
--- a/sf_message/models/sf_message_cam_program.py
+++ b/sf_message/models/sf_message_cam_program.py
@@ -3,4 +3,4 @@ from odoo import models, fields, api, _
class SFMessageCamProgram(models.Model):
_name = 'sf.cam.work.order.program.knife.plan'
- _inherit = ['sf.cam.work.order.program.knife.plan', 'sf.message.template']
+ _inherit = ['sf.cam.work.order.program.knife.plan', 'jikimo.message.dispatch']
diff --git a/sf_message/models/sf_message_functional_tool_assembly.py b/sf_message/models/sf_message_functional_tool_assembly.py
index 6b5e4ebf..251af2cc 100644
--- a/sf_message/models/sf_message_functional_tool_assembly.py
+++ b/sf_message/models/sf_message_functional_tool_assembly.py
@@ -3,4 +3,4 @@ from odoo import models, fields, api, _
class SFMessagefunctionalToolAssembly(models.Model):
_name = 'sf.functional.tool.assembly'
- _inherit = ['sf.functional.tool.assembly', 'sf.message.template']
+ _inherit = ['sf.functional.tool.assembly', 'jikimo.message.dispatch']
diff --git a/sf_message/models/sf_message_plan.py b/sf_message/models/sf_message_plan.py
index 913b61de..03e9528e 100644
--- a/sf_message/models/sf_message_plan.py
+++ b/sf_message/models/sf_message_plan.py
@@ -1,6 +1,25 @@
+# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class SFMessagePlan(models.Model):
_name = 'sf.production.plan'
- _inherit = ['sf.production.plan', 'sf.message.template']
+ _inherit = ['sf.production.plan', 'jikimo.message.dispatch']
+
+ # def create(self, vals_list):
+ # res = super(SFMessagePlan, self).create(vals_list)
+ # if res:
+ # try:
+ # res.add_queue('待排程')
+ # except Exception as e:
+ # logging.info('add_queue error:%s' % e)
+ # return res
+ #
+ # def _get_message(self):
+ # res = super(SFMessagePlan, self)._get_message()
+ # if res:
+ # try:
+ # res.add_queue('待排程')
+ # except Exception as e:
+ # logging.info('_get_message error:%s' % e)
+ # return res
diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py
index 89836486..073a7814 100644
--- a/sf_message/models/sf_message_purchase.py
+++ b/sf_message/models/sf_message_purchase.py
@@ -3,4 +3,4 @@ from odoo import models, fields, api, _
class SFMessagePurchase(models.Model):
_name = 'purchase.order'
- _inherit = ['purchase.order', 'sf.message.template']
+ _inherit = ['purchase.order', 'jikimo.message.dispatch']
diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py
index d8d3bd21..fb9d5976 100644
--- a/sf_message/models/sf_message_sale.py
+++ b/sf_message/models/sf_message_sale.py
@@ -1,11 +1,39 @@
+# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class SFMessageSale(models.Model):
_name = 'sale.order'
- _inherit = ['sale.order', 'sf.message.template']
+ _inherit = ['sale.order', 'jikimo.message.dispatch']
- # def create(self):
- # res = super(SFMessageSale, self).create()
- # if res is True:
+ def create(self, vals_list):
+ res = super(SFMessageSale, self).create(vals_list)
+ if res:
+ try:
+ res.add_queue('待接单')
+ except Exception as e:
+ logging.info('add_queue error:%s' % e)
+ return res
+ # 确认接单
+ def action_confirm(self):
+ res = super(SFMessageSale, self).action_confirm()
+ if res is True:
+ try:
+ self.add_queue('确认接单')
+ except Exception as e:
+ logging.info('add_queue error:%s' % e)
+ return res
+
+ # 继承并重写jikimo.message.dispatch的_get_message()
+ def _get_message(self, message_queue_ids):
+ res = super(SFMessageSale, self)._get_message(message_queue_ids)
+ if message_queue_ids.message_template_id.bussiness_node_id.name == '确认接单':
+ # sale_order = self.env['sale.order'].search([('id', '=', message_queue_ids.model.res_id)])
+ sale_order_line = self.env['sale.order.line'].search([('order_id', '=', int(message_queue_ids.res_id))])
+ if len(sale_order_line) == 1:
+ product = sale_order_line[0].product_id.name
+ elif len(sale_order_line) > 1:
+ product = '%s...' % sale_order_line[0].product_id.name
+ res[0] = res[0].replace('{{product_id}}', product)
+ return res
diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py
index 894dce9d..b090549e 100644
--- a/sf_message/models/sf_message_stock_picking.py
+++ b/sf_message/models/sf_message_stock_picking.py
@@ -3,4 +3,4 @@ from odoo import models, fields, api, _
class SFMessageStockPicking(models.Model):
_name = 'stock.picking'
- _inherit = ['stock.picking', 'sf.message.template']
+ _inherit = ['stock.picking', 'jikimo.message.dispatch']
diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py
index ea6e4222..7380fbe6 100644
--- a/sf_message/models/sf_message_template.py
+++ b/sf_message/models/sf_message_template.py
@@ -4,31 +4,9 @@ from abc import ABC, abstractmethod
class SfMessageTemplate(models.Model):
- _name = "sf.message.template"
- _description = u'消息模板'
+ _inherit = "jikimo.message.template"
- name = fields.Char(string=u"名称", required=True)
- description = fields.Char(string=u"描述")
- content = fields.Html(string=u"内容", render_engine='qweb', translate=True, prefetch=True, sanitize=False)
- msgtype = fields.Selection(
- [('text', u'文字'), ('markdown', u'Markdown')], u'消息类型',
- required=True, default='markdown')
- notification_department_id = fields.Many2one('hr.department', u'通知部门', required=True)
- notification_employee_ids = fields.Many2many('hr.employee', string=u'员工',
- domain="[('department_id', '=',notification_department_id)]",
- required=True)
- is_send_time = fields.Boolean(string=u"定时发送", default=False)
- send_time_1 = fields.Integer('发送时间点1')
- send_time_2 = fields.Integer('发送时间点2')
- active = fields.Boolean(string=u"是否有效", default=True)
-
- @api.onchange('notification_department_id')
- def _clear_employee_ids(self):
- if self.notification_department_id:
- self.notification_employee_ids = False
-
- @abstractmethod
- def dispatch(self, args):
- """
- 强迫继承该类必走该抽象方法'
- """
+ def _get_message_model(self):
+ res = super(SfMessageTemplate, self)._get_message_model()
+ res.append("sale.order")
+ return res
diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py
index cab2408d..626c092d 100644
--- a/sf_message/models/sf_message_workorder.py
+++ b/sf_message/models/sf_message_workorder.py
@@ -3,4 +3,4 @@ from odoo import models, fields, api, _
class SFMessageWork(models.Model):
_name = 'mrp.workorder'
- _inherit = ['mrp.workorder', 'sf.message.template']
+ _inherit = ['mrp.workorder', 'jikimo.message.dispatch']
diff --git a/sf_message/security/ir.model.access.csv b/sf_message/security/ir.model.access.csv
index dbb2d6af..cb42c911 100644
--- a/sf_message/security/ir.model.access.csv
+++ b/sf_message/security/ir.model.access.csv
@@ -1,9 +1,23 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_sf_message_template_group_sale_salemanager,sf_message_template,model_sf_message_template,sf_base.group_sale_salemanager,1,1,1,0
-access_sf_message_template_group_purchase,sf_message_template,model_sf_message_template,sf_base.group_purchase,1,1,1,0
-access_sf_message_template_group_sf_stock_user,sf_message_template,model_sf_message_template,sf_base.group_sf_stock_user,1,1,1,0
-access_sf_message_template_group_sf_order_user,sf_message_template,model_sf_message_template,sf_base.group_sf_order_user,1,1,1,0
-access_sf_message_template_group_sf_tool_user,sf_message_template,model_sf_message_template,sf_base.group_sf_tool_user,1,1,1,0
+
+access_jikimo_message_template_group_sale_salemanager,jikimo_message_template,model_jikimo_message_template,sf_base.group_sale_salemanager,1,1,1,0
+access_jikimo_message_template_group_purchase,jikimo_message_template,model_jikimo_message_template,sf_base.group_purchase,1,1,1,0
+access_jikimo_message_template_group_sf_stock_user,jikimo_message_template,model_jikimo_message_template,sf_base.group_sf_stock_user,1,1,1,0
+access_jikimo_message_template_group_sf_order_user,jikimo_message_template,model_jikimo_message_template,sf_base.group_sf_order_user,1,1,1,0
+access_jikimo_message_template_group_sf_tool_user,jikimo_message_template,model_jikimo_message_template,sf_base.group_sf_tool_user,1,1,1,0
+
+access_jikimo_message_bussiness_node_group_sale_salemanager,jikimo_message_bussiness_node,model_jikimo_message_bussiness_node,sf_base.group_sale_salemanager,1,1,1,0
+access_jikimo_message_bussiness_node_group_purchase,jikimo_message_bussiness_node,model_jikimo_message_bussiness_node,sf_base.group_purchase,1,1,1,0
+access_jikimo_message_bussiness_node_group_sf_stock_user,jikimo_message_bussiness_node,model_jikimo_message_bussiness_node,sf_base.group_sf_stock_user,1,1,1,0
+access_jikimo_message_bussiness_node_group_sf_order_user,jikimo_message_bussiness_node,model_jikimo_message_bussiness_node,sf_base.group_sf_order_user,1,1,1,0
+access_jikimo_message_bussiness_node_group_sf_tool_user,jikimo_message_bussiness_node,model_jikimo_message_bussiness_node,sf_base.group_sf_tool_user,1,1,1,0
+
+access_jikimo_message_queue_group_sale_salemanager,jikimo_message_queue,model_jikimo_message_queue,sf_base.group_sale_salemanager,1,1,1,0
+access_jikimo_message_queue_group_purchase,jikimo_message_queue,model_jikimo_message_queue,sf_base.group_purchase,1,1,1,0
+access_jikimo_message_queue_group_sf_stock_user,jikimo_message_queue,model_jikimo_message_queue,sf_base.group_sf_stock_user,1,1,1,0
+access_jikimo_message_queue_group_sf_order_user,jikimo_message_queue,model_jikimo_message_queue,sf_base.group_sf_order_user,1,1,1,0
+access_jikimo_message_queue_group_sf_tool_user,jikimo_message_queue,model_jikimo_message_queue,sf_base.group_sf_tool_user,1,1,1,0
+
diff --git a/sf_message/views/sf_message_template_view.xml b/sf_message/views/sf_message_template_view.xml
index ff1bb74e..21920b64 100644
--- a/sf_message/views/sf_message_template_view.xml
+++ b/sf_message/views/sf_message_template_view.xml
@@ -7,7 +7,7 @@
sf.message.template.view.form
- sf.message.template
+ message.template
@@ -135,6 +137,7 @@
+
diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml
index 2a68ce8e..130936d8 100644
--- a/sf_tool_management/views/tool_base_views.xml
+++ b/sf_tool_management/views/tool_base_views.xml
@@ -478,9 +478,9 @@
class="btn-primary"/>
+ class="btn-primary jikimo_button_confirm"/>
diff --git a/vista_backend_theme/static/src/scss/theme.scss b/vista_backend_theme/static/src/scss/theme.scss
index 22923a40..669de341 100644
--- a/vista_backend_theme/static/src/scss/theme.scss
+++ b/vista_backend_theme/static/src/scss/theme.scss
@@ -1029,4 +1029,68 @@ div.dropdown-menu.bootstrap-datetimepicker-widget {
.o_searchview .o_searchview_icon {
z-index: 9999 !important;
margin-top: 12px;
+}
+
+
+// 自定义的下拉
+.o_menu_sections_fix{
+ display: flex!important;
+ align-items: center;
+}
+.custom_dropdown {
+ position: relative;
+ .title {
+ color: #1f2631;
+ padding: 0 12px;
+ line-height: var(--o-navbar-height);
+ margin: 0;
+ cursor: pointer;
+ display: block;
+ }
+ .custom_dropdown_fixed {
+ position: absolute;
+ top: var(--o-navbar-height);
+ z-index: 1000;
+ padding: 0.5rem 0;
+ margin: 0;
+ font-size: 1.08333333rem;
+ color: #495057;
+ text-align: left;
+ background-color: #FFFFFF;
+ box-shadow: 0 1rem 1.1rem rgba(0, 0, 0, 0.1);
+ border-radius: 0.25rem;
+ display: none;
+ a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: 400;
+ color: #495057;
+ text-align: inherit;
+ white-space: nowrap;
+ background-color: transparent;
+ border: 0;
+ &:hover {
+ color: #00005A !important;
+ background-color: #ebf0fd;
+ transition: all 0.3s linear;
+ }
+ }
+ }
+ .subtitle {
+ margin: 5px 0 0px;
+ padding: 5px 0;
+ text-indent: 5px;
+ background: rgba(0, 0, 0, 0.1);
+ font-size: 14px;
+ }
+ &:hover {
+ .title {
+ background-color: rgba(0, 0, 0, 0.08);
+ transition: all .3s;
+ }
+ .custom_dropdown_fixed{
+ display: block;
+ }
+ }
}
\ No newline at end of file
diff --git a/vista_backend_theme/static/src/xml/systray.xml b/vista_backend_theme/static/src/xml/systray.xml
index 7f3865b2..a3005a15 100644
--- a/vista_backend_theme/static/src/xml/systray.xml
+++ b/vista_backend_theme/static/src/xml/systray.xml
@@ -1,16 +1,37 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vista_backend_theme/static/src/xml/top_bar.xml b/vista_backend_theme/static/src/xml/top_bar.xml
index ba29b398..aa32caa3 100644
--- a/vista_backend_theme/static/src/xml/top_bar.xml
+++ b/vista_backend_theme/static/src/xml/top_bar.xml
@@ -24,10 +24,35 @@
-