* Fix bug#25004.

This commit is contained in:
xieqiyu
2022-07-27 13:31:48 +08:00
parent 61babc61a5
commit cd8247954c
4 changed files with 48 additions and 5 deletions

View File

@@ -1271,13 +1271,14 @@ class productModel extends model
}
/* Compute totalReal and progress. */
foreach($hours as $hour)
$this->loadModel('project');
foreach($hours as $projectID => $hour)
{
$hour->totalEstimate = round($hour->totalEstimate, 1) ;
$hour->totalConsumed = round($hour->totalConsumed, 1);
$hour->totalLeft = round($hour->totalLeft, 1);
$hour->totalReal = $hour->totalConsumed + $hour->totalLeft;
$hour->progress = $hour->totalReal ? round($hour->totalConsumed / $hour->totalReal, 2) * 100 : 0;
$hour->progress = $projects[$projectID]->model == 'waterfall' ? $this->project->getWaterfallProgress($projectID) : ($hour->totalReal ? round($hour->totalConsumed / $hour->totalReal, 2) * 100 : 0);
}
/* Get the number of project teams. */

View File

@@ -1434,13 +1434,14 @@ class programModel extends model
}
/* Compute totalReal and progress. */
foreach($hours as $hour)
$this->loadModel('project');
foreach($hours as $projectID => $hour)
{
$hour->totalEstimate = round($hour->totalEstimate, 1) ;
$hour->totalConsumed = round($hour->totalConsumed, 1);
$hour->totalLeft = round($hour->totalLeft, 1);
$hour->totalReal = $hour->totalConsumed + $hour->totalLeft;
$hour->progress = $hour->totalReal ? round($hour->totalConsumed / $hour->totalReal, 2) * 100 : 0;
$hour->progress = $projects[$projectID]->model == 'waterfall' ? $this->project->getWaterfallProgress($projectID) : ($hour->totalReal ? round($hour->totalConsumed / $hour->totalReal, 2) * 100 : 0);
}
/* Get the number of left tasks. */

View File

@@ -393,6 +393,47 @@ class projectModel extends model
->fetchAll('project');
}
/**
* Get waterfall project progress.
*
* @param int $projectID
* @access public
* @return int
*/
public function getWaterfallProgress($projectID)
{
$executions = $this->loadModel('execution')->getByProject($projectID);
$totalHour = $this->dao->select('execution, ROUND(SUM(`left`), 2) AS totalLeft, ROUND(SUM(consumed), 1) AS totalConsumed')->from(TABLE_TASK)
->where('execution')->in(array_keys($executions))
->andWhere('deleted')->eq(0)
->andWhere('parent')->lt(1)
->groupBy('execution')
->fetchAll('execution');
$closedTotalLeft = $this->dao->select('execution, ROUND(SUM(`left`), 2) AS totalLeft')->from(TABLE_TASK)
->where('execution')->in(array_keys($executions))
->andWhere('deleted')->eq(0)
->andWhere('parent')->lt(1)
->andWhere('status')->in('closed,cancel')
->groupBy('execution')
->fetchPairs('execution');
$progress = 0;
foreach($executions as $executionID => $execution)
{
$executionClosedLeft = isset($closedTotalLeft[$executionID]) ? $closedTotalLeft[$executionID] : 0;
$executionTotalConsumed = isset($totalHour[$executionID]) ? $totalHour[$executionID]->totalConsumed : 0;
$executionTotalLeft = isset($totalHour[$executionID]) ? round($totalHour[$executionID]->totalLeft - $executionClosedLeft, 1) : 0;
$executionProgress = ($executionTotalConsumed + $executionTotalLeft) ? floor($executionTotalConsumed / ($executionTotalConsumed + $executionTotalLeft) * 1000) / 1000 * 100 : 0;
$progress += $executionProgress * ($execution->percent / 100);
}
return $progress;
}
/**
* Get project workhour info.
*

View File

@@ -195,7 +195,7 @@
<tr class='statsTr'><td class='w-100px'></td><td></td><td></td><td></td></tr>
<tr>
<td colspan="4">
<?php $progress = ($workhour->totalConsumed + $workhour->totalLeft) ? floor($workhour->totalConsumed / ($workhour->totalConsumed + $workhour->totalLeft) * 1000) / 1000 * 100 : 0;?>
<?php $progress = $project->model == 'waterfall' ? $this->project->getWaterfallProgress($project->id) : (($workhour->totalConsumed + $workhour->totalLeft) ? floor($workhour->totalConsumed / ($workhour->totalConsumed + $workhour->totalLeft) * 1000) / 1000 * 100 : 0);?>
<?php echo $lang->project->progress;?> <?php echo $progress . $lang->percent;?> &nbsp;
<div class="progress inline-block">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $progress . $lang->percent;?>"></div>