From 15f795770983b7b9baeaa9e3fb20041f3a47af77 Mon Sep 17 00:00:00 2001 From: leiyong <1549684884@qq.com> Date: Fri, 4 Dec 2020 10:53:00 +0800 Subject: [PATCH 1/4] * Adjust code. --- module/block/view/scrumoverviewblock.html.php | 2 +- module/product/model.php | 20 ++++ module/program/model.php | 95 ++++++++----------- 3 files changed, 61 insertions(+), 56 deletions(-) diff --git a/module/block/view/scrumoverviewblock.html.php b/module/block/view/scrumoverviewblock.html.php index 5e6569b97d..64679c4b90 100644 --- a/module/block/view/scrumoverviewblock.html.php +++ b/module/block/view/scrumoverviewblock.html.php @@ -56,7 +56,7 @@
block->totalStory;?>
- allStories ? html::a($this->createLink('project', 'story', 'projectID=' . $projectID), $totalData[$projectID]->allStories) : 0;?> + allStories;?>
diff --git a/module/product/model.php b/module/product/model.php index f4f7d669bc..e1d541ffef 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -729,6 +729,26 @@ class productModel extends model return $stories; } + /** + * Get the total number of requirements associated with the product. + * + * @param array $productIdList + * @param array $type + * @param array $status closed|active|draft + * @access public + * @return array + */ + public function getTotalStoriesByProduct($productIdList, $type, $status) + { + return $this->dao->select("count(*) as stories")->from(TABLE_STORY) + ->where('type')->eq($type) + ->andWhere('product')->in($productIdList) + ->andWhere('status')->eq($status) + ->beginIF($status == 'closed')->andWhere('closedReason')->eq('done')->fi() + ->andWhere('deleted')->eq(0) + ->fetch('stories'); + } + /** * Batch get story stage. * diff --git a/module/program/model.php b/module/program/model.php index d9ae2758c2..f34590bf94 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -895,6 +895,8 @@ class programModel extends model if(empty($projects)) return array(); $projectIdList = array_keys($projects); + $teams = $this->dao->select('root, count(*) as teams')->from(TABLE_TEAM)->where('root')->in($projectIdList)->groupBy('root')->fetchPairs(); + $hours = $this->dao->select('PRJ, cast(sum(consumed) as decimal(10,2)) as consumed, cast(sum(estimate) as decimal(10,2)) as estimate') @@ -905,72 +907,37 @@ class programModel extends model ->groupBy('PRJ') ->fetchAll('PRJ'); - $teams = $this->dao->select('root, count(*) as count')->from(TABLE_TEAM) - ->where('root')->in($projectIdList) - ->groupBy('root') - ->fetchAll('root'); - - $leftTasks = $this->dao->select('PRJ, count(*) as leftTasks')->from(TABLE_TASK) + $leftTasks = $this->dao->select('PRJ, count(*) as tasks')->from(TABLE_TASK) ->where('PRJ')->in($projectIdList) ->andWhere('deleted')->eq(0) ->andWhere('status')->in('wait,doing,pause') ->groupBy('PRJ') - ->fetchAll('PRJ'); + ->fetchPairs(); - $allStories = $this->dao->select('PRJ, count(*) as allStories')->from(TABLE_STORY) - ->where('PRJ')->in($projectIdList) - ->andWhere('deleted')->eq(0) - ->andWhere('status')->ne('draft') - ->groupBy('PRJ') - ->fetchAll('PRJ'); + foreach($projectIdList as $projectID) + { + $productIdList = $this->loadModel('product')->getProductIDByProject($projectID); + $allStories[$projectID] = $this->product->getTotalStoriesByProduct($productIdList, 'story', 'draft'); + $doneStories[$projectID] = $this->product->getTotalStoriesByProduct($productIdList, 'story', 'closed'); + $leftStories[$projectID] = $this->product->getTotalStoriesByProduct($productIdList, 'story', 'active'); + } - $doneStories = $this->dao->select('PRJ, count(*) as doneStories')->from(TABLE_STORY) - ->where('PRJ')->in($projectIdList) - ->andWhere('deleted')->eq(0) - ->andWhere('status')->eq('closed') - ->andWhere('closedReason')->eq('done') - ->groupBy('PRJ') - ->fetchAll('PRJ'); - - $leftStories = $this->dao->select('PRJ, count(*) as leftStories')->from(TABLE_STORY) - ->where('PRJ')->in($projectIdList) - ->andWhere('deleted')->eq(0) - ->andWhere('status')->eq('active') - ->groupBy('PRJ') - ->fetchAll('PRJ'); - - $leftBugs = $this->dao->select('PRJ, count(*) as leftBugs')->from(TABLE_BUG) - ->where('PRJ')->in($projectIdList) - ->andWhere('deleted')->eq(0) - ->andWhere('status')->eq('active') - ->groupBy('PRJ') - ->fetchAll('PRJ'); - - $allBugs = $this->dao->select('PRJ, count(*) as allBugs')->from(TABLE_BUG) - ->where('PRJ')->in($projectIdList) - ->andWhere('deleted')->eq(0) - ->groupBy('PRJ') - ->fetchAll('PRJ'); - - $doneBugs = $this->dao->select('PRJ, count(*) as doneBugs')->from(TABLE_BUG) - ->where('PRJ')->in($projectIdList) - ->andWhere('deleted')->eq(0) - ->andWhere('status')->eq('resolved') - ->groupBy('PRJ') - ->fetchAll('PRJ'); + $leftBugs = $this->getTotalBugByPRJ($projectIdList, 'active'); + $allBugs = $this->getTotalBugByPRJ($projectIdList, 'all'); + $doneBugs = $this->getTotalBugByPRJ($projectIdList, 'resolved'); foreach($projects as $projectID => $project) { - $project->teamCount = isset($teams[$projectID]) ? $teams[$projectID]->count : 0; $project->consumed = isset($hours[$projectID]) ? $hours[$projectID]->consumed : 0; $project->estimate = isset($hours[$projectID]) ? $hours[$projectID]->estimate : 0; - $project->leftTasks = isset($leftTasks[$projectID]) ? $leftTasks[$projectID]->leftTasks : 0; - $project->allStories = isset($allStories[$projectID]) ? $allStories[$projectID]->allStories : 0; - $project->doneStories = isset($doneStories[$projectID]) ? $doneStories[$projectID]->doneStories : 0; - $project->leftStories = isset($leftStories[$projectID]) ? $leftStories[$projectID]->leftStories : 0; - $project->leftBugs = isset($leftBugs[$projectID]) ? $leftBugs[$projectID]->leftBugs : 0; - $project->allBugs = isset($allBugs[$projectID]) ? $allBugs[$projectID]->allBugs : 0; - $project->doneBugs = isset($doneBugs[$projectID]) ? $doneBugs[$projectID]->doneBugs : 0; + $project->teamCount = isset($teams[$projectID]) ? $teams[$projectID] : 0; + $project->leftTasks = isset($leftTasks[$projectID]) ? $leftTasks[$projectID] : 0; + $project->leftBugs = isset($leftBugs[$projectID]) ? $leftBugs[$projectID] : 0; + $project->allBugs = isset($allBugs[$projectID]) ? $allBugs[$projectID] : 0; + $project->doneBugs = isset($doneBugs[$projectID]) ? $doneBugs[$projectID] : 0; + $project->allStories = $allStories[$projectID]; + $project->doneStories = $doneStories[$projectID]; + $project->leftStories = $leftStories[$projectID]; } return $projects; @@ -1096,6 +1063,24 @@ class programModel extends model ->fetchAll('id'); } + /** + * Get associated bugs by project. + * + * @param array $projectIdList + * @param string $status active|resolved|all + * @access public + * @return object + */ + public function getTotalBugByPRJ($projectIdList, $status) + { + return $this->dao->select('PRJ, count(*) as bugs')->from(TABLE_BUG) + ->where('PRJ')->in($projectIdList) + ->andWhere('deleted')->eq(0) + ->beginIF($status != 'all')->andWhere('status')->eq($status)->fi() + ->groupBy('PRJ') + ->fetchPairs('PRJ'); + } + /** * Build the query. * From a50371c5775bf3624da4f1b9fe2cb16c346eaa36 Mon Sep 17 00:00:00 2001 From: tianshujie98 Date: Fri, 4 Dec 2020 11:01:29 +0800 Subject: [PATCH 2/4] * Fix block bug. --- module/block/control.php | 1 + module/block/lang/de.php | 7 +++++++ module/block/lang/en.php | 7 +++++++ module/block/lang/fr.php | 7 +++++++ module/block/lang/vi.php | 7 +++++++ module/block/lang/zh-cn.php | 7 +++++++ 6 files changed, 36 insertions(+) diff --git a/module/block/control.php b/module/block/control.php index 2368dd0b60..8125f1764f 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -203,6 +203,7 @@ class block extends control * Display dashboard for app. * * @param string $module + * @param string $type * @access public * @return void */ diff --git a/module/block/lang/de.php b/module/block/lang/de.php index 29ef822efb..b4878a843e 100644 --- a/module/block/lang/de.php +++ b/module/block/lang/de.php @@ -217,6 +217,13 @@ $lang->block->default['project']['4']['params']['count'] = 15; $lang->block->default['project']['4']['params']['orderBy'] = 'id_desc'; $lang->block->default['project']['4']['params']['type'] = 'assignedTo'; +$lang->block->default['project']['5']['title'] = 'Build List'; +$lang->block->default['project']['5']['block'] = 'build'; +$lang->block->default['project']['5']['grid'] = 8; + +$lang->block->default['project']['5']['params']['count'] = 15; +$lang->block->default['project']['5']['params']['orderBy'] = 'id_desc'; + $lang->block->default['qa']['1']['title'] = 'Test Report'; $lang->block->default['qa']['1']['block'] = 'statistic'; $lang->block->default['qa']['1']['grid'] = 8; diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 70a52e7777..68610dd446 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -217,6 +217,13 @@ $lang->block->default['project']['4']['params']['count'] = 15; $lang->block->default['project']['4']['params']['orderBy'] = 'id_desc'; $lang->block->default['project']['4']['params']['type'] = 'assignedTo'; +$lang->block->default['project']['5']['title'] = 'Build List'; +$lang->block->default['project']['5']['block'] = 'build'; +$lang->block->default['project']['5']['grid'] = 8; + +$lang->block->default['project']['5']['params']['count'] = 15; +$lang->block->default['project']['5']['params']['orderBy'] = 'id_desc'; + $lang->block->default['qa']['1']['title'] = 'Test Report'; $lang->block->default['qa']['1']['block'] = 'statistic'; $lang->block->default['qa']['1']['grid'] = 8; diff --git a/module/block/lang/fr.php b/module/block/lang/fr.php index afa251dc2e..244783176f 100644 --- a/module/block/lang/fr.php +++ b/module/block/lang/fr.php @@ -218,6 +218,13 @@ $lang->block->default['project']['4']['params']['count'] = 15; $lang->block->default['project']['4']['params']['orderBy'] = 'id_desc'; $lang->block->default['project']['4']['params']['type'] = 'assignedTo'; +$lang->block->default['project']['5']['title'] = 'Build List'; +$lang->block->default['project']['5']['block'] = 'build'; +$lang->block->default['project']['5']['grid'] = 8; + +$lang->block->default['project']['5']['params']['count'] = 15; +$lang->block->default['project']['5']['params']['orderBy'] = 'id_desc'; + $lang->block->default['qa']['1']['title'] = 'Rapport de Tests'; $lang->block->default['qa']['1']['block'] = 'statistic'; $lang->block->default['qa']['1']['grid'] = 8; diff --git a/module/block/lang/vi.php b/module/block/lang/vi.php index 5e128b42a5..2c1145fbeb 100644 --- a/module/block/lang/vi.php +++ b/module/block/lang/vi.php @@ -217,6 +217,13 @@ $lang->block->default['project']['4']['params']['count'] = 15; $lang->block->default['project']['4']['params']['orderBy'] = 'id_desc'; $lang->block->default['project']['4']['params']['type'] = 'assignedTo'; +$lang->block->default['project']['5']['title'] = 'Build List'; +$lang->block->default['project']['5']['block'] = 'build'; +$lang->block->default['project']['5']['grid'] = 8; + +$lang->block->default['project']['5']['params']['count'] = 15; +$lang->block->default['project']['5']['params']['orderBy'] = 'id_desc'; + $lang->block->default['qa']['1']['title'] = 'Báo cáo Test'; $lang->block->default['qa']['1']['block'] = 'statistic'; $lang->block->default['qa']['1']['grid'] = 8; diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index dac66606d7..9ff78df9d3 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -217,6 +217,13 @@ $lang->block->default['project']['4']['params']['count'] = 15; $lang->block->default['project']['4']['params']['orderBy'] = 'id_desc'; $lang->block->default['project']['4']['params']['type'] = 'assignedTo'; +$lang->block->default['project']['5']['title'] = '版本列表'; +$lang->block->default['project']['5']['block'] = 'build'; +$lang->block->default['project']['5']['grid'] = 8; + +$lang->block->default['project']['5']['params']['count'] = 15; +$lang->block->default['project']['5']['params']['orderBy'] = 'id_desc'; + $lang->block->default['qa']['1']['title'] = '测试统计'; $lang->block->default['qa']['1']['block'] = 'statistic'; $lang->block->default['qa']['1']['grid'] = 8; From 5dacb4172989e708b4ae664d66fbe755be756a2f Mon Sep 17 00:00:00 2001 From: leiyong <1549684884@qq.com> Date: Fri, 4 Dec 2020 11:28:46 +0800 Subject: [PATCH 3/4] * Fix bug. --- module/product/model.php | 1 + module/project/model.php | 9 +-------- module/projectbuild/control.php | 14 +++++++++----- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/module/product/model.php b/module/product/model.php index e1d541ffef..187ee5dfde 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -818,6 +818,7 @@ class productModel extends model ->andWhere('t2.deleted')->eq('0') ->orderBy($orderBy) ->fetchAll('id'); + $executionList = array('0' => ''); $project = $this->loadModel('program')->getPRJByID($this->session->PRJ); diff --git a/module/project/model.php b/module/project/model.php index 8dca37f636..1a789467dd 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2941,12 +2941,10 @@ class projectModel extends model * @param array $products * @param int $queryID * @param string $actionURL - * @param array $projects - * @param string $type projectBuild * @access public * @return void */ - public function buildProjectBuildSearchForm($products, $queryID, $actionURL, $projects = '', $type = '') + public function buildProjectBuildSearchForm($products, $queryID, $actionURL) { $this->loadModel('build'); @@ -2955,11 +2953,6 @@ class projectModel extends model $this->config->build->search['actionURL'] = $actionURL; $this->config->build->search['queryID'] = $queryID; $this->config->build->search['params']['product']['values'] = $products; - if($type == 'projectBuild') - { - $this->config->build->search['fields']['project'] = $this->lang->projectCommon; - $this->config->build->search['params']['project'] = array('operator' => '=', 'control' => 'select', 'values' => array('' => '') + $projects); - } $this->loadModel('search')->setSearchParams($this->config->build->search); } diff --git a/module/projectbuild/control.php b/module/projectbuild/control.php index 33fc048a43..47d8320802 100644 --- a/module/projectbuild/control.php +++ b/module/projectbuild/control.php @@ -22,27 +22,31 @@ class projectBuild extends control public function browse($projectID = 0, $type = 'all', $param = 0) { $this->loadModel('project'); + $this->loadModel('build'); $project = $this->loadModel('program')->getPRJByID($projectID); /* Get products' list. */ $products = $this->project->getProducts($projectID, false); $products = array('' => '') + $products; - $projects = $this->project->getExecutionsByProject((int)$projectID, 'all', '', true); - /* Build the search form. */ $type = strtolower($type); - $queryID = ($type == 'bysearch') ? (int)$param : 0; + $queryID = ($type == 'bysearch') ? (int)$param : 0; $actionURL = $this->createLink('projectbuild', 'browse', "projectID=$projectID&type=bysearch&queryID=myQueryID"); + + $projects = $this->project->getExecutionsByProject($projectID, 'all', '', true); + $this->config->build->search['fields']['project'] = $this->project->lang->projectCommon; + $this->config->build->search['params']['project'] = array('operator' => '=', 'control' => 'select', 'values' => array('' => '') + $projects); + $this->project->buildProjectBuildSearchForm($products, $queryID, $actionURL, $projects, 'projectBuild'); if($type == 'bysearch') { - $builds = $this->loadModel('build')->getProjectBuildsBySearch((int)$projectID, (int)$param); + $builds = $this->build->getProjectBuildsBySearch((int)$projectID, (int)$param); } else { - $builds = $this->loadModel('build')->getProjectBuilds((int)$projectID, $type, $param); + $builds = $this->build->getProjectBuilds((int)$projectID, $type, $param); } /* Set project builds. */ From 58f8f4b234e63488bac8158b83cc5138a10c2af5 Mon Sep 17 00:00:00 2001 From: leiyong <1549684884@qq.com> Date: Fri, 4 Dec 2020 13:48:23 +0800 Subject: [PATCH 4/4] * Adjust code. --- module/block/control.php | 10 +++++----- module/build/control.php | 18 ++++++------------ module/my/view/story.html.php | 8 ++++---- module/product/control.php | 1 + module/product/model.php | 4 ++-- module/project/model.php | 8 ++++---- 6 files changed, 22 insertions(+), 27 deletions(-) diff --git a/module/block/control.php b/module/block/control.php index 8125f1764f..550a2443c5 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -1332,14 +1332,14 @@ class block extends control } /** - * Print srcum project block. + * Print sprint block. * * @access public * @return void */ public function printSprintBlock() { - $status = $this->dao->select('status, count(*) as count')->from(TABLE_PROJECT) + $sprints = $this->dao->select('status, count(*) as sprints')->from(TABLE_EXECUTION) ->where('deleted')->eq(0) ->andWhere('type')->eq('sprint') ->andWhere('parent')->eq($this->session->PRJ) @@ -1347,9 +1347,9 @@ class block extends control ->fetchPairs(); $summary = new stdclass(); - $summary->total = array_sum($status); - $summary->doing = zget($status, 'doing', 0); - $summary->closed = zget($status, 'closed', 0); + $summary->total = array_sum($sprints); + $summary->doing = zget($sprints, 'doing', 0); + $summary->closed = zget($sprints, 'closed', 0); $progress = new stdclass(); $progress->doing = $summary->total == 0 ? 0 : round($summary->doing / $summary->total, 3); diff --git a/module/build/control.php b/module/build/control.php index 232507f060..98cad7ebf5 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -33,35 +33,29 @@ class build extends control $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('build', 'view', "buildID=$buildID"))); } - $this->session->set('buildCreate', $this->app->getURI(true)); - /* Load these models. */ $this->loadModel('project'); $this->loadModel('user'); - + + $this->session->set('buildCreate', $this->app->getURI(true)); + $execution = $this->loadModel('project')->getExecutionById($executionID); + /* Set menu. */ $executions = $this->project->getExecutionPairs($this->session->PRJ); $this->project->setMenu($executions, $executionID); - /* Get stories and bugs. */ - $orderBy = 'status_asc, stage_asc, id_desc'; - - /* Assign. */ - $project = $this->loadModel('project')->getExecutionById($executionID); - $productGroups = $this->project->getProducts($executionID); $productID = $productID ? $productID : key($productGroups); $products = array(); foreach($productGroups as $product) $products[$product->id] = $product->name; - $this->view->title = $project->name . $this->lang->colon . $this->lang->build->create; - $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$executionID"), $project->name); + $this->view->title = $execution->name . $this->lang->colon . $this->lang->build->create; + $this->view->position[] = html::a($this->createLink('project', 'task', "projectID=$executionID"), $execution->name); $this->view->position[] = $this->lang->build->create; $this->view->product = isset($productGroups[$productID]) ? $productGroups[$productID] : ''; $this->view->branches = (isset($productGroups[$productID]) and $productGroups[$productID]->type == 'normal') ? array() : $this->loadModel('branch')->getPairs($productID); $this->view->executionID = $executionID; - $this->view->orderBy = $orderBy; $this->view->products = $products; $this->view->lastBuild = $this->build->getLast($executionID); $this->view->productGroups = $productGroups; diff --git a/module/my/view/story.html.php b/module/my/view/story.html.php index 536e9b7d35..e3532c8443 100644 --- a/module/my/view/story.html.php +++ b/module/my/view/story.html.php @@ -1,19 +1,19 @@ - * @package dashboard - * @version $Id: story.html.php 5116 2013-07-12 06:37:48Z chencongzhi520@gmail.com $ + * @package my + * @version $Id * @link http://www.zentao.net */ ?>