From 9dc653694a0f9f056eb9e3ba3472509fe7efa09b Mon Sep 17 00:00:00 2001
From: mgw <1392924357@qq.com>
Date: Fri, 22 Sep 2023 09:31:56 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=89=8D=E6=9A=82=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_plan/__manifest__.py | 3 +-
sf_plan/models/__init__.py | 1 +
sf_plan/models/duration.py | 25 +++++++++++
sf_plan/security/ir.model.access.csv | 1 +
sf_plan/views/duration_view.xml | 52 +++++++++++++++++++++++
sf_plan/views/view.xml | 2 +-
web_gantt/static/src/js/gantt_renderer.js | 15 +++++--
web_gantt/static/src/js/gantt_row.js | 45 ++++++++++++++++++--
web_gantt/static/src/xml/web_gantt.xml | 13 +++++-
9 files changed, 146 insertions(+), 11 deletions(-)
create mode 100644 sf_plan/models/duration.py
create mode 100644 sf_plan/views/duration_view.xml
diff --git a/sf_plan/__manifest__.py b/sf_plan/__manifest__.py
index 54f3b064..430084ef 100644
--- a/sf_plan/__manifest__.py
+++ b/sf_plan/__manifest__.py
@@ -16,7 +16,8 @@
'depends': ['sf_manufacturing'],
'data': [
'security/ir.model.access.csv',
- 'views/view.xml'
+ 'views/view.xml',
+ 'views/duration_view.xml'
],
'assets': {
diff --git a/sf_plan/models/__init__.py b/sf_plan/models/__init__.py
index c47d4ff3..bc694edf 100644
--- a/sf_plan/models/__init__.py
+++ b/sf_plan/models/__init__.py
@@ -2,3 +2,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import custom_plan
+from . import duration
diff --git a/sf_plan/models/duration.py b/sf_plan/models/duration.py
new file mode 100644
index 00000000..6fbe34e2
--- /dev/null
+++ b/sf_plan/models/duration.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+import base64
+import json, requests
+from odoo import models, fields, api, _
+from datetime import datetime, timedelta
+from odoo.exceptions import UserError, ValidationError
+
+
+class HoleDuration(models.Model):
+ _name = 'hole.duration'
+ _description = 'Hole Duration'
+
+ hole_diameter = fields.Selection([('3', '≤¢3'), ('6', '≤¢6'), ('10', '≤¢10'), ('12', '≤¢12'), ('16', '≤¢16'), ('25', '≤¢25')], string='孔径', required=True)
+ name = fields.Char(string='名称', required=True, default='钻孔')
+ hole_depth = fields.Selection([
+ ('10', '≤10'),
+ ('30', '≤30'),
+ ('50', '≤50'),
+ ('70', '≤70'),
+ ('90', '≤90'),
+ ('100', '≤100'),
+ ('120', '≤120'),
+ ('150', '≤150')], string='深度', required=True)
+ working_hours = fields.Float(string='工时', required=True)
+ hole_expansion = fields.Float(string='扩孔', required=True, default=0.6)
diff --git a/sf_plan/security/ir.model.access.csv b/sf_plan/security/ir.model.access.csv
index 3a1a20c9..9fe7bb5c 100644
--- a/sf_plan/security/ir.model.access.csv
+++ b/sf_plan/security/ir.model.access.csv
@@ -1,6 +1,7 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sf_production_plan,sf.production.plan,model_sf_production_plan,base.group_user,1,1,1,1
access_sf_machine_schedule,sf.machine.schedule,model_sf_machine_schedule,base.group_user,1,1,1,1
+access_hole_duration,hole.duration,model_hole_duration,base.group_user,1,1,1,1
diff --git a/sf_plan/views/duration_view.xml b/sf_plan/views/duration_view.xml
new file mode 100644
index 00000000..c592fae3
--- /dev/null
+++ b/sf_plan/views/duration_view.xml
@@ -0,0 +1,52 @@
+
+
+
+
+ hole.duration.tree
+ hole.duration
+
+
+
+
+
+
+
+
+
+
+
+
+ hole.duration.form
+ hole.duration
+
+
+
+
+
+
+ 孔加工
+ ir.actions.act_window
+ hole.duration
+ tree,form
+
+
+
+
+
+
diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml
index 49a42c5f..5df9e8db 100644
--- a/sf_plan/views/view.xml
+++ b/sf_plan/views/view.xml
@@ -128,7 +128,7 @@
decoration-success="state == 'done'"
progress_bar="name"
form_view_id="sf_production_plan_form"
- default_scale="week"
+ default_scale="day"
scales="day,week,month,year"
precision="{'day': 'hour:quarter', 'week': 'day:half', 'month': 'day', 'year': 'month:quarter'}">
diff --git a/web_gantt/static/src/js/gantt_renderer.js b/web_gantt/static/src/js/gantt_renderer.js
index d0c55a1d..f5b9ccc2 100644
--- a/web_gantt/static/src/js/gantt_renderer.js
+++ b/web_gantt/static/src/js/gantt_renderer.js
@@ -684,10 +684,18 @@ export default AbstractRenderer.extend(WidgetAdapterMixin, {
const stopDate = this.state.stopDate;
let day = this.state.startDate;
const dates = [];
- while (day <= stopDate) {
- dates.push(day);
- day = day.clone().add(1, token);
+ if (this.state.scale == "day") {
+ while (day <= stopDate) {
+ dates.push(day);
+ day = day.clone().add(8, token);
+ }
+ } else {
+ while (day <= stopDate) {
+ dates.push(day);
+ day = day.clone().add(1, token);
+ }
}
+ console.log(dates)
return dates;
},
/**
@@ -806,6 +814,7 @@ export default AbstractRenderer.extend(WidgetAdapterMixin, {
* @override
*/
async _renderView() {
+ console.log('this.state', this.state)
const oldRowWidgets = Object.keys(this.rowWidgets).map((rowId) => {
return this.rowWidgets[rowId];
});
diff --git a/web_gantt/static/src/js/gantt_row.js b/web_gantt/static/src/js/gantt_row.js
index 4527a2ad..03de908b 100644
--- a/web_gantt/static/src/js/gantt_row.js
+++ b/web_gantt/static/src/js/gantt_row.js
@@ -261,12 +261,18 @@ var GanttRow = Widget.extend({
_adaptPills: function () {
var self = this;
var dateStartField = this.state.dateStartField;
+ console.log("dateStartField",dateStartField)
var dateStopField = this.state.dateStopField;
+ console.log("dateStopField",dateStopField)
var ganttStartDate = this.state.startDate;
+ console.log("ganttStartDate",ganttStartDate)
var ganttStopDate = this.state.stopDate;
+ console.log("ganttStopDate",ganttStopDate)
this.pills.forEach(function (pill) {
var pillStartDate = self._convertToUserTime(pill[dateStartField]);
+ console.log("pillStartDate",pillStartDate)
var pillStopDate = self._convertToUserTime(pill[dateStopField]);
+ console.log("pillStopDate",pillStopDate)
if (pillStartDate < ganttStartDate) {
pill.startDate = ganttStartDate;
pill.disableStartResize = true;
@@ -459,13 +465,44 @@ var GanttRow = Widget.extend({
let margin;
switch (self.state.scale) {
case 'day':
- left = pill.startDate.diff(pill.startDate.clone().startOf('hour'), 'minutes');
- pill.leftMargin = (left / 60) * 100;
+ // left = pill.startDate.diff(pill.startDate.clone().startOf('hour'), 'minutes');
+ // console.log('left', left)
+ // pill.leftMargin = (left / 60) * 100;
+ // console.log('pill.leftMargin', pill.leftMargin)
+ // diff = pill.stopDate.diff(pill.startDate, 'minutes');
+ // console.log('diff', diff)
+ // var gapSize = pill.stopDate.diff(pill.startDate, 'hours') - 1; // Eventually compensate border(s) width
+ // console.log('gapSize', gapSize)
+ // widthPill = (diff / 60) * 100;
+ // console.log('widthPill', widthPill)
+ // margin = pill.aggregatedPills ? 0 : 4;
+ // console.log('margin', margin)
+ // pill.width = gapSize > 0 ? `calc(${widthPill}% + ${gapSize}px - ${margin}px)` : `calc(${widthPill}% - ${margin}px)`;
+ // console.log('pill.width', pill.width)
+ // break;
+
+ left = pill.startDate.diff(pill.startDate.clone().startOf('hour'), 'minutes');
+ console.log('left', left)
+ left = (left / (8 * 60)) * 100; // 修改这里,以8小时为单位
+ console.log('adjusted left', left)
+ pill.leftMargin = left;
+
diff = pill.stopDate.diff(pill.startDate, 'minutes');
- var gapSize = pill.stopDate.diff(pill.startDate, 'hours') - 1; // Eventually compensate border(s) width
- widthPill = (diff / 60) * 100;
+ console.log('diff', diff)
+ diff = (diff / (8 * 60)) * 100; // 修改这里,以8小时为单位
+ console.log('adjusted diff', diff)
+
+ var gapSize = pill.stopDate.diff(pill.startDate, 'hours') / 8 - 1; // 修改这里,以8小时为单位
+ console.log('gapSize', gapSize)
+
+ widthPill = diff;
+ console.log('widthPill', widthPill)
+
margin = pill.aggregatedPills ? 0 : 4;
+ console.log('margin', margin)
+
pill.width = gapSize > 0 ? `calc(${widthPill}% + ${gapSize}px - ${margin}px)` : `calc(${widthPill}% - ${margin}px)`;
+ console.log('pill.width', pill.width)
break;
case 'week':
case 'month':
diff --git a/web_gantt/static/src/xml/web_gantt.xml b/web_gantt/static/src/xml/web_gantt.xml
index 264a37ae..5af631a8 100644
--- a/web_gantt/static/src/xml/web_gantt.xml
+++ b/web_gantt/static/src/xml/web_gantt.xml
@@ -76,8 +76,17 @@
-
-
+
+ 夜班
+
+
+ 早班
+
+
+ 晚班
+
+
+