diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss
index 35416444..5c632e96 100644
--- a/jikimo_frontend/static/src/scss/custom_style.scss
+++ b/jikimo_frontend/static/src/scss/custom_style.scss
@@ -135,7 +135,7 @@ td.o_required_modifier {
.text-truncate {
overflow: unset !important;
text-overflow: unset !important;
- white-space: 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) {
@@ -370,9 +370,16 @@ div:has(.o_required_modifier) > label::before {
top: 40px;
left: 168px;
padding: 0;
+ display: flex;
+ flex-wrap: wrap;
+ box-sizing: border-box;
.row {
+ width: 50%;
+ margin: 0;
>div {
+ padding: 0;
width: unset;
+ margin-right: 10px;
}
}
}
\ No newline at end of file
diff --git a/mrp_workorder/static/src/scss/table_custom.scss b/mrp_workorder/static/src/scss/table_custom.scss
index 54553dba..a05e905a 100644
--- a/mrp_workorder/static/src/scss/table_custom.scss
+++ b/mrp_workorder/static/src/scss/table_custom.scss
@@ -23,7 +23,7 @@ html .o_web_client > .o_action_manager > .o_action {
}
.o_form_view {
- background-color: unset !important;
+ //background-color: unset !important;
min-height: unset !important;
}
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index bed75e6d..d28699c3 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_quality/__manifest__.py b/sf_quality/__manifest__.py
index 12937909..40408f46 100644
--- a/sf_quality/__manifest__.py
+++ b/sf_quality/__manifest__.py
@@ -15,6 +15,7 @@
# 此处依赖sf_manufacturing是因为我要重写其中的一个字段operation_id的string,故需要sf_manufacturing先安装
'depends': ['quality_control', 'sf_manufacturing'],
'data': [
+ 'security/ir.model.access.csv',
'views/view.xml'
],
diff --git a/sf_quality/models/custom_quality.py b/sf_quality/models/custom_quality.py
index c700b88b..c378b3be 100644
--- a/sf_quality/models/custom_quality.py
+++ b/sf_quality/models/custom_quality.py
@@ -10,5 +10,14 @@ class SfQualityPoint(models.Model):
domain="[('type', 'in', "
"('product', 'consu')), '|', ('company_id', '=', False), ('company_id', '=', company_id)]", help=
"Quality Point will apply to every selected Products.")
+
+ check_state = fields.Selection([
+ ('enable', '启用'),
+ ('close', '关闭')
+ ], string='审核状态', default='close')
+
+ # 审核
+ def action_check(self):
+ self.check_state = 'enable'
# picking_type_ids = fields.Many2many(
# 'stock.picking.type', string='执行节点', required=True, check_company=True)
diff --git a/sf_quality/security/ir.model.access.csv b/sf_quality/security/ir.model.access.csv
index f6326d5b..be8cddb7 100644
--- a/sf_quality/security/ir.model.access.csv
+++ b/sf_quality/security/ir.model.access.csv
@@ -1,6 +1,6 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_quality_point_group_quality,quality_point_group_quality,quality.model_quality_point,sf_base.group_quality,1,0,0,0
-access_quality_point_group_quality_director,quality_point_group_quality_director,quality.model_quality_point,sf_base.group_quality_director,1,1,1,0
+access_quality_point_group_quality,quality_point_group_quality,quality.model_quality_point,sf_base.group_quality,1,1,1,0
+access_quality_point_group_quality_director,quality_point_group_quality_director,quality.model_quality_point,sf_base.group_quality_director,1,1,0,0
access_quality_point_group_plan_dispatch,quality_point_group_plan_dispatch,quality.model_quality_point,sf_base.group_plan_dispatch,1,0,0,0
access_quality_point_group_plan_director,quality_point_group_plan_director,quality.model_quality_point,sf_base.group_plan_director,1,0,0,0
access_quality_point_group_sf_equipment_user,quality_point_group_sf_equipment_user,quality.model_quality_point,sf_base.group_sf_equipment_user,1,0,0,0
@@ -8,7 +8,7 @@ access_quality_point_group_sf_tool_user,quality_point_group_sf_tool_user,quality
access_quality_point_group_sf_order_user,quality_point_group_sf_order_user,quality.model_quality_point,sf_base.group_sf_order_user,1,0,0,0
access_quality_point_group_sf_mrp_manager,quality_point_group_sf_mrp_manager,quality.model_quality_point,sf_base.group_sf_mrp_manager,1,0,0,0
-access_quality_check_group_quality,quality_check_group_quality,quality.model_quality_check,sf_base.group_quality,1,0,0,0
+access_quality_check_group_quality,quality_check_group_quality,quality.model_quality_check,sf_base.group_quality,1,1,1,0
access_quality_check_group_quality_director,quality_check_group_quality_director,quality.model_quality_check,sf_base.group_quality_director,1,1,1,0
access_quality_check_group_plan_dispatch,quality_check_group_plan_dispatch,quality.model_quality_check,sf_base.group_plan_dispatch,1,0,0,0
access_quality_check_group_plan_director,quality_check_group_plan_director,quality.model_quality_check,sf_base.group_plan_director,1,0,0,0
@@ -19,7 +19,7 @@ access_quality_check_group_sf_mrp_manager,quality_check_group_sf_mrp_manager,qua
access_quality_check_group_equipment_user,quality_check_group_equipment_user,quality.model_quality_check,sf_maintenance.sf_group_equipment_user,1,0,0,0
access_quality_check_group_equipment_manager,quality_check_group_equipment_manager,quality.model_quality_check,sf_maintenance.sf_group_equipment_manager,1,0,0,0
-access_quality_alert_group_quality,quality_alert_group_quality,quality.model_quality_alert,sf_base.group_quality,1,0,0,0
+access_quality_alert_group_quality,quality_alert_group_quality,quality.model_quality_alert,sf_base.group_quality,1,1,1,0
access_quality_alert_group_quality_director,quality_alert_group_quality_director,quality.model_quality_alert,sf_base.group_quality_director,1,1,1,0
access_quality_alert_group_plan_dispatch,quality_alert_group_plan_dispatch,quality.model_quality_alert,sf_base.group_plan_dispatch,1,0,0,0
access_quality_alert_group_plan_director,quality_alert_group_plan_director,quality.model_quality_alert,sf_base.group_plan_director,1,0,0,0
@@ -30,8 +30,8 @@ access_quality_alert_group_sf_mrp_manager,quality_alert_group_sf_mrp_manager,qua
access_quality_alert_group_equipment_user,quality_alert_group_equipment_user,quality.model_quality_alert,sf_maintenance.sf_group_equipment_user,1,0,0,0
access_quality_alert_group_equipment_manager,quality_alert_group_equipment_manager,quality.model_quality_alert,sf_maintenance.sf_group_equipment_manager,1,0,0,0
-access_quality_alert_team_group_quality,quality_alert_team_group_quality,quality.model_quality_alert_team,sf_base.group_quality,1,0,0,0
-access_quality_alert_team_group_quality_director,quality_alert_team_group_quality_director,quality.model_quality_alert_team,sf_base.group_quality_director,1,1,1,0
+access_quality_alert_team_group_quality,quality_alert_team_group_quality,quality.model_quality_alert_team,sf_base.group_quality,1,1,1,0
+access_quality_alert_team_group_quality_director,quality_alert_team_group_quality_director,quality.model_quality_alert_team,sf_base.group_quality_director,1,1,0,0
access_quality_alert_team_group_plan_dispatch,quality_alert_team_group_plan_dispatch,quality.model_quality_alert_team,sf_base.group_plan_dispatch,1,0,0,0
access_quality_alert_team_group_plan_director,quality_alert_team_group_plan_director,quality.model_quality_alert_team,sf_base.group_plan_director,1,0,0,0
access_quality_alert_team_group_sf_equipment_user,quality_alert_team_group_sf_equipment_user,quality.model_quality_alert_team,sf_base.group_sf_equipment_user,1,0,0,0
diff --git a/sf_quality/views/view.xml b/sf_quality/views/view.xml
index 136374a9..a18e61c6 100644
--- a/sf_quality/views/view.xml
+++ b/sf_quality/views/view.xml
@@ -31,4 +31,20 @@
+
+
+ quality.point.form.inherit.sf
+ quality.point
+
+
+
+
+
+
+
diff --git a/sf_sale/models/__init__.py b/sf_sale/models/__init__.py
index 7009b4ba..d8b09a48 100644
--- a/sf_sale/models/__init__.py
+++ b/sf_sale/models/__init__.py
@@ -1,3 +1,3 @@
from . import sale_order
from . import quick_easy_order
-#from . import auto_quatotion_common
+from . import auto_quatotion_common
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 1e5f274c..7419cc9a 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
diff --git a/web_gantt/static/src/js/gantt_model.js b/web_gantt/static/src/js/gantt_model.js
index c51ce74d..0d65aaed 100644
--- a/web_gantt/static/src/js/gantt_model.js
+++ b/web_gantt/static/src/js/gantt_model.js
@@ -221,7 +221,15 @@ export default AbstractModel.extend({
this.ganttData.groupedBy = this.defaultGroupBy;
}
}
+ const time = sessionStorage.getItem('time')
+ const scale = sessionStorage.getItem('scale')
+ if(time) {
+ this._setRange(moment(time), scale);
+ console.log('进入自定义时间')
+ }
return this._fetchData().then(() => {
+ sessionStorage.removeItem('time')
+ sessionStorage.removeItem('scale')
// The 'reload' function returns a promise which resolves with the
// handle to pass to the 'get' function to access the data. In this
// case, we don't want to pass any argument to 'get' (see its API).
diff --git a/web_gantt/static/src/js/gantt_row.js b/web_gantt/static/src/js/gantt_row.js
index 2867188c..420e3ad5 100644
--- a/web_gantt/static/src/js/gantt_row.js
+++ b/web_gantt/static/src/js/gantt_row.js
@@ -8,7 +8,6 @@ var Widget = require('web.Widget');
const pyUtils = require('web.py_utils');
let pyUtilsContext = null;
const fieldUtils = require('web.field_utils');
-
var QWeb = core.qweb;
var _t = core._t;
@@ -22,6 +21,9 @@ var GanttRow = Widget.extend({
'click': '_onRowSidebarClicked',
'click .o_gantt_cell_buttons > div > .o_gantt_cell_add': '_onButtonAddClicked',
'click .o_gantt_cell_buttons > div > .o_gantt_cell_plan': '_onButtonPlanClicked',
+ 'mousewheel .o_gantt_hoverable': '_onColMouseWheel',
+ 'click .o_gantt_hoverable': '_onColClicked',
+
},
NB_GANTT_RECORD_COLORS: 12,
LEVEL_LEFT_OFFSET: 16, // 16 px per level
@@ -144,7 +146,7 @@ var GanttRow = Widget.extend({
}
this._super();
},
-
+
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
@@ -261,18 +263,18 @@ var GanttRow = Widget.extend({
_adaptPills: function () {
var self = this;
var dateStartField = this.state.dateStartField;
- console.log("dateStartField",dateStartField)
+ // console.log("dateStartField",dateStartField)
var dateStopField = this.state.dateStopField;
- console.log("dateStopField",dateStopField)
+ // console.log("dateStopField",dateStopField)
var ganttStartDate = this.state.startDate;
- console.log("ganttStartDate",ganttStartDate)
+ // console.log("ganttStartDate",ganttStartDate)
var ganttStopDate = this.state.stopDate;
- console.log("ganttStopDate",ganttStopDate)
+ // console.log("ganttStopDate",ganttStopDate)
this.pills.forEach(function (pill) {
var pillStartDate = self._convertToUserTime(pill[dateStartField]);
- console.log("pillStartDate",pillStartDate)
+ // console.log("pillStartDate",pillStartDate)
var pillStopDate = self._convertToUserTime(pill[dateStopField]);
- console.log("pillStopDate",pillStopDate)
+ // console.log("pillStopDate",pillStopDate)
if (pillStartDate < ganttStartDate) {
pill.startDate = ganttStartDate;
pill.disableStartResize = true;
@@ -469,19 +471,19 @@ var GanttRow = Widget.extend({
// left = pill.startDate.diff(pill.startDate.clone().startOf('hour'), 'minutes');
left = pill.startDate.diff(pill.startDate.clone().startOf('day'), 'minutes') % (shift_time * 60);
- console.log('left', left)
+ // console.log('left', left)
pill.leftMargin = (left / (shift_time * 60)) * 100;
- console.log('pill.leftMargin', pill.leftMargin)
+ // console.log('pill.leftMargin', pill.leftMargin)
diff = pill.stopDate.diff(pill.startDate, 'minutes');
- console.log('diff', diff)
+ // console.log('diff', diff)
var gapSize = pill.stopDate.diff(pill.startDate, 'hours') - shift_time; // Eventually compensate border(s) width
- console.log('gapSize', gapSize)
+ // console.log('gapSize', gapSize)
widthPill = (diff / (shift_time * 60)) * 100;
- console.log('widthPill', widthPill)
+ // console.log('widthPill', widthPill)
margin = pill.aggregatedPills ? 0 : 4;
- console.log('margin', margin)
+ // console.log('margin', margin)
pill.width = gapSize > 0 ? `calc(${widthPill}% + ${gapSize}px - ${margin}px)` : `calc(${widthPill}% - ${margin}px)`;
- console.log('pill.width', pill.width)
+ // console.log('pill.width', pill.width)
break;
// left = pill.startDate.diff(pill.startDate.clone().startOf('hour'), 'minutes');
@@ -711,16 +713,16 @@ var GanttRow = Widget.extend({
this.pills.forEach(function (currentPill) {
var skippedSlots = [];
slotsToFill.some(function (currentSlot) {
- console.log('currentPill.startDate1111111111', currentPill)
+ // console.log('currentPill.startDate1111111111', currentPill)
// console.log('currentSlot.stop2222222222222', currentSlot.stop)
var fitsInThisSlot = currentPill.startDate < currentSlot.stop;
- console.log('fitsInThisSlot', fitsInThisSlot)
+ // console.log('fitsInThisSlot', fitsInThisSlot)
if (fitsInThisSlot) {
currentSlot.pills.push(currentPill);
- console.log('currentSlot.pills', currentSlot.pills)
+ // console.log('currentSlot.pills', currentSlot.pills)
} else {
skippedSlots.push(currentSlot);
- console.log('skippedSlots', skippedSlots)
+ // console.log('skippedSlots', skippedSlots)
}
return fitsInThisSlot;
});
@@ -813,7 +815,7 @@ var GanttRow = Widget.extend({
stop: slotStop,
pills: [],
});
- console.log('啊啊啊啊this啊啊啊啊.啊啊啊啊slots啊啊啊啊', this.slots)
+ // console.log('啊啊啊啊this啊啊啊啊.啊啊啊啊slots啊啊啊啊', this.slots)
}
},
/**
@@ -1161,6 +1163,8 @@ var GanttRow = Widget.extend({
* @param {MouseEvent} ev
*/
_onButtonAddClicked: function (ev) {
+ ev.stopPropagation()
+ ev.cancelBubble
var date = moment($(ev.currentTarget).closest('.o_gantt_cell').data('date'));
this.trigger_up('add_button_clicked', {
date: date,
@@ -1174,6 +1178,8 @@ var GanttRow = Widget.extend({
* @param {MouseEvent} ev
*/
_onButtonPlanClicked: function (ev) {
+ ev.stopPropagation()
+ ev.cancelBubble
var date = moment($(ev.currentTarget).closest('.o_gantt_cell').data('date'));
this.trigger_up('plan_button_clicked', {
date: date,
@@ -1246,6 +1252,8 @@ var GanttRow = Widget.extend({
* @param {MouseEvent} ev
*/
_onPillClicked: function (ev) {
+ ev.stopPropagation()
+ ev.cancelBubble
if (!this.isGroup) {
this.trigger_up('pill_clicked', {
target: $(ev.currentTarget),
@@ -1288,6 +1296,80 @@ var GanttRow = Widget.extend({
}
}
},
+ // _getTimeSlot(scale = 'day', date = new Date()) {
+ // if(scale == 'day') {
+ // return [date, date]
+ // } else if(scale == 'week') {
+ //
+ // const week = new Date(date).getDay()
+ // const before = week - 1
+ // const after = 7 - week
+ // return [+new Date(date) - (before * 86400000), +new Date(date) + (after * 86400000)]
+ // } else if(scale == 'month') {
+ //
+ // const year = new Date(date).getFullYear()
+ // const month = new Date(date).getMonth() + 1
+ // const monthDay = new Date(year, month, 0).getDate()
+ // const before = new Date(year + '/' + (month < 10 ? '0' + month : month) + '/01')
+ // const after = new Date(year + '/' + (month < 10 ? '0' + month : month) + '/' +monthDay)
+ // return [before, after]
+ // } else {
+ //
+ // const year = new Date(date).getFullYear()
+ // return [year + '/01/01', year + '/12/31']
+ // }
+ // },
+ _onColClicked(e) {
+ if(sessionStorage.getItem('scale')) return
+ const scale = ['day', 'week', 'month', 'year']
+ const index = scale.indexOf(this.viewInfo.state.scale)
+ const dom = $('.o_gantt_button_scale.btn.btn-secondary.active').prev()
+ const nextScale = scale[index - 1]
+ if(!nextScale) return;
+ sessionStorage.setItem('scale', nextScale)
+ sessionStorage.setItem('time', e.target.dataset.date )
+ if(dom) {
+ dom.click()
+ }
+ },
+ /**
+ * 鼠标滚动
+ *
+ * @private
+ */
+ _onColMouseWheel: function (e) {
+ if(sessionStorage.getItem('scale')) return
+ const scale = ['day', 'week', 'month', 'year']
+
+ let direction
+ if(e.originalEvent.wheelDelta) { //判断浏览器IE,谷歌滑轮事件
+ direction = e.originalEvent.wheelDelta > 0
+ } else { //Firefox滑轮事件
+ direction = e.originalEvent.detail > 0
+ }
+ const index = scale.indexOf(this.viewInfo.state.scale)
+ if(direction) { // 滚轮向上滑动
+ const dom = $('.o_gantt_button_scale.btn.btn-secondary.active').prev()
+ const nextScale = scale[index - 1]
+ if(!nextScale) return;
+ sessionStorage.setItem('scale', nextScale)
+ // sessionStorage.setItem('time', JSON.stringify(this._getTimeSlot(nextScale, e.target.dataset.date)))
+ sessionStorage.setItem('time', e.target.dataset.date || e.currentTarget.dataset.date)
+ if(dom) {
+ dom.click()
+ }
+ } else { // 滚轮向下滑动
+ const dom = $('.o_gantt_button_scale.btn.btn-secondary.active').next()
+ const nextScale = scale[index + 1]
+ if(!nextScale) return;
+ sessionStorage.setItem('scale', nextScale)
+ sessionStorage.setItem('time', e.target.dataset.date || e.currentTarget.dataset.date)
+ // sessionStorage.setItem('time', JSON.stringify(this._getTimeSlot(nextScale, e.target.dataset.date)))
+ if(dom) {
+ dom.click()
+ }
+ }
+ }
});
return GanttRow;
diff --git a/web_gantt/static/src/xml/web_gantt.xml b/web_gantt/static/src/xml/web_gantt.xml
index 76910940..7e2da53f 100644
--- a/web_gantt/static/src/xml/web_gantt.xml
+++ b/web_gantt/static/src/xml/web_gantt.xml
@@ -77,13 +77,13 @@
- 夜班(00:00-08:00)
+ 早班(00:00-08:00)
- 早班(08:00-16:00)
+ 白班(08:00-16:00)
- 晚班(16:00-00:00)
+ 晚班(16:00-24:00)