From 2e72d5724ba35bdbcf8e1cd1253bf30a50a576fa Mon Sep 17 00:00:00 2001 From: wangyidong Date: Fri, 1 Apr 2016 16:24:38 +0800 Subject: [PATCH] * finish task #2551. --- module/project/control.php | 25 ++++---- module/project/css/grouptask.css | 10 ++-- module/project/js/grouptask.js | 42 ++++++++++++++ module/project/lang/zh-cn.php | 23 ++++++-- module/project/view/grouptask.html.php | 79 ++++++++++++++++++++------ 5 files changed, 137 insertions(+), 42 deletions(-) create mode 100644 module/project/js/grouptask.js diff --git a/module/project/control.php b/module/project/control.php index d4d4236ca5..2ed148319a 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -226,8 +226,9 @@ class project extends control $this->view->position[] = $this->lang->project->task; /* Get tasks and group them. */ - $tasks = $this->loadModel('task')->getProjectTasks($projectID, $status = 'all', $modules = 0, $groupBy ? $groupBy : 'story'); - $groupBy = strtolower(str_replace('`', '', $groupBy)); + if(empty($groupBy))$groupBy = 'story'; + $tasks = $this->loadModel('task')->getProjectTasks($projectID, $status = 'all', $modules = 0, $groupBy); + $groupBy = str_replace('`', '', $groupBy); $taskLang = $this->lang->task; $groupByList = array(); $groupTasks = array(); @@ -236,12 +237,7 @@ class project extends control $users = $this->loadModel('user')->getPairs('noletter'); foreach($tasks as $task) { - if($groupBy == '') - { - $groupTasks[$task->story][] = $task; - $groupByList[$task->story] = $task->storyTitle; - } - elseif($groupBy == 'story') + if($groupBy == 'story') { $groupTasks[$task->story][] = $task; $groupByList[$task->story] = $task->storyTitle; @@ -250,19 +246,15 @@ class project extends control { $groupTasks[$taskLang->statusList[$task->status]][] = $task; } - elseif($groupBy == 'assignedto') + elseif($groupBy == 'assignedTo') { $groupTasks[$task->assignedToRealName][] = $task; } - elseif($groupBy == 'openedby') - { - $groupTasks[$users[$task->openedBy]][] = $task; - } - elseif($groupBy == 'finishedby') + elseif($groupBy == 'finishedBy') { $groupTasks[$users[$task->finishedBy]][] = $task; } - elseif($groupBy == 'closedby') + elseif($groupBy == 'closedBy') { $groupTasks[$users[$task->closedBy]][] = $task; } @@ -277,6 +269,7 @@ class project extends control } /* Assign. */ + $this->app->loadLang('tree'); $this->view->members = $this->project->getTeamMembers($projectID); $this->view->tasks = $groupTasks; $this->view->tabID = 'task'; @@ -286,6 +279,8 @@ class project extends control $this->view->orderBy = $groupBy; $this->view->projectID = $projectID; $this->view->users = $users; + $this->view->moduleID = 0; + $this->view->moduleName = $this->lang->tree->all; $this->display(); } diff --git a/module/project/css/grouptask.css b/module/project/css/grouptask.css index a1e96059ef..da594bda0e 100644 --- a/module/project/css/grouptask.css +++ b/module/project/css/grouptask.css @@ -1,6 +1,6 @@ -.table-borderless td.groupdivider, .groupdivider{border-bottom:1px solid #ccc} .highlight-warning {background: #FBF5C6!important} -.outer .table tr > td.group-name, .outer .table tr > td.group-name:first-child{padding-left: 30px;} -.group-title td {background: #f1f1f1!important; border-bottom: 1px solid #ddd!important} -.groupdivider > .text {color: #808080} -.groupdivider > .text strong {color: #333} +.group-title td {background: #f1f1f1!important; border-bottom: 1px solid #ccc!important} +tr.groupdivider td {background: #fff!important;} +.groupdivider .text {color: #808080} +.groupdivider .text strong {color: #333} +.groupby{background:#f1f1f1!important; border-right:1px solid #ddd;cursor: pointer;} diff --git a/module/project/js/grouptask.js b/module/project/js/grouptask.js new file mode 100644 index 0000000000..a2eeb6578b --- /dev/null +++ b/module/project/js/grouptask.js @@ -0,0 +1,42 @@ +$(function() +{ + setTimeout(function(){fixedTheadOfList('#groupTable')}, 100); + $(document).on('click', '.expandAll', function() + { + $('.expandAll').addClass('hidden'); + $('.collapseAll').removeClass('hidden'); + $('table#groupTable').find('tbody').each(function() + { + $(this).find('tr').addClass('hidden'); + $(this).find('tr.group-collapse').removeClass('hidden'); + }) + }); + $(document).on('click', '.collapseAll', function() + { + $('.collapseAll').addClass('hidden'); + $('.expandAll').removeClass('hidden'); + $('table#groupTable').find('tbody').each(function() + { + $(this).find('tr').removeClass('hidden'); + $(this).find('tr.group-collapse').addClass('hidden'); + }) + }); + $('.expandGroup').closest('.groupby').click(function() + { + $tbody = $(this).closest('tbody'); + $tbody.find('tr').addClass('hidden'); + $tbody.find('tr.group-collapse').removeClass('hidden'); + }); + $('.collapseGroup').click(function() + { + $tbody = $(this).closest('tbody'); + $tbody.find('tr').removeClass('hidden'); + $tbody.find('tr.group-collapse').addClass('hidden'); + }); +}) + +function setFilter(groupBy, setting) +{ + $.cookie('groupFilter_' + groupBy, setting, {expires:config.cookieLife, path:config.webRoot}); + location.href = removeAnchor(location.href); +} diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index d01d3483c8..ce813dd795 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -136,20 +136,30 @@ $lang->project->statusSelects['closed'] = '已关闭'; $lang->project->statusSelects['delayed'] = '已延期'; $lang->project->statusSelects['needconfirm'] = '需求变动'; $lang->project->statusSelects['cancel'] = '已取消'; + $lang->project->groups[''] = '分组查看'; $lang->project->groups['story'] = '需求分组'; $lang->project->groups['status'] = '状态分组'; $lang->project->groups['pri'] = '优先级分组'; -$lang->project->groups['openedby'] = '创建者分组'; $lang->project->groups['assignedTo'] = '指派给分组'; -$lang->project->groups['finishedby'] = '完成者分组'; -$lang->project->groups['closedby'] = '关闭者分组'; -$lang->project->groups['estimate'] = '预计分组'; -$lang->project->groups['consumed'] = '已消耗分组'; -$lang->project->groups['left'] = '剩余分组'; +$lang->project->groups['finishedBy'] = '完成者分组'; +$lang->project->groups['closedBy'] = '关闭者分组'; $lang->project->groups['type'] = '类型分组'; $lang->project->groups['deadline'] = '截止分组'; +$lang->project->groupFilter['story']['all'] = $lang->project->all; +$lang->project->groupFilter['story']['linked'] = '已关联需求'; +$lang->project->groupFilter['pri']['all'] = $lang->project->all; +$lang->project->groupFilter['pri']['setted'] = '已设置'; +$lang->project->groupFilter['assignedTo']['undone'] = '未完成'; +$lang->project->groupFilter['assignedTo']['all'] = $lang->project->all; +$lang->project->groupFilter['finishedBy']['all'] = $lang->project->all; +$lang->project->groupFilter['finishedBy']['done'] = '已完成'; +$lang->project->groupFilter['closedBy']['all'] = $lang->project->all; +$lang->project->groupFilter['closedBy']['closed'] = '已关闭'; +$lang->project->groupFilter['deadline']['all'] = $lang->project->all; +$lang->project->groupFilter['deadline']['setted'] = '已设置'; + $lang->project->byQuery = '搜索'; /* 查询条件列表。*/ @@ -165,6 +175,7 @@ $lang->project->stats = '可用工时%s工时
$lang->project->taskSummary = "本页共 %s 个任务,未开始%s,进行中%s,总预计%s工时,已消耗%s工时,剩余%s工时。"; $lang->project->memberHours = "%s共有 %s 个可用工时,"; $lang->project->groupSummary = "本组共 %s 个任务,未开始%s,进行中%s,总预计%s工时,已消耗%s工时,剩余%s工时。"; +$lang->project->noTimeSummary = "本组共 %s 个任务,未开始%s,进行中%s"; $lang->project->wbs = "分解任务"; $lang->project->batchWBS = "批量分解"; $lang->project->howToUpdateBurn = "帮助"; diff --git a/module/project/view/grouptask.html.php b/module/project/view/grouptask.html.php index 3241bba02c..58c68ee0a2 100644 --- a/module/project/view/grouptask.html.php +++ b/module/project/view/grouptask.html.php @@ -11,12 +11,27 @@ */ ?> - - +project->groupFilter[$groupBy])):?> +project->groupFilter[$groupBy]);?> + + + +
- + @@ -40,13 +55,8 @@ $totalConsumed = 0.0; $totalLeft = 0.0; ?> - $groupTasks):?> - - - - - + + - assignedTo == $app->user->account ? 'style=color:red' : '';?> + story)) continue; + if($groupBy == 'pri' and $currentFilter == 'setted' and empty($task->pri)) continue; + if($groupBy == 'assignedTo' and $currentFilter == 'undone' and $task->status != 'wait' and $task->status != 'doing') continue; + if($groupBy == 'finishedBy' and $currentFilter == 'done' and $task->status != 'done') continue; + if($groupBy == 'closedBy' and $currentFilter == 'closed' and $task->status != 'closed') continue; + if($groupBy == 'deadline' and $currentFilter == 'setted' and $task->deadline == '0000-00-00') continue; + } + ?> + assignedTo == $app->user->account ? "style='color:red'" : '';?> createLink('task','view',"taskID=$task->id"); ?> estimate; @@ -91,8 +116,12 @@ $groupSum = count($groupTasks); $taskSum += count($tasks); ?> - - + + + + @@ -108,14 +137,32 @@ project&taskid=$task->id", '', 'list', '', 'hiddenwin');?> + - - + + + + + + + + + + + + + +
+ " . $lang->task->$groupBy, '', "class='expandAll' data-action='expand'")?> + " . $lang->task->$groupBy, '', "class='collapseAll hidden' data-action='collapse'")?> + task->name;?> priAB;?> task->assignedTo;?>
+ " . $groupName, '', "class='expandGroup' data-action='expand' title='$groupName'");?> +  id . $lang->colon; if(!common::printLink('task', 'view', "task=$task->id", $task->name)) echo $task->name;?> task->priList, $task->pri, $task->pri)?>'>task->priList, $task->pri, $task->pri);?> >assignedToRealName;?>
+ +
- assignedTo])) printf($lang->project->memberHours, $users[$task->assignedTo], $members[$task->assignedTo]->totalHours);?> - project->groupSummary, $groupSum, $groupWait, $groupDoing, $groupEstimate, $groupConsumed, $groupLeft);?>
+ assignedTo])) printf($lang->project->memberHours, $users[$task->assignedTo], $members[$task->assignedTo]->totalHours);?> + project->noTimeSummary, $groupSum, $groupWait, $groupDoing);?>