Browse Source

update before merge from adw

pull/1/head
farhantock 11 months ago
parent
commit
5f20af482a
  1. 136
      view-mode/function/overlaySCurve.js

136
view-mode/function/overlaySCurve.js

@ -67,26 +67,26 @@ function getSCurveData() {
}; };
function toggleOverlay() { function toggleOverlay() {
if (overlayControl.isOverlayVisible(lineOverlay)) { if(overlayControl.isOverlayVisible(lineOverlay)){
gantt.config.readonly = false; gantt.config.readonly = false;
overlayControl.hideOverlay(lineOverlay); overlayControl.hideOverlay(lineOverlay);
gantt.$root.classList.remove("overlay_visible"); gantt.$root.classList.remove("overlay_visible");
} else { }else{
gantt.config.readonly = true; gantt.config.readonly = true;
overlayControl.showOverlay(lineOverlay); overlayControl.showOverlay(lineOverlay);
gantt.$root.classList.add("overlay_visible"); gantt.$root.classList.add("overlay_visible");
} }
} }
function getChartScaleRange() { function getChartScaleRange(){
var tasksRange = gantt.getSubtaskDates(); var tasksRange = gantt.getSubtaskDates();
var cells = []; var cells = [];
var scale = gantt.getScale(); var scale = gantt.getScale();
if (!tasksRange.start_date) { if(!tasksRange.start_date){
return scale.trace_x; return scale.trace_x;
} }
scale.trace_x.forEach(function (date) { scale.trace_x.forEach(function(date){
// if(date >= tasksRange.start_date && date <= tasksRange.end_date){ // if(date >= tasksRange.start_date && date <= tasksRange.end_date){
// cells.push(date); // cells.push(date);
// } // }
@ -95,7 +95,7 @@ function getChartScaleRange() {
return cells; return cells;
} }
function getProgressLine() { function getProgressLine(){
// As long as the progress data length is same with chart scale range (period) then it's fine. // As long as the progress data length is same with chart scale range (period) then it's fine.
getSCurveData(); getSCurveData();
// console.log("apa ", return_first); // console.log("apa ", return_first);
@ -105,85 +105,27 @@ function getProgressLine() {
var maxPlan = cumulativePlannedDurations[cumulativePlannedDurations.length - 1] var maxPlan = cumulativePlannedDurations[cumulativePlannedDurations.length - 1]
var maxReal = cumulativeRealDurations[cumulativeRealDurations.length - 1] var maxReal = cumulativeRealDurations[cumulativeRealDurations.length - 1]
var dates = return_first.data[0].data.date; var dates = return_first.data[0].data.date;
// Determine the appropriate data points based on the Gantt chart zoom level //jika summary s curve
var chartScaleRange = getChartScaleRange();
var zoomLevel = gantt.ext.zoom.getCurrentLevel();
// Adjust data points based on the zoom level
var plannedDurations, realDurations;
if (zoomLevel === 2) {
// Adjust data to monthly points
plannedDurations = adjustDataToZoom(dates, cumulativePlannedDurations, chartScaleRange, 2).data;
realDurations = adjustDataToZoom(dates, cumulativeRealDurations, chartScaleRange, 2).data;
dates = adjustDataToZoom(dates, cumulativeRealDurations, chartScaleRange, 2).dates;
} else if (zoomLevel === 1) {
// Adjust data to weekly points
plannedDurations = adjustDataToZoom(dates, cumulativePlannedDurations, chartScaleRange, 1).data;
realDurations = adjustDataToZoom(dates, cumulativeRealDurations, chartScaleRange, 1).data;
dates = adjustDataToZoom(dates, cumulativeRealDurations, chartScaleRange, 1).dates;
} else {
// Default: Use daily data points
plannedDurations = cumulativePlannedDurations;
realDurations = cumulativeRealDurations;
}
if (maxReal > 100 || maxPlan > 100) { if (maxReal > 100 || maxPlan > 100) {
plannedDurations = plannedDurations.map((item) => { var plannedDurations = cumulativePlannedDurations.map((item) => {
return item / maxPlan * 100; return item/maxPlan*100;
}) })
realDurations = realDurations.map((item) => { var realDurations = cumulativeRealDurations.map((item) => {
return item / maxReal * 100; return item/maxPlan*100;
}) })
return {planned: plannedDurations, real: realDurations, dates: dates};
} }
return { planned: plannedDurations, real: realDurations, dates: dates }; return {planned: cumulativePlannedDurations, real: cumulativeRealDurations, dates: dates};
}
function adjustDataToZoom(dates, data, chartScaleRange, zoomLevel) {
// Implement logic to adjust data points based on the Gantt chart zoom level
// For example, if zoomLevel is 'month', aggregate daily data to monthly data
// Placeholder logic: This example assumes that the chartScaleRange is in days
var newData = [];
var newDates = [];
var aggregateValue = 0;
for (var i = 0; i < data.length; i++) {
aggregateValue = data[i];
if (zoomLevel === 2 && i % 30 === 29) {
// Aggregate data for each month (assuming 30 days in a month)
newData.push(aggregateValue);
newDates.push(dates[i]);
aggregateValue = 0;
} else if (zoomLevel === 1 && (i + 1) % 7 === 0) {
// Aggregate data for each week
newData.push(aggregateValue);
newDates.push(dates[i]);
aggregateValue = 0;
}
}
// If there are remaining data points after the loop, add them to the result
if (aggregateValue > 0) {
newData.push(aggregateValue);
newDates.push(dates[data.length - 1]);
}
return {
data: newData,
dates: newDates
};
} }
function getScalePaddings(values) { function getScalePaddings(values){
let zoom = gantt.ext.zoom.getCurrentLevel();
var scale = gantt.getScale(); var scale = gantt.getScale();
var dataRange = gantt.getSubtaskDates(); var dataRange = gantt.getSubtaskDates();
// let minDate = new Date(); // let minDate = new Date();
// let maxDate = new Date(); // let maxDate = new Date();
let minValueDate = new Date(values.dates[0]); let minValueDate = new Date(values.dates[0]);
let maxValueDate = new Date(values.dates[values.dates.length - 1]); let maxValueDate = new Date(values.dates[values.dates.length -1]);
// gantt.eachTask(function(task){ // gantt.eachTask(function(task){
// let plannedEarlier = task.planned_start < task.start_date; // let plannedEarlier = task.planned_start < task.start_date;
@ -203,11 +145,11 @@ function getScalePaddings(values) {
// }) // })
var padding = { var padding = {
left: 0, left:0,
right: 0 right:0
}; };
if (dataRange.start_date) { if(dataRange.start_date){
var yScaleLabelsWidth = 48; var yScaleLabelsWidth = 48;
// fine tune values in order to align chart with the scale range // fine tune values in order to align chart with the scale range
padding.left = gantt.posFromDate(minValueDate); padding.left = gantt.posFromDate(minValueDate);
@ -219,23 +161,23 @@ function getScalePaddings(values) {
} }
var myChart; var myChart;
var lineOverlay = overlayControl.addOverlay(function (container) { var lineOverlay = overlayControl.addOverlay(function(container) {
var values = getProgressLine(); var values = getProgressLine();
var scaleLabels = []; var scaleLabels = [];
// if(parts[2] && parts[2] == '1'){ // if(parts[2] && parts[2] == '1'){
// values.dates.forEach(function(date){ // values.dates.forEach(function(date){
// var dateScale = new Date(date); // var dateScale = new Date(date);
// scaleLabels.push(dateToStr(dateScale)); // scaleLabels.push(dateToStr(dateScale));
// }) // })
// } else { // } else {
// var chartScale = getChartScaleRange(); // var chartScale = getChartScaleRange();
// chartScale.forEach(function(date){ // chartScale.forEach(function(date){
// scaleLabels.push(dateToStr(date)); // scaleLabels.push(dateToStr(date));
// }); // });
// } // }
values.dates.forEach(function (date) { values.dates.forEach(function(date){
var dateScale = new Date(date); var dateScale = new Date(date);
scaleLabels.push(dateToStr(dateScale)); scaleLabels.push(dateToStr(dateScale));
}) })
@ -245,7 +187,7 @@ var lineOverlay = overlayControl.addOverlay(function (container) {
canvas.style.width = container.offsetWidth + "px"; canvas.style.width = container.offsetWidth + "px";
var ctx = canvas.getContext("2d"); var ctx = canvas.getContext("2d");
if (myChart) { if(myChart){
myChart.destroy(); myChart.destroy();
} }
myChart = new Chart(ctx, { myChart = new Chart(ctx, {
@ -276,9 +218,9 @@ var lineOverlay = overlayControl.addOverlay(function (container) {
layout: { layout: {
padding: getScalePaddings(values) padding: getScalePaddings(values)
}, },
onResize: function (chart, newSize) { onResize: function(chart, newSize) {
var dataRange = gantt.getSubtaskDates(); var dataRange = gantt.getSubtaskDates();
if (dataRange.start_date) { if(dataRange.start_date){
// align chart with the scale range // align chart with the scale range
chart.options.layout.padding = getScalePaddings(values); chart.options.layout.padding = getScalePaddings(values);
} }
@ -290,7 +232,7 @@ var lineOverlay = overlayControl.addOverlay(function (container) {
mode: "index", mode: "index",
intersect: false, intersect: false,
callbacks: { callbacks: {
label: function (tooltipItem, data) { label: function(tooltipItem, data) {
var dataset = data.datasets[tooltipItem.datasetIndex]; var dataset = data.datasets[tooltipItem.datasetIndex];
return dataset.label + ": " + dataset.data[tooltipItem.index] + "%"; return dataset.label + ": " + dataset.data[tooltipItem.index] + "%";
} }
@ -303,7 +245,7 @@ var lineOverlay = overlayControl.addOverlay(function (container) {
scales: { scales: {
xAxes: [{ xAxes: [{
labels: scaleLabels, labels: scaleLabels,
gridLines: { gridLines:{
display: false display: false
}, },
ticks: { ticks: {
@ -311,9 +253,9 @@ var lineOverlay = overlayControl.addOverlay(function (container) {
} }
}, },
{ {
position: "top", position:"top",
labels: scaleLabels, labels: scaleLabels,
gridLines: { gridLines:{
display: false display: false
}, },
ticks: { ticks: {
@ -324,7 +266,7 @@ var lineOverlay = overlayControl.addOverlay(function (container) {
yAxes: [{ yAxes: [{
display: true, display: true,
gridLines: { gridLines: {
display: false display:false
}, },
ticks: { ticks: {
display: true, display: true,

Loading…
Cancel
Save