diff --git a/module/project/control.php b/module/project/control.php index 8a7db95168..3906655e35 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -482,6 +482,8 @@ class project extends control */ public function importBug($projectID = 0, $browseType = 'all', $param = 0, $recTotal = 0, $recPerPage = 30, $pageID = 1) { + $this->app->loadConfig('task'); + if(!empty($_POST)) { $mails = $this->project->importBug($projectID); @@ -605,17 +607,18 @@ class project extends control $this->loadModel('search')->setSearchParams($this->config->bug->search); /* Assign. */ - $this->view->title = $title; - $this->view->position = $position; - $this->view->pager = $pager; - $this->view->bugs = $bugs; - $this->view->recTotal = $pager->recTotal; - $this->view->recPerPage = $pager->recPerPage; - $this->view->browseType = $browseType; - $this->view->param = $param; - $this->view->users = $users; - $this->view->project = $this->project->getByID($projectID); - $this->view->projectID = $projectID; + $this->view->title = $title; + $this->view->position = $position; + $this->view->pager = $pager; + $this->view->bugs = $bugs; + $this->view->recTotal = $pager->recTotal; + $this->view->recPerPage = $pager->recPerPage; + $this->view->browseType = $browseType; + $this->view->param = $param; + $this->view->users = $users; + $this->view->project = $this->project->getByID($projectID); + $this->view->projectID = $projectID; + $this->view->requiredFields = explode(',', $this->config->task->create->requiredFields); $this->display(); } diff --git a/module/project/model.php b/module/project/model.php index b4ebb7c0f8..e6a9eb8e15 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1468,12 +1468,20 @@ class projectModel extends model $showAllModule = isset($this->config->project->task->allModule) ? $this->config->project->task->allModule : ''; $modules = $this->loadModel('tree')->getTaskOptionMenu($projectID, 0, 0, $showAllModule ? 'allModule' : ''); + $project = $this->getByID($projectID); + $requiredFields = ',' . $this->config->task->create->requiredFields . ','; + if($project->type == 'ops') $requiredFields = str_replace(',story,', ',', $requiredFields); + $requiredFields = trim($requiredFields, ','); + $bugToTasks = fixer::input('post')->get(); $bugs = $this->bug->getByList(array_keys($bugToTasks->import)); foreach($bugToTasks->import as $key => $value) { - $bug = $bugs[$key]; + $bug = zget($bugs, $key, ''); + if(empty($bug)) continue; + $task = new stdClass(); + $task->bug = $bug; $task->project = $projectID; $task->story = $bug->story; $task->storyVersion = $bug->storyVersion; @@ -1483,22 +1491,50 @@ class projectModel extends model $task->type = 'devel'; $task->pri = $bugToTasks->pri[$key]; $task->deadline = $bugToTasks->deadline[$key]; + $task->estimate = $bugToTasks->estimate[$key]; $task->consumed = 0; + $task->assignedTo = ''; $task->status = 'wait'; $task->openedDate = $now; $task->openedBy = $this->app->user->account; - if(!empty($bugToTasks->estimate[$key])) - { - $task->estimate = $bugToTasks->estimate[$key]; - $task->left = $task->estimate; - } + + if($task->estimate !== '') $task->left = $task->estimate; + if(strpos($requiredFields, 'deadline') !== false and $task->deadline == '0000-00-00') $task->deadline = ''; if(!empty($bugToTasks->assignedTo[$key])) { $task->assignedTo = $bugToTasks->assignedTo[$key]; $task->assignedDate = $now; } + + /* Check task required fields. */ + foreach(explode(',', $requiredFields) as $field) + { + if(empty($field)) continue; + if(!isset($task->$field)) continue; + if(!empty($task->$field)) continue; + + if($field == 'estimate' and strlen(trim($task->estimate)) != 0) continue; + + dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->task->$field); + return false; + } + + if(!preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $task->estimate)) + { + dao::$errors['message'][] = $this->lang->task->error->estimateNumber; + return false; + } + + $tasks[$key] = $task; + } + + foreach($tasks as $key => $task) + { + $bug = $task->bug; + unset($task->bug); + if(!$bug->confirmed) $this->dao->update(TABLE_BUG)->set('confirmed')->eq(1)->where('id')->eq($bug->id)->exec(); - $this->dao->insert(TABLE_TASK)->data($task)->checkIF($bugToTasks->estimate[$key] != '', 'estimate', 'float')->exec(); + $this->dao->insert(TABLE_TASK)->data($task)->checkIF($task->estimate != '', 'estimate', 'float')->exec(); if(dao::isError()) { diff --git a/module/project/view/importbug.html.php b/module/project/view/importbug.html.php index 0331266986..edfa5f9cd5 100755 --- a/module/project/view/importbug.html.php +++ b/module/project/view/importbug.html.php @@ -27,7 +27,7 @@ var browseType = '';
- +
- - - - + + + + diff --git a/module/task/lang/de.php b/module/task/lang/de.php index f1d09af03a..fc97606bba 100644 --- a/module/task/lang/de.php +++ b/module/task/lang/de.php @@ -201,6 +201,7 @@ $lang->task->error = new stdclass(); $lang->task->error->totalNumber = '"Total Cost" must be numbers.'; $lang->task->error->consumedNumber = '"Verbraucht" muss eine Zahl sein.'; $lang->task->error->estimateNumber = '"Stunden" müss eine Zahl sein.'; +$lang->task->error->leftNumber = '"Left" must be numbers.'; $lang->task->error->recordMinus = 'Work hours should not be negative number.'; $lang->task->error->consumedSmall = '"Genutzt" muss larger than before.'; $lang->task->error->consumedThisTime = 'Bitte geben Sie die Stunden an'; diff --git a/module/task/lang/en.php b/module/task/lang/en.php index c60acf7ba3..02c190d90b 100644 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -201,6 +201,7 @@ $lang->task->error = new stdclass(); $lang->task->error->totalNumber = '"Total Cost" must be numbers.'; $lang->task->error->consumedNumber = '"Current Cost" must be numbers.'; $lang->task->error->estimateNumber = '"Estimates" must be numbers.'; +$lang->task->error->leftNumber = '"Left" must be numbers.'; $lang->task->error->recordMinus = 'Work hours should not be negative number.'; $lang->task->error->consumedSmall = '"Total Cost" must be > the last number.'; $lang->task->error->consumedThisTime = 'Please enter "Hours Cost"'; diff --git a/module/task/lang/fr.php b/module/task/lang/fr.php index 2f424052e4..0e8a7c94cb 100644 --- a/module/task/lang/fr.php +++ b/module/task/lang/fr.php @@ -201,6 +201,7 @@ $lang->task->error = new stdclass(); $lang->task->error->totalNumber = '"Total Cost" must be numbers.'; $lang->task->error->consumedNumber = '"Coût" doit être numérique.'; $lang->task->error->estimateNumber = '"Estimé" doit être numérique.'; +$lang->task->error->leftNumber = '"Entrez" doit être numérique.'; $lang->task->error->recordMinus = 'Work hours should not be negative number.'; $lang->task->error->consumedSmall = '"Coût Total" doit être > au dernier chiffre.'; $lang->task->error->consumedThisTime = 'Entrez le "Coût en Heures"'; diff --git a/module/task/lang/vi.php b/module/task/lang/vi.php index 575a36f394..4d2f18da86 100644 --- a/module/task/lang/vi.php +++ b/module/task/lang/vi.php @@ -201,6 +201,7 @@ $lang->task->error = new stdclass(); $lang->task->error->totalNumber = '"Total Cost" must be numbers.'; $lang->task->error->consumedNumber = '"Giờ làm" phải là số.'; $lang->task->error->estimateNumber = '"Dự tính" phải là số.'; +$lang->task->error->leftNumber = '"Left" must be numbers.'; $lang->task->error->recordMinus = 'Giờ làm không nên là số âm'; $lang->task->error->consumedSmall = '"Tổng giờ làm" phải là > số cuối cùng.'; $lang->task->error->consumedThisTime = 'Vui lòng nhập "Số giờ làm"'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index 727e17b0c9..e4914e0396 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -200,7 +200,8 @@ $lang->task->cannotDeleteParent = '不能删除父任务。'; $lang->task->error = new stdclass(); $lang->task->error->totalNumber = '"总计消耗"必须为数字'; $lang->task->error->consumedNumber = '"本次消耗"必须为数字'; -$lang->task->error->estimateNumber = '"预计剩余"必须为数字'; +$lang->task->error->estimateNumber = '"最初预计"必须为数字'; +$lang->task->error->leftNumber = '"预计剩余"必须为数字'; $lang->task->error->recordMinus = '工时不能为负数'; $lang->task->error->consumedSmall = '"总计消耗"必须大于之前消耗'; $lang->task->error->consumedThisTime = '请填写"工时"'; diff --git a/module/task/model.php b/module/task/model.php index 34e1b10230..f6910a4402 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -1296,7 +1296,7 @@ class taskModel extends model foreach($record->consumed as $id => $item) $record->consumed[$id] = trim($item); foreach($record->left as $id => $item) $record->left[$id] = trim($item); foreach($record->consumed as $id => $item) if(!is_numeric($item) and !empty($item)) dao::$errors[] = 'ID #' . $id . ' ' . $this->lang->task->error->totalNumber; - foreach($record->left as $id => $item) if(!is_numeric($item) and !empty($item)) dao::$errors[] = 'ID #' . $id . ' ' . $this->lang->task->error->estimateNumber; + foreach($record->left as $id => $item) if(!is_numeric($item) and !empty($item)) dao::$errors[] = 'ID #' . $id . ' ' . $this->lang->task->error->leftNumber; if(dao::isError()) return false; $estimates = array(); @@ -1647,7 +1647,7 @@ class taskModel extends model if(!is_numeric($task->left)) { - dao::$errors[] = $this->lang->task->error->estimateNumber; + dao::$errors[] = $this->lang->task->error->leftNumber; return false; }
@@ -40,10 +40,10 @@ var browseType = ''; priAB;?> bug->title;?> bug->statusAB;?>task->pri;?>task->assignedTo;?>task->estimate;?>task->deadline;?>'>task->pri;?>'>task->assignedTo;?>'>task->estimate;?>'>task->deadline;?>