diff --git a/module/block/view/todoblock.html.php b/module/block/view/todoblock.html.php index ef86a5e7cc..a438b40e4e 100644 --- a/module/block/view/todoblock.html.php +++ b/module/block/view/todoblock.html.php @@ -40,15 +40,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
'>

todo->create;?>

-
- - -
-
-
- -
todo->priList, '', "class='form-control chosen'");?>
-
+
@@ -58,6 +50,14 @@ if(!$selfCall) die(include('./todolist.html.php'));
+
+ +
todo->priList, '', "class='form-control chosen'");?>
+
+
+ +
+
diff --git a/module/bug/control.php b/module/bug/control.php index b4556bebd8..b32955383c 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -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"))); } diff --git a/module/bug/lang/de.php b/module/bug/lang/de.php index b543dd1ecd..7a4e6258cc 100644 --- a/module/bug/lang/de.php +++ b/module/bug/lang/de.php @@ -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'; diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index 5d456d12b0..41d6ff387b 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -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'; diff --git a/module/bug/lang/fr.php b/module/bug/lang/fr.php index ab0ea788ce..0cce20cc6f 100644 --- a/module/bug/lang/fr.php +++ b/module/bug/lang/fr.php @@ -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'; diff --git a/module/bug/lang/vi.php b/module/bug/lang/vi.php index 876f9910e2..e8626f4ce8 100644 --- a/module/bug/lang/vi.php +++ b/module/bug/lang/vi.php @@ -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'; diff --git a/module/bug/lang/zh-cn.php b/module/bug/lang/zh-cn.php index c1c5b96175..d39ceecfc2 100644 --- a/module/bug/lang/zh-cn.php +++ b/module/bug/lang/zh-cn.php @@ -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'; diff --git a/module/bug/lang/zh-tw.php b/module/bug/lang/zh-tw.php index ef61dcb37e..3ee41e7465 100644 --- a/module/bug/lang/zh-tw.php +++ b/module/bug/lang/zh-tw.php @@ -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'; diff --git a/module/my/view/bug.html.php b/module/my/view/bug.html.php index d9008934e0..30c310ffc0 100644 --- a/module/my/view/bug.html.php +++ b/module/my/view/bug.html.php @@ -34,11 +34,10 @@ '> @@ -59,7 +58,7 @@ - + @@ -129,11 +128,6 @@
- createLink('bug', 'batchEdit'); - $misc = $canBatchEdit ? "onclick=\"setFormAction('$actionLink')\"" : "disabled='disabled'"; - echo html::commonButton($lang->edit, $misc); - ?> {$pager->recTotal}"; - echo "{$lang->testtask->common}: "; if($app->rawMethod == 'work') echo html::a(inlink($app->rawMethod, "mode=testtask&type=wait"), "{$lang->testtask->wait}", '', "class='btn btn-link'"); if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=testtask&type=done"), "{$lang->testtask->done}", '', "class='btn btn-link'"); echo ""; - echo "{$lang->testcase->common}: "; echo html::a(inlink($app->rawMethod, "mode=$mode&type=assigntome"), "{$lang->testcase->assignToMe}" . ($type == 'assigntome' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assigntome' ? ' btn-active-text' : '') . "'"); echo html::a(inlink($app->rawMethod, "mode=$mode&type=openedbyme"), "{$lang->testcase->openedByMe}" . ($type == 'openedbyme' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedbyme' ? ' btn-active-text' : '') . "'"); ?> diff --git a/module/my/view/testtask.html.php b/module/my/view/testtask.html.php index df96280270..54b0bd2f7b 100644 --- a/module/my/view/testtask.html.php +++ b/module/my/view/testtask.html.php @@ -17,11 +17,9 @@
{$pager->recTotal}"; - echo "{$lang->testtask->common}: "; if($app->rawMethod == 'work') echo html::a(inlink($app->rawMethod, "mode=$mode&type=wait"), "{$lang->testtask->wait}" . ($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"), "{$lang->testtask->done}" . ($type == 'done' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'done' ? ' btn-active-text' : '') . "'"); echo ""; - echo "{$lang->testcase->common}: "; echo html::a(inlink($app->rawMethod, "mode=testcase&type=assigntome"), "{$lang->testcase->assignToMe}", '', "class='btn btn-link'"); echo html::a(inlink($app->rawMethod, "mode=testcase&type=openedbyme"), "{$lang->testcase->openedByMe}", '', "class='btn btn-link'"); ?> diff --git a/module/product/control.php b/module/product/control.php index 38755aa949..429cbbce88 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -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; diff --git a/module/product/model.php b/module/product/model.php index b0f0a02479..dc25b7bd0c 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -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; } diff --git a/module/program/css/pgmproduct.css b/module/program/css/pgmproduct.css new file mode 100644 index 0000000000..40b83f5765 --- /dev/null +++ b/module/program/css/pgmproduct.css @@ -0,0 +1 @@ +.main-table thead>tr:first-of-type>th {border-left: 1px solid #ddd;} diff --git a/module/program/lang/de.php b/module/program/lang/de.php index 65000e8eee..0201d502a6 100644 --- a/module/program/lang/de.php +++ b/module/program/lang/de.php @@ -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."; diff --git a/module/program/lang/en.php b/module/program/lang/en.php index 9784092c5f..c2fa5dde62 100644 --- a/module/program/lang/en.php +++ b/module/program/lang/en.php @@ -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."; diff --git a/module/program/lang/fr.php b/module/program/lang/fr.php index 65000e8eee..0201d502a6 100644 --- a/module/program/lang/fr.php +++ b/module/program/lang/fr.php @@ -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."; diff --git a/module/program/lang/vi.php b/module/program/lang/vi.php index 65000e8eee..0201d502a6 100644 --- a/module/program/lang/vi.php +++ b/module/program/lang/vi.php @@ -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."; diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index 7ac3081275..990188cb9b 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -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,父项目集的开始日期不能大于子项目集的最小开始日期"; diff --git a/module/program/lang/zh-tw.php b/module/program/lang/zh-tw.php index 95bba62aae..c598cf31cb 100644 --- a/module/program/lang/zh-tw.php +++ b/module/program/lang/zh-tw.php @@ -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,父項目集的開始日期不能大於子項目集的最小開始日期"; diff --git a/module/program/model.php b/module/program/model.php index f6556906bf..409f1429a2 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -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; } } diff --git a/module/program/view/pgmproduct.html.php b/module/program/view/pgmproduct.html.php index 657e178cfd..eed27ae13e 100644 --- a/module/program/view/pgmproduct.html.php +++ b/module/program/view/pgmproduct.html.php @@ -32,7 +32,7 @@ id&browseType=$browseType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?>
- - - - - - - - - - + + + + + + - + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - +
typeAB);?> openedByAB);?> bug->assignedTo);?>bug->assignedTo);?> bug->resolvedByAB);?> bug->resolutionAB);?>
+
@@ -40,43 +40,60 @@ idAB);?>
product->name);?>product->activeStories;?>product->changedStories;?>product->draftStories;?>product->closedStories;?>product->plans;?>product->releases;?>product->unResolvedBugs;?>product->assignToNullBugs;?>product->name);?>story->requirement;?>story->story;?>bug->common;?>product->release;?>product->plan;?> product->updateOrder);?>product->updateOrder);?>
story->activate;?>story->close;?>story->draft;?>story->completeRate;?>story->activate;?>story->close;?>story->draft;?>story->completeRate;?>bug->activate;?>bug->close;?>
- - id => sprintf('%03d', $product->id)));?> - - id);?> + stories['active'] + $product->stories['closed'] + $product->stories['draft'] + $product->stories['changed']; + $totalRequirements = $product->requirements['active'] + $product->requirements['closed'] + $product->requirements['draft'] + $product->requirements['changed']; + ?> +
+ + id => sprintf('%03d', $product->id)));?> + + id);?> + + createLink('product', 'browse', 'product=' . $product->id), $product->name);?>requirements['active'];?>requirements['closed'];?>requirements['draft'];?>requirements['closed'] / $totalRequirements, 3) * 100;?>%stories['active'];?>stories['closed'];?>stories['draft'];?>stories['closed'] / $totalStories, 3) * 100;?>%unResolved;?>closedBugs;?>releases;?>plans;?> createLink('product', 'browse', 'product=' . $product->id), $product->name);?>stories['active'];?>stories['changed'];?>stories['draft'];?>stories['closed'];?>plans;?>releases;?>unResolved;?>assignToNull;?>
diff --git a/module/story/lang/de.php b/module/story/lang/de.php index 1ed4b7d485..dd9ba44d60 100644 --- a/module/story/lang/de.php +++ b/module/story/lang/de.php @@ -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!'; diff --git a/module/story/lang/en.php b/module/story/lang/en.php index 2001ecede9..b31f8c3010 100644 --- a/module/story/lang/en.php +++ b/module/story/lang/en.php @@ -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!'; diff --git a/module/story/lang/fr.php b/module/story/lang/fr.php index 5c6417944a..8f440a1eae 100644 --- a/module/story/lang/fr.php +++ b/module/story/lang/fr.php @@ -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 !"; diff --git a/module/story/lang/vi.php b/module/story/lang/vi.php index d2ffc295c8..c8d8f2945c 100644 --- a/module/story/lang/vi.php +++ b/module/story/lang/vi.php @@ -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!'; diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 8acf193de9..4d0e9393be 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -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}不属于同一产品!"; diff --git a/module/story/lang/zh-tw.php b/module/story/lang/zh-tw.php index 22678350b8..a746f3e168 100644 --- a/module/story/lang/zh-tw.php +++ b/module/story/lang/zh-tw.php @@ -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}不屬於同一產品!"; diff --git a/module/testtask/model.php b/module/testtask/model.php index 2102c1d8fa..aafe4a3e82 100644 --- a/module/testtask/model.php +++ b/module/testtask/model.php @@ -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)