* kanban: refactor getPlanKanban().

This commit is contained in:
sunguangming
2023-12-18 11:19:13 +08:00
parent 2e4a8b8385
commit c3fd49a5e0
4 changed files with 85 additions and 72 deletions
+16 -47
View File
@@ -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;
}
+38
View File
@@ -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;
}
}
+5 -9
View File
@@ -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;
}
/**
+26 -16
View File
@@ -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的计划看板,传入分支