* Finish task #40834.
This commit is contained in:
@@ -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
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user