diff --git a/app/Controllers/Admin/Customer/CustomerController.php b/app/Controllers/Admin/Customer/CustomerController.php index cc3e5e4..a833c66 100644 --- a/app/Controllers/Admin/Customer/CustomerController.php +++ b/app/Controllers/Admin/Customer/CustomerController.php @@ -4,7 +4,6 @@ namespace App\Controllers\Admin\Customer; use App\Controllers\Admin\AdminController; use App\Entities\Equipment\Part\IpEntity; -use App\Services\Customer\ClientService; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; @@ -12,60 +11,9 @@ use Psr\Log\LoggerInterface; abstract class CustomerController extends AdminController { - private ?ClientService $_clientService = null; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); } - - final public function getClientService(): ClientService - { - if (!$this->_clientService) { - $this->_clientService = new ClientService($this->request); - } - return $this->_clientService; - } - - //ServiceController,ServiceItemController,ServicePaymentController등에서 사용됨 - final protected function initServiceItemOptions(): void - { - //$item_type(CPU,RAM,STORAGE등)에 따라 선언된 getFormFieldOption용 - foreach (SERVICE_ITEM_TYPES as $item_type => $label) { - if ($item_type == 'IP') { - $occupied_ips = []; - $forbidden_ips = []; - } - $options = []; - foreach ($this->getService()->getServiceItemLinkService($item_type)->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - if ($item_type == 'IP') { - if ($entity->getStatus() === IpEntity::STATUS_OCCUPIED) { - $occupied_ips[] = $entity->getPK(); - } - if ($entity->getStatus() === IpEntity::STATUS_FORBIDDEN) { - $forbidden_ips[] = $entity->getPK(); - } - $this->occupied_ips = $occupied_ips; - $this->forbidden_ips = $forbidden_ips; - } - } - $this->setFilterFieldOption($item_type, $options); - } - } - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'clientinfo_uid': - case 'ownerinfo_uid': - foreach ($this->getClientService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } //Index,FieldForm관련 } diff --git a/app/Controllers/Admin/Customer/ServiceController.php b/app/Controllers/Admin/Customer/ServiceController.php index b943708..93ae37c 100644 --- a/app/Controllers/Admin/Customer/ServiceController.php +++ b/app/Controllers/Admin/Customer/ServiceController.php @@ -10,7 +10,6 @@ use Psr\Log\LoggerInterface; use App\Helpers\Customer\ServiceHelper; use App\Services\Customer\ServiceService; use App\Services\Customer\ServiceItemService; -use App\Entities\Equipment\CodeEntity; use App\Services\Equipment\CodeService; class ServiceController extends CustomerController @@ -54,37 +53,6 @@ class ServiceController extends CustomerController } return $this->_serviceItemService; } - protected function initAction(string $action): void - { - //$item_type(CPU,RAM,STORAGE등)에 따라 선언된 getFormFieldOption용 사용됨 (initAction보다 먼저 호출해야 됨) - $this->initServiceItemOptions(); - parent::initAction($action); - } - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'ownerinfo_uid': - foreach ($this->getClientService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - case 'code': - $occupied_codes = []; - foreach ($this->getCodeService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - if ($entity->getStatus() === CodeEntity::STATUS_OCCUPIED) { - $occupied_codes[] = $entity->getPK(); - } - } - //code의 경우 사용중인 filter_options코드전달용 - $this->occupied_codes = $occupied_codes; - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } protected function getResultSuccess(string $message = MESSAGES["SUCCESS"], ?string $actionTemplate = null): RedirectResponse|string { switch ($this->getAction()) { @@ -112,6 +80,11 @@ class ServiceController extends CustomerController //Index,FieldForm관련 protected function index_process(): array { + //LINE,IP,SERVER등 추가 FilterOption 셋팅용 + foreach (SERVICE_ITEM_TYPES as $item_type => $label) { + $options = $this->getService()->getServiceItemLinkService($item_type)->getEntities(); + $this->setFilterFieldOption($item_type, $options); + } $entities = []; foreach (parent::index_process() as $entity) { foreach (SERVICE_ITEM_TYPES as $item_type => $label) { diff --git a/app/Controllers/Admin/Customer/ServiceHistoryController.php b/app/Controllers/Admin/Customer/ServiceHistoryController.php index 23a24cf..9428da2 100644 --- a/app/Controllers/Admin/Customer/ServiceHistoryController.php +++ b/app/Controllers/Admin/Customer/ServiceHistoryController.php @@ -46,20 +46,6 @@ class ServiceHistoryController extends CustomerController return $this->_serviceService; } - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'serviceinfo_uid': - foreach ($this->getServiceService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } protected function getResultSuccess(string $message = MESSAGES["SUCCESS"], ?string $actionTemplate = null): RedirectResponse|string { switch ($this->getAction()) { diff --git a/app/Controllers/Admin/Customer/ServiceItemController.php b/app/Controllers/Admin/Customer/ServiceItemController.php index fa90dee..b05985a 100644 --- a/app/Controllers/Admin/Customer/ServiceItemController.php +++ b/app/Controllers/Admin/Customer/ServiceItemController.php @@ -48,20 +48,21 @@ class ServiceItemController extends CustomerController } return $this->_serviceService; } - protected function initAction(string $action): void + protected function getResultSuccess(string $message = MESSAGES["SUCCESS"], ?string $actionTemplate = null): RedirectResponse|string { - //$item_type(CPU,RAM,STORAGE등)에 따라 선언된 getFormFieldOption용 사용됨 (initAction보다 먼저 호출해야 됨) - $this->initServiceItemOptions(); - parent::initAction($action); + switch ($this->getAction()) { + case 'index': + $result = parent::getResultSuccess($message, $this->request->getVar('ActionTemplate') ?? $actionTemplate ?? 'popup'); + break; + default: + $result = parent::getResultSuccess($message, $actionTemplate); + break; + } + return $result; } - protected function getFormFieldOption(string $field, array $options = []): array + public function getFormFieldOption(string $field, array $options = []): array { switch ($field) { - case 'serviceinfo_uid': - foreach ($this->getServiceService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; case 'item_uid': $item_type = $this->request->getVar('item_type'); if (!$item_type) { @@ -76,20 +77,18 @@ class ServiceItemController extends CustomerController } return $options; } - protected function getResultSuccess(string $message = MESSAGES["SUCCESS"], ?string $actionTemplate = null): RedirectResponse|string - { - switch ($this->getAction()) { - case 'index': - $result = parent::getResultSuccess($message, $this->request->getVar('ActionTemplate') ?? $actionTemplate ?? 'popup'); - break; - default: - $result = parent::getResultSuccess($message, $actionTemplate); - break; - } - return $result; - } //Index,FieldForm관련 + protected function create_form_process(): void + { + //LINE,IP,SERVER등 추가 FilterOption 셋팅용 + foreach (SERVICE_ITEM_TYPES as $item_type => $label) { + $options = $this->getService()->getServiceItemLinkService($item_type)->getEntities(); + $this->setFilterFieldOption($item_type, $options); + } + parent::create_form_process(); + } + //도메인의 경우 domaininfo에 등록 후 ServiceItemEntity의 item_uid에 넣고 create해야함 private function createDomain(ServiceEntity $serviceEntity, array $formDatas): array { @@ -114,4 +113,24 @@ class ServiceItemController extends CustomerController } return parent::create_process($formDatas); } + + protected function modify_form_process(mixed $entity): mixed + { + //LINE,IP,SERVER등 추가 FilterOption 셋팅용 + foreach (SERVICE_ITEM_TYPES as $item_type => $label) { + $options = $this->getService()->getServiceItemLinkService($item_type)->getEntities(); + $this->setFilterFieldOption($item_type, $options); + } + return parent::modify_form_process($entity); + } + + protected function index_process(): array + { + //LINE,IP,SERVER등 추가 FilterOption 셋팅용 + foreach (SERVICE_ITEM_TYPES as $item_type => $label) { + $options = $this->getService()->getServiceItemLinkService($item_type)->getEntities(); + $this->setFilterFieldOption($item_type, $options); + } + return parent::index_process(); + } } diff --git a/app/Controllers/Admin/Customer/ServicePaymentController.php b/app/Controllers/Admin/Customer/ServicePaymentController.php index 88c5d30..261b3eb 100644 --- a/app/Controllers/Admin/Customer/ServicePaymentController.php +++ b/app/Controllers/Admin/Customer/ServicePaymentController.php @@ -48,29 +48,6 @@ class ServicePaymentController extends CustomerController } return $this->_serviceService; } - protected function initAction(string $action): void - { - //$item_type(CPU,RAM,STORAGE등)에 따라 선언된 getFormFieldOption용 사용됨 (initAction보다 먼저 호출해야 됨) - $this->initServiceItemOptions(); - parent::initAction($action); - } - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'serviceinfo_uid': - foreach ($this->getServiceService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - case 'item_uid': - $options = []; - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } protected function getResultSuccess(string $message = MESSAGES["SUCCESS"], ?string $actionTemplate = null): RedirectResponse|string { switch ($this->getAction()) { @@ -95,7 +72,17 @@ class ServicePaymentController extends CustomerController return $result; } //Index,FieldForm관련 - private function getOwners(ClientEntity $ownerEntity): array + protected function index_process(): array + { + //LINE,IP,SERVER등 추가 FilterOption 셋팅용 + foreach (SERVICE_ITEM_TYPES as $item_type => $label) { + $options = $this->getService()->getServiceItemLinkService($item_type)->getEntities(); + $this->setFilterFieldOption($item_type, $options); + } + return parent::index_process(); + } + + private function getOwnersForInvoice(ClientEntity $ownerEntity): array { $temps = [ 'name' => $ownerEntity->getName(), @@ -104,7 +91,7 @@ class ServicePaymentController extends CustomerController ]; return $temps; } - private function getServices(ServiceEntity $serviceEntity): array + private function getServicesForInvoice(ServiceEntity $serviceEntity): array { $temps = [ 'code' => $serviceEntity->getTitle(), @@ -113,7 +100,7 @@ class ServicePaymentController extends CustomerController ]; return $temps; } - private function getItems(ServicePaymentEntity $entity): array + private function getItemsForInvoice(ServicePaymentEntity $entity): array { // dd($this->getFilterFieldOptions()); $temps = [ @@ -143,18 +130,18 @@ class ServicePaymentController extends CustomerController $ownerEntity = $entity->getOwner(); if ($ownerEntity->getPK() !== $owner_pk) { if (!array_key_exists($ownerEntity->getPK(), $entities)) { - $entities[$ownerEntity->getPK()] = $this->getOwners($ownerEntity); + $entities[$ownerEntity->getPK()] = $this->getOwnersForInvoice($ownerEntity); } $owner_pk = $ownerEntity->getPK(); } //entities에 서비스 설정 $serviceEntity = $entity->getService(); if (!array_key_exists($serviceEntity->getPK(), $entities[$owner_pk]['services'])) { - $entities[$owner_pk]['services'][$serviceEntity->getPK()] = $this->getServices($serviceEntity); + $entities[$owner_pk]['services'][$serviceEntity->getPK()] = $this->getServicesForInvoice($serviceEntity); } //entities에 서비스 Item Type,Item 설정 if (!array_key_exists($entity->getPK(), $entities[$owner_pk]['services'][$serviceEntity->getPK()])) { - $entities[$owner_pk]['services'][$serviceEntity->getPK()]['items'][] = $this->getItems($entity); + $entities[$owner_pk]['services'][$serviceEntity->getPK()]['items'][] = $this->getItemsForInvoice($entity); } //entities에 총 결제금액 설정 $entities[$ownerEntity->getPK()]['total_amount'] += $entity->getAmount(); diff --git a/app/Controllers/Admin/Equipment/EquipmentController.php b/app/Controllers/Admin/Equipment/EquipmentController.php index b7904f2..9da942f 100644 --- a/app/Controllers/Admin/Equipment/EquipmentController.php +++ b/app/Controllers/Admin/Equipment/EquipmentController.php @@ -23,18 +23,4 @@ abstract class EquipmentController extends AdminController return $this->_clientService; } //Index,FieldForm관련 - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'clientinfo_uid': - foreach ($this->getClientService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } } diff --git a/app/Controllers/Admin/Equipment/Part/IpController.php b/app/Controllers/Admin/Equipment/Part/IpController.php index 41bc83e..e925b54 100644 --- a/app/Controllers/Admin/Equipment/Part/IpController.php +++ b/app/Controllers/Admin/Equipment/Part/IpController.php @@ -44,20 +44,6 @@ class IpController extends PartController } return $this->_lineService; } - protected function getFormFieldOption(string $field, $options = []): array - { - switch ($field) { - case 'lineinfo_uid': - foreach ($this->getLineService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } //Index,FieldForm관련 protected function setOrderByForList() { diff --git a/app/Controllers/Admin/Equipment/Part/PartController.php b/app/Controllers/Admin/Equipment/Part/PartController.php index d5260bc..ec25930 100644 --- a/app/Controllers/Admin/Equipment/Part/PartController.php +++ b/app/Controllers/Admin/Equipment/Part/PartController.php @@ -14,19 +14,5 @@ abstract class PartController extends EquipmentController { parent::initController($request, $response, $logger); } - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'clientinfo_uid': - foreach ($this->getClientService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } //Index,FieldForm관련 } diff --git a/app/Controllers/Admin/MyLogController.php b/app/Controllers/Admin/MyLogController.php index 97a66e1..b040c71 100644 --- a/app/Controllers/Admin/MyLogController.php +++ b/app/Controllers/Admin/MyLogController.php @@ -9,12 +9,10 @@ use Psr\Log\LoggerInterface; use App\Services\MyLogService; use App\Helpers\MyLogHelper; -use App\Services\UserService; class MyLogController extends AdminController { private $_helper = null; - private $_userService = null; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); @@ -38,28 +36,5 @@ class MyLogController extends AdminController } return $this->_helper; } - public function getUserService(): UserService - { - if (!$this->_userService) { - $this->_userService = new UserService($this->request); - } - return $this->_userService; - } - //Index,FieldForm관련 - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'user_uid': - foreach ($this->getUserService()->getEntities() as $entity) { - $options[$entity->getPK()] = $entity->getTitle(); - } - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - // dd($options); - return $options; - } //Index,FieldForm관련 } diff --git a/app/Entities/CommonEntity.php b/app/Entities/CommonEntity.php index ea6e89c..bfb014a 100644 --- a/app/Entities/CommonEntity.php +++ b/app/Entities/CommonEntity.php @@ -17,7 +17,7 @@ abstract class CommonEntity extends Entity parent::__construct($data); } - final public function getPK(): string + public function getPK(): string { $field = constant("static::PK"); return $this->attributes[$field]; diff --git a/app/Entities/Equipment/DomainEntity.php b/app/Entities/Equipment/DomainEntity.php index 2fc0bb1..ce08ca0 100644 --- a/app/Entities/Equipment/DomainEntity.php +++ b/app/Entities/Equipment/DomainEntity.php @@ -8,4 +8,7 @@ class DomainEntity extends EquipmentEntity { const PK = DomainModel::PK; const TITLE = DomainModel::TITLE; + const STATUS_AVAILABLE = "default"; + const STATUS_OCCUPIED = "occupied"; + const STATUS_FORBIDDEN = "forbidden"; } diff --git a/app/Entities/FormOptionEntity.php b/app/Entities/FormOptionEntity.php new file mode 100644 index 0000000..e97986e --- /dev/null +++ b/app/Entities/FormOptionEntity.php @@ -0,0 +1,15 @@ +attributes['uid']; + } + public function getTitle(): string + { + return $this->attributes['title']; + } +} diff --git a/app/Helpers/CommonHelper.php b/app/Helpers/CommonHelper.php index bfc4891..fea8660 100644 --- a/app/Helpers/CommonHelper.php +++ b/app/Helpers/CommonHelper.php @@ -8,10 +8,14 @@ class CommonHelper { private $_viewDatas = []; private $_titleField = ""; - protected ?IncomingRequest $request = null; + private ?IncomingRequest $_request = null; protected function __construct(?IncomingRequest $request = null) { - $this->request = $request; + $this->_request = $request; + } + final public function getRequest(): IncomingRequest|null + { + return $this->_request; } final public function setTitleField(string $field): void { @@ -229,15 +233,15 @@ class CommonHelper // create, modify, create_form, modify_form일때 checkbox로 표시 if (in_array($viewDatas['control']['action'], ['create', 'modify', 'create_form', 'modify_form'])) { $forms = []; - foreach ($viewDatas['control']['filter_optons'][$field] as $key => $label) { + foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) { $values = is_array($value) ? $value : explode(DEFAULTS["DELIMITER_ROLE"], $value); - $forms[] = form_checkbox("{$field}[]", $key, in_array($key, $values)) . $label; + $forms[] = form_checkbox("{$field}[]", $key, in_array($key, $values)) . $filterEntity->getTitle(); } $form = implode(" ", $forms); } else { $formOptions = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택']; - foreach ($viewDatas['control']['filter_optons'][$field] as $key => $label) { - $formOptions[$key] = $label; + foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) { + $formOptions[$key] = $filterEntity->getTitle(); } $form = form_dropdown($field, $formOptions, $value, $extras); } @@ -261,8 +265,9 @@ class CommonHelper throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다."); } $formOptions = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택']; - foreach ($viewDatas['control']['filter_optons'][$field] as $key => $label) { - $formOptions[$key] = $label; + // dd($viewDatas['control']['filter_optons'][$field]); + foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) { + $formOptions[$key] = $filterEntity->getTitle(); } $extra_class = isset($extras['class']) ? $extras['class'] . ' select-field' : 'select-field'; // create, modify, create_form, modify_form 액션에서는 기본값:DEFAULTS['STATUS']을 설정 @@ -284,7 +289,7 @@ class CommonHelper case 'role': $roles = []; foreach (explode(DEFAULTS["DELIMITER_ROLE"], $value) as $key) { - $roles[] = $viewDatas['control']['filter_optons'][$field][$key] ?? ""; + $roles[] = $viewDatas['control']['filter_optons'][$field][$key]->getTitle() ?? ""; } $value = implode(" , ", $roles); break; @@ -316,7 +321,7 @@ class CommonHelper ); $value = $this->getFieldForm($field, $value, $viewDatas, $extras); } else { - $value = $viewDatas['control']['filter_optons'][$field][$value]; + $value = $viewDatas['control']['filter_optons'][$field][$value]->getTitle(); } } break; @@ -340,7 +345,7 @@ class CommonHelper if (isset($viewDatas['order_field']) && $viewDatas['order_field'] == $field) { $label .= $viewDatas['order_value'] == 'ASC' ? ICONS["UP"] : ICONS["DOWN"]; } - $query = $this->request->getUri()->getQuery(['except' => ['order_field', 'order_value']]); + $query = $this->getRequest()->getUri()->getQuery(['except' => ['order_field', 'order_value']]); $query .= empty($query) ? "" : "&"; $query .= "order_field={$field}&order_value="; $query .= isset($viewDatas['order_value']) && $viewDatas['order_value'] == 'DESC' ? "ASC" : "DESC"; @@ -354,13 +359,13 @@ class CommonHelper { switch ($action) { case 'create': - // echo current_url() . '/' . $action . '?' . $this->request->getUri()->getQuery(); + // echo current_url() . '/' . $action . '?' . $this->getRequest()->getUri()->getQuery(); $extras = ["class" => "btn btn-outline btn-primary btn-circle", "target" => "_self", ...$extras]; $action = form_label( ICONS['ADD'], $action, [ - "data-src" => current_url() . '/' . $action . '?' . $this->request->getUri()->getQuery(), + "data-src" => current_url() . '/' . $action . '?' . $this->getRequest()->getUri()->getQuery(), "data-bs-toggle" => "modal", "data-bs-target" => "#index_action_form", ...$extras @@ -381,7 +386,7 @@ class CommonHelper $viewDatas['cnt'], $action, [ - "data-src" => current_url() . '/' . $action . '/' . $viewDatas['entity']->getPK() . '?' . $this->request->getUri()->getQuery(), + "data-src" => current_url() . '/' . $action . '/' . $viewDatas['entity']->getPK() . '?' . $this->getRequest()->getUri()->getQuery(), "data-bs-toggle" => "modal", "data-bs-target" => "#index_action_form", ...$extras diff --git a/app/Helpers/Customer/ServiceHelper.php b/app/Helpers/Customer/ServiceHelper.php index b33e079..e464b4b 100644 --- a/app/Helpers/Customer/ServiceHelper.php +++ b/app/Helpers/Customer/ServiceHelper.php @@ -2,6 +2,7 @@ namespace App\Helpers\Customer; +use App\Entities\Equipment\CodeEntity; use App\Models\Customer\ServiceModel; use CodeIgniter\HTTP\IncomingRequest; @@ -57,13 +58,13 @@ class ServiceHelper extends CustomerHelper //CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다. $form_temps = ["'; $form = implode("", $form_temps); @@ -88,10 +89,11 @@ class ServiceHelper extends CustomerHelper case "DOMAIN": $temps = ["