This commit is contained in:
tianshujie98
2020-12-24 11:27:18 +08:00
29 changed files with 145 additions and 63 deletions
+9 -9
View File
@@ -40,15 +40,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
<div class="todo-form-trigger"><input type="text" placeholder="<?php echo $lang->todo->lblClickCreate?>" autocomplete="off" class="form-control"></div>
<form class="form-horizontal todoes-form layer" method='post' target='hiddenwin' action='<?php echo $this->createLink('todo', 'create', 'date=today&userID=&from=block');?>'>
<h3><?php echo $lang->todo->create;?></h3>
<div class="form-group">
<?php $leftWidth = common::checkNotCN() ? 'col-sm-3' : 'col-sm-2';?>
<label for="todoName" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->name?></label>
<div class="col-sm-9 required"><input type="text" class="form-control" autocomplete="off" name="name"></div>
</div>
<div class="form-group">
<label for="todoPri" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->pri?></label>
<div class="col-sm-4"><?php echo html::select('pri', $lang->todo->priList, '', "class='form-control chosen'");?></div>
</div>
<?php $leftWidth = common::checkNotCN() ? 'col-sm-3' : 'col-sm-2';?>
<div class="form-group">
<label for="todoDate" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->date?></label>
<div class="col-sm-9">
@@ -58,6 +50,14 @@ if(!$selfCall) die(include('./todolist.html.php'));
</div>
</div>
</div>
<div class="form-group">
<label for="todoPri" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->pri?></label>
<div class="col-sm-4"><?php echo html::select('pri', $lang->todo->priList, '', "class='form-control chosen'");?></div>
</div>
<div class="form-group">
<label for="todoName" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->name?></label>
<div class="col-sm-9 required"><input type="text" class="form-control" autocomplete="off" name="name"></div>
</div>
<div class="form-group">
<label for="todoBegin" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->beginAndEnd?></label>
<div class="col-sm-4">
+2 -3
View File
@@ -33,7 +33,7 @@ class bug extends control
$this->loadModel('task');
$this->view->products = $this->products = $this->product->getProductPairsByProject($this->session->PRJ);
if(empty($this->products)) die($this->locate($this->createLink('product', 'showErrorNone', "fromModule=bug")));
if($this->session->PRJ and empty($this->products)) die($this->locate($this->createLink('product', 'showErrorNone', "fromModule=bug")));
}
/**
@@ -980,8 +980,7 @@ class bug extends control
}
$this->loadModel('score')->create('ajax', 'batchOther');
}
if($type == 'product') die(js::locate($this->session->bugList, 'parent'));
if($type == 'my') die(js::locate($this->createLink('my', 'bug')));
if($type == 'product' || $type == 'my') die(js::locate($this->session->bugList, 'parent'));
die(js::locate($this->createLink('project', 'bug', "projectID=$projectID")));
}
+1
View File
@@ -59,6 +59,7 @@ $lang->bug->resolvedDate = 'Gelöst am';
$lang->bug->resolvedDateAB = 'Gelöst';
$lang->bug->deadline = 'Fällig am';
$lang->bug->plan = 'Plan';
$lang->bug->close = 'Close';
$lang->bug->closedBy = 'Geschlossen von';
$lang->bug->closedDate = 'Geschlossen am';
$lang->bug->duplicateBug = 'Dublette';
+1
View File
@@ -59,6 +59,7 @@ $lang->bug->resolvedDate = 'Resolved Date';
$lang->bug->resolvedDateAB = 'ResolvedDate';
$lang->bug->deadline = 'Deadline';
$lang->bug->plan = 'Plan';
$lang->bug->close = 'Close';
$lang->bug->closedBy = 'ClosedBy';
$lang->bug->closedDate = 'ClosedDate';
$lang->bug->duplicateBug = 'Duplicated Bug ID';
+1
View File
@@ -59,6 +59,7 @@ $lang->bug->resolvedDate = 'Date Correction';
$lang->bug->resolvedDateAB = 'Date Correction';
$lang->bug->deadline = 'Date Butoir';
$lang->bug->plan = 'Plan';
$lang->bug->close = 'Close';
$lang->bug->closedBy = 'Fermé par';
$lang->bug->closedDate = 'Date Fermeture';
$lang->bug->duplicateBug = 'Bug ID en doublon';
+1
View File
@@ -59,6 +59,7 @@ $lang->bug->resolvedDate = 'Ngày giải quyết';
$lang->bug->resolvedDateAB = 'Ngày giải quyết';
$lang->bug->deadline = 'Hạn chót';
$lang->bug->plan = 'Kế hoạch';
$lang->bug->close = 'Close';
$lang->bug->closedBy = 'Người đóng';
$lang->bug->closedDate = 'Ngày đóng';
$lang->bug->duplicateBug = 'ID Bug đã nhân bản';
+1
View File
@@ -59,6 +59,7 @@ $lang->bug->resolvedDate = '解决日期';
$lang->bug->resolvedDateAB = '解决日期';
$lang->bug->deadline = '截止日期';
$lang->bug->plan = '所属' . '计划';
$lang->bug->close = '关闭';
$lang->bug->closedBy = '由谁关闭';
$lang->bug->closedDate = '关闭日期';
$lang->bug->duplicateBug = '重复ID';
+1
View File
@@ -59,6 +59,7 @@ $lang->bug->resolvedDate = '解決日期';
$lang->bug->resolvedDateAB = '解決日期';
$lang->bug->deadline = '截止日期';
$lang->bug->plan = '所屬計劃';
$lang->bug->close = '關閉';
$lang->bug->closedBy = '由誰關閉';
$lang->bug->closedDate = '關閉日期';
$lang->bug->duplicateBug = '重複ID';
+2 -8
View File
@@ -34,11 +34,10 @@
<?php else:?>
<form id='myBugForm' class="main-table table-bug" data-ride="table" method="post" action='<?php echo $this->createLink('bug', 'batchEdit', "productID=0");?>'>
<?php
$canBatchEdit = common::hasPriv('bug', 'batchEdit');
$canBatchConfirm = common::hasPriv('bug', 'batchConfirm');
$canBatchClose = (common::hasPriv('bug', 'batchClose') and strtolower($type) != 'closedby');
$canBatchAssignTo = common::hasPriv('bug', 'batchAssignTo');
$canBatchAction = ($canBatchEdit or $canBatchConfirm or $canBatchClose or $canBatchAssignTo);
$canBatchAction = ($canBatchConfirm or $canBatchClose or $canBatchAssignTo);
?>
<table class="table has-sort-head table-fixed" id='bugList'>
<?php $vars = "mode=$mode&type=$type&orderBy=%s&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"; ?>
@@ -59,7 +58,7 @@
<th class='w-type'> <?php common::printOrderLink('type', $orderBy, $vars, $lang->typeAB);?></th>
<th class='w-90px'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
<?php if($type != 'assignedTo'): ?>
<th class='w-110px'><?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->bug->assignedTo);?></th>
<th class='w-110px c-assignedTo'><?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->bug->assignedTo);?></th>
<?php endif;?>
<th class='w-100px'><?php common::printOrderLink('resolvedBy', $orderBy, $vars, $lang->bug->resolvedByAB);?></th>
<th class='w-100px'><?php common::printOrderLink('resolution', $orderBy, $vars, $lang->bug->resolutionAB);?></th>
@@ -129,11 +128,6 @@
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<?php endif;?>
<div class="table-actions btn-toolbar">
<?php
$actionLink = $this->createLink('bug', 'batchEdit');
$misc = $canBatchEdit ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'";
echo html::commonButton($lang->edit, $misc);
?>
<?php
if($canBatchConfirm)
{
-2
View File
@@ -20,11 +20,9 @@
<div class="btn-toolbar pull-left">
<?php
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
echo "<span class='nav-title'>{$lang->testtask->common}: </span>";
if($app->rawMethod == 'work') echo html::a(inlink($app->rawMethod, "mode=testtask&type=wait"), "<span class='text'>{$lang->testtask->wait}</span>", '', "class='btn btn-link'");
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=testtask&type=done"), "<span class='text'>{$lang->testtask->done}</span>", '', "class='btn btn-link'");
echo "<span class='divider'></span>";
echo "<span class='nav-title'>{$lang->testcase->common}: </span>";
echo html::a(inlink($app->rawMethod, "mode=$mode&type=assigntome"), "<span class='text'>{$lang->testcase->assignToMe}</span>" . ($type == 'assigntome' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assigntome' ? ' btn-active-text' : '') . "'");
echo html::a(inlink($app->rawMethod, "mode=$mode&type=openedbyme"), "<span class='text'>{$lang->testcase->openedByMe}</span>" . ($type == 'openedbyme' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedbyme' ? ' btn-active-text' : '') . "'");
?>
-2
View File
@@ -17,11 +17,9 @@
<div class="btn-toolbar pull-left">
<?php
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
echo "<span class='nav-title'>{$lang->testtask->common}: </span>";
if($app->rawMethod == 'work') echo html::a(inlink($app->rawMethod, "mode=$mode&type=wait"), "<span class='text'>{$lang->testtask->wait}</span>" . ($type == 'wait' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'wait' ? ' btn-active-text' : '') . "'");
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=$mode&type=done"), "<span class='text'>{$lang->testtask->done}</span>" . ($type == 'done' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'done' ? ' btn-active-text' : '') . "'");
echo "<span class='divider'></span>";
echo "<span class='nav-title'>{$lang->testcase->common}: </span>";
echo html::a(inlink($app->rawMethod, "mode=testcase&type=assigntome"), "<span class='text'>{$lang->testcase->assignToMe}</span>", '', "class='btn btn-link'");
echo html::a(inlink($app->rawMethod, "mode=testcase&type=openedbyme"), "<span class='text'>{$lang->testcase->openedByMe}</span>", '', "class='btn btn-link'");
?>
+11 -1
View File
@@ -246,10 +246,11 @@ class product extends control
/**
* Create a product.
*
* @param int $programID
* @access public
* @return void
*/
public function create()
public function create($programID = 0)
{
$this->lang->product->switcherMenu = $this->product->getSwitcher();
@@ -265,6 +266,15 @@ class product extends control
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate));
}
if($programID)
{
$this->app->rawModule = 'program';
$this->app->rawMethod = 'pgmproduct';
$this->lang->navGroup->program = 'program';
$this->loadModel('program')->setPGMViewMenu($programID);
$this->lang->program->switcherMenu = $this->program->getPGMCommonAction() . $this->program->getPGMSwitcher($programID, true);
}
$this->loadModel('user');
$poUsers = $this->user->getPairs('nodeleted|pofirst|noclosed', '', $this->config->maxCount);
if(!empty($this->config->user->moreLink)) $this->config->moreLinks["PO"] = $this->config->user->moreLink;
+35 -6
View File
@@ -1102,10 +1102,18 @@ class productModel extends model
->page($pager)
->fetchAll('id');
$stories = $this->dao->select('product, status, count(status) AS count')
$stories = $this->dao->select('product, status, type, count(status) AS count')
->from(TABLE_STORY)
->where('deleted')->eq(0)
->andWhere('type')->eq($storyType)
->andWhere('type')->eq('story')
->andWhere('product')->in($productKeys)
->groupBy('product, status')
->fetchGroup('product', 'status');
$requirements = $this->dao->select('product, status, type, count(status) AS count')
->from(TABLE_STORY)
->where('deleted')->eq(0)
->andWhere('type')->eq('requirement')
->andWhere('product')->in($productKeys)
->groupBy('product, status')
->fetchGroup('product', 'status');
@@ -1114,7 +1122,8 @@ class productModel extends model
$emptyStory = array_keys($this->lang->story->statusList);
foreach($productKeys as $productID)
{
if(!isset($stories[$productID])) $stories[$productID] = $emptyStory;
if(!isset($stories[$productID])) $stories[$productID] = $emptyStory;
if(!isset($requirements[$productID])) $requirements[$productID] = $emptyStory;
}
/* Padding the stories to sure all status have records. */
@@ -1126,6 +1135,16 @@ class productModel extends model
}
$stories[$key] = $story;
}
foreach($requirements as $key => $requirement)
{
foreach(array_keys($this->lang->story->statusList) as $status)
{
$requirement[$status] = isset($requirement[$status]) ? $requirement[$status]->count : 0;
}
$requirements[$key] = $requirement;
}
if($storyType == 'requirement') $stories = $requirements;
$plans = $this->dao->select('product, count(*) AS count')
->from(TABLE_PRODUCTPLAN)
@@ -1157,6 +1176,14 @@ class productModel extends model
->groupBy('product')
->fetchPairs();
$closedBugs = $this->dao->select('product,count(*) AS count')
->from(TABLE_BUG)
->where('deleted')->eq(0)
->andwhere('status')->eq('closed')
->andWhere('product')->in($productKeys)
->groupBy('product')
->fetchPairs();
$assignToNull = $this->dao->select('product,count(*) AS count')
->from(TABLE_BUG)
->where('deleted')->eq(0)
@@ -1180,12 +1207,14 @@ class productModel extends model
$stats = array();
foreach($products as $key => $product)
{
$product->stories = $stories[$product->id];
$product->plans = isset($plans[$product->id]) ? $plans[$product->id] : 0;
$product->releases = isset($releases[$product->id]) ? $releases[$product->id] : 0;
$product->stories = $stories[$product->id];
$product->requirements = $requirements[$product->id];
$product->plans = isset($plans[$product->id]) ? $plans[$product->id] : 0;
$product->releases = isset($releases[$product->id]) ? $releases[$product->id] : 0;
$product->bugs = isset($bugs[$product->id]) ? $bugs[$product->id] : 0;
$product->unResolved = isset($unResolved[$product->id]) ? $unResolved[$product->id] : 0;
$product->closedBugs = isset($closedBugs[$product->id]) ? $closedBugs[$product->id] : 0;
$product->assignToNull = isset($assignToNull[$product->id]) ? $assignToNull[$product->id] : 0;
$stats[] = $product;
}
+1
View File
@@ -0,0 +1 @@
.main-table thead>tr:first-of-type>th {border-left: 1px solid #ddd;}
+1
View File
@@ -197,6 +197,7 @@ $lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->importStakeholder = 'Import program';
$lang->program->PGMManageMembers = 'Program Team';
$lang->program->PGMParentBudget = "Parent program budget:%s";
$lang->program->beyondParentBudget = 'The remaining budget has been exceeded.';
$lang->program->PGMBeginLetterParent = "Parent begin date: %s, begin date should be >= parent begin date.";
$lang->program->PGMEndGreaterParent = "Parent end date: %s, end date should be <= parent end date.";
$lang->program->PGMBeginGreateChild = "Child earliest begin: %s, parent begin date <= child earliest begin date.";
+1
View File
@@ -197,6 +197,7 @@ $lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->importStakeholder = 'Import program';
$lang->program->PGMManageMembers = 'Program Team';
$lang->program->PGMParentBudget = "Parent program budget:%s";
$lang->program->beyondParentBudget = 'The remaining budget has been exceeded.';
$lang->program->PGMBeginLetterParent = "Parent begin date: %s, begin date should be >= parent begin date.";
$lang->program->PGMEndGreaterParent = "Parent end date: %s, end date should be <= parent end date.";
$lang->program->PGMBeginGreateChild = "Child earliest begin: %s, parent begin date <= child earliest begin date.";
+1
View File
@@ -197,6 +197,7 @@ $lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->importStakeholder = 'Import program';
$lang->program->PGMManageMembers = 'Program Team';
$lang->program->PGMParentBudget = "Parent program budget:%s";
$lang->program->beyondParentBudget = 'The remaining budget has been exceeded.';
$lang->program->PGMBeginLetterParent = "Parent begin date: %s, begin date should be >= parent begin date.";
$lang->program->PGMEndGreaterParent = "Parent end date: %s, end date should be <= parent end date.";
$lang->program->PGMBeginGreateChild = "Child earliest begin: %s, parent begin date <= child earliest begin date.";
+1
View File
@@ -197,6 +197,7 @@ $lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->importStakeholder = 'Import program';
$lang->program->PGMManageMembers = 'Program Team';
$lang->program->PGMParentBudget = "Parent program budget:%s";
$lang->program->beyondParentBudget = 'The remaining budget has been exceeded.';
$lang->program->PGMBeginLetterParent = "Parent begin date: %s, begin date should be >= parent begin date.";
$lang->program->PGMEndGreaterParent = "Parent end date: %s, end date should be <= parent end date.";
$lang->program->PGMBeginGreateChild = "Child earliest begin: %s, parent begin date <= child earliest begin date.";
+1
View File
@@ -197,6 +197,7 @@ $lang->program->unlinkStakeholder = '移除干系人';
$lang->program->importStakeholder = '从父项目集导入';
$lang->program->PGMManageMembers = '项目集团队';
$lang->program->PGMParentBudget = "父项目集预算:%s";
$lang->program->beyondParentBudget = '已超出剩余预算';
$lang->program->PGMBeginLetterParent = "父项目集的开始日期:%s,开始日期不能小于父项目集的开始日期";
$lang->program->PGMEndGreaterParent = "父项目集的完成日期:%s,完成日期不能大于父项目集的完成日期";
$lang->program->PGMBeginGreateChild = "子项目集的最小开始日期:%s,父项目集的开始日期不能大于子项目集的最小开始日期";
+1
View File
@@ -200,6 +200,7 @@ $lang->program->unlinkStakeholder = '移除干係人';
$lang->program->importStakeholder = '從父項目集導入';
$lang->program->PGMManageMembers = '項目集團隊';
$lang->program->PGMParentBudget = "父項目集預算:%s";
$lang->program->beyondParentBudget = '已超出剩餘預算';
$lang->program->PGMBeginLetterParent = "父項目集的開始日期:%s,開始日期不能小於父項目集的開始日期";
$lang->program->PGMEndGreaterParent = "父項目集的完成日期:%s,完成日期不能大於父項目集的完成日期";
$lang->program->PGMBeginGreateChild = "子項目集的最小開始日期:%s,父項目集的開始日期不能大於子項目集的最小開始日期";
+12
View File
@@ -143,6 +143,18 @@ class programModel extends model
/* When parent set end then child program cannot set longTime. */
if(empty($program->end) and $this->post->delta == 999 and $parentProgram->end != '0000-00-00') dao::$errors['end'] = sprintf($this->lang->program->PGMEndGreaterParent, $parentProgram->end);
/* The budget of a child program cannot beyond the remaining budget of the parent program. */
if(isset($program->budget) and $parentProgram->budget != 0)
{
$childGrade = $parentProgram->grade + 1;
$childSumBudget = $this->dao->select("sum(budget) as sumBudget")->from(TABLE_PROJECT)
->where('path')->like("%{$program->parent}%")
->andWhere('grade')->eq($childGrade)
->fetch('sumBudget');
if($program->budget > $parentProgram->budget - $childSumBudget) dao::$errors['budget'] = $this->lang->program->beyondParentBudget;
}
if(dao::isError()) return false;
}
}
+48 -31
View File
@@ -32,7 +32,7 @@
<?php $vars = "programID=$program->id&browseType=$browseType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?>
<thead>
<tr class="text-center">
<th class='c-id text-left'>
<th class='c-id text-left' rowspan='2'>
<?php if($canBatchEdit):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll;?>">
<label></label>
@@ -40,43 +40,60 @@
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
</th>
<th class="text-left"><?php common::printOrderLink('name', $orderBy, $vars, $lang->product->name);?></th>
<th class='w-120px' title='<?php echo $lang->product->activeStoriesTitle;?>'><?php echo $lang->product->activeStories;?></th>
<th class='w-120px' title='<?php echo $lang->product->changedStoriesTitle;?>'><?php echo $lang->product->changedStories;?></th>
<th class='w-100px' title='<?php echo $lang->product->draftStoriesTitle;?>'><?php echo $lang->product->draftStories;?></th>
<th class='w-120px' title='<?php echo $lang->product->closedStoriesTitle;?>'><?php echo $lang->product->closedStories;?></th>
<th class='w-70px' title='<?php echo $lang->product->plans;?>'><?php echo $lang->product->plans;?></th>
<th class='w-70px' title='<?php echo $lang->product->releases;?>'><?php echo $lang->product->releases;?></th>
<th class='w-80px' title='<?php echo $lang->product->unResolvedBugsTitle;?>'><?php echo $lang->product->unResolvedBugs;?></th>
<th class='w-110px' title='<?php echo $lang->product->assignToNullBugsTitle;?>'><?php echo $lang->product->assignToNullBugs;?></th>
<th rowspan="2"><?php common::printOrderLink('name', $orderBy, $vars, $lang->product->name);?></th>
<th class="w-300px" colspan="4"><?php echo $lang->story->requirement;?></th>
<th class="w-300px" colspan="4"><?php echo $lang->story->story;?></th>
<th class="w-150px" colspan="2"><?php echo $lang->bug->common;?></th>
<th class="w-80px" rowspan="2"><?php echo $lang->product->release;?></th>
<th class="w-80px" rowspan="2"><?php echo $lang->product->plan;?></th>
<?php if($canOrder):?>
<th class='w-70px sort-default'><?php common::printOrderLink('order', $orderBy, $vars, $lang->product->updateOrder);?></th>
<th class='w-70px sort-default' rowspan="2"><?php common::printOrderLink('order', $orderBy, $vars, $lang->product->updateOrder);?></th>
<?php endif;?>
</tr>
<tr class="text-center">
<th><?php echo $lang->story->activate;?></th>
<th><?php echo $lang->story->close;?></th>
<th><?php echo $lang->story->draft;?></th>
<th><?php echo $lang->story->completeRate;?></th>
<th style="border-left: 1px solid #ddd;"><?php echo $lang->story->activate;?></th>
<th><?php echo $lang->story->close;?></th>
<th><?php echo $lang->story->draft;?></th>
<th><?php echo $lang->story->completeRate;?></th>
<th style="border-left: 1px solid #ddd;"><?php echo $lang->bug->activate;?></th>
<th><?php echo $lang->bug->close;?></th>
</tr>
</thead>
<tbody class="sortable" id="productTableList">
<?php foreach($products as $product):?>
<tr class="text-center" data-id='<?php echo $product->id ?>' data-order='<?php echo $product->code;?>'>
<td class='c-id text-left'>
<?php if($canBatchEdit):?>
<?php echo html::checkbox('productIDList', array($product->id => sprintf('%03d', $product->id)));?>
<?php else:?>
<?php printf('%03d', $product->id);?>
<?php
$totalStories = $product->stories['active'] + $product->stories['closed'] + $product->stories['draft'] + $product->stories['changed'];
$totalRequirements = $product->requirements['active'] + $product->requirements['closed'] + $product->requirements['draft'] + $product->requirements['changed'];
?>
<tr class="text-center" data-id='<?php echo $product->id ?>' data-order='<?php echo $product->code;?>'>
<td class='c-id text-left'>
<?php if($canBatchEdit):?>
<?php echo html::checkbox('productIDList', array($product->id => sprintf('%03d', $product->id)));?>
<?php else:?>
<?php printf('%03d', $product->id);?>
<?php endif;?>
</td>
<td class="c-name" title='<?php echo $product->name?>'><?php echo html::a($this->createLink('product', 'browse', 'product=' . $product->id), $product->name);?></td>
<td><?php echo $product->requirements['active'];?></td>
<td><?php echo $product->requirements['closed'];?></td>
<td><?php echo $product->requirements['draft'];?></td>
<td><?php echo $totalRequirements == 0 ? 0 : round($product->requirements['closed'] / $totalRequirements, 3) * 100;?>%</td>
<td><?php echo $product->stories['active'];?></td>
<td><?php echo $product->stories['closed'];?></td>
<td><?php echo $product->stories['draft'];?></td>
<td><?php echo $totalStories == 0 ? 0 : round($product->stories['closed'] / $totalStories, 3) * 100;?>%</td>
<td><?php echo $product->unResolved;?></td>
<td><?php echo $product->closedBugs;?></td>
<td><?php echo $product->releases;?></td>
<td><?php echo $product->plans;?></td>
<?php if($canOrder):?>
<td class='c-actions sort-handler'><i class="icon icon-move"></i></td>
<?php endif;?>
</td>
<td class="c-name" title='<?php echo $product->name?>'><?php echo html::a($this->createLink('product', 'browse', 'product=' . $product->id), $product->name);?></td>
<td><?php echo $product->stories['active'];?></td>
<td><?php echo $product->stories['changed'];?></td>
<td><?php echo $product->stories['draft'];?></td>
<td><?php echo $product->stories['closed'];?></td>
<td><?php echo $product->plans;?></td>
<td><?php echo $product->releases;?></td>
<td><?php echo $product->unResolved;?></td>
<td><?php echo $product->assignToNull;?></td>
<?php if($canOrder):?>
<td class='c-actions sort-handler'><i class="icon icon-move"></i></td>
<?php endif;?>
</tr>
</tr>
<?php endforeach;?>
</tbody>
</table>
+2
View File
@@ -140,6 +140,7 @@ $lang->story->files = 'Dateien';
$lang->story->copy = "Story kopieren";
$lang->story->total = "Total Storys";
$lang->story->allStories = 'Alle';
$lang->story->draft = 'Entwurf';
$lang->story->unclosed = 'Nicht geschlossen';
$lang->story->deleted = 'Gelöscht';
$lang->story->released = 'Released Linked Stories';
@@ -151,6 +152,7 @@ $lang->story->repoCommit = 'Commits';
$lang->story->noRequirement = 'No Requirements';
$lang->story->one = 'One';
$lang->story->field = 'Synchronized fields';
$lang->story->completeRate = 'Completion Rate';
$lang->story->ditto = 'Dito';
$lang->story->dittoNotice = 'Die Story gehört nicht zum Projekt wie die vorherige!';
+2
View File
@@ -140,6 +140,7 @@ $lang->story->files = 'Files';
$lang->story->copy = "Copy Story";
$lang->story->total = "Total Stories";
$lang->story->allStories = 'All Stories';
$lang->story->draft = 'Draft';
$lang->story->unclosed = 'Unclosed';
$lang->story->deleted = 'Deleted';
$lang->story->released = 'Released Stories';
@@ -151,6 +152,7 @@ $lang->story->repoCommit = 'Commits';
$lang->story->noRequirement = 'No Requirements';
$lang->story->one = 'One';
$lang->story->field = 'Synchronized fields';
$lang->story->completeRate = 'Completion Rate';
$lang->story->ditto = 'Ditto';
$lang->story->dittoNotice = 'This story is not linked to the same product as the last one is!';
+2
View File
@@ -140,6 +140,7 @@ $lang->story->files = 'Fichiers';
$lang->story->copy = "Copier Story";
$lang->story->total = "Stories Total";
$lang->story->allStories = 'Toutes les Stories';
$lang->story->draft = 'Brouillon';
$lang->story->unclosed = 'Non Fermées';
$lang->story->deleted = 'Supprimée';
$lang->story->released = 'Stories Versionnées';
@@ -151,6 +152,7 @@ $lang->story->repoCommit = 'Commits';
$lang->story->noRequirement = 'No Requirements';
$lang->story->one = 'One';
$lang->story->field = 'Synchronized fields';
$lang->story->completeRate = 'Completion Rate';
$lang->story->ditto = 'Idem';
$lang->story->dittoNotice = "La story n'est pas associée au même product que la précédente !";
+2
View File
@@ -140,6 +140,7 @@ $lang->story->files = 'Files';
$lang->story->copy = "Copy";
$lang->story->total = "Tổng câu chuyện";
$lang->story->allStories = 'Tất cả câu chuyện';
$lang->story->draft = 'Nháp';
$lang->story->unclosed = 'Chưa đóng';
$lang->story->deleted = 'Đã xóa';
$lang->story->released = 'Đã phát hành';
@@ -151,6 +152,7 @@ $lang->story->repoCommit = 'Commits';
$lang->story->noRequirement = 'No Requirements';
$lang->story->one = 'One';
$lang->story->field = 'Synchronized fields';
$lang->story->completeRate = 'Completion Rate';
$lang->story->ditto = 'Như trên';
$lang->story->dittoNotice = 'Câu chuyện này chưa liên kết tới cùng sản phẩm bởi bởi vì nó là cuối cùng!';
+2
View File
@@ -140,6 +140,7 @@ $lang->story->files = '附件';
$lang->story->copy = "复制{$lang->productSRCommon}";
$lang->story->total = "总{$lang->productSRCommon}";
$lang->story->allStories = "所有{$lang->productSRCommon}";
$lang->story->draft = '草稿';
$lang->story->unclosed = '未关闭';
$lang->story->deleted = '已删除';
$lang->story->released = "已发布{$lang->productSRCommon}数";
@@ -151,6 +152,7 @@ $lang->story->repoCommit = '相关提交';
$lang->story->noRequirement = '无需求';
$lang->story->one = '一个';
$lang->story->field = '同步的字段';
$lang->story->completeRate = '完成率';
$lang->story->ditto = '同上';
$lang->story->dittoNotice = "该{$lang->productSRCommon}与上一{$lang->productSRCommon}不属于同一产品!";
+2
View File
@@ -140,6 +140,7 @@ $lang->story->files = '附件';
$lang->story->copy = "複製{$lang->productSRCommon}";
$lang->story->total = "總{$lang->productSRCommon}";
$lang->story->allStories = "所有{$lang->productSRCommon}";
$lang->story->draft = '草稿';
$lang->story->unclosed = '未關閉';
$lang->story->deleted = '已刪除';
$lang->story->released = "已發佈{$lang->productSRCommon}數";
@@ -151,6 +152,7 @@ $lang->story->repoCommit = '相關提交';
$lang->story->noRequirement = '無需求';
$lang->story->one = '一個';
$lang->story->field = '同步的欄位';
$lang->story->completeRate = '完成率';
$lang->story->ditto = '同上';
$lang->story->dittoNotice = "該{$lang->productSRCommon}與上一{$lang->productSRCommon}不屬於同一產品!";
+1 -1
View File
@@ -365,7 +365,7 @@ class testtaskModel extends model
->where('t1.deleted')->eq(0)
->andWhere('t1.auto')->ne('unit')
->andWhere('t1.owner')->eq($account)
->andWhere('t2.id')->in($this->app->user->view->projects)
->andWhere('t2.id')->in($this->app->user->view->sprints)
->beginIF($type == 'wait')->andWhere('t1.status')->ne('done')->fi()
->beginIF($type == 'done')->andWhere('t1.status')->eq('done')->fi()
->orderBy($orderBy)