* [task#144206,done,2h] optimize task compute delay logic for the stage list.

This commit is contained in:
tianshujie
2025-05-27 16:39:13 +08:00
committed by 田淑杰
parent 9092b8f9ba
commit cae4cab141
3 changed files with 16 additions and 10 deletions
+4 -4
View File
@@ -2009,11 +2009,11 @@ class executionModel extends model
if(isset($teamGroups[$task->id])) $task->team = $teamGroups[$task->id];
/* Delayed or not?. */
if(!empty($workingDays) && !empty($task->deadline) && !helper::isZeroDate($task->deadline))
$isNotCancel = !in_array($task->status, array('cancel', 'closed')) || ($task->status == 'closed' && !helper::isZeroDate($task->finishedDate) && $task->closedReason != 'cancel');
$isComputeDelay = !helper::isZeroDate($task->deadline) && $isNotCancel;
if($isComputeDelay)
{
$endDate = $today;
if(($task->status == 'done' || $task->status == 'closed') && !helper::isZeroDate($task->finishedDate) && $task->finishedDate < $today) $endDate = substr($task->finishedDate, 0, 10);
$endDate = helper::isZeroDate($task->finishedDate) ? $today : $task->finishedDate;
$betweenDays = $this->holiday->getDaysBetween($task->deadline, $endDate);
if($betweenDays)
{
+11 -5
View File
@@ -873,16 +873,21 @@ class programplanModel extends model
->fetchAll('id');
}
$plans = $this->loadModel('execution')->getByIdList($planIdList);
$isGantt = $this->app->rawModule == 'programplan' && $this->app->rawMethod == 'browse';
if($isGantt) $plans = $this->loadModel('execution')->getByIdList($planIdList);
$today = helper::today();
$begin = $today;
$end = $today;
$deadlineList = array();
foreach($tasks as $taskID => $task)
{
$plan = $plans[$task->execution];
$deadline = helper::isZeroDate($task->deadline) ? $plan->end : $task->deadline;
$begin = $deadline < $begin ? $deadline : $begin;
if(!$isGantt && helper::isZeroDate($task->deadline)) continue;
$deadline = $task->deadline;
if(helper::isZeroDate($task->deadline)) $deadline = $plans[$task->execution]->end;
$begin = $deadline < $begin ? $deadline : $begin;
$deadlineList[$taskID] = $deadline;
}
@@ -901,7 +906,8 @@ class programplanModel extends model
/* Delayed or not?. */
$task->delay = 0;
$isComputeDelay = !in_array($task->status, array('cancel', 'closed')) || ($task->status == 'closed' && !helper::isZeroDate($task->finishedDate) && $task->closedReason != 'cancel');
$isNotCancel = !in_array($task->status, array('cancel', 'closed')) || ($task->status == 'closed' && !helper::isZeroDate($task->finishedDate) && $task->closedReason != 'cancel');
$isComputeDelay = $isNotCancel && !empty($deadlineList[$taskID]);
if($isComputeDelay)
{
$endDate = helper::isZeroDate($task->finishedDate) ? $today : $task->finishedDate;
+1 -1
View File
@@ -86,7 +86,7 @@ window.onRenderCell = function(result, {col, row})
result[1].attrs.title = typeof data.rawName != 'undefined' && data.rawName ? data.rawName : data.name;
if(html) result.unshift({className: 'flex items-center', html: html});
if(typeof data.delay != 'undefined' && data.delay && !['done', 'cancel', 'close'].includes(data.status) && data.type != 'point' && data.end != '' && data.end != '0000-00-00' && today > data.end)
if(typeof data.delay != 'undefined' && data.delay > 0 && data.type != 'point' && data.end != '' && data.end != '0000-00-00' && today > data.end)
{
result.push({html: '<span class="label danger-pale ml-1 flex-none nowrap">' + delayWarning.replace('%s', data.delay) + '</span>', className: 'flex items-end', style: { flexDirection: "column" } });
}