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;
}
/**