* Adjust for unit test.
This commit is contained in:
@@ -163,14 +163,7 @@ class programplanModel extends model
|
||||
if($project->model == 'ipd' and $datas) $datas = $this->programplanTao->buildGanttData4IPD($datas, $projectID, $productID, $selectCustom, $reviewDeadline);
|
||||
|
||||
/* Calculate the progress of the phase. */
|
||||
foreach($stageIndex as $index => $stage)
|
||||
{
|
||||
$progress = empty($stage['progress']['totalConsumed']) ? 0 : round($stage['progress']['totalConsumed'] / $stage['progress']['totalReal'], 3);
|
||||
$datas['data'][$index]->progress = $progress;
|
||||
$datas['data'][$index]->taskProgress = ($progress * 100) . '%';
|
||||
$datas['data'][$index]->estimate = $stage['progress']['totalEstimate'];
|
||||
$datas['data'][$index]->consumed = $stage['progress']['totalConsumed'];
|
||||
}
|
||||
$datas = $this->programplanTao->setStageSummary($datas, $stageIndex);
|
||||
|
||||
/* Set relation task data. */
|
||||
$datas['links'] = $this->programplanTao->buildGanttLinks($planIdList);
|
||||
@@ -327,7 +320,6 @@ class programplanModel extends model
|
||||
/* Get linked product by projectID. */
|
||||
$this->loadModel('action');
|
||||
$this->loadModel('execution');
|
||||
$project = $this->fetchById($projectID, 'project');
|
||||
$linkProducts = $this->programplanTao->getLinkProductsForCreate($projectID, $productID);
|
||||
|
||||
/* Set each plans. */
|
||||
@@ -353,10 +345,11 @@ class programplanModel extends model
|
||||
}
|
||||
else
|
||||
{
|
||||
$stageID = $this->programplanTao->insertStage($plan, $project, $productID, $parentID);
|
||||
$stageID = $this->programplanTao->insertStage($plan, $projectID, $productID, $parentID);
|
||||
if(dao::isError()) return false;
|
||||
|
||||
$extra = ($project->hasProduct and !empty($linkProducts['products'])) ? implode(',', $linkProducts['products']) : '';
|
||||
$project = $this->fetchByID($projectID, 'project');
|
||||
$extra = ($project && $project->hasProduct and !empty($linkProducts['products'])) ? implode(',', $linkProducts['products']) : '';
|
||||
$this->action->create('execution', $stageID, 'opened', '', $extra);
|
||||
|
||||
$this->execution->updateProducts($stageID, $linkProducts);
|
||||
|
||||
+54
-53
@@ -10,6 +10,35 @@ declare(strict_types=1);
|
||||
*/
|
||||
class programplanTao extends programplanModel
|
||||
{
|
||||
/**
|
||||
* 获取阶段信息。
|
||||
* Get stage list.
|
||||
*
|
||||
* @param int $executionID
|
||||
* @param int $productID
|
||||
* @param string $browseType
|
||||
* @param string $orderBy
|
||||
* @access protected
|
||||
* @return array
|
||||
*/
|
||||
protected function getStageList(int $executionID, int $productID, string $browseType, string $orderBy = 'id_asc'): array
|
||||
{
|
||||
if(empty($executionID)) return array();
|
||||
$projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('model');
|
||||
|
||||
return $this->dao->select('t1.*')->from(TABLE_EXECUTION)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.project')
|
||||
->where('1 = 1')
|
||||
->beginIF(!in_array($projectModel, array('waterfallplus', 'ipd')))->andWhere('t1.type')->eq('stage')->fi()
|
||||
->beginIF($productID)->andWhere('t2.product')->eq($productID)->fi()
|
||||
->beginIF($browseType == 'all' || $browseType == 'leaf')->andWhere('t1.project')->eq($executionID)->fi()
|
||||
->beginIF($browseType == 'parent')->andWhere('t1.parent')->eq($executionID)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi()
|
||||
->andWhere('t1.deleted')->eq('0')
|
||||
->orderBy($orderBy)
|
||||
->fetchAll('id');
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新项目阶段。
|
||||
* update program plan.
|
||||
@@ -184,17 +213,17 @@ class programplanTao extends programplanModel
|
||||
/* Determines if the object is delay. */
|
||||
$data->delay = $this->lang->programplan->delayList[0];
|
||||
$data->delayDays = 0;
|
||||
if($today > $end and $plan->status != 'closed')
|
||||
if($today > $data->endDate and $plan->status != 'closed')
|
||||
{
|
||||
$data->delay = $this->lang->programplan->delayList[1];
|
||||
$data->delayDays = helper::diffDate($today, substr($end, 0, 10));
|
||||
$data->delayDays = helper::diffDate($today, $data->endDate);
|
||||
}
|
||||
|
||||
if($data->endDate > $data->start_date) $data->duration = helper::diffDate(substr($data->endDate, 0, 10), substr($data->start_date, 0, 10)) + 1;
|
||||
if($data->start_date == '' or $data->endDate == '') $data->duration = 1;
|
||||
if($data->endDate > $data->start_date) $data->duration = helper::diffDate($data->endDate, $data->start_date) + 1;
|
||||
if(empty($data->start_date) or empty($data->endDate)) $data->duration = 1;
|
||||
|
||||
$datas['data'][$plan->id] = $data;
|
||||
$stageIndex[$plan->id] = array('planID' => $plan->id, 'parent' => $plan->parent, 'progress' => array('totalEstimate' => 0, 'totalConsumed' => 0, 'totalReal' => 0));
|
||||
$stageIndex[$plan->id] = array('planID' => $plan->id, 'parent' => $plan->parent, 'totalEstimate' => 0, 'totalConsumed' => 0, 'totalReal' => 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,49 +271,20 @@ class programplanTao extends programplanModel
|
||||
if($stage['planID'] != $task->execution) continue;
|
||||
if(!isset($stageIndex[$index])) continue;
|
||||
|
||||
$stageIndex[$index]['progress']['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$index]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$index]['progress']['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed);
|
||||
|
||||
if(!isset($stageIndex[$parent])) continue;
|
||||
$stageIndex[$index]['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$index]['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$index]['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed);
|
||||
|
||||
$parent = $stage['parent'];
|
||||
$stageIndex[$parent]['progress']['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$parent]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$parent]['progress']['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed);
|
||||
if(!isset($stageIndex[$parent])) continue;
|
||||
|
||||
$stageIndex[$parent]['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$parent]['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$parent]['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取阶段信息。
|
||||
* Get stage list.
|
||||
*
|
||||
* @param int $executionID
|
||||
* @param int $productID
|
||||
* @param string $browseType
|
||||
* @param string $orderBy
|
||||
* @access protected
|
||||
* @return array
|
||||
*/
|
||||
protected function getStageList(int $executionID, int $productID, string $browseType, string $orderBy = 'id_asc'): array
|
||||
{
|
||||
if(empty($executionID)) return array();
|
||||
$projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('model');
|
||||
|
||||
return $this->dao->select('t1.*')->from(TABLE_EXECUTION)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.project')
|
||||
->where('1 = 1')
|
||||
->beginIF(!in_array($projectModel, array('waterfallplus', 'ipd')))->andWhere('t1.type')->eq('stage')->fi()
|
||||
->beginIF($productID)->andWhere('t2.product')->eq($productID)->fi()
|
||||
->beginIF($browseType == 'all' || $browseType == 'leaf')->andWhere('t1.project')->eq($executionID)->fi()
|
||||
->beginIF($browseType == 'parent')->andWhere('t1.parent')->eq($executionID)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi()
|
||||
->andWhere('t1.deleted')->eq('0')
|
||||
->orderBy($orderBy)
|
||||
->fetchAll('id');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子阶段数量。
|
||||
* Get stage count.
|
||||
@@ -461,7 +461,7 @@ class programplanTao extends programplanModel
|
||||
$linkProducts = array();
|
||||
$linkBranches = array();
|
||||
$productList = $this->loadModel('product')->getProducts($projectID);
|
||||
if($project->stageBy)
|
||||
if($project && $project->stageBy)
|
||||
{
|
||||
$linkProducts = array(0 => $productID);
|
||||
if(!empty($productList)) $linkBranches = array(0 => $productList[$productID]->branches);
|
||||
@@ -482,19 +482,20 @@ class programplanTao extends programplanModel
|
||||
* 插入阶段数据。
|
||||
* Insert stage.
|
||||
* @param object $plan
|
||||
* @param object $project
|
||||
* @param int $projectID
|
||||
* @param int $productID
|
||||
* @param int $parentID
|
||||
* @access protected
|
||||
* @return int|false
|
||||
*/
|
||||
protected function insertStage(object $plan, object $project, int $productID, int $parentID): int|false
|
||||
protected function insertStage(object $plan, int $projectID, int $productID, int $parentID): int|false
|
||||
{
|
||||
$project = $this->fetchById($projectID, 'project');
|
||||
$account = $this->app->user->account;
|
||||
|
||||
unset($plan->id);
|
||||
$plan->status = 'wait';
|
||||
$plan->stageBy = $project->stageBy;
|
||||
$plan->stageBy = zget($project, 'stageBy', '');
|
||||
$plan->version = 1;
|
||||
$plan->parentVersion = $plan->parent == 0 ? 0 : $this->dao->findByID($plan->parent)->from(TABLE_PROJECT)->fetch('version');
|
||||
$plan->team = substr($plan->name,0, 30);
|
||||
@@ -510,7 +511,7 @@ class programplanTao extends programplanModel
|
||||
$this->insertProjectSpec($stageID, $plan);
|
||||
|
||||
/* Ipd project create default review points. */
|
||||
if($project->model == 'ipd' && $this->config->edition == 'ipd' && !$parentID) $this->loadModel('review')->createDefaultPoint($project->id, $productID, $plan->attribute);
|
||||
if($project && $project->model == 'ipd' && $this->config->edition == 'ipd' && !$parentID) $this->loadModel('review')->createDefaultPoint($project->id, $productID, $plan->attribute);
|
||||
|
||||
if($plan->type == 'kanban')
|
||||
{
|
||||
@@ -518,7 +519,7 @@ class programplanTao extends programplanModel
|
||||
$this->loadModel('kanban')->createRDKanban($execution);
|
||||
}
|
||||
|
||||
$this->loadModel('execution')->createMainLib($project->id, $stageID);
|
||||
if($project) $this->loadModel('execution')->createMainLib($project->id, $stageID);
|
||||
$this->execution->addExecutionMembers($stageID, array($account, $plan->PM));
|
||||
|
||||
$this->setTreePath($stageID);
|
||||
@@ -787,13 +788,13 @@ class programplanTao extends programplanModel
|
||||
*/
|
||||
protected function setStageSummary(array $ganttData, array $stages): array
|
||||
{
|
||||
foreach($stages as $groupKey => $stage)
|
||||
foreach($stages as $index => $stage)
|
||||
{
|
||||
$progress = empty($stage['totalReal']) ? 0 : round($stage['totalConsumed'] / $stage['totalReal'], 3);
|
||||
$ganttData['data'][$groupKey]->progress = $progress;
|
||||
$ganttData['data'][$groupKey]->taskProgress = ($progress * 100) . '%';
|
||||
$ganttData['data'][$groupKey]->estimate = $stage['totalEstimate'];
|
||||
$ganttData['data'][$groupKey]->consumed = $stage['totalConsumed'];
|
||||
$ganttData['data'][$index]->progress = $progress;
|
||||
$ganttData['data'][$index]->taskProgress = ($progress * 100) . '%';
|
||||
$ganttData['data'][$index]->estimate = $stage['totalEstimate'];
|
||||
$ganttData['data'][$index]->consumed = $stage['totalConsumed'];
|
||||
}
|
||||
return $ganttData;
|
||||
}
|
||||
|
||||
Executable
+34
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->create();
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
zdTable('project')->gen(10);
|
||||
zdTable('task')->gen(10);
|
||||
|
||||
|
||||
$names = array('阶段31', '阶段121', '阶段211', '阶段301', '阶段391', '阶段481', '阶段571', '新增的阶段', '', '', '', '');
|
||||
$percents = array('0', '0', '0', '0', '0', '0', '0', '0', '', '', '', '');
|
||||
$begin = array();
|
||||
$end = array();
|
||||
$idList = array(11, 12);
|
||||
$create = array('name' => $names, 'percent' => $percents, 'begin' => $begin, 'end' => $end, 'id' => $idList);
|
||||
|
||||
$programplan = new programplanTest();
|
||||
|
||||
$programplan->objectModel->create(array());
|
||||
r(dao::getError()) && p('message:0') && e('『阶段名称』不能为空。'); // 测试创建用例 工作量占比非数字
|
||||
|
||||
r($programplan->createTest(array(), 0, 0, 1000)) && p('message:0') && e('『阶段名称』不能为空。'); // 测试创建用例 工作量占比非数字
|
||||
exit;
|
||||
|
||||
r($programplan->createTest()) && p() && e('7'); // 测试正常更新阶段信息 获取阶段数量
|
||||
r($programplan->createTest($create)) && p() && e('8'); // 测试正常创建一条阶段信息 获取阶段数量
|
||||
@@ -1,25 +1,21 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
function initData()
|
||||
{
|
||||
zdTable('project')->config('project')->gen(10);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getByID();
|
||||
timeout=0
|
||||
cid=1
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
initData();
|
||||
zdTable('project')->config('project')->gen(10);
|
||||
|
||||
global $tester;
|
||||
$tester->loadModel('programplan');
|
||||
|
||||
r($tester->programplan->getByID(2)) && p('name,code') && e('执行1-1,sprint1-1'); // 判断项目阶段id=2的name
|
||||
r($tester->programplan->getByID(1)) && p('milestone,setMilestone') && e('0,~~'); // 判断项目id=1走else的milestone,setMilestone
|
||||
r($tester->programplan->getByID(0)) && p() && e('0'); // 传入0参数。
|
||||
r($tester->programplan->getByID(20)) && p() && e('0'); // 传入不存在的ID。
|
||||
r($tester->programplan->getByID(2)) && p('name,code') && e('执行1-1,sprint1-1'); // 判断项目阶段id=2的name
|
||||
r($tester->programplan->getByID(1)) && p('milestone,setMilestone') && e('0,``'); // 判断项目id=1走else的milestone,setMilestone
|
||||
|
||||
@@ -1,25 +1,20 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
function initData()
|
||||
{
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('task')->config('task')->gen(8);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getDataForGantt();
|
||||
timeout=0
|
||||
cid=1
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('task')->config('task')->gen(8);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
|
||||
initData();
|
||||
$programplan = new programplanTest();
|
||||
|
||||
$selectCustom = 'date,task';
|
||||
|
||||
@@ -1,25 +1,20 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
function initData()
|
||||
{
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('task')->config('task')->gen(8);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getDataForGanttGroupByAssignedTo();
|
||||
timeout=0
|
||||
cid=1
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('task')->config('task')->gen(8);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
|
||||
initData();
|
||||
$programplan = new programplanTest();
|
||||
|
||||
$selectCustom = 'date,task';
|
||||
|
||||
@@ -1,22 +1,15 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getDuration();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
测试获取2022-04-01 ~ 2022-05-01持续时间 >> 21
|
||||
测试获取2022-04-02 ~ 2022-05-06持续时间 >> 25
|
||||
测试获取2022-04-03 ~ 2022-05-11持续时间 >> 28
|
||||
测试获取2022-04-04 ~ 2022-05-16持续时间 >> 31
|
||||
测试获取2022-04-05 ~ 2022-05-21持续时间 >> 34
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
$beginList = array('2022-04-01', '2022-04-02', '2022-04-03', '2022-04-04', '2022-04-05');
|
||||
$endList = array('2022-05-01', '2022-05-06', '2022-05-11', '2022-05-16', '2022-05-21');
|
||||
@@ -27,4 +20,4 @@ r($programplan->getDurationTest($beginList[0], $endList[0])) && p() && e('21');
|
||||
r($programplan->getDurationTest($beginList[1], $endList[1])) && p() && e('25'); // 测试获取2022-04-02 ~ 2022-05-06持续时间
|
||||
r($programplan->getDurationTest($beginList[2], $endList[2])) && p() && e('28'); // 测试获取2022-04-03 ~ 2022-05-11持续时间
|
||||
r($programplan->getDurationTest($beginList[3], $endList[3])) && p() && e('31'); // 测试获取2022-04-04 ~ 2022-05-16持续时间
|
||||
r($programplan->getDurationTest($beginList[4], $endList[4])) && p() && e('34'); // 测试获取2022-04-05 ~ 2022-05-21持续时间
|
||||
r($programplan->getDurationTest($beginList[4], $endList[4])) && p() && e('34'); // 测试获取2022-04-05 ~ 2022-05-21持续时间
|
||||
|
||||
@@ -1,27 +1,23 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
zdTable('project')->config('getpairs')->gen(10);
|
||||
zdTable('projectproduct')->config('getprojectproduct')->gen(20);
|
||||
|
||||
su('admin');
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getPairs();
|
||||
timeout=0
|
||||
cid=1
|
||||
|
||||
- 测试获取执行11 产品11的计划键值对 @,/项目11
|
||||
|
||||
- 测试获取执行12 产品12的计划键值对 @,/项目12
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
zdTable('project')->config('getpairs')->gen(10);
|
||||
zdTable('projectproduct')->config('getprojectproduct')->gen(20);
|
||||
|
||||
$executionIDList = array(11, 12, 13, 14, 15);
|
||||
$productIDList = array(11, 12, 13, 14, 15);
|
||||
|
||||
$programplan = new programplanTest();
|
||||
|
||||
r($programplan->getPairsTest($executionIDList[0], $productIDList[0])) && p() && e(',/项目11'); // 测试获取执行11 产品11的计划键值对
|
||||
r($programplan->getPairsTest($executionIDList[1], $productIDList[1], 'leaf')) && p() && e(',/项目12'); // 测试获取执行12 产品12的计划键值对
|
||||
r($programplan->getPairsTest($executionIDList[0], $productIDList[0])) && p() && e(';/项目11'); // 测试获取执行11 产品11的计划键值对
|
||||
r($programplan->getPairsTest($executionIDList[1], $productIDList[1], 'leaf')) && p() && e(';/项目12'); // 测试获取执行12 产品12的计划键值对
|
||||
|
||||
@@ -1,26 +1,21 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
function initData()
|
||||
{
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getPlans();
|
||||
cid=1
|
||||
pid=1
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
initData();
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('product')->gen(5);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
|
||||
global $tester;
|
||||
$tester->loadModel('programplan');
|
||||
$tester->programplan->app->user->admin = true;
|
||||
|
||||
r($tester->programplan->getPlans(2, 2)[2]) && p('type,name') && e('stage,阶段a'); // 测试获取执行2 产品2的阶段
|
||||
r($tester->programplan->getPlans(3, 2)[3]) && p('type,name') && e('stage,阶段a子1'); // 测试获取执行3 产品2的阶段
|
||||
|
||||
@@ -1,33 +1,32 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getStage();
|
||||
cid=0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
su('admin');
|
||||
|
||||
zdTable('project')->config('project')->gen(10);
|
||||
zdTable('product')->gen(5);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(10);
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->getStage();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$IDList = array(2, 3, 5);
|
||||
$productIDList = array(2, 2, 2, 2);
|
||||
$typeList = array('all', 'parent');
|
||||
$order = 'id_desc';
|
||||
$executionIDList = array(2, 3, 5);
|
||||
$productIDList = array(2, 2, 2, 2);
|
||||
$typeList = array('all', 'parent');
|
||||
$order = 'id_desc';
|
||||
|
||||
$programplan = new programplanTest();
|
||||
$programplan->objectModel->app->user->admin = true;
|
||||
|
||||
r($programplan->getStageTest($IDList[0], $productIDList[0], $typeList[0])) && p() && e(',新阶段a子1,新阶段a子2,新阶段a子3'); // 测试获取阶段2 产品2 all的名称
|
||||
r($programplan->getStageTest($IDList[0], $productIDList[0], $typeList[1])) && p() && e(',新阶段a子1,新阶段a子3'); // 测试获取阶段2 产品2 parent的名称
|
||||
r($programplan->getStageTest($IDList[0], $productIDList[0], $typeList[0], $order)) && p() && e(',新阶段a子3,新阶段a子2,新阶段a子1'); // 测试获取阶段2 产品2 parent id倒叙的名称
|
||||
r($programplan->getStageTest($IDList[1], $productIDList[1], $typeList[0])) && p() && e(',新阶段a子1子1'); // 测试获取阶段3 产品2 all的名称
|
||||
r($programplan->getStageTest($IDList[1], $productIDList[1], $typeList[1])) && p() && e(',新阶段a子1子2'); // 测试获取阶段3 产品2 parent的名称
|
||||
r($programplan->getStageTest($IDList[2], $productIDList[2], $typeList[0])) && p() && e(',新阶段b子1,新阶段b子2'); // 测试获取阶段5 产品2 all的名称
|
||||
r($programplan->getStageTest($IDList[2], $productIDList[2], $typeList[1])) && p() && e(',新阶段b子1'); // 测试获取阶段5 产品2 parent的名称
|
||||
r($programplan->getStageTest($IDList[2], $productIDList[2], $typeList[0], $order)) && p() && e(',新阶段b子2,新阶段b子1'); // 测试获取阶段2 产品2 all id倒叙的名称
|
||||
r($programplan->getStageTest($executionIDList[0], $productIDList[0], $typeList[0])) && p('0,1') && e('新阶段a子1;新阶段a子2;新阶段a子3,2;2;2'); // 测试获取阶段2 产品2 all的名称
|
||||
r($programplan->getStageTest($executionIDList[0], $productIDList[0], $typeList[0], $order)) && p('0,1') && e('新阶段a子3;新阶段a子2;新阶段a子1,2;2;2'); // 测试获取阶段2 产品2 parent id倒叙的名称
|
||||
r($programplan->getStageTest($executionIDList[0], $productIDList[0], $typeList[1])) && p('0,1') && e('新阶段a子1;新阶段a子3,2;2'); // 测试获取阶段2 产品2 parent的名称
|
||||
r($programplan->getStageTest($executionIDList[1], $productIDList[1], $typeList[0])) && p('0,1') && e('新阶段a子1子1,2'); // 测试获取阶段3 产品2 all的名称
|
||||
r($programplan->getStageTest($executionIDList[1], $productIDList[1], $typeList[1])) && p('0,1') && e('新阶段a子1子2,2'); // 测试获取阶段3 产品2 parent的名称
|
||||
r($programplan->getStageTest($executionIDList[2], $productIDList[2], $typeList[0])) && p('0,1') && e('新阶段b子1;新阶段b子2,2;2'); // 测试获取阶段5 产品2 all的名称
|
||||
r($programplan->getStageTest($executionIDList[2], $productIDList[2], $typeList[1])) && p('0,1') && e('新阶段b子1,2'); // 测试获取阶段5 产品2 parent的名称
|
||||
r($programplan->getStageTest($executionIDList[2], $productIDList[2], $typeList[0], $order)) && p('0,1') && e('新阶段b子2;新阶段b子1,2;2'); // 测试获取阶段2 产品2 all id倒叙的名称
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->processPlan();
|
||||
cid=0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
@@ -9,14 +15,6 @@ su('admin');
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
zdTable('product')->config('product')->gen(2);
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->processPlan();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$planIDList = array(1, 2, 3);
|
||||
|
||||
$programplan = new programplanTest();
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->processPlans();
|
||||
cid=0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/programplan.class.php';
|
||||
@@ -9,14 +14,6 @@ su('admin');
|
||||
zdTable('project')->config('project')->gen(6);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(6);
|
||||
zdTable('product')->config('product')->gen(2);
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->processPlans();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$planIDList = array(array(1, 2), array(3, 4), array(5, 6, 7));
|
||||
|
||||
$programplan = new programplanTest();
|
||||
|
||||
@@ -27,6 +27,10 @@ fields:
|
||||
range: 'stage,project'
|
||||
- field: grade
|
||||
range: 1
|
||||
- field: path
|
||||
range: 11-20
|
||||
prefix: ',1,'
|
||||
postfix: ','
|
||||
- field: days
|
||||
range: 1
|
||||
- field: status
|
||||
|
||||
@@ -8,6 +8,8 @@ class programplanTest
|
||||
global $tester;
|
||||
$this->objectModel = $tester->loadModel('programplan');
|
||||
$tester->dao->delete()->from(TABLE_PROJECTSPEC)->exec();
|
||||
|
||||
$this->objectModel->app->user->admin = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -37,17 +39,20 @@ class programplanTest
|
||||
* @param string $browseType
|
||||
* @param string $orderBy
|
||||
* @access public
|
||||
* @return string
|
||||
* @return array
|
||||
*/
|
||||
public function getStageTest(int $executionID = 0, int $productID = 0, string $browseType = 'all', string $orderBy = 'id_asc'): string
|
||||
public function getStageTest(int $executionID = 0, int $productID = 0, string $browseType = 'all', string $orderBy = 'id_asc'): array
|
||||
{
|
||||
$objects = $this->objectModel->getStage($executionID, $productID, $browseType, $orderBy);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
$title = '';
|
||||
foreach($objects as $object) $title .= ',' . $object->name;
|
||||
return $title;
|
||||
$titles = array();
|
||||
$products = array();
|
||||
foreach($objects as $object)
|
||||
{
|
||||
$titles[] = $object->name;
|
||||
$products[] = $object->product;
|
||||
}
|
||||
return array(implode(';', $titles), implode(';', $products));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,7 +107,7 @@ class programplanTest
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return implode(',', $objects);
|
||||
return implode(';', $objects);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -183,40 +188,47 @@ class programplanTest
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function createTest($param = array())
|
||||
public function createTest($param = array(), $projectID = 0, $productID = 0, $parentID = 0)
|
||||
{
|
||||
$_POST['planIDList'] = array('131', '221', '311', '401', '491', '581', '671');
|
||||
|
||||
global $tester;
|
||||
$plans = $tester->dao->select('*')->from(TABLE_PROJECT)->where('id')->in($_POST['planIDList'])->fetchAll();
|
||||
|
||||
|
||||
$_POST['names'] = array('阶段31', '阶段121', '阶段211', '阶段301', '阶段391', '阶段481', '阶段571', '', '', '', '', '');
|
||||
$date = date('Y-m-d');
|
||||
$_POST['names'] = array('阶段31', '阶段121', '阶段211', '阶段301', '阶段391', '阶段481', '阶段571');
|
||||
$_POST['PM'] = array('', '', '', '', '', '', '', '', '', '', '', '');
|
||||
$_POST['percents'] = array('0', '0', '0', '0', '0', '0', '0', '', '', '', '', '');
|
||||
$_POST['attributes'] = array('request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request');
|
||||
$_POST['acl'] = array('private', 'open', 'open', 'private', 'private', 'open', 'open', 'open', 'open', 'open', 'open', 'open');
|
||||
$_POST['milestone'] = array('0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');
|
||||
$_POST['begin'] = (isset($param['begin']) and isset($param['end'])) ? array($plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, '', '', '', '') : array($plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, '', '', '', '', '');
|
||||
$_POST['end'] = (isset($param['begin']) and isset($param['end'])) ? array($plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, '', '', '', '') : array($plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, '', '', '', '', '');
|
||||
$_POST['realBegan'] = array('', '', '', '', '', '', '', '', '', '', '', '');
|
||||
$_POST['realEnd'] = array('', '', '', '', '', '', '', '', '', '', '', '');
|
||||
|
||||
foreach($param as $field => $value)
|
||||
$plans = array();
|
||||
foreach($_POST['names'] as $i => $name)
|
||||
{
|
||||
if(count($param) == 1 or ($field != 'begin' and $field != 'end')) $_POST[$field] = $value;
|
||||
$plan = new stdclass();
|
||||
$plan->id = 0;
|
||||
$plan->type = 'stage';
|
||||
$plan->name = $name;
|
||||
$plan->parent = 1;
|
||||
$plan->PM = $_POST['PM'][$i];
|
||||
$plan->percent = $_POST['percents'][$i];
|
||||
$plan->attribute = $_POST['attributes'][$i];
|
||||
$plan->milestone = $_POST['milestone'][$i];
|
||||
$plan->begin = $date;
|
||||
$plan->end = $date;
|
||||
$plan->realBegan = null;
|
||||
$plan->realEnd = null;
|
||||
$plan->acl = $_POST['acl'][$i];
|
||||
|
||||
$plans[] = $plan;
|
||||
}
|
||||
|
||||
$objects = $this->objectModel->create(41, 0, 0);
|
||||
foreach($param as $field => $values)
|
||||
{
|
||||
foreach($values as $i => $value) $plans[$i]->{$field} = $value;
|
||||
}
|
||||
|
||||
$objects = $this->objectModel->create($plans, $projectID, $productID, $parentID);
|
||||
|
||||
unset($_POST);
|
||||
|
||||
if(dao::isError())
|
||||
{
|
||||
$error = dao::getError()['message'][0];
|
||||
$error = strpos($error, '所属项目的') > 0 ? preg_replace('/\d{4}-\d{2}-\d{2}/', '', $error) : $error;
|
||||
return $error;
|
||||
}
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
$objects = $tester->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq($plans[0]->parent)->andWhere('type')->eq('stage')->fetchAll();
|
||||
return count($objects);
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
include dirname(__FILE__, 5). '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 loadModel->getStageList()
|
||||
cid=1
|
||||
pid=1
|
||||
cid=0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5). '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
zdTable('project')->config('project')->gen(5);
|
||||
zdTable('projectproduct')->config('projectproduct')->gen(5);
|
||||
|
||||
global $tester;
|
||||
$tester->loadModel('programplan')->programplanTao;
|
||||
$tester->loadModel('programplan');
|
||||
$tester->programplan->app->user->admin = true;
|
||||
|
||||
$browseType = 'parent';
|
||||
$IDList = array(1, 2, 3, 4, 5, 100);
|
||||
|
||||
Reference in New Issue
Block a user