This commit is contained in:
liyuchun
2022-03-14 16:54:49 +08:00
56 changed files with 5041 additions and 189 deletions
+8 -8
View File
@@ -12,23 +12,23 @@ SET pmsRoot=%2
IF "%phpcli%"=="" SET /P phpcli="Please input your php path:(example: c:\windows\php.exe)"
if "%phpcli%"=="" (
echo php path is error
goto input_php
goto input_php
)
if not exist %phpcli% (
echo php path is error
goto input_php
goto input_php
)
:input_url
IF "%pmsRoot%"=="" SET /P pmsRoot="Please input zentao url:(example: http://localhost or http://127.0.0.1:88)"
IF "%pmsRoot%"=="" (
echo zentao url is error
goto input_url
goto input_url
)
:: get pmsRoot
if "%pmsRoot:~-1%" == "/" SET pmsRoot=%pmsRoot:~0,-1%
:: get requestType
SET requestType= 'PATH_INFO'
SET requestType= 'PATH_INFO'
for /f "tokens=3" %%f in ('find /c "'PATH_INFO'" "%baseDir%..\config\my.php"') do set count=%%f
if not defined count set count=1
if %count% == 0 SET requestType='GET'
@@ -58,18 +58,18 @@ echo dailyreminder.bat ok
:: create computeburn.bat
if %requestType% == 'PATH_INFO' (
SET computeburn= %phpcli% %baseDir%ztcli "%pmsRoot%/project-computeburn"
SET computeburn= %phpcli% %baseDir%ztcli "%pmsRoot%/execution-computeburn"
)else (
SET computeburn= %phpcli% %baseDir%ztcli "%pmsRoot%/index.php?m=project&f=computeburn"
SET computeburn= %phpcli% %baseDir%ztcli "%pmsRoot%/index.php?m=execution&f=computeburn"
)
echo %computeburn% > %baseDir%computeburn.bat
echo computeburn.bat ok
:: create computetaskeffort.bat
if %requestType% == 'PATH_INFO' (
SET computetaskeffort= %phpcli% %baseDir%ztcli "%pmsRoot%/project-computetaskeffort"
SET computetaskeffort= %phpcli% %baseDir%ztcli "%pmsRoot%/execution-computetaskeffort"
)else (
SET computetaskeffort= %phpcli% %baseDir%ztcli "%pmsRoot%/index.php?m=project&f=computetaskeffort"
SET computetaskeffort= %phpcli% %baseDir%ztcli "%pmsRoot%/index.php?m=execution&f=computetaskeffort"
)
echo %computetaskeffort% > %baseDir%computetaskeffort.bat
echo computetaskeffort.bat ok
+10 -10
View File
@@ -7,25 +7,25 @@ basePath=$(cd "$(dirname "$0")"; pwd)
if [ ! -n "$1" ]; then
while :; do
echo "Please input your php path:(example: /usr/bin/php)"
read phpcli
if [ ! -f $phpcli ]; then
read phpcli
if [ ! -f $phpcli ]; then
echo "php path is error";
elif [ "$phpcli"x != ""x ]; then
break;
fi
done
fi
fi
if [ ! -n "$2" ]; then
while :; do
echo "Please input zentao url:(example: http://localhost:88/zentao or http://localhost)"
read pmsRoot
read pmsRoot
if [ -z "$pmsRoot" ]; then
echo "zentao url is error";
echo "zentao url is error";
else
break;
fi
done
fi
fi
pmsRoot=`echo "$pmsRoot" | sed 's/[/]$//g'`
cat $basePath/../config/my.php |awk '$1!~/^\/\//&& $1~/\$config\->requestType/{requestType = $0} END{print requestType}'| grep -c 'PATH_INFO' > ./init.tmp
@@ -52,18 +52,18 @@ echo "backup.sh ok"
# computeburn
if [ $requestType == 'PATH_INFO' ]; then
computeburn="$phpcli $basePath/ztcli '$pmsRoot/project-computeburn'";
computeburn="$phpcli $basePath/ztcli '$pmsRoot/execution-computeburn'";
else
computeburn="$phpcli $basePath/ztcli '$pmsRoot/index.php?m=project&f=computeburn'";
computeburn="$phpcli $basePath/ztcli '$pmsRoot/index.php?m=execution&f=computeburn'";
fi
echo $computeburn > $basePath/computeburn.sh
echo "computeburn.sh ok"
# compute task effort.
if [ $requestType == 'PATH_INFO' ]; then
computetaskeffort="$phpcli $basePath/ztcli '$pmsRoot/project-computetaskeffort'";
computetaskeffort="$phpcli $basePath/ztcli '$pmsRoot/execution-computetaskeffort'";
else
computetaskeffort="$phpcli $basePath/ztcli '$pmsRoot/index.php?m=project&f=computetaskeffort'";
computetaskeffort="$phpcli $basePath/ztcli '$pmsRoot/index.php?m=execution&f=computetaskeffort'";
fi
echo $computetaskeffort > $basePath/computetaskeffort.sh
echo "computetaskeffort.sh ok"
File diff suppressed because it is too large Load Diff
+3 -2
View File
@@ -23,6 +23,9 @@ ALTER TABLE `zt_project` ADD `output` text NOT NULL AFTER `milestone`;
ALTER TABLE `zt_project` ADD `lastEditedBy` varchar(30) NOT NULL DEFAULT '' AFTER `openedVersion`;
ALTER TABLE `zt_project` ADD `lastEditedDate` datetime NOT NULL AFTER `lastEditedBy`;
ALTER TABLE `zt_case` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
ALTER TABLE `zt_case` ADD `execution` mediumint(8) unsigned NOT NULL AFTER `project`;
ALTER TABLE `zt_action` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_bug` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_build` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
@@ -30,7 +33,6 @@ ALTER TABLE `zt_burn` CHANGE `project` `execution` mediumint(8) unsigned NOT NUL
ALTER TABLE `zt_doc` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_relation` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_relation` CHANGE `program` `project` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_case` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_doclib` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_task` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
ALTER TABLE `zt_testreport` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
@@ -43,7 +45,6 @@ ALTER TABLE `zt_doclib` ADD `project` mediumint(8) unsigned NOT NULL AFTER `prod
ALTER TABLE `zt_doc` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
ALTER TABLE `zt_story` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
ALTER TABLE `zt_bug` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
ALTER TABLE `zt_case` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
ALTER TABLE `zt_testtask` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
ALTER TABLE `zt_testreport` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
ALTER TABLE `zt_testsuite` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
+8 -1
View File
@@ -11,7 +11,7 @@ ALTER TABLE `zt_doc` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `id`;
ALTER TABLE `zt_doclib` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `type`;
ALTER TABLE `zt_action` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `read`;
ALTER TABLE `zt_searchindex` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `id`;
ALTER TABLE `zt_config` ADD `vision` varchar(10) NOT NULL DEFAULT '' AFTER `id`;
ALTER TABLE `zt_config` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `id`;
ALTER TABLE `zt_config` DROP INDEX `unique`, ADD UNIQUE `unique` (`vision`,`owner`,`module`,`section`,`key`);
ALTER TABLE `zt_todo` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `deleted`;
ALTER TABLE `zt_block` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `account`;
@@ -48,3 +48,10 @@ SELECT `module`, `method`,(SELECT `id` FROM zt_group WHERE `name` = '团队成
ALTER TABLE `zt_productplan` ADD `closedReason` varchar(20) NOT NULL AFTER `order`;
update zt_config set `value` = concat(`value`, ',visions') where module = 'user' and `key` = 'requiredFields' and section in ('create', 'edit');
ALTER TABLE `zt_kanban` CHANGE `order` `order` mediumint NOT NULL DEFAULT '0' AFTER `status`;
ALTER TABLE `zt_kanbancolumn` CHANGE `group` `group` mediumint NOT NULL DEFAULT '0' AFTER `region`;
ALTER TABLE `zt_kanbancard` CHANGE `order` `order` mediumint NOT NULL DEFAULT '0' AFTER `whitelist`;
ALTER TABLE `zt_kanbanregion` CHANGE `order` `order` mediumint NOT NULL DEFAULT '0' AFTER `name`;
ALTER TABLE `zt_kanbanspace` CHANGE `order` `order` mediumint NOT NULL DEFAULT '0' AFTER `status`;
ALTER TABLE `zt_projectstory` CHANGE `branch` `branch` mediumint unsigned NOT NULL AFTER `product`;
+2 -2
View File
@@ -98,7 +98,7 @@ CREATE TABLE `zt_apistruct` (
`lib` int UNSIGNED NOT NULL DEFAULT 0,
`name` varchar(30) NOT NULL DEFAULT '',
`type` varchar(50) NOT NULL DEFAULT '',
`desc` varchar(255) NOT NULL DEFAULT '',
`desc` text NOT NULL DEFAULT '',
`version` smallint unsigned NOT NULL DEFAULT 0,
`attribute` text NULL,
`addedBy` varchar(30) NOT NULL DEFAULT 0,
@@ -359,7 +359,7 @@ CREATE TABLE IF NOT EXISTS `zt_compile` (
-- DROP TABLE IF EXISTS `zt_config`;
CREATE TABLE IF NOT EXISTS `zt_config` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`vision` varchar(10) NOT NULL DEFAULT '',
`vision` varchar(10) NOT NULL DEFAULT 'rnd',
`owner` char(30) NOT NULL default '',
`module` varchar(30) NOT NULL,
`section` char(30) NOT NULL default '',
@@ -0,0 +1,5 @@
<?php
$config->effort->list->exportFields = 'id,date,dept,account,work,consumed,left,objectType,execution';
$config->effort->list->defaultFields = 'id,date,account,work,consumed,left,objectType,execution';
$config->effort->datatable->defaultField = array('id', 'date', 'account', 'work', 'consumed', 'left', 'objectType', 'execution');
@@ -0,0 +1,6 @@
<script>
$(function()
{
$('#productBox').addClass("hide");
});
</script>
+12
View File
@@ -877,6 +877,17 @@ class actionModel extends model
$actionCondition = $this->getActionCondition();
if(!$actionCondition and !$this->app->user->admin and isset($this->app->user->rights['acls']['actions'])) return array();
/* Restrict query data in this year when no limit for big data. */
$beginDate = '';
if($period == 'all')
{
$year = date('Y');
$beginDate = $year . '-01-01';
/* When query all dynamic then query the data of the last two years at most. */
if($this->app->getMethodName() == 'dynamic') $beginDate = $year - 1 . '-01-01';
}
/* Get actions. */
$actions = $this->dao->select('*')->from(TABLE_ACTION)
->where('objectType')->notIN('kanbanregion,kanbanlane,kanbancolumn')
@@ -885,6 +896,7 @@ class actionModel extends model
->beginIF($period != 'all')->andWhere('date')->lt($end)->fi()
->beginIF($date)->andWhere('date' . ($direction == 'next' ? '<' : '>') . "'{$date}'")->fi()
->beginIF($account != 'all')->andWhere('actor')->eq($account)->fi()
->beginIF($beginDate)->andWhere('date')->ge($beginDate)->fi()
->beginIF(is_numeric($productID))->andWhere('product')->like("%,$productID,%")->fi()
->andWhere()
->markLeft(1)
+2 -3
View File
@@ -205,7 +205,6 @@ class company extends control
/* Append id for secend sort. */
$order = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = common::appendOrder($order);
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$date = empty($date) ? '' : date('Y-m-d', $date);
@@ -245,11 +244,11 @@ class company extends control
if(!$productID) $productID = 'all';
if(!$projectID) $projectID = 'all';
if(!$executionID) $executionID = 'all';
$actions = $this->action->getDynamic($account, $browseType, $sort, $pager, $productID, $projectID, $executionID, $date, $direction);
$actions = $this->action->getDynamic($account, $browseType, $orderBy, $pager, $productID, $projectID, $executionID, $date, $direction);
}
else
{
$actions = $this->action->getDynamicBySearch($products, $projects, $executions, $queryID, $sort, $pager, $date, $direction);
$actions = $this->action->getDynamicBySearch($products, $projects, $executions, $queryID, $orderBy, $pager, $date, $direction);
}
/* Build search form. */
+2 -1
View File
@@ -76,7 +76,8 @@ class customModel extends model
$item->key = $key;
$item->value = $value;
$item->system = $system;
$item->vision = $this->config->vision;
if(!defined('IN_UPGRADE')) $item->vision = $this->config->vision;
$this->dao->replace(TABLE_LANG)->data($item)->exec();
}
+1
View File
@@ -202,6 +202,7 @@ $lang->doc->noCollectedDoc = 'You have not favorited any documents.';
$lang->doc->errorEmptyLib = 'No data in document library.';
$lang->doc->confirmUpdateContent = 'You have a document that is not saved from last time. Do you want to continue editing it?';
$lang->doc->selectLibType = 'Please select a type of doc library.';
$lang->doc->noLibreOffice = 'You does not have access to office conversion settings!';
$lang->doc->noticeAcl['lib']['product']['default'] = 'Users who can access the selected product can access it.';
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users who can access the selected product or users in the whiltelist can access it.';
+1
View File
@@ -202,6 +202,7 @@ $lang->doc->noCollectedDoc = '您还没有收藏任何文档。';
$lang->doc->errorEmptyLib = '文档库暂无数据。';
$lang->doc->confirmUpdateContent = '检查到您有未保存的文档内容,是否继续编辑?';
$lang->doc->selectLibType = '请选择文档库类型';
$lang->doc->noLibreOffice = '您还没有office转换设置访问权限!';
$lang->doc->noticeAcl['lib']['product']['default'] = '有所选产品访问权限的用户可以访问。';
$lang->doc->noticeAcl['lib']['product']['custom'] = '有所选产品访问权限或白名单里的用户可以访问。';
+1 -1
View File
@@ -29,7 +29,7 @@
<script>
$("a[href^='###']").click(function()
{
alert('<?php echo $lang->doc->accessDenied;?>');
alert('<?php echo $lang->doc->noLibreOffice;?>');
});
</script>
</body>
+1 -2
View File
@@ -2957,7 +2957,6 @@ class execution extends control
/* Append id for secend sort. */
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = common::appendOrder($orderBy);
/* Set the menu. If the executionID = 0, use the indexMenu instead. */
$this->execution->setMenu($executionID);
@@ -2975,7 +2974,7 @@ class execution extends control
}
$period = $type == 'account' ? 'all' : $type;
$date = empty($date) ? '' : date('Y-m-d', $date);
$actions = $this->loadModel('action')->getDynamic($account, $period, $sort, $pager, 'all', 'all', $executionID, $date, $direction);
$actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, $pager, 'all', 'all', $executionID, $date, $direction);
/* The header and position. */
$execution = $this->execution->getByID($executionID);
+1 -1
View File
@@ -74,7 +74,7 @@ class misc extends control
$source = isset($this->config->qcVersion) ? 'qucheng' : 'zentao';
$lang = str_replace('-', '_', $this->app->getClientLang());
$link = $website . "/updater-getLatest-{$this->config->version}-$source-$lang.html";
$link = $website . "/updater-getLatest-{$this->config->version}-$source-$lang-$sn.html";
$latestVersionList = common::http($link);
+1 -2
View File
@@ -1236,14 +1236,13 @@ EOF;
/* Append id for secend sort. */
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = common::appendOrder($orderBy);
/* The header and position. */
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->dynamic;
$this->view->position[] = $this->lang->my->dynamic;
$date = empty($date) ? '' : date('Y-m-d', $date);
$actions = $this->loadModel('action')->getDynamic($this->app->user->account, $type, $sort, $pager, 'all', 'all', 'all', $date, $direction);
$actions = $this->loadModel('action')->getDynamic($this->app->user->account, $type, $orderBy, $pager, 'all', 'all', 'all', $date, $direction);
if(empty($recTotal)) $originTotal = $pager->recTotal;
/* Assign. */
+1 -2
View File
@@ -854,7 +854,6 @@ class product extends control
/* Append id for secend sort. */
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = common::appendOrder($orderBy);
/* Load pager. */
$this->app->loadClass('pager', $static = true);
@@ -869,7 +868,7 @@ class product extends control
}
$period = $type == 'account' ? 'all' : $type;
$date = empty($date) ? '' : date('Y-m-d', $date);
$actions = $this->loadModel('action')->getDynamic($account, $period, $sort, $pager, $productID, 'all', 'all', $date, $direction);
$actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, $pager, $productID, 'all', 'all', $date, $direction);
/* The header and position. */
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->product->dynamic;
+1 -2
View File
@@ -840,7 +840,6 @@ class project extends control
/* Append id for secend sort. */
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = common::appendOrder($orderBy);
/* Set the pager. */
$this->app->loadClass('pager', $static = true);
@@ -855,7 +854,7 @@ class project extends control
}
$period = $type == 'account' ? 'all' : $type;
$date = empty($date) ? '' : date('Y-m-d', $date);
$actions = $this->loadModel('action')->getDynamic($account, $period, $sort, $pager, 'all', $projectID, 'all', $date, $direction);
$actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, $pager, 'all', $projectID, 'all', $date, $direction);
/* The header and position. */
$project = $this->project->getByID($projectID);
+3 -4
View File
@@ -51,8 +51,8 @@ class settingModel extends model
{
/* Determine vision of config item. */
$pathVision = explode('@', $path);
$vision = isset($pathVision[1]) ? $pathVision[1] : '';
$path = $pathVision[0];
$vision = isset($pathVision[1]) ? $pathVision[1] : '';
$path = $pathVision[0];
/* fix bug when account has dot. */
$account = isset($this->app->user->account) ? $this->app->user->account : '';
@@ -78,8 +78,7 @@ class settingModel extends model
$item->key = $key;
$item->value = $value;
/* If in upgrade, skip vision. */
if(!defined('IN_UPGRADE')) $item->vision = $vision;
if($vision) $item->vision = $vision;
$this->dao->replace(TABLE_CONFIG)->data($item)->exec();
}
+18 -17
View File
@@ -461,28 +461,29 @@ class upgradeModel extends model
set_time_limit(0);
$this->updateActivatedDate();
if(!empty($this->config->isINT))
{
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'xuanxuan.sql';
$this->execSQL($xuanxuanSql);
$executedXuanxuan = true;
}
else
{
if(!$executedXuanxuan)
{
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan4.6.sql';
$this->execSQL($xuanxuanSql);
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan5.1.sql';
$this->execSQL($xuanxuanSql);
}
}
switch($fromEdition)
{
case 'open':
$this->execSQL($this->getUpgradeFile('proinstall'));
case 'pro':
$this->execSQL($this->getUpgradeFile('bizinstall'));
if(!empty($this->config->isINT))
{
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'xuanxuan.sql';
$this->execSQL($xuanxuanSql);
$executedXuanxuan = true;
}
else
{
if(!$executedXuanxuan)
{
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan4.6.sql';
$this->execSQL($xuanxuanSql);
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan5.1.sql';
$this->execSQL($xuanxuanSql);
}
}
case 'biz':
$this->execSQL($this->getUpgradeFile('maxinstall'));
$this->execSQL($this->getUpgradeFile('functions'));
@@ -5827,7 +5828,7 @@ class upgradeModel extends model
}
}
if(empty($customFiles) or $module == 'owt') $encryptModules[] = $module;
if(empty($customFiles) or $module == 'owt') $encryptModules[$module] = $module;
}
return $encryptModules;
}
+1 -2
View File
@@ -1110,10 +1110,9 @@ class user extends control
/* Append id for secend sort. */
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = common::appendOrder($orderBy);
$date = empty($date) ? '' : date('Y-m-d', $date);
$actions = $this->loadModel('action')->getDynamic($account, $period, $sort, $pager, 'all', 'all', 'all', $date, $direction);
$actions = $this->loadModel('action')->getDynamic($account, $period, $orderBy, $pager, 'all', 'all', 'all', $date, $direction);
$this->view->title = $this->lang->user->common . $this->lang->colon . $this->lang->user->dynamic;
$this->view->position[] = $this->lang->user->dynamic;
+112
View File
@@ -950,4 +950,116 @@ class executionTest
}
}
}
public function addProjectMembersTest($projectID = 0, $executionID, $count)
{
global $tester;
$tester->dbh->query("delete from zt_team where root = $projectID");
$executionMembers = $tester->dao->select('`root`,`account`,`join`,`role`,`days`,`type`,`hours`')->from(TABLE_TEAM)->where('root')->eq($executionID)->fetchAll('account');
$this->objectModel->addProjectMembers($projectID, $executionMembers);
$object = $tester->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($projectID)->fetchAll();
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($object);
}
else
{
return $object;
}
}
public function unlinkMemberTest($sprintID, $account, $count)
{
global $tester;
$oldObject = $tester->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($sprintID)->fetchAll();
$this->objectModel->unlinkMember($sprintID, $account);
$object = $tester->dao->select('*')->from(TABLE_TEAM)->where('root')->eq($sprintID)->fetchAll();
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($oldObject);
}
else
{
return $object;
}
}
public function computeBurnTest($count)
{
$object = $this->objectModel->computeBurn();
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($object);
}
else
{
return $object;
}
}
public function fixFirstTest($executionID, $count, $param = array())
{
global $tester;
$date = date('Y-m-d');
$createFields = array('estimate' => '');
foreach($createFields as $field => $defaultValue) $_POST[$field] = $defaultValue;
foreach($param as $key => $value) $_POST[$key] = $value;
$this->objectModel->computeBurn();
$this->objectModel->fixFirst($executionID);
unset($_POST);
$object = $tester->dao->select('*')->from(TABLE_BURN)->where('execution')->eq($executionID)->andWhere('date')->eq($date)->fetchAll();
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($object);
}
else
{
if(empty($object))
{
return '无数据';
}
else
{
return $object;
}
}
}
public function getBurnDataFlotTest($executionID = 0, $count)
{
$object = $this->objectModel->getBurnDataFlot($executionID, $burnBy = 'left');
if(dao::isError())
{
$error = dao::getError();
return $error;
}
elseif($count == "1")
{
return count($object);
}
else
{
return $object;
}
}
}
+231 -1
View File
@@ -640,6 +640,7 @@ class taskTest
public function processTaskTest($task)
{
$task->deadline = $task->deadline == '-1day' ? date('Y-m-d',strtotime('-1 day')) : date('Y-m-d',strtotime('+1 day'));
$object = $this->objectModel->processTask($task);
if(dao::isError())
@@ -652,8 +653,33 @@ class taskTest
}
}
public function processTasksTest($tasks)
public function processTasksTest($executionID)
{
global $tester;
$tasks = $tester->dao->select('*')->from(TABLE_TASK)->where('execution')->eq($executionID)->andWhere('deleted')->eq('0')->fetchAll('id');
$parents = '0';
foreach($tasks as $task)
{
if($task->parent > 0) $parents .= ",$task->parent";
}
$parents = $tester->dao->select('*')->from(TABLE_TASK)->where('`id`')->in($parents)->andWhere('deleted')->eq('0')->fetchAll('id');
foreach($tasks as $task)
{
if($task->parent > 0)
{
if(isset($tasks[$task->parent]))
{
$tasks[$task->parent]->children[$task->id] = $task;
unset($tasks[$task->id]);
}
else
{
$parent = $parents[$task->parent];
$task->parentName = $parent->name;
}
}
}
$object = $this->objectModel->processTasks($tasks);
if(dao::isError())
@@ -665,4 +691,208 @@ class taskTest
return $object;
}
}
public function processData4ReportTest($tasks, $children, $field)
{
$object = $this->objectModel->processData4Report($tasks, $children, $field);
$object['void'] = isset($object['']) ? $object[''] : 'void';
if(dao::isError())
{
return dao::getError();
}
else
{
if($field == 'deadline')
{
$dateList = array(date('Y-m-d',strtotime('-8 day')), date('Y-m-d',strtotime('-15 day')));
return array($object[$dateList[0]], $object[$dateList[1]]);
}
return count($object) == 0 ? array('void' => 'void') : $object;
}
}
public function getDataOfTasksPerExecutionTest()
{
$object = $this->objectModel->getDataOfTasksPerExecution();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerModuleTest()
{
$object = $this->objectModel->getDataOfTasksPerModule();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerAssignedToTest()
{
$object = $this->objectModel->getDataOfTasksPerAssignedTo();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerTypeTest()
{
$object = $this->objectModel->getDataOfTasksPerType();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerPriTest()
{
$object = $this->objectModel->getDataOfTasksPerPri();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerDeadlineTest($dateID)
{
$dateList = array(date('Y-m-d',strtotime('+1 day')), date('Y-m-d',strtotime('+2 day')), date('Y-m-d',strtotime('+3 day')), date('Y-m-d',strtotime('+4 day')), date('Y-m-d',strtotime('-1 day')), date('Y-m-d',strtotime('-2 day')), date('Y-m-d',strtotime('-3 day')), date('Y-m-d',strtotime('-4 day')));
$object = $this->objectModel->getDataOfTasksPerDeadline();
if(dao::isError())
{
return dao::getError();
}
else
{
return array($dateID => $object[$dateList[$dateID]]);
}
}
public function getDataOfTasksPerEstimateTest()
{
$object = $this->objectModel->getDataOfTasksPerEstimate();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerLeftTest()
{
$object = $this->objectModel->getDataOfTasksPerLeft();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerConsumedTest()
{
$object = $this->objectModel->getDataOfTasksPerConsumed();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerFinishedByTest()
{
$object = $this->objectModel->getDataOfTasksPerFinishedBy();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerClosedReasonTest()
{
$object = $this->objectModel->getDataOfTasksPerClosedReason();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOffinishedTasksPerDayTest()
{
$object = $this->objectModel->getDataOffinishedTasksPerDay();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
public function getDataOfTasksPerStatusTest()
{
$object = $this->objectModel->getDataOfTasksPerStatus();
if(dao::isError())
{
return dao::getError();
}
else
{
return $object;
}
}
}
+90
View File
@@ -0,0 +1,90 @@
title: table zt_effort
desc: "任务工时记录"
author: automated export
version: "1.0"
fields:
- field: id
note: "ID"
range: "1-10000"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: objectType
note: "对象类型"
range: "custom"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: objectID
note: "对象ID"
range: "0"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: product
note: "产品ID"
range: "0"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: project
note: "项目ID"
range: "0"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: account
note: "用户账号"
fields:
- field: account1
range: admin,user{99}
- field: account2
range: [],1-99
format: ""
- field: work
note: "工作内容"
range: "1-10000"
prefix: "这是工作内容"
postfix: ""
loop: 0
format: ""
- field: date
note: "创建日期"
range: "(M)-(w)"
type: timestamp
prefix: "DateTime"
postfix: ""
format: "YY/MM/DD"
- field: left
note: "剩余"
range: "0"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: consumed
note: "消耗"
range: 1-100:5
prefix: ""
postfix: ""
loop: 0
format: ""
- field: begin
note: "开始"
range: 1000-1059:2
prefix: ""
postfix: ""
loop: 0
format: ""
- field: end
note: "结束"
range: 1400-1459:2
prefix: ""
postfix: ""
loop: 0
format: ""
+40
View File
@@ -0,0 +1,40 @@
title: table zt_projectstory
desc: "项目需求关系"
author: automated export
version: "1.0"
fields:
- field: project
note: "项目ID"
range: 101-190{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: product
note: "产品ID"
range: 1-10000{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: story
note: "需求ID"
range: 2-400:2
prefix: ""
postfix: ""
loop: 0
format: ""
- field: version
note: "版本"
range: 1
prefix: ""
postfix: ""
loop: 0
format: ""
- field: order
note: "排序"
range: 1,2
prefix: ""
postfix: ""
loop: 0
format: ""
-4
View File
@@ -3,8 +3,6 @@ desc: ""
author: automated export
version: "1.0"
fields:
- field: lane
range: "0"
- field: parent
range: "0"
- field: type
@@ -22,8 +20,6 @@ fields:
range: ""
- field: order
range: 1-4
- field: cards
range: ""
- field: archived
range: "0"
- field: deleted
-4
View File
@@ -5,8 +5,6 @@ version: "1.0"
fields:
- field: id
range: 401-100000
- field: lane
range: "0"
- field: parent
range: "0"
- field: type
@@ -23,8 +21,6 @@ fields:
range: ""
- field: order
range: "0"
- field: cards
range: ""
- field: archived
range: "0"
- field: deleted
+40
View File
@@ -0,0 +1,40 @@
title: table zt_projectstory
desc: "项目需求关系"
author: automated export
version: "1.0"
fields:
- field: project
note: "项目ID"
range: 11-100{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: product
note: "产品ID"
range: 1-10000{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: story
note: "需求ID"
range: 2-400:2
prefix: ""
postfix: ""
loop: 0
format: ""
- field: version
note: "版本"
range: 1
prefix: ""
postfix: ""
loop: 0
format: ""
- field: order
note: "排序"
range: 1,2
prefix: ""
postfix: ""
loop: 0
format: ""
+36 -35
View File
@@ -1,65 +1,64 @@
title: table zt_todo
desc: "待办"
author: automated export
author: ly
version: "1.0"
fields:
- field: id
note: "ID"
range: "1-10000"
range: 1-10000
prefix: ""
postfix: ""
loop: 0
format: ""
- field: account
note: "用户账号"
note: "用户"
fields:
- field: account1
range: test,dev
- field: account2
range: 1-100
- field: account1
range: admin,user{99},test{100},dev{100},pm{100},po{100},td{100},pd{100},qd{100},top{100},outside{100}
- field: account2
range: [],1-99,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100
prefix: ""
postfix: ""
loop: 0
format: ""
- field: date
note: "日期"
from: common.date.v1.yaml
use: dateB
prefix: ""
range: "(M)-(w)"
type: timestamp
prefix: "DateTime"
postfix: ""
loop: 0
format: ""
format: "YY/MM/DD"
- field: begin
note: "开始"
range: "1000-1300:R"
range: "1000-1059:2"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: end
note: "结束"
range: "1400-2000:R"
range: "1400-1459:2"
prefix: ""
postfix: ""
loop: 0
format: ""
- field: type
note: "类型"
range: custom{20},bug{20},task{20},story{20},testtask{20}
range: custom,bug,task,story,testtask
prefix: ""
postfix: ""
loop: 0
format: ""
- field: idvalue
note: "关联编号"
range: 0{20},1-20{20},1-20{20},1-20{20},1-20{20}
range: 0,1-20,1-20,1-20,1-20
prefix: ""
postfix: ""
loop: 0
format: ""
- field: pri
note: "优先级"
range: 1-4:R
range: 1-4
prefix: ""
postfix: ""
loop: 0
@@ -68,11 +67,11 @@ fields:
note: "待办名称"
fields:
- field: name1
range: "这是一个"
range: 自定义,BUG,任务,需求,测试单
- field: name2
range: 自定义{20},BUG{20},任务{20},需求{20},测试单{20}
range: 1-200,1-200,1-200,1-200.1-200
prefix: ""
postfix: "的名称"
postfix: "的待办"
loop: 0
format: ""
- field: desc
@@ -84,7 +83,7 @@ fields:
format: ""
- field: status
note: "状态"
range: [wait,doing,done,closed]:R
range: wait,doing,done,closed
prefix: ""
postfix: ""
loop: 0
@@ -98,35 +97,37 @@ fields:
format: ""
- field: config
note: "配置"
range: 1-10000
prefix: "这里待办json配置"
range: ""
prefix: ""
postfix: ""
loop: 0
format: ""
- field: assignedTo
note: "指派给"
from: common.user.v1.yaml
use: user
fields:
- field: ass1
range: admin,user{99},test{100},dev{100},pm{100},po{100},td{100},pd{100},qd{100},top{100},outside{100}
- field: ass2
range: [],1-99,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100
prefix: ""
postfix: ""
loop: 0
format: ""
- field: assignedBy
note: "由谁指派"
from: common.user.v1.yaml
use: user
fields:
- field: ass1
range: admin,user{99},test{100},dev{100},pm{100},po{100},td{100},pd{100},qd{100},top{100},outside{100}
- field: ass2
range: [],1-99,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100
prefix: ""
postfix: ""
loop: 0
format: ""
- field: assignedDate
note: "指派日期"
from: common.date.v1.yaml
use: dateA
prefix: ""
range: "(M)-(w):60m"
type: timestamp
prefix: "DateTime"
postfix: ""
loop: 0
format: ""
format: "YY/MM/DD hh:mm:ss"
- field: finishedBy
note: "由谁完成"
from: common.user.v1.yaml
+4
View File
@@ -3,6 +3,8 @@ $builder = new stdclass();
$builder->company = array('rows' => 1, 'extends' => array('company'));
$builder->user = array('rows' => 1000, 'extends' => array('user'));
$builder->todo = array('rows' => 2000, 'extends' => array('todo'));
$builder->effort = array('rows' => 100, 'extends' => array('effort'));
$builder->usergroup = array('rows' => 600, 'extends' => array('usergroup'));
$builder->dept = array('rows' => 100, 'extends' => array('dept'));
$builder->action = array('rows' => 100, 'extends' => array('action'));
@@ -28,6 +30,8 @@ $builder->productline = array('rows' => 20, 'extends' => array('module', 'pr
$builder->productplan = array('rows' => 30, 'extends' => array('productplan'));
$builder->branch = array('rows' => 240, 'extends' => array('branch'));
$builder->projectproduct = array('rows' => 200, 'extends' => array('projectproduct'));
$builder->projectstory = array('rows' => 200, 'extends' => array('projectstory'));
$builder->executionstory = array('rows' => 180, 'extends' => array('projectstory','executionstory'));
$builder->kanbanspace = array('rows' => 50, 'extends' => array('kanbanspace'));
$builder->kanban = array('rows' => 100, 'extends' => array('kanban'));
+6 -8
View File
@@ -10,14 +10,12 @@ fields:
postfix: ""
loop: 0
format: ""
- field: account
note: "所有者"
from: common.user.v1.yaml
use: user
prefix: ""
postfix: ""
loop: 0
format: ""
- field: account
- fields:
- field: account1
range: admin,user{99},test{100},dev{100},pm{100},po{100},td{100},pd{100},qd{100},top{100},outside{100}
- field: account2
range: []{2},1-99{2},1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100
- field: date
note: "日期"
from: common.date.v1.yaml
+33
View File
@@ -0,0 +1,33 @@
#!/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->addProjectMembersTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$projectIDList = array('11', '41', '71');
$executionIDList = array('101', '131', '161', '1611');
$count = array('0','1');
$execution = new executionTest();
r($execution->addProjectMembersTest($projectIDList[0], $executionIDList[0], $count[0])) && p('0:account,role') && e('po82,研发'); // 敏捷项目根据执行添加团队信息
r($execution->addProjectMembersTest($projectIDList[1], $executionIDList[1], $count[0])) && p('0:account,role') && e('test22,测试'); // 瀑布项目根据执行添加团队信息
r($execution->addProjectMembersTest($projectIDList[2], $executionIDList[2], $count[0])) && p('0:account,role') && e('test52,测试'); // 看板项目根据执行添加团队信息
r($execution->addProjectMembersTest($projectIDList[0], $executionIDList[0], $count[1])) && p() && e('2'); // 敏捷项目根据执行添加团队信息统计
r($execution->addProjectMembersTest($projectIDList[1], $executionIDList[1], $count[1])) && p() && e('1'); // 瀑布项目根据执行添加团队信息统计
r($execution->addProjectMembersTest($projectIDList[2], $executionIDList[2], $count[1])) && p() && e('1'); // 看板项目根据执行添加团队信息统计
system("./ztest init");
+26
View File
@@ -0,0 +1,26 @@
#!/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->computeBurnTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$count = array('0','1');
$execution = new executionTest();
r($execution->computeBurnTest($count[0])) && p('700:executionName') && e('project600'); // 正常初始化
r($execution->computeBurnTest($count[1])) && p() && e('516'); // 初始化后数据统计
+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->fixFirstTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$executionIDList = array('101', '131');
$scrumEstimate = array('estimate' => '25');
$withLeft = array('estimate' => '21', 'withLeft' => '1');
$waterfallEstimate = array('estimate' => '17', 'withLeft' => '1');
$execution = new executionTest();
r($execution->fixFirstTest($executionIDList[0], $scrumEstimate)) && p('0:estimate') && e('26'); // 敏捷执行更新首日工时
r($execution->fixFirstTest($executionIDList[0], $withLeft)) && p('0:estimate') && e('26'); // 敏捷执行更新首日剩余工时
r($execution->fixFirstTest($executionIDList[1], $waterfallEstimate)) && p('0:left') && e('17'); // 瀑布执行更新首日剩余工时
+28
View File
@@ -0,0 +1,28 @@
#!/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->getBurnDataFlotTest();
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->getBurnDataFlotTest($executionIDList[0], $count[1])) && p() && e('2'); // 敏捷执行查询统计
r($execution->getBurnDataFlotTest($executionIDList[1], $count[1])) && p() && e('2'); // 瀑布执行查询统计
r($execution->getBurnDataFlotTest($executionIDList[2], $count[1])) && p() && e('1'); // 看板执行查询统计
+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->unlinkMemberTest();
cid=1
pid=1
敏捷执行关联用例 >> 101,1,1
瀑布执行关联用例 >> 131,43,169
看板执行关联用例 >> 161,68,269
敏捷执行关联用例统计 >> 4
瀑布执行关联用例统计 >> 4
看板执行关联用例统计 >> 4
*/
$accountList = array('user92', 'test22', 'test52');
$executionIDList = array('101', '131', '161');
$count = array('0','1');
$execution = new executionTest();
r($execution->unlinkMemberTest($executionIDList[0], $accountList[0], $count[0])) && p('0:account,role') && e('po82,研发'); // 敏捷执行解除团队成员
r($execution->unlinkMemberTest($executionIDList[0], $accountList[0], $count[1])) && p() && e('1'); // 敏捷执行解除团队成员后统计
r($execution->unlinkMemberTest($executionIDList[1], $accountList[1], $count[0])) && p() && e('0'); // 瀑布执行解除团队成员
r($execution->unlinkMemberTest($executionIDList[2], $accountList[2], $count[0])) && p('0:account,role') && e('test52,测试'); // 看板执行解除团队成员
r($execution->unlinkMemberTest($executionIDList[2], $accountList[2], $count[1])) && p() && e('1'); // 看板执行解除团队成员后统计
system("./ztest init");
+4 -4
View File
@@ -10,8 +10,8 @@ title=taskModel->computeBeginAndEnd();
cid=1
pid=1
根据taskID计算没有父计划的开始结束时间 >> 1,2022-03-11,0000-00-00 00:00:00,2022-03-18
根据taskID计算有父计划的父开始结束时间 >> 601,,0000-00-00 00:00:00,2022-03-04
根据taskID计算没有父计划的开始结束时间 >> 1,2022-03-14,0000-00-00 00:00:00,2022-03-21
根据taskID计算有父计划的父开始结束时间 >> 601,,0000-00-00 00:00:00,2022-03-07
根据不存在的taskID计划开始结束时间 >> 0
*/
@@ -19,7 +19,7 @@ pid=1
$taskIDList = array('1', '901', '100001');
$task = new taskTest();
r($task->computeBeginAndEndTest($taskIDList[0])) && p('id,estStarted,realStarted,deadline') && e('1,2022-03-11,0000-00-00 00:00:00,2022-03-18'); //根据taskID计算没有父计划的开始结束时间
r($task->computeBeginAndEndTest($taskIDList[1])) && p('id,estStarted,realStarted,deadline') && e('601,,0000-00-00 00:00:00,2022-03-04'); //根据taskID计算有父计划的父开始结束时间
r($task->computeBeginAndEndTest($taskIDList[0])) && p('id,estStarted,realStarted,deadline') && e('1,2022-03-14,0000-00-00 00:00:00,2022-03-21'); //根据taskID计算没有父计划的开始结束时间
r($task->computeBeginAndEndTest($taskIDList[1])) && p('id,estStarted,realStarted,deadline') && e('601,,0000-00-00 00:00:00,2022-03-07'); //根据taskID计算有父计划的父开始结束时间
r($task->computeBeginAndEndTest($taskIDList[2])) && p('id,estStarted,realStarted,deadline') && e('0'); //根据不存在的taskID计算开始结束时间
system("./ztest init");
+1
View File
@@ -19,3 +19,4 @@ $assignedTo = 'user92';
$task = new taskTest();
r($task->getUserTasksTest($taskID,$assignedTo)) && p('2:name') && e('开发任务12'); // 根据指派人员查看任务
system("./ztest init");
+19
View File
@@ -0,0 +1,19 @@
#!/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->getDataOffinishedTasksPerDay();
cid=1
pid=1
统计没有每日完成的任务数量 >> 0
*/
$task = new taskTest();
r($task->getDataOffinishedTasksPerDayTest()) && p() && e('0'); //统计没有每日完成的任务数量
+19
View File
@@ -0,0 +1,19 @@
#!/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->getDataOfTasksPerAssignedTo();
cid=1
pid=1
统计指派给为po82的任务数量 >> 研发主管82,1
*/
$task = new taskTest();
r($task->getDataOfTasksPerAssignedToTest()) && p('po82:name,value') && e('研发主管82,1'); //统计指派给为po82的任务数量
+19
View File
@@ -0,0 +1,19 @@
#!/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->getDataOfTasksPerClosedReason();
cid=1
pid=1
统计没有完成原因的任务数量 >> 0
*/
$task = new taskTest();
r($task->getDataOfTasksPerClosedReasonTest()) && p() && e('0'); //统计没有完成原因的任务数量
+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/task.class.php';
su('admin');
/**
title=taskModel->getDataOfTasksPerConsumed();
cid=1
pid=1
统计消耗工时为3的任务数量 >> 3,90
统计消耗工时为4的任务数量 >> 4,90
统计消耗工时为5的任务数量 >> 5,90
统计消耗工时为6的任务数量 >> 6,91
统计消耗工时为7的任务数量 >> 7,91
统计消耗工时为8的任务数量 >> 8,91
统计消耗工时为9的任务数量 >> 9,91
*/
$task = new taskTest();
r($task->getDataOfTasksPerConsumedTest()) && p('3:name,value') && e('3,90'); //统计消耗工时为3的任务数量
r($task->getDataOfTasksPerConsumedTest()) && p('4:name,value') && e('4,90'); //统计消耗工时为4的任务数量
r($task->getDataOfTasksPerConsumedTest()) && p('5:name,value') && e('5,90'); //统计消耗工时为5的任务数量
r($task->getDataOfTasksPerConsumedTest()) && p('6:name,value') && e('6,91'); //统计消耗工时为6的任务数量
r($task->getDataOfTasksPerConsumedTest()) && p('7:name,value') && e('7,91'); //统计消耗工时为7的任务数量
r($task->getDataOfTasksPerConsumedTest()) && p('8:name,value') && e('8,91'); //统计消耗工时为8的任务数量
r($task->getDataOfTasksPerConsumedTest()) && p('9:name,value') && e('9,91'); //统计消耗工时为9的任务数量
+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/task.class.php';
su('admin');
/**
title=taskModel->getDataOfTasksPerDeadline();
cid=1
pid=1
统计日期为+1days的任务数量 >> 17
统计日期为+2days的任务数量 >> 17
统计日期为+3days的任务数量 >> 18
统计日期为+4days的任务数量 >> 18
统计日期为-1days的任务数量 >> 17
统计日期为-2days的任务数量 >> 17
统计日期为-3days的任务数量 >> 17
统计日期为-4days的任务数量 >> 17
*/
$task = new taskTest();
r($task->getDataOfTasksPerDeadlineTest(0)) && p("0:value") && e("17"); //统计日期为+1days的任务数量
r($task->getDataOfTasksPerDeadlineTest(1)) && p("1:value") && e("17"); //统计日期为+2days的任务数量
r($task->getDataOfTasksPerDeadlineTest(2)) && p("2:value") && e("18"); //统计日期为+3days的任务数量
r($task->getDataOfTasksPerDeadlineTest(3)) && p("3:value") && e("18"); //统计日期为+4days的任务数量
r($task->getDataOfTasksPerDeadlineTest(4)) && p("4:value") && e("17"); //统计日期为-1days的任务数量
r($task->getDataOfTasksPerDeadlineTest(5)) && p("5:value") && e("17"); //统计日期为-2days的任务数量
r($task->getdataoftasksperdeadlinetest(6)) && p("6:value") && e("17"); //统计日期为-3days的任务数量
r($task->getdataoftasksperdeadlinetest(7)) && p("7:value") && e("17"); //统计日期为-4days的任务数量
+33
View File
@@ -0,0 +1,33 @@
#!/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->getDataOfTasksPerEstimate();
cid=1
pid=1
统计预计工时为0的任务数量 >> 0,83
统计预计工时为1的任务数量 >> 1,83
统计预计工时为2的任务数量 >> 2,83
统计预计工时为3的任务数量 >> 3,83
统计预计工时为4的任务数量 >> 4,83
统计预计工时为5的任务数量 >> 5,83
统计预计工时为6的任务数量 >> 6,82
统计预计工时为7的任务数量 >> 7,82
*/
$task = new taskTest();
r($task->getDataOfTasksPerEstimateTest()) && p('0:name,value') && e('0,83'); //统计预计工时为0的任务数量
r($task->getDataOfTasksPerEstimateTest()) && p('1:name,value') && e('1,83'); //统计预计工时为1的任务数量
r($task->getDataOfTasksPerEstimateTest()) && p('2:name,value') && e('2,83'); //统计预计工时为2的任务数量
r($task->getDataOfTasksPerEstimateTest()) && p('3:name,value') && e('3,83'); //统计预计工时为3的任务数量
r($task->getDataOfTasksPerEstimateTest()) && p('4:name,value') && e('4,83'); //统计预计工时为4的任务数量
r($task->getDataOfTasksPerEstimateTest()) && p('5:name,value') && e('5,83'); //统计预计工时为5的任务数量
r($task->getDataOfTasksPerEstimateTest()) && p('6:name,value') && e('6,82'); //统计预计工时为6的任务数量
r($task->getDataOfTasksPerEstimateTest()) && p('7:name,value') && e('7,82'); //统计预计工时为7的任务数量
+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/task.class.php';
su('admin');
/**
title=taskModel->getDataOfTasksPerExecution();
cid=1
pid=1
统计executionID为101的执行的任务数量 >> 迭代1,14
统计executionID为102的执行的任务数量 >> 迭代2,4
统计executionID为103的执行的任务数量 >> 迭代3,4
统计executionID为104的执行的任务数量 >> 迭代4,4
统计executionID为105的执行的任务数量 >> 迭代5,4
统计executionID为106的执行的任务数量 >> 迭代6,4
统计executionID为107的执行的任务数量 >> 迭代7,4
*/
$task = new taskTest();
r($task->getDataOfTasksPerExecutionTest()) && p('101:name,value') && e('迭代1,14'); //统计executionID为101的执行的任务数量
r($task->getDataOfTasksPerExecutionTest()) && p('102:name,value') && e('迭代2,4'); //统计executionID为102的执行的任务数量
r($task->getDataOfTasksPerExecutionTest()) && p('103:name,value') && e('迭代3,4'); //统计executionID为103的执行的任务数量
r($task->getDataOfTasksPerExecutionTest()) && p('104:name,value') && e('迭代4,4'); //统计executionID为104的执行的任务数量
r($task->getDataOfTasksPerExecutionTest()) && p('105:name,value') && e('迭代5,4'); //统计executionID为105的执行的任务数量
r($task->getDataOfTasksPerExecutionTest()) && p('106:name,value') && e('迭代6,4'); //统计executionID为106的执行的任务数量
r($task->getDataOfTasksPerExecutionTest()) && p('107:name,value') && e('迭代7,4'); //统计executionID为107的执行的任务数量
+19
View File
@@ -0,0 +1,19 @@
#!/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->getDataOfTasksPerFinishedBy();
cid=1
pid=1
统计没有完成者的任务数量 >> 0
*/
$task = new taskTest();
r($task->getDataOfTasksPerFinishedByTest()) && p() && e('0'); //统计没有完成者的任务数量
+33
View File
@@ -0,0 +1,33 @@
#!/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->getDataOfTasksPerLeft();
cid=1
pid=1
统计剩余工时为0的任务数量 >> 0,83
统计剩余工时为1的任务数量 >> 1,83
统计剩余工时为2的任务数量 >> 2,83
统计剩余工时为3的任务数量 >> 3,83
统计剩余工时为4的任务数量 >> 4,83
统计剩余工时为5的任务数量 >> 5,83
统计剩余工时为6的任务数量 >> 6,82
统计剩余工时为7的任务数量 >> 7,82
*/
$task = new taskTest();
r($task->getDataOfTasksPerLeftTest()) && p('0:name,value') && e('0,83'); //统计剩余工时为0的任务数量
r($task->getDataOfTasksPerLeftTest()) && p('1:name,value') && e('1,83'); //统计剩余工时为1的任务数量
r($task->getDataOfTasksPerLeftTest()) && p('2:name,value') && e('2,83'); //统计剩余工时为2的任务数量
r($task->getDataOfTasksPerLeftTest()) && p('3:name,value') && e('3,83'); //统计剩余工时为3的任务数量
r($task->getDataOfTasksPerLeftTest()) && p('4:name,value') && e('4,83'); //统计剩余工时为4的任务数量
r($task->getDataOfTasksPerLeftTest()) && p('5:name,value') && e('5,83'); //统计剩余工时为5的任务数量
r($task->getDataOfTasksPerLeftTest()) && p('6:name,value') && e('6,82'); //统计剩余工时为6的任务数量
r($task->getDataOfTasksPerLeftTest()) && p('7:name,value') && e('7,82'); //统计剩余工时为7的任务数量
+24
View File
@@ -0,0 +1,24 @@
#!/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->getDataOfTasksPerModule();
cid=1
pid=1
统计moduleID为21的模块的任务数量 >> /模块1,12
统计moduleID为615的模块的任务数量 >> /模块595,2
统计moduleID为504的模块的任务数量 >> /模块484,2
*/
$task = new taskTest();
r($task->getDataOfTasksPerModuleTest()) && p('21:name,value') && e('/模块1,12'); //统计moduleID为21的模块的任务数量
r($task->getDataOfTasksPerModuleTest()) && p('615:name,value') && e('/模块595,2'); //统计moduleID为615的模块的任务数量
r($task->getDataOfTasksPerModuleTest()) && p('504:name,value') && e('/模块484,2'); //统计moduleID为504的模块的任务数量
+25
View File
@@ -0,0 +1,25 @@
#!/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->getDataOfTasksPerPri();
cid=1
pid=1
统计优先级为1的任务数量 >> 1,228
统计优先级为2的任务数量 >> 2,228
统计优先级为3的任务数量 >> 3,227
统计优先级为4的任务数量 >> 4,227
*/
$task = new taskTest();
r($task->getDataOfTasksPerPriTest()) && p('1:name,value') && e('1,228'); //统计优先级为1的任务数量
r($task->getDataOfTasksPerPriTest()) && p('2:name,value') && e('2,228'); //统计优先级为2的任务数量
r($task->getDataOfTasksPerPriTest()) && p('3:name,value') && e('3,227'); //统计优先级为3的任务数量
r($task->getDataOfTasksPerPriTest()) && p('4:name,value') && e('4,227'); //统计优先级为4的任务数量
+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/task.class.php';
su('admin');
/**
title=taskModel->getDataOfTasksPerStatus();
cid=1
pid=1
统计状态为已完成的任务数量 >> 已完成,152
统计状态为未开始的任务数量 >> 未开始,152
统计状态为进行中的任务数量 >> 进行中,152
统计状态为已暂停的任务数量 >> 已暂停,152
统计状态为已取消的任务数量 >> 已取消,151
统计状态为已关闭的任务数量 >> 已关闭,151
*/
$task = new taskTest();
r($task->getDataOfTasksPerStatusTest()) && p('done:name,value') && e('已完成,152'); //统计状态为已完成的任务数量
r($task->getDataOfTasksPerStatusTest()) && p('wait:name,value') && e('未开始,152'); //统计状态为未开始的任务数量
r($task->getDataOfTasksPerStatusTest()) && p('doing:name,value') && e('进行中,152'); //统计状态为进行中的任务数量
r($task->getDataOfTasksPerStatusTest()) && p('pause:name,value') && e('已暂停,152'); //统计状态为已暂停的任务数量
r($task->getDataOfTasksPerStatusTest()) && p('cancel:name,value') && e('已取消,151'); //统计状态为已取消的任务数量
r($task->getDataOfTasksPerStatusTest()) && p('closed:name,value') && e('已关闭,151'); //统计状态为已关闭的任务数量
+26
View File
@@ -0,0 +1,26 @@
#!/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->getDataOfTasksPerType();
cid=1
pid=1
统计类型为devel的任务数量 >> 开发,115
统计类型为study的任务数量 >> 研究,114
统计类型为discuss的任务数量 >> 讨论,113
统计类型为ui的任务数量 >> 界面,113
*/
$task = new taskTest();
r($task->getDataOfTasksPerTypeTest()) && p('devel:name,value') && e('开发,115'); //统计类型为devel的任务数量
r($task->getDataOfTasksPerTypeTest()) && p('study:name,value') && e('研究,114'); //统计类型为study的任务数量
r($task->getDataOfTasksPerTypeTest()) && p('discuss:name,value') && e('讨论,113'); //统计类型为discuss的任务数量
r($task->getDataOfTasksPerTypeTest()) && p('ui:name,value') && e('界面,113'); //统计类型为ui的任务数量
+86
View File
@@ -0,0 +1,86 @@
#!/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->processData4Report();
cid=1
pid=1
计算executionID为101的执行下按迭代任务数统计的图表数据 101 >> 101,14
计算executionID为101的执行下按模块任务统计的图表数据 27 >> 27,1
计算executionID为101的执行下按模块任务统计的图表数据 21 >> 21,12
计算executionID为101的执行下按指派给统计的图表数据 >> po82,1
计算executionID为101的执行下按任务类型统计的图表数据 ui >> ui,1
计算executionID为101的执行下按任务类型统计的图表数据 test >> test,2
计算executionID为101的执行下按优先级统计的图表数据 1 >> 1,5
计算executionID为101的执行下按优先级统计的图表数据 2 >> 2,4
计算executionID为101的执行下按任务状态统计的图表数据 -8day >> 2
计算executionID为101的执行下按任务状态统计的图表数据 -15day >> 1
计算executionID为101的执行下按截止时间统计的图表数据 0 >> 0,3
计算executionID为101的执行下按截止时间统计的图表数据 5 >> 5,1
计算executionID为101的执行下按预计时间统计的图表数据 0 >> 0,2
计算executionID为101的执行下按预计时间统计的图表数据 6 >> 6,1
计算executionID为101的执行下按剩余时间统计的图表数据 3 >> 3,2
计算executionID为101的执行下按剩余时间统计的图表数据 7 >> 7,1
计算executionID为101的执行下按消耗时间统计的图表数据 >> ,11
计算executionID为101的执行下按由谁完成统计的图表数据 >> ,14
计算executionID为101的执行下按关闭原因统计的图表数据 >> void
计算executionID为101的执行下按每天完成统计的图表数据 wait >> wait,4
计算executionID为101的执行下按每天完成统计的图表数据 done >> done,3
*/
$now = helper::now();
$tasks = $dao->select('*')->from(TABLE_TASK)->where('`execution`')->eq('101')->andWhere('deleted')->eq(0)->fetchAll('id');
$parents = array();
foreach($tasks as $task)
{
if($task->parent > 0) $parents[$task->parent] = $task->parent;
}
$parents = $dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id');
foreach($tasks as $task)
{
if($task->parent > 0)
{
if(isset($tasks[$task->parent]))
{
$tasks[$task->parent]->children[$task->id] = $task;
}
else
{
$parent = $parents[$task->parent];
$task->parentName = $parent->name;
}
}
$task->date = '0000-00-00';
}
$children = $tasks[601]->children + $tasks[602]->children + $tasks[603]->children;
$task = new taskTest();
r($task->processData4ReportTest($tasks, '', "execution")) && p('101:name,value') && e('101,14'); //计算executionID为101的执行下按迭代任务数统计的图表数据 101
r($task->processData4ReportTest($tasks, '', 'module')) && p('27:name,value') && e('27,1'); //计算executionID为101的执行下按模块任务统计的图表数据 27
r($task->processData4ReportTest($tasks, '', 'module')) && p('21:name,value') && e('21,12'); //计算executionID为101的执行下按模块任务统计的图表数据 21
r($task->processData4ReportTest($tasks, '', 'assignedTo')) && p('po82:name,value') && e('po82,1'); //计算executionID为101的执行下按指派给统计的图表数据
r($task->processData4ReportTest($tasks, '', 'type')) && p('ui:name,value') && e('ui,1'); //计算executionID为101的执行下按任务类型统计的图表数据 ui
r($task->processData4ReportTest($tasks, '', 'type')) && p('test:name,value') && e('test,2'); //计算executionID为101的执行下按任务类型统计的图表数据 test
r($task->processData4ReportTest($tasks, '', 'pri')) && p('1:name,value') && e('1,5'); //计算executionID为101的执行下按优先级统计的图表数据 1
r($task->processData4ReportTest($tasks, '', 'pri')) && p('2:name,value') && e('2,4'); //计算executionID为101的执行下按优先级统计的图表数据 2
r($task->processData4ReportTest($tasks, '', 'deadline')) && p('0:value') && e("2"); //计算executionID为101的执行下按任务状态统计的图表数据 -8day
r($task->processData4ReportTest($tasks, '', 'deadline')) && p('1:value') && e("1"); //计算executionID为101的执行下按任务状态统计的图表数据 -15day
r($task->processData4ReportTest($tasks, '', 'estimate')) && p('0:name,value') && e('0,3'); //计算executionID为101的执行下按截止时间统计的图表数据 0
r($task->processData4ReportTest($tasks, '', 'estimate')) && p('5:name,value') && e('5,1'); //计算executionID为101的执行下按截止时间统计的图表数据 5
r($task->processData4ReportTest($tasks, $children, 'left')) && p('0:name,value') && e('0,2'); //计算executionID为101的执行下按预计时间统计的图表数据 0
r($task->processData4ReportTest($tasks, $children, 'left')) && p('6:name,value') && e('6,1'); //计算executionID为101的执行下按预计时间统计的图表数据 6
r($task->processData4ReportTest($tasks, $children, 'consumed')) && p('3:name,value') && e('3,2'); //计算executionID为101的执行下按剩余时间统计的图表数据 3
r($task->processData4ReportTest($tasks, $children, 'consumed')) && p('7:name,value') && e('7,1'); //计算executionID为101的执行下按剩余时间统计的图表数据 7
r($task->processData4ReportTest($tasks, $children, 'finishedBy')) && p('void:name,value') && e(',11'); //计算executionID为101的执行下按消耗时间统计的图表数据
r($task->processData4ReportTest($tasks, '', 'closedReason')) && p('void:name,value') && e(',14'); //计算executionID为101的执行下按由谁完成统计的图表数据
r($task->processData4ReportTest($tasks, '', 'date')) && p('void') && e('void'); //计算executionID为101的执行下按关闭原因统计的图表数据
r($task->processData4ReportTest($tasks, '', 'status')) && p('wait:name,value') && e('wait,4'); //计算executionID为101的执行下按每天完成统计的图表数据 wait
r($task->processData4ReportTest($tasks, '', 'status')) && p('done:name,value') && e('done,3'); //计算executionID为101的执行下按每天完成统计的图表数据 done
+6 -9
View File
@@ -19,11 +19,9 @@ pid=1
*/
$now = helper::now();
$task1 = new stdclass();
$task1->status = 'wait';
$task1->deadline = date("Y-m-d",strtotime("+1 day"));
$task1->deadline = '+1day';
$task1->storyStatus = 'draft';
$task1->latestStoryVersion = '1';
$task1->storyVersion = '1';
@@ -34,7 +32,7 @@ $task1->left = '1';
$task2 = new stdclass();
$task2->status = 'doing';
$task2->deadline = date("Y-m-d",strtotime("-1 day"));
$task2->deadline = '-1day';
$task2->storyStatus = 'draft';
$task2->latestStoryVersion = '1';
$task2->storyVersion = '1';
@@ -45,7 +43,7 @@ $task2->left = '1';
$task3 = new stdclass();
$task3->status = 'doing';
$task3->deadline = date("Y-m-d",strtotime("-1 day"));
$task3->deadline = '-1day';
$task3->storyStatus = 'draft';
$task3->latestStoryVersion = '1';
$task3->storyVersion = '1';
@@ -56,7 +54,7 @@ $task3->left = '1';
$task4 = new stdclass();
$task4->status = 'doing';
$task4->deadline = date("Y-m-d",strtotime("+1 day"));
$task4->deadline = '+1day';
$task4->storyStatus = 'draft';
$task4->latestStoryVersion = '1';
$task4->storyVersion = '1';
@@ -67,8 +65,7 @@ $task4->left = '1';
$task5 = new stdclass();
$task5->status = 'done';
$task5->deadline = date("Y-m-d",strtotime("-1 day"));
$task5->deadline = '2022-03-10';
$task5->deadline = '-1day';
$task5->storyStatus = 'draft';
$task5->latestStoryVersion = '1';
$task5->storyVersion = '1';
@@ -79,7 +76,7 @@ $task5->left = '0';
$task6 = new stdclass();
$task6->status = 'done';
$task6->deadline = date("Y-m-d",strtotime("+1 day"));
$task6->deadline = '+1day';
$task6->storyStatus = 'draft';
$task6->latestStoryVersion = '1';
$task6->storyVersion = '1';
+11 -59
View File
@@ -11,8 +11,8 @@ cid=1
pid=1
根据tasks计算executionID为1的执行下所有任务的进度 任务1 >> ,100
根据tasks计算executionID为1的执行下所有任务的进度 任务601 >> ,100
根据tasks计算executionID为1的执行下所有任务的进度 任务602 >> ,80
根据tasks计算executionID为1的执行下所有任务的进度 任务601 >> 7,100
根据tasks计算executionID为1的执行下所有任务的进度 任务602 >> 8,80
根据tasks计算executionID为1的执行下所有任务的进度 任务602 >> ,71
根据tasks计算executionID为2的执行下所有任务的进度 任务2 >> ,80
根据tasks计算executionID为2的执行下所有任务的进度 任务602 >> 10,67
@@ -21,62 +21,14 @@ pid=1
*/
$now = helper::now();
$tasks1 = $dao->select('*')->from(TABLE_TASK)->where('execution')->eq('101')->andWhere('deleted')->eq(0)->fetchAll('id');
$parents = array();
foreach($tasks1 as $task)
{
if($task->parent > 0) $parents[$task->parent] = $task->parent;
}
$parents = $dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id');
foreach($tasks1 as $task)
{
if($task->parent > 0)
{
if(isset($tasks[$task->parent]))
{
$tasks[$task->parent]->children[$task->id] = $task;
unset($tasks[$task->id]);
}
else
{
$parent = $parents[$task->parent];
$task->parentName = $parent->name;
}
}
}
$tasks2 = $dao->select('*')->from(TABLE_TASK)->where('execution')->eq('102')->andWhere('deleted')->eq(0)->fetchAll('id');
$parents = array();
foreach($tasks2 as $task)
{
if($task->parent > 0) $parents[$task->parent] = $task->parent;
}
$parents = $dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id');
foreach($tasks2 as $task)
{
if($task->parent > 0)
{
if(isset($tasks[$task->parent]))
{
$tasks[$task->parent]->children[$task->id] = $task;
unset($tasks[$task->id]);
}
else
{
$parent = $parents[$task->parent];
$task->parentName = $parent->name;
}
}
}
$executionID = array('101', '102');
$task = new taskTest();
r($task->processTasksTest($tasks1)) && p('1:delay,progress') && e(',100'); //根据tasks计算executionID为1的执行下所有任务的进度 任务1
r($task->processTasksTest($tasks1)) && p('601:delay,progress') && e(',100'); //根据tasks计算executionID为1的执行下所有任务的进度 任务601
r($task->processTasksTest($tasks1)) && p('602:delay,progress') && e(',80'); //根据tasks计算executionID为1的执行下所有任务的进度 任务602
r($task->processTasksTest($tasks1)) && p('603:delay,progress') && e(',71'); //根据tasks计算executionID为1的执行下所有任务的进度 任务603
r($task->processTasksTest($tasks2)) && p('2:delay,progress') && e(',80'); //根据tasks计算executionID为2的执行下所有任务的进度 任务2
r($task->processTasksTest($tasks2)) && p('604:delay,progress') && e('10,67'); //根据tasks计算executionID为2的执行下所有任务的进度 任务604
r($task->processTasksTest($tasks2)) && p('605:delay,progress') && e(',64'); //根据tasks计算executionID为2的执行下所有任务的进度 任务605
r($task->processTasksTest($tasks2)) && p('606:delay,progress') && e(',62'); //根据tasks计算executionID为2的执行下所有任务的进度 任务606
r($task->processTasksTest($executionID['0'])) && p('1:delay,progress') && e(',100'); //根据tasks计算executionID为1的执行下所有任务的进度 任务1
r($task->processTasksTest($executionID['0'])) && p('601:delay,progress') && e('7,100'); //根据tasks计算executionID为1的执行下所有任务的进度 任务601
r($task->processTasksTest($executionID['0'])) && p('602:delay,progress') && e('8,80'); //根据tasks计算executionID为1的执行下所有任务的进度 任务602
r($task->processTasksTest($executionID['0'])) && p('603:delay,progress') && e(',71'); //根据tasks计算executionID为1的执行下所有任务的进度 任务603
r($task->processTasksTest($executionID['1'])) && p('2:delay,progress') && e(',80'); //根据tasks计算executionID为2的执行下所有任务的进度 任务2
r($task->processTasksTest($executionID['1'])) && p('604:delay,progress') && e('10,67'); //根据tasks计算executionID为2的执行下所有任务的进度 任务604
r($task->processTasksTest($executionID['1'])) && p('605:delay,progress') && e(',64'); //根据tasks计算executionID为2的执行下所有任务的进度 任务605
r($task->processTasksTest($executionID['1'])) && p('606:delay,progress') && e(',62'); //根据tasks计算executionID为2的执行下所有任务的进度 任务606
+5 -5
View File
@@ -18,14 +18,14 @@ pid=1
测试修改任务状态 >> status,cancel,doing
测试修改任务优先级 >> pri,2,1
测试修改任务所属执行 >> execution,107,101
测试修改任务预计开始时间 >> estStarted,2022-03-11,2022-02-27
测试修改任务截止时间 >> deadline,2022-03-10,2022-03-11
测试修改任务预计开始时间 >> estStarted,2022-03-14,2022-02-27
测试修改任务截止时间 >> deadline,2022-03-13,2022-03-29
测试修改任务关闭原因 >> 『关闭原因』必须为空。
*/
$estStarted = '2022-02-27';
$deadline = '2022-03-11';
$deadline = '2022-03-29';
$taskIDList = array('1','2','3','4','5','6','7','8','9');
$changename = array('name' => '任务名修改','estStarted' => $estStarted,'deadline' => $deadline);
@@ -48,8 +48,8 @@ r($task->updateObject($taskIDList[3], $changetype)) && p('0:field,old,new'
r($task->updateObject($taskIDList[4], $changestatus)) && p('0:field,old,new') && e('status,cancel,doing'); // 测试修改任务状态
r($task->updateObject($taskIDList[5], $changepri)) && p('0:field,old,new') && e('pri,2,1'); // 测试修改任务优先级
r($task->updateObject($taskIDList[6], $changeexecution)) && p('0:field,old,new') && e('execution,107,101'); // 测试修改任务所属执行
r($task->updateObject($taskIDList[7], $changeestStarted)) && p('0:field,old,new') && e('estStarted,2022-03-11,2022-02-27'); // 测试修改任务预计开始时间
r($task->updateObject($taskIDList[8], $changedeadline)) && p('0:field,old,new') && e('deadline,2022-03-10,2022-03-11'); // 测试修改任务截止时间
r($task->updateObject($taskIDList[7], $changeestStarted)) && p('0:field,old,new') && e('estStarted,2022-03-14,2022-02-27'); // 测试修改任务预计开始时间
r($task->updateObject($taskIDList[8], $changedeadline)) && p('0:field,old,new') && e('deadline,2022-03-13,2022-03-29'); // 测试修改任务截止时间
r($task->updateObject($taskIDList[0], $ckclosedReason)) && p('closedReason:0') && e(' 『关闭原因』必须为空。'); // 测试修改任务关闭原因
system("./ztest init");