* kanban: refactor getPlanKanban().
This commit is contained in:
+16
-47
@@ -712,10 +712,11 @@ class kanbanModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取看板所有数据。
|
||||
* Get kanban data.
|
||||
*
|
||||
* @param int $kanbanID
|
||||
* @param mixed $regionIDList
|
||||
* @param int $kanbanID
|
||||
* @param mixed $regionIDList
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -821,70 +822,40 @@ class kanbanModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取计划看板。
|
||||
* Get plan kanban.
|
||||
*
|
||||
* @param object $product
|
||||
* @param int $branchID
|
||||
* @param string $branchID
|
||||
* @param array $planGroup
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getPlanKanban($product, $branchID = 0, $planGroup = '')
|
||||
public function getPlanKanban(object $product, string $branchID = '0', array $planGroup = array()): array
|
||||
{
|
||||
$this->loadModel('branch');
|
||||
$this->loadModel('productplan');
|
||||
|
||||
$lanes = array();
|
||||
$columns = array();
|
||||
$branches = array();
|
||||
$colorIndex = 0;
|
||||
$laneOrder = 1;
|
||||
if($product->type == 'normal')
|
||||
{
|
||||
$branches = array('all' => $this->lang->productplan->allAB);
|
||||
}
|
||||
elseif($branchID == 'all')
|
||||
{
|
||||
$branches = $this->branch->getPairs($product->id, 'active');
|
||||
}
|
||||
elseif($branchID == BRANCH_MAIN)
|
||||
{
|
||||
$branches = array(BRANCH_MAIN => $this->lang->branch->main);
|
||||
}
|
||||
elseif($branchID)
|
||||
{
|
||||
foreach(explode(',', $branchID) as $id)
|
||||
{
|
||||
$branchName = $this->branch->getById($id);
|
||||
$branches[$id] = $branchName;
|
||||
}
|
||||
}
|
||||
$lanes = $columns = $kanbanData = $planList = $lanes = $columns = $columnCards = array();
|
||||
$colorIndex = 0;
|
||||
$laneOrder = 1;
|
||||
|
||||
$kanbanData = array();
|
||||
$planList = array();
|
||||
$lanes = array();
|
||||
$columns = array();
|
||||
$columnCards = array();
|
||||
$cardActions = array('view', 'createExecution', 'linkStory', 'linkBug', 'edit', 'start', 'finish', 'close', 'activate', 'delete');
|
||||
$branches = $this->kanbanTao->getBranchesForPlanKanban($product, $branchID);
|
||||
foreach($branches as $id => $name)
|
||||
{
|
||||
if($product->type != 'normal') $plans = isset($planGroup[$product->id][$id]) ? array_filter($planGroup[$product->id][$id]) : array();
|
||||
if($product->type == 'normal') $plans = $planGroup;
|
||||
|
||||
foreach($plans as $planID => $plan)
|
||||
foreach($plans as $plan)
|
||||
{
|
||||
if(empty($plan) or $plan->parent == -1) continue;
|
||||
$plan->isParent = false;
|
||||
|
||||
$item = array();
|
||||
$item['id'] = $plan->id;
|
||||
$item['name'] = $plan->id;
|
||||
$item['title'] = htmlspecialchars_decode($plan->title);
|
||||
$item['status'] = $plan->status;
|
||||
$item = array('id' => $plan->id, 'name' => $plan->id, 'title' => htmlspecialchars_decode($plan->title), 'status' => $plan->status);
|
||||
$item['statusLabel'] = zget($this->lang->productplan->statusList, $plan->status);
|
||||
$item['delay'] = helper::today() > $plan->end ? true : false;
|
||||
$item['desc'] = strip_tags(htmlspecialchars_decode($plan->desc));
|
||||
$item['dateLine'] = date('m-d', strtotime($plan->begin)) . ' ' . $this->lang->productplan->to . ' ' . date('m-d', strtotime($plan->end));
|
||||
$item['desc'] = strip_tags(htmlspecialchars_decode($plan->desc));
|
||||
$item['dateLine'] = date('m-d', strtotime($plan->begin)) . ' ' . $this->lang->productplan->to . ' ' . date('m-d', strtotime($plan->end));
|
||||
$item['actionList'] = array();
|
||||
foreach($cardActions as $action)
|
||||
{
|
||||
@@ -905,10 +876,8 @@ class kanbanModel extends model
|
||||
foreach($this->lang->kanban->defaultColumn as $columnType => $columnName) $columns[] = array('id' => $columnType, 'name' => $columnType, 'title' => $columnName);
|
||||
foreach($columns as $key => $column) $columns[$key]['cards'] = !empty($columnCards[$column['name']]) ? $columnCards[$column['name']] : 0;
|
||||
|
||||
$groupData['key'] = 'planKanban';
|
||||
$groupData['data']['lanes'] = $lanes;
|
||||
$groupData['data']['cols'] = $columns;
|
||||
$groupData['data']['items'] = $planList;
|
||||
$groupData['key'] = 'planKanban';
|
||||
$groupData['data'] = array('lanes' => $lanes, 'cols' => $columns, 'items' => $planList);
|
||||
$kanbanData[] = array('items' => array($groupData), 'key' => 'planKanban', 'heading' => array('title' => $this->lang->productplan->all . ' ' . count($planList)));
|
||||
return $kanbanData;
|
||||
}
|
||||
|
||||
@@ -372,4 +372,42 @@ class kanbanTao extends kanbanModel
|
||||
->andWhere('`column`')->eq($colID)
|
||||
->exec();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取产品计划看板的分支
|
||||
* Get branches for product plan kanban.
|
||||
*
|
||||
* @param object $product
|
||||
* @param string $branchID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
protected function getBranchesForPlanKanban(object $product, string $branchID): array
|
||||
{
|
||||
$this->loadModel('branch');
|
||||
|
||||
$branches = array();
|
||||
if($product->type == 'normal')
|
||||
{
|
||||
$branches = array('all' => $this->lang->productplan->allAB);
|
||||
}
|
||||
elseif($branchID == 'all')
|
||||
{
|
||||
$branches = $this->branch->getPairs($product->id, 'active');
|
||||
}
|
||||
elseif($branchID == BRANCH_MAIN)
|
||||
{
|
||||
$branches = array(BRANCH_MAIN => $this->lang->branch->main);
|
||||
}
|
||||
elseif($branchID)
|
||||
{
|
||||
foreach(explode(',', $branchID) as $id)
|
||||
{
|
||||
$branchName = $this->branch->getById($id);
|
||||
$branches[$id] = $branchName;
|
||||
}
|
||||
}
|
||||
|
||||
return $branches;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,23 +318,19 @@ class kanbanTest
|
||||
*/
|
||||
public function getPlanKanbanTest($productID, $branchID = 0)
|
||||
{
|
||||
global $tester;
|
||||
global $tester, $app;
|
||||
$app->rawModule = 'kanban';
|
||||
|
||||
$product = $tester->loadModel('product')->getByID($productID);
|
||||
|
||||
$tester->loadModel('productplan');
|
||||
$planGroup = $product->type == 'normal' ? $tester->productplan->getList($product->id, 0, 'all', '', 'begin_desc', 'skipparent') : $tester->productplan->getGroupByProduct($product->id, 'skipParent', '', 'begin_desc');
|
||||
$planGroup = $product->type == 'normal' ? $tester->productplan->getList($product->id, '0', 'all', null, 'begin_desc', 'skipparent') : $tester->productplan->getGroupByProduct((array)$product->id, 'skipParent', '', 'begin_desc');
|
||||
|
||||
$objects = $this->objectModel->getPlanKanban($product, $branchID, $planGroup);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
$laneCount = 0;
|
||||
$cardCount = 0;
|
||||
foreach($objects->lanes as $lane)
|
||||
{
|
||||
foreach($lane->items as $item) $cardCount += count($item);
|
||||
}
|
||||
return 'lanes:' . count($objects->lanes) . ', cards:' . $cardCount;
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,31 +4,41 @@ include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
zdTable('product')->gen(50);
|
||||
zdTable('productplan')->gen(50);
|
||||
zdTable('branch')->gen(50);
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getPlanKanban();
|
||||
timeout=0
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
测试获取产品1的计划看板 >> lanes:1, cards:3
|
||||
测试获取产品2的计划看板 >> lanes:1, cards:3
|
||||
测试获取产品3的计划看板 >> lanes:1, cards:3
|
||||
测试获取产品4的计划看板 >> lanes:3, cards:2
|
||||
测试获取产品4 分支1的计划看板 >> lanes:1, cards:1
|
||||
测试获取产品5的计划看板 >> lanes:3, cards:2
|
||||
测试获取产品5 分支3的计划看板 >> lanes:1, cards:1
|
||||
- 测试获取产品1的计划看板
|
||||
- 第0条的name属性 @all
|
||||
- 第0条的title属性 @所有
|
||||
- 测试获取产品2的计划看板
|
||||
- 第1条的name属性 @5
|
||||
- 第1条的title属性 @1.1
|
||||
- 测试获取产品3的计划看板
|
||||
- 第0条的name属性 @wait
|
||||
- 第0条的title属性 @未开始
|
||||
- 测试获取产品1的计划看板,传入分支
|
||||
- 第0条的name属性 @wait
|
||||
- 第0条的title属性 @未开始
|
||||
- 测试获取产品2的计划看板,传入分支
|
||||
- 第0条的name属性 @wait
|
||||
- 第0条的title属性 @未开始
|
||||
|
||||
*/
|
||||
|
||||
$productIDList = array('1', '2', '3', '41', '42');
|
||||
$productIDList = array('1', '2', '3');
|
||||
$branchIDList = array('0', '1', '3');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getPlanKanbanTest($productIDList[0])) && p() && e('lanes:1, cards:3'); // 测试获取产品1的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[1])) && p() && e('lanes:1, cards:3'); // 测试获取产品2的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[2])) && p() && e('lanes:1, cards:3'); // 测试获取产品3的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[3])) && p() && e('lanes:3, cards:2'); // 测试获取产品4的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[3], $branchIDList[1])) && p() && e('lanes:1, cards:1'); // 测试获取产品4 分支1的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[4])) && p() && e('lanes:3, cards:2'); // 测试获取产品5的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[4], $branchIDList[2])) && p() && e('lanes:1, cards:1'); // 测试获取产品5 分支3的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[0])[0]['items'][0]['data']['lanes']) && p('0:name,title') && e('all,所有'); // 测试获取产品1的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[1])[0]['items'][0]['data']['items']['all']['wait']) && p('1:name,title') && e('5,1.1'); // 测试获取产品2的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[2])[0]['items'][0]['data']['cols']) && p('0:name,title') && e('wait,未开始'); // 测试获取产品3的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[0], $branchIDList[1])[0]['items'][0]['data']['cols']) && p('0:name,title') && e('wait,未开始'); // 测试获取产品1的计划看板,传入分支
|
||||
r($kanban->getPlanKanbanTest($productIDList[1], $branchIDList[2])[0]['items'][0]['data']['cols']) && p('0:name,title') && e('wait,未开始'); // 测试获取产品2的计划看板,传入分支
|
||||
Reference in New Issue
Block a user