diff --git a/db/update21.6.sql b/db/update21.6.sql new file mode 100644 index 0000000000..22ecc60268 --- /dev/null +++ b/db/update21.6.sql @@ -0,0 +1,2 @@ +ALTER TABLE `zt_relationoftasks` ADD COLUMN `project` mediumint(8) unsigned NOT NULL DEFAULT 0 AFTER `id`; +ALTER TABLE `zt_relationoftasks` MODIFY `execution` char(30) NOT NULL DEFAULT '' AFTER `project`; diff --git a/lib/zin/wg/backbtn/v1.php b/lib/zin/wg/backbtn/v1.php index 6a451e756a..5b20fca7ac 100644 --- a/lib/zin/wg/backbtn/v1.php +++ b/lib/zin/wg/backbtn/v1.php @@ -74,7 +74,7 @@ class backBtn extends btn 'zanode' => 'zanode-browse,zanode-view', 'zahost' => 'zahost-browse,zahost-view', 'stakeholder' => 'stakeholder-browse,program-stakeholder', - 'execution' => 'execution-story,execution-team,execution-index,execution->view,project-execution,execution-all,project-index,user-execution,execution-relation', + 'execution' => 'execution-story,execution-team,execution-index,execution->view,project-execution,execution-all,project-index,user-execution,execution-relation,programplan-relation', 'ai' => 'ai-models', 'api' => 'api-index', 'demand' => 'demand-browse,demand-view,my-work,my-contribute,feedback-adminview,feedback-admin,my-index,demandpool-track,product-dynamic', diff --git a/module/group/lang/de.php b/module/group/lang/de.php index e23baa9c0d..c5242f8351 100644 --- a/module/group/lang/de.php +++ b/module/group/lang/de.php @@ -525,6 +525,7 @@ $lang->group->package->deleteProjectRelease = 'Delete Project Release'; $lang->group->package->importProjectRelease = 'Import Project Release'; $lang->group->package->projectReleaseNotify = 'Project Release Notify'; $lang->group->package->gantt = 'Gantt'; +$lang->group->package->projectRelation = 'Project Relation'; $lang->group->package->executionRelation = 'Execution Relation'; $lang->group->package->browseBuild = 'Browse Build'; $lang->group->package->browseExecutionStory = 'Browse Execution Story'; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index 7358762bd9..0077e8d7b3 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -525,6 +525,7 @@ $lang->group->package->deleteProjectRelease = 'Delete Project Release'; $lang->group->package->importProjectRelease = 'Import Project Release'; $lang->group->package->projectReleaseNotify = 'Project Release Notify'; $lang->group->package->gantt = 'Gantt'; +$lang->group->package->projectRelation = 'Project Relation'; $lang->group->package->executionRelation = 'Execution Relation'; $lang->group->package->browseBuild = 'Browse Build'; $lang->group->package->browseExecutionStory = 'Browse Execution Story'; diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php index 7e454bb8ac..8b10db5e55 100644 --- a/module/group/lang/fr.php +++ b/module/group/lang/fr.php @@ -525,6 +525,7 @@ $lang->group->package->deleteProjectRelease = 'Delete Project Release'; $lang->group->package->importProjectRelease = 'Import Project Release'; $lang->group->package->projectReleaseNotify = 'Project Release Notify'; $lang->group->package->gantt = 'Gantt'; +$lang->group->package->projectRelation = 'Project Relation'; $lang->group->package->executionRelation = 'Execution Relation'; $lang->group->package->browseBuild = 'Browse Build'; $lang->group->package->browseExecutionStory = 'Browse Execution Story'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index 7ecf353b7d..91b990594b 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -525,6 +525,7 @@ $lang->group->package->deleteProjectRelease = '删除项目发布'; $lang->group->package->importProjectRelease = '导入导出项目发布'; $lang->group->package->projectReleaseNotify = '项目发布通知'; $lang->group->package->gantt = '阶段甘特图'; +$lang->group->package->projectRelation = '维护任务关系'; $lang->group->package->executionRelation = '维护任务关系'; $lang->group->package->browseBuild = '浏览构建'; $lang->group->package->browseExecutionStory = '浏览执行研发需求'; diff --git a/module/group/packagemanager.php b/module/group/packagemanager.php index 6451aed510..cd86ce98f9 100644 --- a/module/group/packagemanager.php +++ b/module/group/packagemanager.php @@ -3338,7 +3338,17 @@ $config->group->package->gantt->subset = 'programplan'; $config->group->package->gantt->privs = array(); $config->group->package->gantt->privs['programplan-browse'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 15, 'depend' => array('project-index'), 'recommend' => array('programplan-ganttEdit')); $config->group->package->gantt->privs['programplan-ganttEdit'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 20, 'depend' => array('programplan-browse'), 'recommend' => array()); -$config->group->package->gantt->privs['programplan-relation'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 20, 'depend' => array('programplan-browse'), 'recommend' => array()); + +$config->group->package->projectRelation = new stdclass(); +$config->group->package->projectRelation->order = 10; +$config->group->package->projectRelation->subset = 'programplan'; +$config->group->package->projectRelation->privs = array(); +$config->group->package->projectRelation->privs['programplan-relation'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 1, 'depend' => array('programplan-browse'), 'recommend' => array('programplan-createrelation', 'programplan-editrelation', 'programplan-batcheditrelation', 'programplan-deleterelation', 'programplan-batchdeleterelation')); +$config->group->package->projectRelation->privs['programplan-createrelation'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 2, 'depend' => array('programplan-browse', 'programplan-relation'), 'recommend' => array()); +$config->group->package->projectRelation->privs['programplan-editrelation'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 3, 'depend' => array('programplan-browse', 'programplan-relation'), 'recommend' => array()); +$config->group->package->projectRelation->privs['programplan-batcheditrelation'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 4, 'depend' => array('programplan-browse', 'programplan-relation'), 'recommend' => array()); +$config->group->package->projectRelation->privs['programplan-deleterelation'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 5, 'depend' => array('programplan-browse', 'programplan-relation'), 'recommend' => array()); +$config->group->package->projectRelation->privs['programplan-batchdeleterelation'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 6, 'depend' => array('programplan-browse', 'programplan-relation'), 'recommend' => array()); $config->group->package->executionRelation = new stdclass(); $config->group->package->executionRelation->order = 10; diff --git a/module/programplan/control.php b/module/programplan/control.php index dcdbff7bdf..1dcd69db1e 100644 --- a/module/programplan/control.php +++ b/module/programplan/control.php @@ -310,7 +310,7 @@ class programplan extends control } /** - * 展示项目的任务关系列表。 + * 项目下维护任务关系。 * Show relation of project. * * @param int $projectID @@ -324,4 +324,74 @@ class programplan extends control { echo $this->fetch('execution', 'relation', "executionID=$projectID&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID"); } + + /** + * 项目下创建任务关系。 + * Create relation of project. + * + * @param int $projectID + * @access public + * @return void + */ + public function createRelation(int $projectID = 0) + { + echo $this->fetch('execution', 'createRelation', "executionID=$projectID"); + } + + /** + * 项目下编辑任务关系。 + * Edit relation of project. + * + * @param int $relationID + * @param int $projectID + * @access public + * @return void + */ + public function editRelation(int $relationID, int $projectID = 0) + { + echo $this->fetch('execution', 'editRelation', "relationID=$relationID&projectID=$projectID&executionID=0"); + } + + /** + * 项目下批量编辑任务关系。 + * Batch edit relations of project. + * + * @param int $projectID + * @access public + * @return void + */ + public function batchEditRelation(int $projectID = 0) + { + echo $this->fetch('execution', 'batchEditRelation', "projectID=$projectID&executionID=0"); + } + + /** + * 项目下删除任务关系。 + * Delete relation of project. + * + * @param int $id + * @param int $projectID + * @access public + * @return void + */ + public function deleteRelation(int $relationID, int $projectID) + { + $this->loadModel('execution')->deleteRelation($relationID); + return $this->sendSuccess(array('load' => inlink('relation', "project=$projectID"))); + } + + /** + * 项目下批量删除任务关系。 + * Batch delete relations of project. + * + * @param int $executionID + * @access public + * @return void + */ + public function batchDeleteRelation(int $projectID) + { + $this->loadModel('execution'); + foreach($this->post->relationIdList as $relationID) $this->execution->deleteRelation($relationID); + return $this->sendSuccess(array('load' => inlink('relation', "projectID=$projectID"))); + } } diff --git a/module/programplan/lang/de.php b/module/programplan/lang/de.php index 52875037a8..4c7f7122ad 100644 --- a/module/programplan/lang/de.php +++ b/module/programplan/lang/de.php @@ -73,7 +73,13 @@ $lang->programplan->wait = 'Wait'; $lang->programplan->enabled = 'Enabling Stage'; $lang->programplan->point = 'Review Point'; $lang->programplan->progress = 'Progress'; -$lang->programplan->setTaskRelation = 'Manage Relation'; + +$lang->programplan->setTaskRelation = 'Manage Task Relation'; +$lang->programplan->createRelation = 'Create Task Relation'; +$lang->programplan->editRelation = 'Manage Task Relation'; +$lang->programplan->batchEditRelation = 'Batch Manage Task Relation'; +$lang->programplan->deleteRelation = 'Delete Relation'; +$lang->programplan->batchDeleteRelation = 'Batch Delete Relation'; $lang->programplan->errorBegin = "{$lang->projectCommon} begin date: %s, begin date should be >= {$lang->projectCommon} begin date."; $lang->programplan->errorEnd = "{$lang->projectCommon} end date: %s, end date should be <= {$lang->projectCommon} end date."; diff --git a/module/programplan/lang/en.php b/module/programplan/lang/en.php index 351cc2267f..d71fc02238 100644 --- a/module/programplan/lang/en.php +++ b/module/programplan/lang/en.php @@ -73,7 +73,13 @@ $lang->programplan->wait = 'Wait'; $lang->programplan->enabled = 'Enabling Stage'; $lang->programplan->point = 'Review Point'; $lang->programplan->progress = 'Progress'; -$lang->programplan->setTaskRelation = 'Manage Relation'; + +$lang->programplan->setTaskRelation = 'Manage Task Relation'; +$lang->programplan->createRelation = 'Create Task Relation'; +$lang->programplan->editRelation = 'Manage Task Relation'; +$lang->programplan->batchEditRelation = 'Batch Manage Task Relation'; +$lang->programplan->deleteRelation = 'Delete Relation'; +$lang->programplan->batchDeleteRelation = 'Batch Delete Relation'; $lang->programplan->errorBegin = "{$lang->projectCommon} begin date: %s, begin date should be >= {$lang->projectCommon} begin date."; $lang->programplan->errorEnd = "{$lang->projectCommon} end date: %s, end date should be <= {$lang->projectCommon} end date."; diff --git a/module/programplan/lang/fr.php b/module/programplan/lang/fr.php index 52875037a8..4c7f7122ad 100644 --- a/module/programplan/lang/fr.php +++ b/module/programplan/lang/fr.php @@ -73,7 +73,13 @@ $lang->programplan->wait = 'Wait'; $lang->programplan->enabled = 'Enabling Stage'; $lang->programplan->point = 'Review Point'; $lang->programplan->progress = 'Progress'; -$lang->programplan->setTaskRelation = 'Manage Relation'; + +$lang->programplan->setTaskRelation = 'Manage Task Relation'; +$lang->programplan->createRelation = 'Create Task Relation'; +$lang->programplan->editRelation = 'Manage Task Relation'; +$lang->programplan->batchEditRelation = 'Batch Manage Task Relation'; +$lang->programplan->deleteRelation = 'Delete Relation'; +$lang->programplan->batchDeleteRelation = 'Batch Delete Relation'; $lang->programplan->errorBegin = "{$lang->projectCommon} begin date: %s, begin date should be >= {$lang->projectCommon} begin date."; $lang->programplan->errorEnd = "{$lang->projectCommon} end date: %s, end date should be <= {$lang->projectCommon} end date."; diff --git a/module/programplan/lang/zh-cn.php b/module/programplan/lang/zh-cn.php index cfe0f02127..542c9212b9 100644 --- a/module/programplan/lang/zh-cn.php +++ b/module/programplan/lang/zh-cn.php @@ -73,7 +73,13 @@ $lang->programplan->wait = '待提交'; $lang->programplan->enabled = '启用阶段'; $lang->programplan->point = '评审点'; $lang->programplan->progress = '进度'; -$lang->programplan->setTaskRelation = '维护任务关系'; + +$lang->programplan->setTaskRelation = '维护任务关系'; +$lang->programplan->createRelation = '添加任务关系'; +$lang->programplan->editRelation = '维护任务关系'; +$lang->programplan->batchEditRelation = '批量维护任务关系'; +$lang->programplan->deleteRelation = '删除任务关系'; +$lang->programplan->batchDeleteRelation = '批量删除任务关系'; $lang->programplan->errorBegin = "阶段的开始时间不能小于所属{$lang->projectCommon}的开始时间%s"; $lang->programplan->errorEnd = "阶段的结束时间不能大于所属{$lang->projectCommon}的结束时间%s"; diff --git a/module/task/model.php b/module/task/model.php index e7dead3091..1637c4a62e 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -1792,6 +1792,35 @@ class taskModel extends model return $taskPairs; } + /** + * 获取项目下的任务列表。 + * Get project task list. + * + * @param int $projectID + * @param bool $isPairs + * @access public + * @return array + */ + public function getProjectTaskList($projectID, $isPairs = false) + { + $taskList = $this->dao->select('*')->from(TABLE_TASK) + ->where('deleted')->eq(0) + ->beginIF($this->config->vision)->andWhere('vision')->eq($this->config->vision)->fi() + ->andWhere('project')->eq($projectID) + ->beginIF(!$this->app->user->admin)->andWhere('execution')->in($this->app->user->view->sprints)->fi() + ->fetchAll('id'); + + $taskPairs = array(); + foreach($taskList as $taskID => $task) + { + $prefix = $task->parent > 0 ? "[{$this->lang->task->childrenAB}] " : ''; + $task->name = $prefix . "$task->id:" . (empty($task->finishedByRealName) ? '' : "$task->finishedByRealName:") . "$task->name"; + $taskPairs[$taskID] = $task->name; + } + + return $isPairs ? $taskPairs : $taskList; + } + /** * 获取导出的任务数据。 * Get export task information.