diff --git a/module/stage/config/form.php b/module/stage/config/form.php index 970a992ea6..1c2e57c19c 100644 --- a/module/stage/config/form.php +++ b/module/stage/config/form.php @@ -11,3 +11,10 @@ $config->stage->form->create['projectType'] = array('type' => 'string', 'requi $config->stage->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->stage->form->create['createdDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); if(isset($config->setPercent) && $config->setPercent == 1) $config->stage->form->create['percent'] = array('type' => 'int', 'required' => false, 'default' => 0); + +$config->stage->form->batchcreate['name'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim', 'base' => true); +$config->stage->form->batchcreate['type'] = array('type' => 'string', 'required' => false, 'default' => ''); +$config->stage->form->batchcreate['projectType'] = array('type' => 'string', 'required' => false, 'default' => ''); +$config->stage->form->batchcreate['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->stage->form->batchcreate['createdDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); +if(isset($config->setPercent) && $config->setPercent == 1) $config->stage->form->batchcreate['percent'] = array('type' => 'int', 'required' => false, 'default' => 0); diff --git a/module/stage/control.php b/module/stage/control.php index 0abff76535..0fd285801d 100644 --- a/module/stage/control.php +++ b/module/stage/control.php @@ -1,4 +1,5 @@ stage->setMenu($type); if($_POST) { - $this->stage->batchCreate($type); + $stages = form::batchData()->setDefault('projectType', $type)->get(); + $this->stage->batchCreate($type, $stages); - if(dao::isError()) - { - $response['result'] = 'fail'; - $response['message'] = dao::getError(); - return $this->send($response); - } - - $response['result'] = 'success'; - $response['message'] = $this->lang->saveSuccess; - $response['load'] = inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$type"); - return $this->send($response); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'load' => inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$type"))); } $this->view->title = $this->lang->stage->common . $this->lang->colon . $this->lang->stage->batchCreate; diff --git a/module/stage/model.php b/module/stage/model.php index 0b3ec9227b..6da78230e3 100644 --- a/module/stage/model.php +++ b/module/stage/model.php @@ -1,4 +1,5 @@ getTotalPercent($type); - if(!is_numeric($stage->percent)) return dao::$errors['percent'] = $this->lang->stage->error->notNum; - if(round($totalPercent + $stage->percent) > 100) return dao::$errors['percent'] = $this->lang->stage->error->percentOver; + if(!is_numeric($stage->percent)) + { + dao::$errors['percent'] = $this->lang->stage->error->notNum; + return false; + } + if(round($totalPercent + $stage->percent) > 100) + { + dao::$errors['percent'] = $this->lang->stage->error->percentOver; + return false; + } } $this->dao->insert(TABLE_STAGE) @@ -44,35 +53,38 @@ class stageModel extends model } /** + * 批量创建阶段。 * Batch create stages. * + * @param string $type waterfall|waterfallplus + * @param array $stages * @access public * @return bool */ - public function batchCreate($type = 'waterfall') + public function batchCreate($type = 'waterfall', array $stages = array()): bool { - $data = fixer::input('post')->get(); - - $setPercent = (isset($this->config->setPercent) and $this->config->setPercent == 1) ? true : false; + $setPercent = (isset($this->config->setPercent) && $this->config->setPercent == 1) ? true : false; if($setPercent) { - $totalPercent = $this->getTotalPercent($type); - if(round($totalPercent + array_sum($data->percent)) > 100) return dao::$errors['message'] = $this->lang->stage->error->percentOver; + $oldTotalPercent = $this->getTotalPercent($type); + $totalPercent = 0; + foreach($stages as $stage) + { + if($totalPercent > 100) break; + $totalPercent += (int)$stage->percent; + } + + if(round($oldTotalPercent + $totalPercent) > 100) + { + dao::$errors['message'] = $this->lang->stage->error->percentOver; + return false; + } } $this->loadModel('action'); - foreach($data->name as $i => $name) + foreach($stages as $rowID => $stage) { - if(!$name) continue; - - $stage = new stdclass(); - $stage->name = $name; - $stage->type = $data->type[$i]; $stage->projectType = $type; - $stage->createdBy = $this->app->user->account; - $stage->createdDate = helper::today(); - if($setPercent) $stage->percent = $data->percent[$i]; - $this->dao->insert(TABLE_STAGE)->data($stage)->autoCheck() ->batchCheck($this->config->stage->create->requiredFields, 'notempty') ->checkIF($stage->percent != '', 'percent', 'float') @@ -80,7 +92,7 @@ class stageModel extends model if(dao::isError()) { - foreach(dao::getError() as $field => $error) dao::$errors["{$field}[{$i}]"] = $error; + foreach(dao::getError() as $field => $error) dao::$errors["{$field}[{$rowID}]"] = $error; return false; }