From 999768f6d03d710f75902e7927c3152a4eae89ab Mon Sep 17 00:00:00 2001 From: chaideqing Date: Mon, 18 Dec 2023 01:11:20 +0000 Subject: [PATCH] * Fix bug #41059. --- module/program/model.php | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index 37b4835ff7..5c05622894 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -1325,7 +1325,29 @@ class programModel extends model if(empty($projects)) return; } - /* 1. Get summary and members of executions to be refreshed. */ + $summary = array(); + /* 1. Execution has no tasks.*/ + foreach($projects as $project) + { + $executions = $this->dao->select('id')->from(TABLE_PROJECT)->where('project')->eq($project->project)->andWhere('deleted')->eq(0)->fetchPairs(); + foreach($executions as $executionID) + { + $taskCount = $this->dao->select('id')->from(TABLE_TASK) + ->where('deleted')->eq(0) + ->andWhere('execution')->eq($executionID) + ->count(); + if(empty($taskCount)) + { + $summary[$executionID] = new stdclass(); + $summary[$executionID]->totalEstimate = 0; + $summary[$executionID]->totalConsumed = 0; + $summary[$executionID]->totalLeft = 0; + $summary[$executionID]->execution = $executionID; + } + } + } + + /* 2. Get summary and members of executions to be refreshed. */ $tasks = $this->dao->select('t1.id, execution, t1.estimate, t1.consumed, t1.`left`, t1.status')->from(TABLE_TASK)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id') ->where('t1.deleted')->eq(0) @@ -1333,7 +1355,6 @@ class programModel extends model ->beginIF(!empty($projects))->andWhere('t1.project')->in(array_keys($projects))->fi() ->fetchAll('id'); - $summary = array(); foreach($tasks as $task) { if(empty($task->execution)) continue; @@ -1361,14 +1382,14 @@ class programModel extends model $projectsPairs = $this->dao->select('id,deleted')->from(TABLE_PROJECT)->fetchPairs(); - /* 2. Get all parents to be refreshed. */ + /* 3. Get all parents to be refreshed. */ $executions = array(); foreach($summary as $execution) $executions[$execution->execution] = $execution->execution; $paths = $this->dao->select('id,path')->from(TABLE_PROJECT)->where('id')->in($executions)->fetchAll(); $executionPaths = array(); foreach($paths as $path) $executionPaths[$path->id] = explode(',', trim($path->path, ',')); - /* 3. Compute stats of execution and parents. */ + /* 4. Compute stats of execution and parents. */ $stats = array(); foreach($summary as $execution) { @@ -1395,7 +1416,7 @@ class programModel extends model $stats[$projectID]['teamCount'] = $teamCount; } - /* 4. Refresh stats to db. */ + /* 5. Refresh stats to db. */ foreach($stats as $projectID => $project) { $totalRealNotDel = $project['totalConsumedNotDel'] + $project['totalLeftNotDel']; @@ -1410,7 +1431,7 @@ class programModel extends model ->exec(); } - /* 5. Update programStatsTime. */ + /* 6. Update programStatsTime. */ $projectList = $this->dao->select('id,progress,path,consumed,`left`')->from(TABLE_PROJECT) ->where('type')->eq('project') ->andWhere('parent')->ne(0) @@ -1438,11 +1459,11 @@ class programModel extends model $this->dao->update(TABLE_PROJECT)->set('progress')->eq($progress)->where('id')->eq($programID)->exec(); } - /* 6. Update projectStatsTime in config. */ + /* 7. Update projectStatsTime in config. */ $this->loadModel('setting')->setItem('system.common.global.projectStatsTime', $now); $this->app->config->global->projectStatsTime = $now; - /* 7. Clear actions older than 30 days. */ + /* 8. Clear actions older than 30 days. */ $this->loadModel('action')->cleanActions(); }