diff --git a/module/block/control.php b/module/block/control.php index ba18c80ff6..b14d058819 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -701,23 +701,8 @@ class block extends control public function printProgramBlock() { $this->loadModel('project'); - $programs = $this->loadModel('program')->getUserPrograms('all', $this->params->orderBy, $this->params->num); - foreach($programs as $programID => $program) - { - $members = $this->project->getTeamMemberPairs($programID); - $consumed = $this->dao->select('sum(consumed) as consumed')->from(TABLE_TASK)->where('program')->eq($programID)->andWhere('deleted')->eq(0)->andWhere('parent')->lt(1)->fetch('consumed'); - $leftTasks = $this->dao->select('count(*) as leftTasks')->from(TABLE_TASK)->where('program')->eq($programID)->andWhere('deleted')->eq(0)->andWhere('status')->in('wait,doing,pause')->fetch('leftTasks'); - $leftStories = $this->dao->select('count(*) as leftStories')->from(TABLE_STORY)->where('program')->eq($programID)->andWhere('deleted')->eq(0)->andWhere('status')->eq('active')->fetch('leftStories'); - $leftBugs = $this->dao->select('count(*) as leftBugs')->from(TABLE_BUG)->where('program')->eq($programID)->andWhere('deleted')->eq(0)->andWhere('status')->eq('active')->fetch('leftBugs'); - $program->countMembers = count($members) ? count($members) - 1 : 0; - $program->consumed = $consumed ? $consumed : 0; - $program->leftTasks = $leftTasks ? $leftTasks : 0; - $program->leftStories = $leftStories ? $leftStories : 0; - $program->leftBugs = $leftBugs ? $leftBugs : 0; - } - - $this->view->programs = $programs; + $this->view->programs = $this->loadModel('program')->getUserPrograms('all', $this->params->orderBy, $this->params->num); $this->view->users = $this->loadModel('user')->getPairs('noletter'); } @@ -776,8 +761,8 @@ class block extends control $this->app->loadLang('task'); $this->app->loadLang('story'); - $status = isset($this->params->type) ? $this->params->type : 'all'; - $num = isset($this->params->num) ? (int)$this->params->num : 15; + $status = isset($this->params->type) ? $this->params->type : 'all'; + $num = isset($this->params->num) ? (int)$this->params->num : 15; /* Get projects. */ $programs = $this->loadModel('program')->getUserPrograms($status, 'id_desc', $num); @@ -790,14 +775,6 @@ class block extends control foreach($programs as $programID => $program) { $program->allStories = $program->doneStories = $program->leftStories = 0; - $program->consumed = $this->dao->select('sum(consumed) as consumed')->from(TABLE_TASK) - ->where('program')->eq($programID) - ->andWhere('deleted')->eq(0) - ->andWhere('parent')->lt(1) - ->fetch('consumed'); - - $members = $this->project->getTeamMemberPairs($programID); - $program->countMembers = count($members) ? count($members) - 1 : 0; $stories = $this->dao->select('id, status')->from(TABLE_STORY) ->where('deleted')->eq(0) diff --git a/module/block/view/programblock.html.php b/module/block/view/programblock.html.php index 7d741e602e..3d071e1536 100644 --- a/module/block/view/programblock.html.php +++ b/module/block/view/programblock.html.php @@ -13,7 +13,7 @@ program->PM;?> program->status;?> - program->countMembers;?> + program->teamCount;?> task->consumed;?> program->budget;?> program->leftStories;?> @@ -34,7 +34,7 @@ project->statusList, $program->status);?> - countMembers;?> + teamCount;?> consumed;?> budget . ' ' . zget($lang->program->unitList, $program->budgetUnit);?> leftStories;?> diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index 008cb47435..2424e68554 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -47,7 +47,7 @@ $lang->program->setPlanduration = '设置工期'; $lang->program->privway = '权限控制'; $lang->program->durationEstimation = '工作量估算'; $lang->program->progress = '项目进度'; -$lang->program->countMembers = '投入人数'; +$lang->program->teamCount = '投入人数'; $lang->program->leftStories = '剩余需求'; $lang->program->leftTasks = '剩余任务'; $lang->program->leftBugs = '剩余Bug'; diff --git a/module/program/model.php b/module/program/model.php index b20e5db5e1..4a8bfc9e15 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -43,7 +43,7 @@ class programModel extends model public function getUserPrograms($status = 'all', $orderBy = 'id_desc', $limit = 15) { - return $this->dao->select('*')->from(TABLE_PROJECT) + $programs = $this->dao->select('*')->from(TABLE_PROJECT) ->where('iscat')->eq(0) ->andWhere('template')->ne('') ->andWhere('program')->eq(0) @@ -53,6 +53,53 @@ class programModel extends model ->orderBy($orderBy) ->limit($limit) ->fetchAll('id'); + + if(empty($programs)) return array(); + $programIdList = array_keys($programs); + + $consumes = $this->dao->select('program, sum(consumed) as consumed')->from(TABLE_TASK) + ->where('program')->in($programIdList) + ->andWhere('deleted')->eq(0) + ->andWhere('parent')->lt(1) + ->groupBy('program') + ->fetchAll('program'); + + $teams = $this->dao->select('root, count(*) as count')->from(TABLE_TEAM) + ->where('root')->in($programIdList) + ->groupBy('root') + ->fetchAll('root'); + + $leftTasks = $this->dao->select('program, count(*) as leftTasks')->from(TABLE_TASK) + ->where('program')->in($programIdList) + ->andWhere('deleted')->eq(0) + ->andWhere('status')->in('wait,doing,pause') + ->groupBy('program') + ->fetchAll('program'); + + $leftStories = $this->dao->select('program, count(*) as leftStories')->from(TABLE_STORY) + ->where('program')->in($programIdList) + ->andWhere('deleted')->eq(0) + ->andWhere('status')->eq('active') + ->groupBy('program') + ->fetchAll('program'); + + $leftBugs = $this->dao->select('program, count(*) as leftBugs')->from(TABLE_BUG) + ->where('program')->in($programIdList) + ->andWhere('deleted')->eq(0) + ->andWhere('status')->eq('active') + ->groupBy('program') + ->fetchAll('program'); + + foreach($programs as $programID => $program) + { + $program->teamCount = isset($teams[$programID]) ? $teams[$programID]->count : 0; + $program->consumed = isset($consumes[$programID]) ? $consumes[$programID] : 0; + $program->leftTasks = isset($leftTasks[$programID]) ? $leftTasks[$programID] : 0; + $program->leftStories = isset($leftStories[$programID]) ? $leftStories[$programID] : 0; + $program->leftBugs = isset($leftBugs[$programID]) ? $leftBugs[$programID] : 0; + } + + return $programs; } /**