diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 3c218f40e2..735caf1add 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -33,8 +33,8 @@ var browseType = '';
export, '', 'class="export"'); ?> story->report->common); ?> - createLink('story', 'create', "productID=$productID&moduleID=$moduleID"), $lang->story->create); ?> createLink('story', 'batchCreate', "productID=$productID&moduleID=$moduleID"), $lang->story->batchCreate); ?> + createLink('story', 'create', "productID=$productID&moduleID=$moduleID"), $lang->story->create); ?>
'>
diff --git a/module/project/view/taskheader.html.php b/module/project/view/taskheader.html.php index 82c86d68c4..76160192cc 100644 --- a/module/project/view/taskheader.html.php +++ b/module/project/view/taskheader.html.php @@ -22,6 +22,7 @@ if($browseType != 'needconfirm') common::printLink('task', 'export', "projectID=$projectID&orderBy=$orderBy", $lang->export, '', 'class="export"'); common::printLink('project', 'importTask', "project=$project->id", $lang->project->importTask); common::printLink('task', 'report', "project=$project->id&browseType=$browseType", $lang->task->report->common); + common::printLink('task', 'batchCreate', "projectID=$project->id", $lang->task->batchCreate); common::printLink('task', 'create', "project=$project->id", $lang->task->create); ?> diff --git a/module/story/config.php b/module/story/config.php index a30b161d4e..bc1aea7c87 100644 --- a/module/story/config.php +++ b/module/story/config.php @@ -1,5 +1,5 @@ story->batchCreate = 20; +$config->story->batchCreate = 10; $config->story->create->requiredFields = 'title'; $config->story->edit->requiredFields = 'title'; $config->story->change->requiredFields = 'title'; diff --git a/module/story/lang/zh-cn.php b/module/story/lang/zh-cn.php index 5a854bdf6c..2ff2132e96 100644 --- a/module/story/lang/zh-cn.php +++ b/module/story/lang/zh-cn.php @@ -11,7 +11,7 @@ */ $lang->story->browse = "需求列表"; $lang->story->create = "新增需求"; -$lang->story->batchCreate = "批量新增需求"; +$lang->story->batchCreate = "批量添加需求"; $lang->story->change = "变更"; $lang->story->changed = '需求变更'; $lang->story->review = '评审'; diff --git a/module/story/view/batchcreate.html.php b/module/story/view/batchcreate.html.php index c133ca32d0..9593803ecd 100644 --- a/module/story/view/batchcreate.html.php +++ b/module/story/view/batchcreate.html.php @@ -15,6 +15,7 @@ + @@ -27,6 +28,7 @@ + diff --git a/module/task/config.php b/module/task/config.php index 08fdd24853..f029397274 100644 --- a/module/task/config.php +++ b/module/task/config.php @@ -1,9 +1,10 @@ task->create->requiredFields = 'name,estimate,type,pri'; -$config->task->edit->requiredFields = $config->task->create->requiredFields; -$config->task->start->requiredFields = 'estimate'; -$config->task->finish->requiredFields = 'consumed'; -$config->task->activate->requiredFields = 'left'; +$config->task->batchCreate = 10; +$config->task->create->requiredFields = 'name,estimate,type,pri'; +$config->task->edit->requiredFields = $config->task->create->requiredFields; +$config->task->start->requiredFields = 'estimate'; +$config->task->finish->requiredFields = 'consumed'; +$config->task->activate->requiredFields = 'left'; $config->task->editor->create = array('id' => 'desc', 'tools' => 'simpleTools'); $config->task->editor->edit = array('id' => 'desc', 'tools' => 'simpleTools'); diff --git a/module/task/control.php b/module/task/control.php index 81b5f3eb6c..681d73de79 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -86,6 +86,53 @@ class task extends control $this->display(); } + /** + * Create a task. + * + * @param int $projectID + * @param int $storyID + * @access public + * @return void + */ + public function batchCreate($projectID = 0, $storyID = 0) + { + $project = $this->project->getById($projectID); + $taskLink = $this->createLink('project', 'browse', "projectID=$projectID&tab=task"); + $storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('project', 'story', "projectID=$projectID"); + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + + /* Set menu. */ + $this->project->setMenu($this->project->getPairs(), $project->id); + + if(!empty($_POST)) + { + $mails = $this->task->batchCreate($projectID); + if(dao::isError()) die(js::error(dao::getError())); + + foreach($mails as $mail) + { + $this->sendmail($mail->taskID, $mail->actionID); + } + + /* Locate the browser. */ + die(js::locate($taskLink, 'parent')); + } + + $stories = $this->story->getProjectStoryPairs($projectID); + $members = $this->project->getTeamMemberPairs($projectID, 'nodeleted'); + $header['title'] = $project->name . $this->lang->colon . $this->lang->task->create; + $position[] = html::a($taskLink, $project->name); + $position[] = $this->lang->task->create; + + $this->view->header = $header; + $this->view->position = $position; + $this->view->project = $project; + $this->view->stories = $stories; + $this->view->storyID = $storyID; + $this->view->members = $members; + $this->display(); + } + /** * Common actions of task module. * diff --git a/module/task/lang/en.php b/module/task/lang/en.php index cae8ad07ba..f310d231d7 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -9,21 +9,22 @@ * @version $Id$ * @link http://www.zentao.net */ -$lang->task->index = "Index"; -$lang->task->create = "Create"; -$lang->task->import = "Import undone"; -$lang->task->edit = "Update"; -$lang->task->delete = "Delete"; -$lang->task->view = "Info"; -$lang->task->logEfforts= "Efforts"; -$lang->task->start = "Start"; -$lang->task->finish = "Finish"; -$lang->task->close = "Close"; -$lang->task->batchClose= "Batch close"; -$lang->task->cancel = "Cancel"; -$lang->task->activate = "Activate"; -$lang->task->export = "Export"; -$lang->task->reportChart = "Report chart"; +$lang->task->index = "Index"; +$lang->task->create = "Create"; +$lang->task->batchCreate = "Batch create"; +$lang->task->import = "Import undone"; +$lang->task->edit = "Update"; +$lang->task->delete = "Delete"; +$lang->task->view = "Info"; +$lang->task->logEfforts = "Efforts"; +$lang->task->start = "Start"; +$lang->task->finish = "Finish"; +$lang->task->close = "Close"; +$lang->task->batchClose = "Batch close"; +$lang->task->cancel = "Cancel"; +$lang->task->activate = "Activate"; +$lang->task->export = "Export"; +$lang->task->reportChart = "Report chart"; $lang->task->confirmStoryChange = "Confirm story change"; $lang->task->common = 'Task'; @@ -36,6 +37,7 @@ $lang->task->type = 'Type'; $lang->task->pri = 'Pri'; $lang->task->mailto = 'Mailto'; $lang->task->estimate = 'Estimate'; +$lang->task->estimateBatch = 'Estimate'; $lang->task->estimateAB = 'Est'; $lang->task->left = 'Left'; $lang->task->leftAB = 'Left'; @@ -66,6 +68,8 @@ $lang->task->lastEditedBy = 'Last Edited By'; $lang->task->lastEditedDate = 'Last Edited Date'; $lang->task->lastEdited = 'Last Edited'; +$lang->task->notes = '(Notes: the name, type, pri and estimate must be written, otherwise it is no use)'; + $lang->task->statusList[''] = ''; $lang->task->statusList['wait'] = 'Waiting'; $lang->task->statusList['doing'] = 'Doing'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index f256bb6c4b..0472beba1f 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -9,21 +9,22 @@ * @version $Id$ * @link http://www.zentao.net */ -$lang->task->index = "任务一览"; -$lang->task->create = "新增任务"; -$lang->task->import = "导入之前未完任务"; -$lang->task->edit = "更新任务"; -$lang->task->delete = "删除任务"; -$lang->task->view = "查看任务"; -$lang->task->logEfforts= "记录工时"; -$lang->task->start = "开始任务"; -$lang->task->finish = "完成任务"; -$lang->task->close = "关闭任务"; -$lang->task->batchClose= "批量关闭"; -$lang->task->cancel = "取消任务"; -$lang->task->activate = "激活任务"; -$lang->task->export = "导出数据"; -$lang->task->reportChart = "报表统计"; +$lang->task->index = "任务一览"; +$lang->task->create = "新增任务"; +$lang->task->batchCreate = "批量添加任务"; +$lang->task->import = "导入之前未完任务"; +$lang->task->edit = "更新任务"; +$lang->task->delete = "删除任务"; +$lang->task->view = "查看任务"; +$lang->task->logEfforts = "记录工时"; +$lang->task->start = "开始任务"; +$lang->task->finish = "完成任务"; +$lang->task->close = "关闭任务"; +$lang->task->batchClose = "批量关闭"; +$lang->task->cancel = "取消任务"; +$lang->task->activate = "激活任务"; +$lang->task->export = "导出数据"; +$lang->task->reportChart = "报表统计"; $lang->task->confirmStoryChange = "确认需求变动"; $lang->task->common = '任务'; @@ -36,6 +37,7 @@ $lang->task->type = '任务类型'; $lang->task->pri = '优先级'; $lang->task->mailto = '抄送给'; $lang->task->estimate = '最初预计'; +$lang->task->estimateBatch = '预计工时'; $lang->task->estimateAB = '预'; $lang->task->left = '预计剩余'; $lang->task->leftAB = '剩'; @@ -66,6 +68,8 @@ $lang->task->lastEditedBy = '最后修改'; $lang->task->lastEditedDate = '最后修改日期'; $lang->task->lastEdited = '最后编辑'; +$lang->task->notes = '(注:“任务类型”、“任务名称”、“优先级”和“预计工时”必需填写,否则此行无效)'; + $lang->task->statusList[''] = ''; $lang->task->statusList['wait'] = '未开始'; $lang->task->statusList['doing'] = '进行中'; diff --git a/module/task/model.php b/module/task/model.php index 881e64d176..a627d06fed 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -77,6 +77,70 @@ class taskModel extends model return $tasksID; } + /** + * Create a batch task. + * + * @param int $projectID + * @access public + * @return void + */ + public function batchCreate($projectID) + { + $now = helper::now(); + $tasks = fixer::input('post')->get(); + for($i = 0; $i < $this->config->task->batchCreate; $i++) + { + if($tasks->type[$i] != '' and $tasks->name[$i] != '' and $tasks->pri[$i] != 0 and $tasks->estimate[$i] != '') + { + $data[$i]->story = $tasks->story[$i]; + $data[$i]->type = $tasks->type[$i]; + $data[$i]->name = $tasks->name[$i]; + $data[$i]->desc = $tasks->desc[$i]; + $data[$i]->assignedTo = $tasks->assignedTo[$i]; + $data[$i]->pri = $tasks->pri[$i]; + $data[$i]->estimate = $tasks->estimate[$i]; + $data[$i]->left = $tasks->estimate[$i]; + $data[$i]->project = $projectID; + $data[$i]->deadline = '0000-00-00'; + $data[$i]->status = 'wait'; + $data[$i]->openedBy = $this->app->user->account; + $data[$i]->openedDate = $now; + $data[$i]->statusCustom = strpos(self::CUSTOM_STATUS_ORDER, 'wait') + 1; + if($tasks->story[$i] != '') $data[$i]->storyVersion = $this->loadModel('story')->getVersion($tasks->story[$i]); + if($tasks->assignedTo[$i] != '') $data[$i]->assignedDate = $now; + + $this->dao->insert(TABLE_TASK)->data($data[$i]) + ->autoCheck() + ->batchCheck($this->config->task->create->requiredFields, 'notempty') + ->checkIF($data[$i]->estimate != '', 'estimate', 'float') + ->exec(); + + if(dao::isError()) + { + echo js::error(dao::getError()); + die(js::reload('parent')); + } + + $taskID = $this->dao->lastInsertID(); + if($tasks->story[$i] != false) $this->story->setStage($tasks->story[$i]); + $actionID = $this->loadModel('action')->create('task', $taskID, 'Opened', ''); + $mails[$i]->taskID = $taskID; + $mails[$i]->actionID = $actionID; + } + else + { + unset($tasks->story[$i]); + unset($tasks->type[$i]); + unset($tasks->name[$i]); + unset($tasks->desc[$i]); + unset($tasks->assignedTo[$i]); + unset($tasks->pri[$i]); + unset($tasks->estimate[$i]); + } + } + return $mails; + } + /** * Update a task. *
story->product . $lang->colon . $lang->story->batchCreate; echo "{$lang->story->notes}";?>
idAB;?> story->module;?> story->plan;?> story->title;?>
*";?>