Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into sprint/master_lanzongjun_fixbug

This commit is contained in:
Zongjun Lan
2022-03-10 15:33:51 +08:00
15 changed files with 492 additions and 4 deletions
+1 -1
View File
@@ -721,7 +721,7 @@ class upgrade extends control
$this->view->title = $this->lang->upgrade->result;
$this->view->position[] = $this->lang->upgrade->common;
$needProcess = $this->upgrade->checkProcess($fromVersion);
$needProcess = $this->upgrade->checkProcess();
$this->view->needProcess = $needProcess;
$this->view->fromVersion = $fromVersion;
$this->display();
+5
View File
@@ -46,6 +46,11 @@
</div>
</div>
<script>
$(function()
{
$.get('<?php echo inlink('afterExec', "fromVersion=$fromVersion&processed=yes")?>');
})
<?php
foreach($needProcess as $processKey => $value) echo 'var ' . $processKey . "Finish = false;\n";
if(isset($needProcess['updateFile'])):?>
+92 -2
View File
@@ -721,12 +721,20 @@ class executionTest
}
}
public function unlinkStoryTest($executionID, $count)
public function unlinkStoryTest($executionID, $count, $storyID, $param = array())
{
global $tester;
$stories = array();
$products = array();
$createFields = array('stories' => $stories, 'products' => $products);
foreach($createFields as $field => $defaultValue) $_POST[$field] = $defaultValue;
foreach($param as $key => $value) $_POST[$key] = $value;
$tester->dbh->query("delete from zt_projectstory where project = $executionID");
$this->objectModel->unlinkStory($executionID);
$this->objectModel->linkStory($executionID);
unset($_POST);
$this->objectModel->unlinkStory($executionID, $storyID);
if(dao::isError())
{
$error = dao::getError();
@@ -740,6 +748,88 @@ class executionTest
else
{
$object = $tester->dbh->query("select * from zt_projectstory where project = $executionID")->fetchAll();
if(isset($object))
{
return $object;
}
else
{
return "全部需求已解除";
}
}
}
public function unlinkCasesTest($executionID, $productID, $storyID)
{
global $tester;
$tester->dbh->query("delete from zt_projectcase where project = $executionID");
$this->objectModel->linkCases($executionID, $productID, $storyID);
$this->objectModel->unlinkCases($executionID, $storyID);
if(dao::isError())
{
$error = dao::getError();
return $error;
}
else
{
$object = $tester->dbh->query("select * from zt_projectcase where project = $executionID")->fetchAll();
return $object;
}
}
public function getTeamMembersTest($executionID, $count)
{
$object = $this->objectModel->getTeamMembers($executionID);
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($object);
}
else
{
return $object;
}
}
public function getMembersByIdListTest($executionIdList, $count)
{
$object = $this->objectModel->getMembersByIdList($executionIdList);
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($object);
}
else
{
return $object;
}
}
public function getTeamSkipTest($taskID, $begin, $end, $count)
{
global $tester;
$teams = $tester->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($taskID)->andWhere('type')->eq('task')->orderBy('order')->fetchAll('account');
$object = $this->objectModel->getTeamSkip($teams, $begin, $end);
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($object);
}
else
{
return $object;
}
}
+15
View File
@@ -607,4 +607,19 @@ class taskTest
return isset($parentObject) ? $parentObject : $object;
}
}
public function computeHours4MultipleTest($oldTask, $task = null, $team = array(), $autoStatus = true)
{
$result = $this->objectModel->computeHours4Multiple($oldTask, $task, $team, $autoStatus);
if(dao::isError())
{
return dao::getError();
}
else
{
$object = $this->objectModel->getById($oldTask->id);
return !empty($team) ? $result : $object;
}
}
}
+99
View File
@@ -0,0 +1,99 @@
title: table zt_team
desc: "团队"
author: automated export
version: "1.0"
fields:
- field: id
note: "ID"
range: 911-1000
prefix: ""
postfix: ""
loop: 0
format: ""
- field: root
note: "任务ID"
range: 1,901-909
prefix: ""
postfix: ""
loop: 0
format: ""
- field: type
note: "项目类型"
range: 'task'
prefix: ""
postfix: ""
loop: 0
format: ""
- field: account
note: "用户账号"
fields:
- field: account1
range: po,user,admin
- field: account2
range: 82,92,''
prefix: ""
postfix: ""
loop: 0
format: ""
- field: role
note: "角色"
range: 研发{99},测试{100},项目经理{100},产品经理{5}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: limited
note: "受限用户"
range: no
prefix: ""
postfix: ""
loop: 0
format: ""
- field: join
note: "加盟日"
range: Y-m-d
prefix: ""
type: timestamp
format: "YYYY-MM-DD"
- field: days
note: "可用工作日"
range: 1-50:R
prefix: ""
postfix: ""
loop: 0
format: ""
- field: hours
note: "可用工时/天"
range: 1-8:R
prefix: ""
postfix: ""
loop: 0
format: ""
- field: estimate
note: ""
range: 1-3
prefix: ""
postfix: ""
loop: 0
format: ""
- field: consumed
note: ""
range: 1-3
prefix: ""
postfix: ""
loop: 0
format: ""
- field: left
note: ""
range: 1-3
prefix: ""
postfix: ""
loop: 0
format: ""
- field: order
note: "排序"
range: 0
prefix: ""
postfix: ""
loop: 0
format: ""
+7
View File
@@ -135,6 +135,13 @@ fields:
postfix: ""
loop: 0
format: ""
- field: visions
note: "版本"
range: rnd
prefix: ""
postfix: ",lite"
loop: 0
format: ""
- field: ip
note: "最后IP"
format: ""
+1
View File
@@ -45,6 +45,7 @@ $builder->kanbancellproject = array('rows' => 4860, 'extends' => array('kanban
$builder->team = array('rows' => 400, 'extends' => array('team'));
$builder->teamtask = array('rows' => 20, 'extends' => array('team', 'teamtask'));
$builder->stakeholder = array('rows' => 1, 'extends' => array('stakeholder'));
$builder->stageson = array('rows' => 30, 'extends' => array('project', 'executionson'));
+5
View File
@@ -149,6 +149,11 @@ class Processor
*/
private function initTask()
{
$parentList = $this->dao->select('parent')->from(TABLE_TASK)->where('parent')->gt(0)->fetchAll('parent');
$parentIDList = array_keys($parentList);
$parentID = implode(',', $parentIDList);
$this->dao->update(TABLE_TASK)->set('parent')->eq(-1)->where('id')->in($parentID)->andWhere('deleted')->eq(0)->exec();
}
/**
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/execution.class.php';
su('admin');
/**
title=测试executionModel->getMembersByIdListTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$executionIDList = array('101', '131', '161');
$count = array('0','1');
$execution = new executionTest();
r($execution->getMembersByIdListTest($executionIDList, $count[0])[$executionIDList[0]]) && p('0:root,account,realname') && e('101,po82,研发主管82');// 批量查询敏捷执行team
r($execution->getMembersByIdListTest($executionIDList, $count[0])[$executionIDList[1]]) && p('0:root,account,realname') && e('131,test22,开发22'); // 批量查询瀑布执行team
r($execution->getMembersByIdListTest($executionIDList, $count[0])[$executionIDList[2]]) && p('0:root,account,realname') && e('161,test52,开发52'); // 批量查询看板执行team
r($execution->getMembersByIdListTest($executionIDList, $count[1])) && p() && e('3'); // 批量查询执行team统计
+31
View File
@@ -0,0 +1,31 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/execution.class.php';
su('admin');
/**
title=测试executionModel->getTeamMembersTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$executionIDList = array('101', '131', '161');
$count = array('0','1');
$execution = new executionTest();
r($execution->getTeamMembersTest($executionIDList[0], $count[0])) && p('po82:root,type,userID') && e('101,execution,482'); // 敏捷执行查看team
r($execution->getTeamMembersTest($executionIDList[1], $count[0])) && p('test22:root,type,realname') && e('131,execution,开发22'); // 瀑布执行查看team
r($execution->getTeamMembersTest($executionIDList[2], $count[0])) && p('test52:root,type,realname') && e('161,execution,开发52'); // 看板执行查看team
r($execution->getTeamMembersTest($executionIDList[0], $count[1])) && p() && e('2'); // 敏捷执行team统计
r($execution->getTeamMembersTest($executionIDList[1], $count[1])) && p() && e('1'); // 瀑布执行team统计
r($execution->getTeamMembersTest($executionIDList[2], $count[1])) && p() && e('1'); // 看板执行team统计
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/execution.class.php';
su('admin');
/**
title=测试executionModel->getTeamSkipTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$teamList = array('test2', 'test12', 'test15');
$begin = 'test2';
$end = 'test17';
$count = array('0','1');
$execution = new executionTest();
var_dump($execution->getTeamSkipTest($teamList, $teamList[0], $end, $count[0]));die;
r($execution->getTeamSkipTest($teamList, $begin, $end, $count[0])) && p('0:root,account,realname') && e('101,po82,研发主管82');// 批量查询敏捷执行team
r($execution->getTeamSkipTest($executionIDList, $count[0])[$executionIDList[1]]) && p('0:root,account,realname') && e('131,test22,开发22'); // 批量查询瀑布执行team
r($execution->getTeamSkipTest($executionIDList, $count[0])[$executionIDList[2]]) && p('0:root,account,realname') && e('161,test52,开发52'); // 批量查询看板执行team
r($execution->getTeamSkipTest($executionIDList, $count[1])) && p() && e('3'); // 批量查询执行team统计
+1 -1
View File
@@ -34,4 +34,4 @@ r($execution->linkStoryTest($executionIDList[0], $count[1], $story)) && p()
r($execution->linkStoryTest($executionIDList[1], $count[1], $story)) && p() && e('3'); // 瀑布执行关联需求统计
r($execution->linkStoryTest($executionIDList[2], $count[1], $story)) && p() && e('3'); // 看板执行关联需求统计
system("./ztest init");
system("./ztest init");
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/execution.class.php';
su('admin');
/**
title=测试executionModel->unlinkCasesTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$executionIDList = array('101', '131', '161');
$products = array('1', '43', '68');
$stories = array('2', '170', '270');
$count = array('0','1');
$execution = new executionTest();
r($execution->unlinkCasesTest($executionIDList[0], $products[0], $stories[0])) && p() && e('0'); // 敏捷执行解除关联用例
r($execution->unlinkCasesTest($executionIDList[1], $products[1], $stories[1])) && p() && e('0'); // 瀑布执行解除关联用例
r($execution->unlinkCasesTest($executionIDList[2], $products[2], $stories[2])) && p() && e('0'); // 看板执行解除关联用例
system("./ztest init");
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/execution.class.php';
su('admin');
/**
title=测试executionModel->unlinkStoryTest();
cid=1
pid=1
敏捷执行关联需求 >> 101,1,4
瀑布执行关联需求 >> 131,1,4
看板执行关联需求 >> 161,1,4
敏捷执行关联需求统计 >> 3
瀑布执行关联需求统计 >> 3
看板执行关联需求统计 >> 3
*/
$executionIDList = array('101', '131', '161');
$stories = array('4', '324', '364');
$products = array('4' => '1', '324' => '81', '364' => '91');
$count = array('0', '1');
$story = array('stories' => $stories, 'products' => $products);
$execution = new executionTest();
r($execution->unlinkStoryTest($executionIDList[0], $count[0], $stories[0], $story)) && p('0:project,product,story') && e('101,81,324'); // 敏捷执行解除关联需求
r($execution->unlinkStoryTest($executionIDList[1], $count[0], $stories[1], $story)) && p('0:project,product,story') && e('131,1,4'); // 瀑布执行解除关联需求
r($execution->unlinkStoryTest($executionIDList[2], $count[0], $stories[2], $story)) && p('0:project,product,story') && e('161,1,4'); // 看板执行解除关联需求
r($execution->unlinkStoryTest($executionIDList[0], $count[1], $stories[0], $story)) && p() && e('2'); // 敏捷执行关联需求统计
r($execution->unlinkStoryTest($executionIDList[1], $count[1], $stories[1], $story)) && p() && e('2'); // 瀑布执行关联需求统计
r($execution->unlinkStoryTest($executionIDList[2], $count[1], $stories[2], $story)) && p() && e('2'); // 看板执行关联需求统计
system("./ztest init");
+105
View File
@@ -0,0 +1,105 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/task.class.php';
su('admin');
/**
title=taskModel->computeHours4Multiple();
cid=1
pid=1
task状态为wait只有老task计算多人工时 >> 1,po82,wait,3,3,3
task状态为wait有新老task计算多人工时 >> 1,po82,wait,3,3,3
task状态为wait有新老task和团队计算多人工时 >> 1,po82,doing,3,3,3
task状态为done只有老task计算多人工时 >> 903,po82,done,3,3,3
task状态为done有新老task计算多人工时 >> 903,po82,done,3,3,3
task状态为done有新老task和团队计算多人工时 >> 903,po82,doing,3,3,3
task状态为pause只有老task计算多人工时 >> 910,,pause,9,12,9
task状态为pause有新老task计算多人工时 >> 910,,pause,9,12,9
task状态为pause只有老task计算多人工时 >> 910,po82,doing,3,3,3
老task不存在的情况有新老task和团队计算多人工时 >> 0
老task不存在的情况有新老task计算多人工时 >> 0
新task不存在的情况有新老task和团队计算多人工时 >> 10001,po82,doing,3,3,3
*/
$task1 = new stdclass();
$task1->id = 1;
$task1->status = 'wait';
$task1->assignedTo = '';
$task1->openedBy = '';
$task2 = new stdclass();
$task2->id = 1;
$task2->status = 'wait';
$task2->assignedTo = 'user92';
$task2->openedBy = '';
$task3 = new stdclass();
$task3->id = 903;
$task3->status = 'done';
$task3->assignedTo = '';
$task3->openedBy = '';
$task4 = new stdclass();
$task4->id = 903;
$task4->status = 'done';
$task4->assignedTo = 'po82';
$task4->openedBy = '';
$task5 = new stdclass();
$task5->id = 910;
$task5->status = 'pause';
$task5->assignedTo = '';
$task5->openedBy = '';
$task6 = new stdclass();
$task6->id = 910;
$task6->status = 'pause';
$task6->assignedTo = '';
$task6->openedBy = '';
$task7 = new stdclass();
$task7->id = 100001;
$task7->status = 'done';
$task7->assignedTo = '';
$task7->openedBy = '';
$task8 = new stdclass();
$task8->id = 10001;
$task8->status = 'wait';
$task8->assignedTo = '';
$task8->openedBy = '';
$user1 = new stdclass();
$user1->account = 'po82';
$user1->estimate = 1;
$user1->consumed = 1;
$user1->left = 1;
$user2 = new stdclass();
$user2->account = 'user93';
$user2->estimate = 2;
$user2->consumed = 2;
$user2->left = 2;
$team = array('po82' => $user1, 'user93' => $user2);
$autoStatusList = array(true, false);
$task = new taskTest();
r($task->computeHours4MultipleTest($task1)) && p('id,assignedTo,status,estimate,consumed,left') && e('1,po82,wait,3,3,3'); // task状态为wait只有老task计算多人工时
r($task->computeHours4MultipleTest($task1, $task2)) && p('id,assignedTo,status,estimate,consumed,left') && e('1,po82,wait,3,3,3'); // task状态为wait有新老task计算多人工时
r($task->computeHours4MultipleTest($task1, $task2, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('1,po82,doing,3,3,3'); // task状态为wait有新老task和团队计算多人工时
r($task->computeHours4MultipleTest($task3)) && p('id,assignedTo,status,estimate,consumed,left') && e('903,po82,done,3,3,3'); // task状态为done只有老task计算多人工时
r($task->computeHours4MultipleTest($task3, $task4)) && p('id,assignedTo,status,estimate,consumed,left') && e('903,po82,done,3,3,3'); // task状态为done有新老task计算多人工时
r($task->computeHours4MultipleTest($task3, $task4, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('903,po82,doing,3,3,3'); // task状态为done有新老task和团队计算多人工时
r($task->computeHours4MultipleTest($task5)) && p('id,assignedTo,status,estimate,consumed,left') && e('910,,pause,9,12,9'); // task状态为pause只有老task计算多人工时
r($task->computeHours4MultipleTest($task5, $task1, array(), false)) && p('id,assignedTo,status,estimate,consumed,left') && e('910,,pause,9,12,9'); // task状态为pause有新老task计算多人工时
r($task->computeHours4MultipleTest($task5, $task6, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('910,po82,doing,3,3,3'); // task状态为pause只有老task计算多人工时
r($task->computeHours4MultipleTest($task7)) && p('id,assignedTo,status,estimate,consumed,left') && e('0'); // 老task不存在的情况有新老task和团队计算多人工时
r($task->computeHours4MultipleTest($task7, $task8)) && p('id,assignedTo,status,estimate,consumed,left') && e('0'); // 老task不存在的情况有新老task计算多人工时
r($task->computeHours4MultipleTest($task1, $task8, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('10001,po82,doing,3,3,3'); // 新task不存在的情况有新老task和团队计算多人工时
system("./ztest init");