content_title = lang("{$this->getService()->getClassName()}.title"); $this->class_path .= $this->getService()->getClassName(); $this->uri_path .= strtolower($this->getService()->getClassName('/')) . '/'; // $this->view_path .= strtolower($this->getService()->getClassName()) . DIRECTORY_SEPARATOR; } public function getService(): ServiceService { if ($this->_service === null) { $this->_service = new ServiceService(); } return $this->_service; } public function getServerService(): ServerService { if ($this->_serverService === null) { $this->_serverService = new ServerService(); } return $this->_serverService; } public function getPaymentService(): PaymentService { if ($this->_paymentService === null) { $this->_paymentService = new PaymentService(); } return $this->_paymentService; } //Index,FieldForm관련 protected function getResultSuccess(string $message = MESSAGES["SUCCESS"], ?string $actionTemplate = null): RedirectResponse|string { switch ($this->getService()->getAction()) { case 'create_form': case 'modify_form': case 'addServer_form': case 'view': case 'index': $this->service = $this->getService(); $this->control = $this->getService()->getControlDatas(); $this->getService()->getHelper()->setViewDatas($this->getViewDatas()); $actionTemplate = $this->request->getVar('ActionTemplate') ?? $actionTemplate ?? 'service'; if ($actionTemplate) { $view_file = $this->view_path . $actionTemplate . DIRECTORY_SEPARATOR . $this->getService()->getAction(); } else { $view_file = $this->view_path . $this->getService()->getAction(); } $result = view($view_file, ['viewDatas' => $this->getViewDatas()]); break; case 'history': $result = redirect()->to($this->request->getGET('return_url'))->with('error', $message); break; default: $result = parent::getResultSuccess($message, $actionTemplate); break; } return $result; } //생성관련 protected function create_form_process(): void { $formDatas = $this->getService()->getFormDatas(); $formDatas['location'] = 'chiba'; $formDatas['rack'] = '100000'; $formDatas['line'] = '300000'; $formDatas['type'] = 'normal'; $formDatas['billing_at'] = date("Y-m-d"); $formDatas['start_at'] = date("Y-m-d"); $formDatas['status'] = ServiceEntity::DEFAULT_STATUS; $this->getService()->setFormDatas($formDatas); parent::create_form_process(); } private function getChildServers(ServiceEntity $entity): array { $servers = []; foreach ($this->getServerService()->getEntities(['serviceinfo_uid' => $entity->getPK()]) as $serverEntity) { $servers[] = view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [ 'serverinfo_uid' => $serverEntity->getPK(), 'types' => SERVERPART['SERVICE_PARTTYPES'], 'serviceinfo_serverinfo_uid' => $entity->getServerEntity()->getPK(), 'template' => 'partlist_service' ]); } return $servers; } //List 관련 protected function index_process(array $entities = []): array { //서비스별 미납 Count $childServers = []; $this->unPaids = $this->getPaymentService()->getUnPaids('serviceinfo_uid'); foreach ($this->getService()->getEntities() as $entity) { $entities[] = $entity; $childServers[$entity->getPK()] = $this->getChildServers($entity); } $this->childServers = $childServers; return $entities; } //대체서버선정 public function addServer_form(mixed $uid): RedirectResponse|string { try { $this->getService()->setAction(__FUNCTION__); $this->getService()->setFormFields(['serverinfo_uid']); //전달값정의 $this->getService()->setFormDatas($this->request->getGet()); $this->getService()->setFormFilters(); $this->getService()->setFormRules(); $this->getService()->setFormOptions(); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity instanceof ServiceEntity) { throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); } $this->entity = $entity; helper(['form']); $this->forms = ['attributes' => ['method' => "post",], 'hiddens' => []]; return $this->getResultSuccess(); } catch (\Exception $e) { return $this->getResultFail($e->getMessage()); } } //대체서버 등록 public function addServer(int $uid): RedirectResponse|string { //Transaction Start $db = \Config\Database::connect(); $db->transStart(); try { $this->getService()->setAction(__FUNCTION__); $this->getService()->setFormFields(['serverinfo_uid']); //전달값정의 $this->getService()->setFormDatas($this->request->getPost()); $this->getService()->setFormFilters(); $this->getService()->setFormRules(); $this->doValidations(); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity instanceof ServiceEntity) { throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); } $formDatas = $this->getService()->getFormDatas(); $formDatas['type'] = 'alternative'; //대체서버로 등록하기위해 필요 $this->entity = $this->getService()->addServer($entity, $formDatas); $db->transCommit(); return "대체서버추가가 완료되었습니다."; } catch (\Exception $e) { $db->transRollback(); return $this->getResultFail($e->getMessage()); } } //대체서버를 MAIN서버로 설정 public function changeServere(mixed $uid): RedirectResponse|string { //Transaction Start $db = \Config\Database::connect(); $db->transStart(); try { $this->getService()->setAction(__FUNCTION__); $this->getService()->setFormFields(['serverinfo_uid']); //전달값정의 $this->getService()->setFormDatas($this->request->getGet()); $this->getService()->setFormFilters(); $this->getService()->setFormRules(); $this->doValidations(); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity instanceof ServiceEntity) { throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); } $formDatas = $this->getService()->getFormDatas(); if (!array_key_exists('serverinfo_uid', $formDatas)) { throw new \Exception("서비스의 메인서버로 설정할 서버정보가 없습니다."); } //서버정보설정 $this->getService()->changeServere($entity, $formDatas); $db->transCommit(); return $this->getResultSuccess('메인서버 설정이 바뀌었습니다.'); } catch (\Exception $e) { $db->transRollback(); return $this->getResultFail($e->getMessage()); } } //서비스 서버해지 public function terminateServer(mixed $uid): RedirectResponse|string { //Transaction Start $db = \Config\Database::connect(); $db->transStart(); try { $this->getService()->setAction(__FUNCTION__); $this->getService()->setFormFields(['serverinfo_uid']); //전달값정의 $this->getService()->setFormDatas($this->request->getGet()); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity instanceof ServiceEntity) { throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); } $formDatas = $this->getService()->getFormDatas(); $this->getService()->terminateServer($entity, $formDatas); $db->transCommit(); return $this->getResultSuccess('서버해지가 완료되었습니다.'); } catch (\Exception $e) { $db->transRollback(); return $this->getResultFail($e->getMessage()); } } public function history(int $uid): RedirectResponse|string { //Transaction Start $db = \Config\Database::connect(); $db->transStart(); try { $this->getService()->setAction(__FUNCTION__); $this->getService()->setFormFields(['history']); $this->getService()->setFormFilters(); $this->getService()->setFormRules(); //전달값정의 $this->getService()->setFormDatas($this->request->getPost()); $this->doValidations(); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity instanceof ServiceEntity) { throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); } $this->entity = $this->getService()->history($entity, $this->getService()->getFormDatas()); $db->transCommit(); return $this->getResultSuccess('서비스 비고가 수정되었습니다.'); } catch (\Exception $e) { $db->transRollback(); return $this->getResultFail($e->getMessage()); } } }