From acfbbfda1b0e18841da40fa49d226bb7c755ff17 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Thu, 1 Feb 2024 13:44:35 +0800 Subject: [PATCH] * Fix bug #42480, refresh project stats after man hour changing. --- module/program/model.php | 14 +++++ .../test/model/refreshprojectstats.php | 59 +++++++++++++++++++ module/program/test/program.class.php | 16 +++++ module/task/model.php | 15 ++++- 4 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 module/program/test/model/refreshprojectstats.php diff --git a/module/program/model.php b/module/program/model.php index 07b319e95c..adc8da78a6 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -1356,6 +1356,20 @@ class programModel extends model $this->loadModel('action')->cleanActions(); } + + /** + * 刷新项目的统计数据。 + * Refresh stats fields(estimate,consumed,left,progress) of project. + * + * @param bool $refreshAll + * @access public + * @return void + */ + public function refreshProjectStats(int $projectID): void + { + $this->programTao->updateStats(array($projectID)); + } + /** * Check the privilege. * diff --git a/module/program/test/model/refreshprojectstats.php b/module/program/test/model/refreshprojectstats.php new file mode 100644 index 0000000000..e15a6d25cd --- /dev/null +++ b/module/program/test/model/refreshprojectstats.php @@ -0,0 +1,59 @@ +#!/usr/bin/env php +config('program')->gen(20); +zdTable('task')->config('task')->gen(20); +zdTable('team')->config('team')->gen(30); +zdTable('user')->gen(5); + +su('admin'); + +$projectIdList = array(11, 60, 61, 100, 1111); +$programTester = new programTest(); + +r($programTester->refreshProjectStatsTest($projectIdList[0])) && p('progress,teamCount,estimate,consumed,left') && e('25.00,4,46,13,39'); // 更新项目 11 的统计信息,获取项目 11 的统计信息 +r($programTester->refreshProjectStatsTest($projectIdList[1])) && p('progress,teamCount,estimate,consumed,left') && e('31.80,0,18,7,15'); // 更新项目 60 的统计信息,获取项目 60 的统计信息 +r($programTester->refreshProjectStatsTest($projectIdList[2])) && p('progress,teamCount,estimate,consumed,left') && e('0.00,0,0,0,0'); // 更新项目 61 的统计信息,获取项目 61 的统计信息 +r($programTester->refreshProjectStatsTest($projectIdList[3])) && p('progress,teamCount,estimate,consumed,left') && e('0.00,0,0,0,0'); // 更新项目 100 的统计信息,获取项目 100 的统计信息 +r($programTester->refreshProjectStatsTest($projectIdList[4])) && p('progress,teamCount,estimate,consumed,left') && e('0,0,0,0,0'); // 更新不存在的项目 1111 的统计信息,获取不存在的项目 1111 的统计信息 diff --git a/module/program/test/program.class.php b/module/program/test/program.class.php index 2d1482c4d1..1f5e6d6bdf 100644 --- a/module/program/test/program.class.php +++ b/module/program/test/program.class.php @@ -583,4 +583,20 @@ class programTest $program = $this->program->getByID($programID); return $this->program->hasUnfinishedChildren($program); } + + /** + * 刷新项目的统计数据。 + * Refresh stats fields(estimate,consumed,left,progress) of project. + * + * @param int $projectID + * @access public + * @return array|object|bool + */ + public function refreshProjectStatsTest(int $projectID): array|object|bool + { + $this->program->refreshProjectStats($projectID); + if(dao::isError()) return dao::getError(); + + return $this->program->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch(); + } } diff --git a/module/task/model.php b/module/task/model.php index 31a46e49d0..270fa134a2 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -91,8 +91,11 @@ class taskModel extends model $effort->vision = $this->config->vision; $effort->order = isset($data->order) ? $data->order : 0; $this->dao->insert(TABLE_EFFORT)->data($effort)->autoCheck()->exec(); + $effortID = $this->dao->lastInsertID(); - return $this->dao->lastInsertID(); + $this->loadModel('program')->refreshProjectStats($effort->project); + + return $effortID; } /** @@ -278,6 +281,7 @@ class taskModel extends model $this->updateParentStatus(current($childrenIdList)); $this->computeBeginAndEnd($parentID); + $this->loadModel('program')->refreshProjectStats($oldParentTask->project); /* Create a action. */ $extra = implode(',', $childrenIdList); @@ -2222,7 +2226,11 @@ class taskModel extends model $removedMembers = array_diff($oldMembers, $teams); $changeUsers = array_merge($changeUsers, $removedMembers); } - if($changeUsers) $this->taskTao->resetEffortLeft($task->id, $changeUsers); + if($changeUsers) + { + $this->taskTao->resetEffortLeft($task->id, $changeUsers); + $this->loadModel('program')->refreshProjectStats($task->project); + } return $teams; } @@ -2614,6 +2622,7 @@ class taskModel extends model if($task->status != $oldStatus) $this->loadModel('kanban')->updateLane($task->execution, 'task', $taskID); if($task->status == 'done' && !dao::isError()) $this->loadModel('score')->create('task', 'finish', $taskID); } + $this->loadModel('program')->refreshProjectStats($task->project); return $allChanges; } @@ -2790,6 +2799,8 @@ class taskModel extends model ->where('id')->eq((int)$effort->id) ->exec(); + $this->loadModel('program')->refreshProjectStats($oldEffort->project); + $task = $this->getById($oldEffort->objectID); $data = $this->buildTaskForUpdateEffort($task, $oldEffort, $effort);