From 62c8bb5b03c3c19d5bbbfdfcee7967fa7d713338 Mon Sep 17 00:00:00 2001 From: leiyong <1549684884@qq.com> Date: Mon, 19 Oct 2020 13:30:44 +0800 Subject: [PATCH] * Adjusting the code of the personnel module. --- module/personnel/control.php | 1 - module/personnel/lang/de.php | 21 +++++ module/personnel/lang/en.php | 37 ++++---- module/personnel/lang/fr.php | 21 +++++ module/personnel/lang/vi.php | 21 +++++ module/personnel/lang/zh-cn.php | 37 ++++---- module/personnel/lang/zh-tw.php | 37 ++++---- module/personnel/model.php | 106 ++++++++++++--------- module/personnel/view/putinto.html.php | 124 ++++++++++++++----------- module/programplan/model.php | 2 +- 10 files changed, 254 insertions(+), 153 deletions(-) create mode 100644 module/personnel/lang/de.php create mode 100644 module/personnel/lang/fr.php create mode 100644 module/personnel/lang/vi.php diff --git a/module/personnel/control.php b/module/personnel/control.php index 6b75be1b9d..217ac5006a 100644 --- a/module/personnel/control.php +++ b/module/personnel/control.php @@ -84,7 +84,6 @@ class personnel extends control $this->program->setPGMViewMenu($programID); $inputPersonnel = $this->personnel->getInputPersonnel($programID, $browseType, $orderBy); -echo array_keys($inputPersonnel); $this->view->title = $this->lang->personnel->putInto; $this->view->position[] = $this->lang->personnel->putInto; diff --git a/module/personnel/lang/de.php b/module/personnel/lang/de.php new file mode 100644 index 0000000000..f3384c97e3 --- /dev/null +++ b/module/personnel/lang/de.php @@ -0,0 +1,21 @@ +personnel->accessible = 'List of accessible'; +$lang->personnel->putInto = 'Input personnel list'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Job'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'Name'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data.'; + +$lang->personnel->inputLabel['all'] = 'All'; +$lang->personnel->inputLabel['noempty'] = 'No empty'; +$lang->personnel->inputLabel['parent'] = 'Direct project'; +$lang->personnel->inputLabel['scrum'] = 'Scrum project'; +$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; diff --git a/module/personnel/lang/en.php b/module/personnel/lang/en.php index 0dcbc7a704..f3384c97e3 100644 --- a/module/personnel/lang/en.php +++ b/module/personnel/lang/en.php @@ -1,20 +1,21 @@ personnel->accessible = '可访问人员列表'; -$lang->personnel->putInto = '投入人员列表'; -$lang->personnel->department = '部门'; -$lang->personnel->realName = '真实姓名'; -$lang->personnel->userName = '用户名'; -$lang->personnel->job = '岗位'; -$lang->personnel->genders = '性别'; -$lang->personnel->project = '项目'; -$lang->personnel->sprint = '迭代/阶段'; -$lang->personnel->user = '用户'; -$lang->personnel->role = '角色'; -$lang->personnel->search = '搜索'; -$lang->personnel->program = '项目集'; -$lang->personnel->emptyTip = '暂无'; - -$lang->personnel->inputLabel['all'] = '全部'; -$lang->personnel->inputLabel['parent'] = '直属项目'; -$lang->personnel->inputLabel['exist'] = '非空项目'; +$lang->personnel->accessible = 'List of accessible'; +$lang->personnel->putInto = 'Input personnel list'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Job'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'Name'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data.'; +$lang->personnel->inputLabel['all'] = 'All'; +$lang->personnel->inputLabel['noempty'] = 'No empty'; +$lang->personnel->inputLabel['parent'] = 'Direct project'; +$lang->personnel->inputLabel['scrum'] = 'Scrum project'; +$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; diff --git a/module/personnel/lang/fr.php b/module/personnel/lang/fr.php new file mode 100644 index 0000000000..f3384c97e3 --- /dev/null +++ b/module/personnel/lang/fr.php @@ -0,0 +1,21 @@ +personnel->accessible = 'List of accessible'; +$lang->personnel->putInto = 'Input personnel list'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Job'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'Name'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data.'; + +$lang->personnel->inputLabel['all'] = 'All'; +$lang->personnel->inputLabel['noempty'] = 'No empty'; +$lang->personnel->inputLabel['parent'] = 'Direct project'; +$lang->personnel->inputLabel['scrum'] = 'Scrum project'; +$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; diff --git a/module/personnel/lang/vi.php b/module/personnel/lang/vi.php new file mode 100644 index 0000000000..f3384c97e3 --- /dev/null +++ b/module/personnel/lang/vi.php @@ -0,0 +1,21 @@ +personnel->accessible = 'List of accessible'; +$lang->personnel->putInto = 'Input personnel list'; +$lang->personnel->department = 'Department'; +$lang->personnel->realName = 'Name'; +$lang->personnel->userName = 'Account'; +$lang->personnel->job = 'Job'; +$lang->personnel->genders = 'Gender'; +$lang->personnel->project = 'Project'; +$lang->personnel->sprint = 'Sprint/Stage'; +$lang->personnel->user = 'Name'; +$lang->personnel->role = 'Role'; +$lang->personnel->search = 'Search'; +$lang->personnel->program = 'Program'; +$lang->personnel->emptyTip = 'No data.'; + +$lang->personnel->inputLabel['all'] = 'All'; +$lang->personnel->inputLabel['noempty'] = 'No empty'; +$lang->personnel->inputLabel['parent'] = 'Direct project'; +$lang->personnel->inputLabel['scrum'] = 'Scrum project'; +$lang->personnel->inputLabel['waterfall'] = 'Waterfall project'; diff --git a/module/personnel/lang/zh-cn.php b/module/personnel/lang/zh-cn.php index 0dcbc7a704..347714f2d2 100644 --- a/module/personnel/lang/zh-cn.php +++ b/module/personnel/lang/zh-cn.php @@ -1,20 +1,23 @@ personnel->accessible = '可访问人员列表'; -$lang->personnel->putInto = '投入人员列表'; -$lang->personnel->department = '部门'; -$lang->personnel->realName = '真实姓名'; -$lang->personnel->userName = '用户名'; -$lang->personnel->job = '岗位'; -$lang->personnel->genders = '性别'; -$lang->personnel->project = '项目'; -$lang->personnel->sprint = '迭代/阶段'; -$lang->personnel->user = '用户'; -$lang->personnel->role = '角色'; -$lang->personnel->search = '搜索'; -$lang->personnel->program = '项目集'; -$lang->personnel->emptyTip = '暂无'; +$lang->personnel->accessible = '可访问人员列表'; +$lang->personnel->putInto = '投入人员列表'; +$lang->personnel->department = '部门'; +$lang->personnel->realName = '真实姓名'; +$lang->personnel->userName = '用户名'; +$lang->personnel->job = '岗位'; +$lang->personnel->genders = '性别'; +$lang->personnel->project = '项目'; +$lang->personnel->sprint = '迭代/阶段'; +$lang->personnel->user = '用户'; +$lang->personnel->role = '角色'; +$lang->personnel->search = '搜索'; +$lang->personnel->program = '项目集'; +$lang->personnel->emptyTip = '暂无'; +$lang->personnel->childrenStage = '子阶段'; -$lang->personnel->inputLabel['all'] = '全部'; -$lang->personnel->inputLabel['parent'] = '直属项目'; -$lang->personnel->inputLabel['exist'] = '非空项目'; +$lang->personnel->inputLabel['all'] = '全部'; +$lang->personnel->inputLabel['noempty'] = '非空项目'; +$lang->personnel->inputLabel['parent'] = '直属项目'; +$lang->personnel->inputLabel['scrum'] = 'Scrum项目'; +$lang->personnel->inputLabel['waterfall'] = '瀑布项目'; diff --git a/module/personnel/lang/zh-tw.php b/module/personnel/lang/zh-tw.php index 0bbcf09d07..0653ae87d7 100644 --- a/module/personnel/lang/zh-tw.php +++ b/module/personnel/lang/zh-tw.php @@ -1,20 +1,23 @@ personnel->accessible = '可訪問人員列表'; -$lang->personnel->putInto = '投入人員列表'; -$lang->personnel->department = '部門'; -$lang->personnel->realName = '真實姓名'; -$lang->personnel->userName = '用戶名'; -$lang->personnel->job = '崗位'; -$lang->personnel->genders = '性別'; -$lang->personnel->project = '項目'; -$lang->personnel->sprint = '迭代/階段'; -$lang->personnel->user = '用戶'; -$lang->personnel->role = '角色'; -$lang->personnel->search = '搜索'; -$lang->personnel->program = '項目集'; -$lang->personnel->emptyTip = '暫無'; +$lang->personnel->accessible = '可訪問人員列表'; +$lang->personnel->putInto = '投入人員列表'; +$lang->personnel->department = '部門'; +$lang->personnel->realName = '真實姓名'; +$lang->personnel->userName = '用戶名'; +$lang->personnel->job = '崗位'; +$lang->personnel->genders = '性別'; +$lang->personnel->project = '項目'; +$lang->personnel->sprint = '迭代/階段'; +$lang->personnel->user = '用戶'; +$lang->personnel->role = '角色'; +$lang->personnel->search = '搜索'; +$lang->personnel->program = '項目集'; +$lang->personnel->emptyTip = '暫無'; +$lang->personnel->childrenStage = '子階段'; -$lang->personnel->inputLabel['all'] = '全部'; -$lang->personnel->inputLabel['parent'] = '直屬項目'; -$lang->personnel->inputLabel['exist'] = '非空項目'; +$lang->personnel->inputLabel['all'] = '全部'; +$lang->personnel->inputLabel['noempty'] = '非空項目'; +$lang->personnel->inputLabel['parent'] = '直屬項目'; +$lang->personnel->inputLabel['scrum'] = 'Scrum項目'; +$lang->personnel->inputLabel['waterfall'] = '瀑布項目'; diff --git a/module/personnel/model.php b/module/personnel/model.php index fb06de8f4a..00d8d76d1b 100644 --- a/module/personnel/model.php +++ b/module/personnel/model.php @@ -66,18 +66,22 @@ class personnelModel extends model /* Get all projects under the current program. */ $projects = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) ->where('type')->eq('project') - ->beginIF($browseType != 'parent')->andWhere('path')->like("%,{$programID},%")->fi() + ->andWhere('path')->like("%,$programID,%") + ->beginIF($browseType == 'scrum')->andWhere('model')->eq('scrum')->fi() + ->beginIF($browseType == 'waterfall')->andWhere('model')->eq('waterfall')->fi() ->beginIF($browseType == 'parent')->andWhere('parent')->eq($programID)->fi() ->andWhere('deleted')->eq('0') ->orderBy($orderBy) ->fetchAll('id'); + $personnelList['projects'] = $projects; if(empty($projects)) return $personnelList; $teams = $this->getTeams($projects); - $personnelList['stages'] = $teams['stages']; - $personnelList['sprints'] = $teams['sprints']; - $personnelList['teams'] = $teams['teams']; + $personnelList['sprintAndStage'] = $teams['sprintAndStage']; + $personnelList['childrenStage'] = $teams['childrenStage']; + $personnelList['teams'] = $teams['teams']; + $personnelList['objectRows'] = $teams['objectRows']; /* Get the program name for each level. */ $programNameList = $this->getProgramPairs(); @@ -90,7 +94,7 @@ class personnelModel extends model foreach($path as $program) { if($program == $id) continue; - $programName .= '/'. $programNameList[$program]; + $programName .= '/' . $programNameList[$program]; } $personnelList['projects'][$id]->programName = $programName; } @@ -101,60 +105,76 @@ class personnelModel extends model /** * Get team members for projects, stage, sprints. * - * @param string $projects + * @param object $projects * @access public - * @return object + * @return array */ public function getTeams($projects) { - $sprintParent = array(); - $stageParent = array(); - foreach($projects as $project) - { - $project->model == 'scrum' ? $sprintParent[] = $project->id : $stageParent[] = $project->id; - } - - $sprints = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) - ->where('type')->eq('sprint') - ->andWhere('parent')->in($sprintParent) + /* Get all sprints and iterations under the project. */ + $projectKeys = array_keys($projects); + $projectObjet = $this->dao->select('id,project,model,type,parent,path,grade,name')->from(TABLE_PROJECT) + ->where('project')->in($projectKeys) ->andWhere('deleted')->eq('0') - ->fetchGroup('parent', 'id'); + ->orderBy('id_desc') + ->fetchAll(); - $stages = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) - ->where('type')->eq('stage') - ->andWhere('parent')->in($stageParent) - ->andWhere('deleted')->eq('0') - ->fetchGroup('parent', 'id'); - - $rootIDList = array(); - foreach($stages as $stage) + /* Get the team's root ID, separate the parent-child iteration. */ + $rootIDList = array(); + $sprintAndStage = array(); + $childrenStage = array(); + foreach($projectObjet as $id => $object) { - foreach($stage as $stageFields) + if($object->grade == 1) { - $stageFields->children = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT) - ->where('type')->eq('stage') - ->andWhere('grade')->eq('2') - ->andWhere('path')->like(",$stageFields->id,%") - ->andWhere('deleted')->eq('0') - ->fetchAll('id'); - $childrenIDList = array_keys($stageFields->children); - $rootIDList = array_merge($childrenIDList, $rootIDList); - $rootIDList[] = $stageFields->id; + $sprintAndStage[$object->project][] = $object; } - } - - foreach($sprints as $sprint) - { - foreach($sprint as $id => $data) $rootIDList[] = $id; + else + { + $childrenStage[$object->parent][] = $object; + } + $rootIDList[] = $object->id; } $teams = $this->dao->select('t1.id,t1.root,t1.type,t1.role,t1.account,t2.realname')->from(TABLE_TEAM)->alias('t1') - ->leftJoin(TABLE_USER)->alias('t2')->on('t1.root=t2.id') + ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account') ->where('t1.root')->in($rootIDList) ->andWhere('t1.type')->in('stage,sprint') ->fetchGroup('root', 'id'); - return array('sprints' => $sprints, 'stages' => $stages, 'teams' => $teams); + /* Calculate the number of cross rows for iterations and sprints. */ + $objectRows = array(); + foreach($projects as $project) + { + $objectRows[$project->id] = isset($sprintAndStage[$project->id]) ? count($sprintAndStage[$project->id]) : 1; + if(!isset($sprintAndStage[$project->id])) continue; + foreach($sprintAndStage[$project->id] as $object) + { + $objectRows[$object->id] = 1; + if($object->type == 'sprint') + { + $objectRows[$object->id] = isset($teams[$object->id]) ? count($teams[$object->id]) + 1 : 1; + $objectRows[$project->id] += isset($teams[$object->id]) ? count($teams[$object->id]) + 1 : 0;; + } + elseif($object->type == 'stage' && isset($childrenStage[$object->id])) + { + $objectRows[$object->id] += count($childrenStage[$object->id]); + foreach($childrenStage[$object->id] as $stage) + { + $objectRows[$stage->id] = isset($teams[$stage->id]) ? count($teams[$stage->id]) + 1 : 1; + $objectRows[$object->id] += isset($teams[$stage->id]) ? count($teams[$stage->id]) : 0; + $objectRows[$project->id] += $objectRows[$stage->id]; + } + } + else + { + $objectRows[$object->id] = isset($teams[$object->id]) ? count($teams[$object->id]) + 1 : 1; + $objectRows[$project->id] += $objectRows[$object->id]; + } + } + } + + return array('sprintAndStage' => $sprintAndStage, 'childrenStage' => $childrenStage, 'teams' => $teams, 'objectRows' => $objectRows); } /** diff --git a/module/personnel/view/putinto.html.php b/module/personnel/view/putinto.html.php index 8a6efd2d97..5380b3eca8 100644 --- a/module/personnel/view/putinto.html.php +++ b/module/personnel/view/putinto.html.php @@ -30,87 +30,99 @@
+ + + + - id]) ? count($inputPersonnel['sprints'][$project->id]) : 0; - $stageRow = isset($inputPersonnel['stages'][$project->id]) ? count($inputPersonnel['stages'][$project->id]) : 0; - if($browseType == 'exist' && $sprintRow == 0 && $stageRow == 0) continue; // If the stage or sprint is empty, skip it. - - $teamMemberRow = 0; - if($sprintRow > 0) - { - foreach($inputPersonnel['sprints'][$project->id] as $sprint) - { - $teamMemberRow += isset($inputPersonnel['teams'][$sprint->id]) ? count($inputPersonnel['teams'][$sprint->id]) : 0; - } - } - if($stageRow > 0) - { - foreach($inputPersonnel['stages'][$project->id] as $stages) - { - $teamMemberRow += isset($inputPersonnel['teams'][$stages->id]) ? count($inputPersonnel['teams'][$stages->id]) : 0; - } - } - $projectRow = $sprintRow + $stageRow + $teamMemberRow; - ?> - - - + id];?> + + + + + + + - 0):;?> - id] as $sprint):?> - id]) ? $inputPersonnel['teams'][$sprint->id] : 0;?> + + id])):;?> + id] as $object):?> + id];?> - + + + + + + - - id] as $team):?> - - - - - + + type == 'sprint' && $objectRow > 1):?> + id] as $team):?> + + + + + + + + + + + type == 'stage' && $object->grade == 1):?> + id])):?> + id] as $stage):?> + + id];?> + + + + + + + 1):?> + id] as $team):?> + + + + + + + + + id])):?> + id] as $team):?> + + + + + + + + + + - - 0):?> - id] as $stages):?> - id]) ? $inputPersonnel['teams'][$stages->id] : 0;?> - - - - - - - id] as $team):?> - - - - - - - - -
personnel->program;?> personnel->project);?> personnel->sprint;?>personnel->childrenStage;?> personnel->user;?> personnel->role;?>
programName;?>name;?>programName;?>name;?>
name;?>name;?>
realname;?>role;?>
realname;?>role;?>
name;?>
realname;?>role;?>
realname;?>role;?>
name;?>
realname;?>role;?>
diff --git a/module/programplan/model.php b/module/programplan/model.php index 03d608722a..d68f999e98 100644 --- a/module/programplan/model.php +++ b/module/programplan/model.php @@ -71,7 +71,7 @@ class programplanModel extends model $plans = $this->dao->select('*')->from(TABLE_PROJECT) ->where('type')->eq('stage') - ->beginIF($browseType == 'all')->andWhere('path')->like(",$programID,%")->fi() + ->beginIF($browseType == 'all')->andWhere('project')->eq($programID)->fi() ->beginIF($browseType == 'parent')->andWhere('parent')->eq($programID)->fi() ->beginIF($browseType == 'children')->andWhere('parent')->eq($planID)->fi() ->beginIF($productID)->andWhere('id')->in($projects)->fi()