Browse Source

s curve zoom

pull/1/head
farhantock 1 year ago
parent
commit
04146eeae7
  1. 68
      view-mode/function/overlaySCurve.js

68
view-mode/function/overlaySCurve.js

@ -105,21 +105,79 @@ 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;
//jika summary s curve // Determine the appropriate data points based on the Gantt chart zoom level
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) {
var plannedDurations = cumulativePlannedDurations.map((item) => { plannedDurations = plannedDurations.map((item) => {
return item / maxPlan * 100; return item / maxPlan * 100;
}) })
var realDurations = cumulativeRealDurations.map((item) => { realDurations = realDurations.map((item) => {
return item/maxPlan*100; return item / maxReal * 100;
}) })
}
return { planned: plannedDurations, real: realDurations, dates: dates }; return { planned: plannedDurations, real: realDurations, 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
return {planned: cumulativePlannedDurations, real: cumulativeRealDurations, dates: dates}; // 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();

Loading…
Cancel
Save