* [task#140897,done,5h,0h] Finish parent task time updates based on child task time changes.

This commit is contained in:
wangyuting
2025-04-14 10:41:30 +08:00
committed by 刘刚
parent dbc85eef48
commit 8864541cb1
3 changed files with 40 additions and 13 deletions
+28 -7
View File
@@ -243,12 +243,30 @@ function exitHandler()
}
}
/* 父级的开始结束跟着子级变动。 */
function changeParentTask(child, id)
{
let task = gantt.getTask(id);
if(task.type != 'task') return false;
if(child.start_date < task.start_date) task.start_date = child.start_date;
if(child.end_date > task.end_date) task.end_date = child.end_date;
let from = new Date(task.start_date);
let to = new Date(task.end_date);
task.begin = from;
task.deadline = (new Date(to.valueOf() - 1));
gantt.updateTask(task.id, task);
if(task.parent) changeParentTask(task, task.parent);
}
/* Validate task drag. */
function validateResources(id)
{
let task = gantt.getTask(id);
let from = new Date(task.start_date);
let to = new Date(task.end_date);
let task = gantt.getTask(id);
let from = new Date(task.start_date);
let to = new Date(task.end_date);
let status = task.status;
let type = task.type;
let statusLang = ganttLang.taskStatusList['wait'];
@@ -266,9 +284,8 @@ function validateResources(id)
}
task.begin = from;
task.deadline = (new Date(to.valueOf() - 1));;
task.deadline = (new Date(to.valueOf() - 1));
gantt.updateTask(task.id);
let itemID;
if(type == 'task') itemID = task.id.split("-")[1];
if(type == 'plan') itemID = task.id;
@@ -294,6 +311,11 @@ function validateResources(id)
zui.Messager.show({content: response.message, type: 'danger-outline', icon: 'exclamation-sign'});
flag = false;
}
else
{
gantt.updateTask(task.id, task);
if(task.parent) changeParentTask(task, task.parent);
}
}
});
@@ -415,7 +437,6 @@ function initGantt()
gantt.config.static_background = true;
gantt.config.show_task_cells = false;
gantt.config.row_height = 32;
gantt.config.min_column_width = 40;
gantt.config.details_on_create = false;
gantt.config.duration_unit = "day";
setScalesByZoom(zooming);
@@ -665,7 +686,7 @@ function initGantt()
});
/* Link attachEvent onAfterTaskDrag */
gantt.attachEvent("onBeforeTaskChanged", function(id, mode, task){return validateResources(id)});
gantt.attachEvent("onBeforeTaskChanged", function(id, mode, task){return validateResources(id);});
gantt.attachEvent("onRowDragStart", function(id, target, e)
{
+2 -2
View File
@@ -664,7 +664,7 @@ class programplanTao extends programplanModel
$data->progress = $plan->progress / 100;
$data->taskProgress = $plan->progress . '%';
if($data->endDate > $data->start_date) $data->duration = $this->getDuration($data->start_date, $data->endDate);
if($data->endDate > $data->start_date) $data->duration = helper::diffDate($data->endDate, $data->start_date) + 1;
if(empty($data->start_date) || empty($data->endDate)) $data->duration = 1;
if(!empty($this->config->setPercent)) $data->percent = $plan->percent;
@@ -805,7 +805,7 @@ class programplanTao extends programplanModel
$data->textColor = zget($this->lang->execution->gantt->textColor, $task->pri, $this->lang->execution->gantt->defaultTextColor);
$data->bar_height = $this->lang->execution->gantt->bar_height;
if($data->endDate > $data->start_date) $data->duration = $this->getDuration($data->start_date, $data->endDate);
if($data->endDate > $data->start_date) $data->duration = helper::diffDate($data->endDate, $data->start_date) + 1;
if(empty($data->start_date) or empty($data->endDate)) $data->duration = 1;
if($data->start_date) $data->start_date = date('d-m-Y', strtotime($data->start_date));
+10 -4
View File
@@ -3231,13 +3231,19 @@ class taskModel extends model
{
$this->app->loadLang('project');
$changeTable = $postData->type == 'task' ? TABLE_TASK : TABLE_PROJECT;
$actionType = $postData->type == 'task' ? 'task' : 'execution';
$oldObject = $this->dao->select('*')->from($changeTable)->where('id')->eq($postData->id)->fetch();
$postData->endDate = date('Y-m-d', strtotime('-1 day', strtotime($postData->endDate)));
$changeTable = $postData->type == 'task' ? TABLE_TASK : TABLE_PROJECT;
$actionType = $postData->type == 'task' ? 'task' : 'execution';
$oldObject = $this->dao->select('*')->from($changeTable)->where('id')->eq($postData->id)->fetch();
if($postData->type == 'task')
{
$this->taskTao->updateTaskEsDateByGantt($postData);
$oldObject->estStarted = $postData->startDate;
$oldObject->deadline = $postData->endDate;
unset($oldObject->canceledDate);
unset($oldObject->finishedDate);
unset($oldObject->closedDate);
$this->loadModel('task')->update($oldObject);
}
elseif($postData->type == 'plan')
{