diff --git a/module/story/model.php b/module/story/model.php index bd7fe42f37..c9106a7dd2 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -86,11 +86,11 @@ class storyModel extends model $story->children = array(); if($story->parent == '-1') $story->children = $this->dao->select('*')->from(TABLE_STORY)->where('parent')->eq($storyID)->andWhere('deleted')->eq(0)->fetchAll('id'); - $story->openedDate = substr($story->openedDate, 0, 19); - $story->assignedDate = substr($story->assignedDate, 0, 19); - $story->reviewedDate = substr($story->reviewedDate, 0, 19); - $story->closedDate = substr($story->closedDate, 0, 19); - $story->lastEditedDate= substr($story->lastEditedDate, 0, 19); + $story->openedDate = empty($story->openedDate) ? '' : substr($story->openedDate, 0, 19); + $story->assignedDate = empty($story->assignedDate) ? '' : substr($story->assignedDate, 0, 19); + $story->reviewedDate = empty($story->reviewedDate) ? '' : substr($story->reviewedDate, 0, 19); + $story->closedDate = empty($story->closedDate) ? '' : substr($story->closedDate, 0, 19); + $story->lastEditedDate= empty($story->lastEditedDate)? '' : substr($story->lastEditedDate, 0, 19); return $story; } @@ -1423,16 +1423,15 @@ class storyModel extends model * @access public * @return bool */ - public function computeEstimate($storyID) + public function computeEstimate(int $storyID): bool { if(!$storyID) return true; - $stories = $this->dao->select('`id`,`estimate`,status')->from(TABLE_STORY)->where('parent')->eq($storyID)->andWhere('deleted')->eq(0)->fetchAll('id'); - if(empty($stories)) return true; + $estimates = $this->dao->select('`id`,`estimate`')->from(TABLE_STORY)->where('parent')->eq($storyID)->andWhere('deleted')->eq(0)->fetchPairs('id', 'estimate'); + if(empty($estimates)) return true; - $estimate = 0; - foreach($stories as $story) $estimate += $story->estimate; - $this->dao->update(TABLE_STORY)->set('estimate')->eq($estimate)->autoCheck()->where('id')->eq($storyID)->exec(); + $estimate = round(array_sum($estimates), 2); + $this->dao->update(TABLE_STORY)->set('estimate')->eq($estimate)->where('id')->eq($storyID)->exec(); return !dao::isError(); } diff --git a/module/story/test/model/computeestimate.php b/module/story/test/model/computeestimate.php index 1a328e1c7a..afd7d398b1 100755 --- a/module/story/test/model/computeestimate.php +++ b/module/story/test/model/computeestimate.php @@ -4,6 +4,11 @@ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/story.class.php'; su('admin'); +$story = zdTable('story'); +$story->parent->range('0,`-1`,2{3}'); +$story->estimate->range('[1-4]'); +$story->gen(5); + /** title=测试 storyModel->computeEstimate(); @@ -16,4 +21,8 @@ pid=1 $story = new storyTest(); -r() && p() && e(); \ No newline at end of file +r($story->computeEstimateTest(0)) && p() && e('0'); //不传入需求。 +r($story->computeEstimateTest(1)) && p('old,new') && e('1,1'); //传入普通需求,检查计算前后预计工时变化。 +r($story->computeEstimateTest(2)) && p('old,new') && e('2,8'); //传入父需求,检查计算前后预计工时变化。 +r($story->computeEstimateTest(3)) && p('old,new') && e('3,3'); //传入子需求,检查计算前后预计工时变化。 +r($story->computeEstimateTest(10)) && p() && e('0'); //传入不存在的需求。 diff --git a/module/story/test/story.class.php b/module/story/test/story.class.php index 2222cb58ea..a084184bff 100644 --- a/module/story/test/story.class.php +++ b/module/story/test/story.class.php @@ -239,15 +239,19 @@ class storyTest * * @param int $storyID * @access public - * @return void + * @return array */ - public function computeEstimateTest($storyID) + public function computeEstimateTest(int $storyID): array { + $oldStory = $this->objectModel->getByID($storyID); + if(empty($oldStory)) return array(); + $this->objectModel->computeEstimate($storyID); if(dao::isError()) return dao::getError(); - return $this->objectModel->getByID($storyID); + $newStory = $this->objectModel->getByID($storyID); + return array('old' => $oldStory->estimate, 'new' => $newStory->estimate); } /**