* Finish task #40834.

This commit is contained in:
tianshujie98
2021-08-03 16:08:18 +08:00
parent 3b1933ca43
commit 59b2e6f0f0
3 changed files with 74 additions and 93 deletions
+7
View File
@@ -108,3 +108,10 @@ $config->product->report->projectLabels[] = '';
$config->product->report->planLabels = array();
$config->product->report->planLabels[] = '';
$config->product->statisticFields = array();
$config->product->statisticFields['requirements'] = array('draftRequirements', 'activeRequirements', 'changedRequirements', 'closedRequirements');
$config->product->statisticFields['stories'] = array('draftStories', 'activeStories', 'changedStories', 'closedStories');
$config->product->statisticFields['bugs'] = array('unResolvedBugs', 'closedBugs', 'fixedBugs');
$config->product->statisticFields['plans'] = array('plans');
$config->product->statisticFields['releases'] = array('releases');
+60 -85
View File
@@ -1611,105 +1611,80 @@ class productModel extends model
$productStructure[$product->program][$product->line]['products'][$product->id] = $product;
if($product->line)
{
/* Init vars. */
if(!isset($productStructure[$product->program][$product->line]['totalRequirements'])) $productStructure[$product->program][$product->line]['totalRequirements'] = 0;
if(!isset($productStructure[$product->program][$product->line]['draftRequirments'])) $productStructure[$product->program][$product->line]['draftRequirments'] = 0;
if(!isset($productStructure[$product->program][$product->line]['activeRequirments'])) $productStructure[$product->program][$product->line]['activeRequirments'] = 0;
if(!isset($productStructure[$product->program][$product->line]['changedRequirments'])) $productStructure[$product->program][$product->line]['changedRequirments'] = 0;
if(!isset($productStructure[$product->program][$product->line]['closedRequirements'])) $productStructure[$product->program][$product->line]['closedRequirements'] = 0;
if(!isset($productStructure[$product->program][$product->line]['totalStories'])) $productStructure[$product->program][$product->line]['totalStories'] = 0;
if(!isset($productStructure[$product->program][$product->line]['draftStories'])) $productStructure[$product->program][$product->line]['draftStories'] = 0;
if(!isset($productStructure[$product->program][$product->line]['activeStories'])) $productStructure[$product->program][$product->line]['activeStories'] = 0;
if(!isset($productStructure[$product->program][$product->line]['changedStories'])) $productStructure[$product->program][$product->line]['changedStories'] = 0;
if(!isset($productStructure[$product->program][$product->line]['closedStories'])) $productStructure[$product->program][$product->line]['closedStories'] = 0;
if(!isset($productStructure[$product->program][$product->line]['unResolvedBugs'])) $productStructure[$product->program][$product->line]['unResolvedBugs'] = 0;
if(!isset($productStructure[$product->program][$product->line]['closedBugs'])) $productStructure[$product->program][$product->line]['closedBugs'] = 0;
if(!isset($productStructure[$product->program][$product->line]['fixedBugs'])) $productStructure[$product->program][$product->line]['fixedBugs'] = 0;
if(!isset($productStructure[$product->program][$product->line]['plans'])) $productStructure[$product->program][$product->line]['plans'] = 0;
if(!isset($productStructure[$product->program][$product->line]['releases'])) $productStructure[$product->program][$product->line]['releases'] = 0;
/* Line name. */
$productStructure[$product->program][$product->line]['lineName'] = $product->lineName;
/* Requirements. */
$productStructure[$product->program][$product->line]['totalRequirements'] += $product->requirements['active'] + $product->requirements['closed'] + $product->requirements['draft'] + $product->requirements['changed'];
$productStructure[$product->program][$product->line]['draftRequirments'] += $product->requirements['draft'];
$productStructure[$product->program][$product->line]['activeRequirments'] += $product->requirements['active'];
$productStructure[$product->program][$product->line]['changedRequirments'] += $product->requirements['changed'];
$productStructure[$product->program][$product->line]['closedRequirements'] += $product->requirements['closed'];
/* Stories. */
$productStructure[$product->program][$product->line]['totalStories'] += $product->stories['active'] + $product->stories['closed'] + $product->stories['draft'] + $product->stories['changed'];
$productStructure[$product->program][$product->line]['draftStories'] += $product->stories['draft'];
$productStructure[$product->program][$product->line]['activeStories'] += $product->stories['active'];
$productStructure[$product->program][$product->line]['changedStories'] += $product->stories['changed'];
$productStructure[$product->program][$product->line]['closedStories'] += $product->stories['closed'];
/* Bugs. */
$productStructure[$product->program][$product->line]['unResolvedBugs'] += $product->unResolved;
$productStructure[$product->program][$product->line]['closedBugs'] += $product->closedBugs;
$productStructure[$product->program][$product->line]['fixedBugs'] += $product->fixedBugs;
/* Plans and releases. */
$productStructure[$product->program][$product->line]['plans'] += $product->plans;
$productStructure[$product->program][$product->line]['releases'] += $product->releases;
$productStructure[$product->program][$product->line] = $this->statisticData('line', $productStructure, $product);
}
if($product->program)
{
/* Init vars. */
if(!isset($productStructure[$product->program]['totalRequirements'])) $productStructure[$product->program]['totalRequirements'] = 0;
if(!isset($productStructure[$product->program]['draftRequirments'])) $productStructure[$product->program]['draftRequirments'] = 0;
if(!isset($productStructure[$product->program]['activeRequirments'])) $productStructure[$product->program]['activeRequirments'] = 0;
if(!isset($productStructure[$product->program]['changedRequirments'])) $productStructure[$product->program]['changedRequirments'] = 0;
if(!isset($productStructure[$product->program]['closedRequirements'])) $productStructure[$product->program]['closedRequirements'] = 0;
if(!isset($productStructure[$product->program]['totalStories'])) $productStructure[$product->program]['totalStories'] = 0;
if(!isset($productStructure[$product->program]['draftStories'])) $productStructure[$product->program]['draftStories'] = 0;
if(!isset($productStructure[$product->program]['activeStories'])) $productStructure[$product->program]['activeStories'] = 0;
if(!isset($productStructure[$product->program]['changedStories'])) $productStructure[$product->program]['changedStories'] = 0;
if(!isset($productStructure[$product->program]['closedStories'])) $productStructure[$product->program]['closedStories'] = 0;
if(!isset($productStructure[$product->program]['unResolvedBugs'])) $productStructure[$product->program]['unResolvedBugs'] = 0;
if(!isset($productStructure[$product->program]['closedBugs'])) $productStructure[$product->program]['closedBugs'] = 0;
if(!isset($productStructure[$product->program]['fixedBugs'])) $productStructure[$product->program]['fixedBugs'] = 0;
if(!isset($productStructure[$product->program]['plans'])) $productStructure[$product->program]['plans'] = 0;
if(!isset($productStructure[$product->program]['releases'])) $productStructure[$product->program]['releases'] = 0;
/* Program name. */
$productStructure[$product->program]['programName'] = $product->programName;
/* Requirements. */
$productStructure[$product->program]['totalRequirements'] += $product->requirements['active'] + $product->requirements['closed'] + $product->requirements['draft'] + $product->requirements['changed'];
$productStructure[$product->program]['draftRequirments'] += $product->requirements['draft'];
$productStructure[$product->program]['activeRequirments'] += $product->requirements['active'];
$productStructure[$product->program]['changedRequirments'] += $product->requirements['changed'];
$productStructure[$product->program]['closedRequirements'] += $product->requirements['closed'];
/* Stories. */
$productStructure[$product->program]['totalStories'] += $product->stories['active'] + $product->stories['closed'] + $product->stories['draft'] + $product->stories['changed'];
$productStructure[$product->program]['draftStories'] += $product->stories['draft'];
$productStructure[$product->program]['activeStories'] += $product->stories['active'];
$productStructure[$product->program]['changedStories'] += $product->stories['changed'];
$productStructure[$product->program]['closedStories'] += $product->stories['closed'];
/* Bugs. */
$productStructure[$product->program]['unResolvedBugs'] += $product->unResolved;
$productStructure[$product->program]['closedBugs'] += $product->closedBugs;
$productStructure[$product->program]['fixedBugs'] += $product->fixedBugs;
/* Plans and releases. */
$productStructure[$product->program]['plans'] += $product->plans;
$productStructure[$product->program]['releases'] += $product->releases;
$productStructure[$product->program] = $this->statisticData('program', $productStructure, $product);
}
}
return $productStructure;
}
/**
* Statistic product data.
*
* @param string $type
* @param array $productStructure
* @param object $product
* @access public
* @return void
*/
public function statisticData($type = 'program', $productStructure = array(), $product = null)
{
/* Init vars. */
$data = $type == 'program' ? $productStructure[$product->program] : $productStructure[$product->program][$product->line];
foreach($this->config->product->statisticFields as $key => $fields)
{
/* Get the total number of requirements and stories. */
if(strpos('stories|requirements', $key) !== false)
{
$totalObjects = 0;
foreach($product->$key as $status => $number)
{
if(isset($this->lang->story->statusList[$status])) $totalObjects += $number;
}
$fieldType = $key == 'stories' ? 'Stories' : 'Requirements';
if(!isset($data['total' . $fieldType])) $data['total' . $fieldType] = 0;
$data['total' . $fieldType] += $totalObjects;
}
elseif($key == 'bugs')
{
$fieldType = 'Bugs';
}
foreach($fields as $field)
{
if(!isset($data[$field])) $data[$field] = 0;
$status = $field;
if(strpos($field, 'Requirements') !== false or strpos($field, 'Stories') !== false or $field == 'unResolvedBugs')
{
$length = strpos($field, $fieldType);
$status = substr($field, 0, $length);
}
if(strpos('requirements|stories', $key) !== false)
{
$objects = $product->$key;
$data[$field] += $objects[$status];
}
else
{
$data[$field] += $product->$status;
}
}
}
return $data;
}
/**
* Judge an action is clickable or not.
*
+7 -8
View File
@@ -85,9 +85,9 @@
<?php echo $program['programName']?>
</td>
<?php if($this->config->URAndSR):?>
<td><?php echo $program['draftRequirments'];?></td>
<td><?php echo $program['activeRequirments'];?></td>
<td><?php echo $program['changedRequirments'];?></td>
<td><?php echo $program['draftRequirements'];?></td>
<td><?php echo $program['activeRequirements'];?></td>
<td><?php echo $program['changedRequirements'];?></td>
<td><?php echo $program['totalRequirements'] == 0 ? 0 : round($program['closedRequirements'] / $program['totalRequirements'], 3) * 100;?>%</td>
<?php endif;?>
<td><?php echo $program['draftStories'];?></td>
@@ -111,8 +111,7 @@
if($this->config->systemMode == 'new' and $programID)
{
$trAttrs = "data-id='line.$lineID' data-parent='program.$programID'";
$trClass .= ' is-nest-child table-nest text-center';
$trAttrs .= " data-nest-parent='program.$programID' data-nest-path='program.$programID,$lineID'";
$trAttrs .= " data-nest-parent='program.$programID' data-nest-path='program.$programID,$lineID'" . "class='text-center'";
}
else
{
@@ -127,9 +126,9 @@
<?php echo $line['lineName']?>
</td>
<?php if($this->config->URAndSR):?>
<td><?php echo $line['draftRequirments'];?></td>
<td><?php echo $line['activeRequirments'];?></td>
<td><?php echo $line['changedRequirments'];?></td>
<td><?php echo $line['draftRequirements'];?></td>
<td><?php echo $line['activeRequirements'];?></td>
<td><?php echo $line['changedRequirements'];?></td>
<td><?php echo $line['totalRequirements'] == 0 ? 0 : round($line['closedRequirements'] / $line['totalRequirements'], 3) * 100;?>%</td>
<?php endif;?>
<td><?php echo $line['draftStories'];?></td>