dbms_init...1

This commit is contained in:
choi.jh 2025-07-10 14:42:01 +09:00
parent 6f4701a5a4
commit cd76b2566d
10 changed files with 80 additions and 155 deletions

View File

@ -31,6 +31,7 @@ abstract class CustomerController extends AdminController
{
//LINE,IP,SERVER등 추가 FilterOption 셋팅용
foreach (SERVICE_ITEM_TYPES as $item_type => $label) {
$this->setFieldRule($item_type, $this->getFormFieldRule($this->getAction(), $item_type));
$this->setFilterFieldOption($item_type, $this->getServiceService()->getFilterOptionsByItemType($item_type));
}
}

View File

@ -27,11 +27,7 @@ class ServiceItemController extends CustomerController
{
parent::initAction($action, $fields);
//LINE,IP,SERVER등 추가 FilterOption 셋팅용
foreach (SERVICE_ITEM_TYPES as $item_type => $label) {
$options = $this->getService()->getServiceItemLinkService($item_type)->getEntities();
$this->setFieldRule($item_type, $this->getFormFieldRule($this->getAction(), $item_type));
$this->setFilterFieldOption($item_type, $options);
}
$this->setFilterOptionsByItemType();
}
public function getService(): ServiceItemService
{
@ -74,7 +70,7 @@ class ServiceItemController extends CustomerController
if (!$item_type) {
throw new \Exception(__FUNCTION__ . "에서 item_type이 지정되지 않았습니다.");
}
$options = $this->getFilterFieldOption($item_type);
$options = $this->getFilterFieldOption('item_type');
break;
default:
$options = parent::getFormFieldOption($field, $options);

View File

@ -180,8 +180,7 @@ class ServicePaymentController extends CustomerController
$this->initAction(__FUNCTION__);
//LINE,IP,SERVER등 추가 FilterOption 셋팅용
foreach (SERVICE_ITEM_TYPES as $item_type => $label) {
$options = $this->getService()->getServiceItemLinkService($item_type)->getEntities();
$this->setFilterFieldOption($item_type, $options);
$this->setFilterFieldOption($item_type, $this->getServiceService()->getFilterOptionsByItemType($item_type));
}
$this->invoice_process();
return $this->getResultSuccess();

View File

@ -4,20 +4,21 @@ namespace App\Controllers;
use App\Controllers\BaseController;
use App\Entities\FormOptionEntity;
use App\Libraries\LogCollector;
use App\Services\MyLogService;
use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Validation\Validation;
use CodeIgniter\HTTP\DownloadResponse;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Html;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
use Psr\Log\LoggerInterface;
use App\Libraries\LogCollector;
use App\Services\MyLogService;
abstract class CommonController extends BaseController
{
private $_myAuth = null;
@ -146,11 +147,18 @@ abstract class CommonController extends BaseController
if (!array_key_exists('filter_optons', $this->_control)) {
$this->_control['filter_optons'] = [];
}
$this->_control['filter_optons'][$field] = $options;
//Filter Options 초기화
$this->_control['filter_optons'][$field] = [
"" => new FormOptionEntity(["uid" => "", "title" => lang("{$this->getService()->getClassName()}.label.{$field}") . " 선택"])
];
foreach ($options as $option) {
$this->_control['filter_optons'][$field][$option->getPK()] = $option;
}
// dd($this->_control['filter_optons'][$field]);
}
final protected function getFilterFieldOption(string $field): array
{
return $this->_control['filter_optons'][$field] ?? [];
return $this->_control['filter_optons'][$field];
}
protected function initAction(string $action, $fields = []): void

View File

@ -4,12 +4,6 @@ namespace App\Entities;
class FormOptionEntity extends CommonEntity
{
public function getPK(): string
{
return $this->attributes['uid'];
}
public function getTitle(): string
{
return $this->attributes['title'];
}
const PK = "uid";
const TITLE = "title";
}

View File

@ -210,6 +210,23 @@ class CommonHelper
}
// header.php에서 getFieldForm_Helper사용
protected function form_dropdown_disabled(string $field, mixed $value, array $formOptions, array $extras = [], mixed $disabledKey = null): string
{
// $formOptions는 필터 옵션 배열로, key는 필터 엔티티의 PK, value는 필터 엔티티 객체
$extra = "";
foreach ($extras as $option_tag => $option_value) {
$extra = sprintf(" %s=\"%s\"", $option_tag, htmlspecialchars($option_value, ENT_QUOTES, 'UTF-8'));
}
$html = sprintf("<select name=\"%s\" %s>", $field, $extra);
foreach ($formOptions as $key => $filterEntity) {
$isSelected = $key == $value ? ' selected' : '';
// disabledKey가 설정되어 있으면 해당 키를 disabled로 설정
$isDisabled = $disabledKey !== null && $filterEntity->getStatus() === $disabledKey ? ' disabled' : '';
$html .= sprintf("<option value=\"%s\"%s%s>%s</option>", $key, $isSelected, $isDisabled, $filterEntity->getTitle());
}
$html .= '</select>';
return $html;
}
public function getFieldForm(string $field, mixed $value, array $viewDatas, array $extras = []): string
{
switch ($field) {
@ -234,12 +251,7 @@ class CommonHelper
}
$form = implode(" ", $forms);
} else {
$extra_class = isset($extras['class']) ? $extras['class'] . ' select-field' : 'select-field';
$formOptions = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택'];
foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) {
$formOptions[$key] = $filterEntity->getTitle();
}
$form = form_dropdown($field, $formOptions, $value, [...$extras]);
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras);
}
break;
case 'expired_at':
@ -247,30 +259,23 @@ class CommonHelper
case 'start_at':
case 'updated_at':
case 'created_at':
$extra_class = isset($extras['class']) ? $extras['class'] . ' calender' : 'calender';
$form = form_input($field, $value ?? "", ['class' => $extra_class, ...$extras]);
$extras['class'] = sprintf("class=\"%s\"", array_key_exists('class', $extras) ? $extras['class'] . ' calender' : 'calender');
$form = form_input($field, $value ?? "", $extras);
break;
case 'description':
case 'content':
$extra_class = isset($extras['class']) ? $extras['class'] . ' tinymce' : 'tinymce';
$form = form_textarea($field, $value ?? "", ['id' => $field, 'class' => $extra_class, ...$extras]);
$extras['class'] = sprintf("class=\"%s\"", array_key_exists('class', $extras) ? $extras['class'] . ' tinymce' : 'tinymce');
$form = form_textarea($field, $value ?? "", ['id' => $field, ...$extras]);
break;
case 'clientinfo_uid':
case 'ownerinfo_uid':
case 'user_uid':
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras);
break;
default:
if (in_array($field, $viewDatas['control']['filter_fields'])) {
if (!is_array($viewDatas['control']['filter_optons'][$field])) {
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
}
$formOptions = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택'];
// 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, create_form 액션에서는 기본값:DEFAULTS['STATUS']을 설정
if (in_array($viewDatas['control']['action'], ['create', 'create_form'])) {
$value = $value ?? DEFAULTS['STATUS'];
}
$form = form_dropdown($field, $formOptions, $value, ['class' => $extra_class, ...$extras]);
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras);
} else {
$form = form_input($field, $value ?? "", $extras);
}

View File

@ -48,46 +48,12 @@ class ServiceHelper extends CustomerHelper
{
switch ($field) {
case 'switchinfo_uid':
if (!is_array($viewDatas['control']['filter_optons'][$field])) {
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $field) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === SwitchEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';
if (array_key_exists('index_content_top_filter', $extras)) {
$disabled = "";
}
if ($viewDatas['control']['action'] == "modify_form" && $value == $filterEntity->getPK()) {
$disabled = "";
}
$selected = ($value == $key) ? 'selected="selected"' : '';
$form_temps[] = "<option value=\"{$key}\"{$selected} {$disabled}>{$filterEntity->getTitle()}</option>";
}
$form_temps[] = '</select>';
$form = implode("", $form_temps);
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras);
break;
case 'codeinfo_uid':
if (!is_array($viewDatas['control']['filter_optons'][$field])) {
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $field) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === CodeEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';
if (array_key_exists('index_content_top_filter', $extras)) {
$disabled = "";
}
if ($viewDatas['control']['action'] == "modify_form" && $value == $filterEntity->getPK()) {
$disabled = "";
}
$selected = ($value == $key) ? 'selected="selected"' : '';
$form_temps[] = "<option value=\"{$key}\"{$selected} {$disabled}>{$filterEntity->getTitle()}</option>";
}
$form_temps[] = '</select>';
$form = implode("", $form_temps);
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras, CodeEntity::STATUS_OCCUPIED);
break;
default:
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);

View File

@ -2,9 +2,9 @@
namespace App\Helpers\Customer;
use App\Models\Customer\ServiceItemModel;
use App\Entities\Equipment\Part\DomainEntity;
use App\Entities\Equipment\Part\IpEntity;
use App\Models\Customer\ServiceItemModel;
class ServiceItemHelper extends CustomerHelper
{
@ -15,54 +15,25 @@ class ServiceItemHelper extends CustomerHelper
}
//ItemType에 따른 조건부 추가 Index Page
private function getFieldFormByItemType(string $field, mixed $value, array $viewDatas, array $extras = []): string
final function getFieldFormByByItemType(string $field, mixed $value, array $viewDatas, array $extras = []): string
{
$form = "";
// dd($viewDatas);
// dd($viewDatas['control']);
$item_type = $viewDatas['control']['filter_values']['item_type'];
//Field는 item_uid이지만 , item_tpe에 따라 filter_options가 달라진다.
switch ($item_type) {
case "IP":
if (!is_array($viewDatas['control']['filter_optons'][$item_type])) {
throw new \Exception(__METHOD__ . "에서 {$item_type}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $item_type) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$item_type] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === IpEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';
if (array_key_exists('index_content_top_filter', $extras)) {
$disabled = "";
}
if ($viewDatas['control']['action'] == "modify_form" && $value == $filterEntity->getPK()) {
$disabled = "";
}
$selected = ($value == $key) ? 'selected="selected"' : '';
$form_temps[] = "<option value=\"{$key}\"{$selected} {$disabled}>{$filterEntity->getTitle()}</option>";
}
$form_temps[] = '</select>';
$form = implode("", $form_temps);
// $options = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택'];
// // index_content_top_filter가 있으면 disabled를 설정하지 않음
// // action이 modify_form이면 disabled로 설정하지 않음
// if (array_key_exists('index_content_top_filter', $extras) || ($viewDatas['control']['action'] == "modify_form" && $value == $filterEntity->getPK())) {
// $disabledKeys = [];
// }
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$item_type], $extras, IpEntity::STATUS_OCCUPIED);
break;
case 'DOMAIN':
if (!is_array($viewDatas['control']['filter_optons'][$item_type])) {
throw new \Exception(__METHOD__ . "에서 {$item_type}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $item_type) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$item_type] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === DomainEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';
if (array_key_exists('index_content_top_filter', $extras)) {
$disabled = "";
}
if ($viewDatas['control']['action'] == "modify_form" && $value == $filterEntity->getPK()) {
$disabled = "";
}
$selected = ($value == $key) ? 'selected="selected"' : '';
$form_temps[] = "<option value=\"{$key}\"{$selected} {$disabled}>{$filterEntity->getTitle()}</option>";
}
$form_temps[] = '</select>';
$form = implode("", $form_temps);
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$item_type], $extras, DomainEntity::STATUS_OCCUPIED);
break;
case "LINE":
case "SERVER":
@ -71,20 +42,8 @@ class ServiceItemHelper extends CustomerHelper
case "STORAGE":
case "SOFTWARE":
case "DEFENCE":
// dd($viewDatas['control']['filter_optons']);
if (!is_array($viewDatas['control']['filter_optons'][$item_type])) {
throw new \Exception(__METHOD__ . "에서 {$item_type}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $item_type) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$item_type] as $key => $filterEntity) {
$disabled = '';
$selected = ($value == $key) ? 'selected="selected"' : '';
$form_temps[] = "<option value=\"{$key}\"{$selected} {$disabled}>{$filterEntity->getTitle()}</option>";
}
$form_temps[] = '</select>';
$form = implode("", $form_temps);
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$item_type], $extras);
break;
default:
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);
@ -96,7 +55,7 @@ class ServiceItemHelper extends CustomerHelper
{
switch ($field) {
case 'item_uid':
$form = $this->getFieldFormByItemType($field, $value, $viewDatas, $extras);
$form = $this->getFieldFormByByItemType($field, $value, $viewDatas, $extras);
break;
default:
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);

View File

@ -125,6 +125,11 @@ abstract class CustomerService extends CommonService
}
return $options;
}
//ItemType에 따른 FilterOption 설정용
final public function getFilterOptionsByItemType(string $item_type): array
{
return $this->getServiceItemLinkService($item_type)->getEntities();
}
final public function getClient(int $uid): ClientEntity
{
$entity = $this->getClientService()->getEntity($uid);

View File

@ -127,23 +127,15 @@ class ServiceService extends CustomerService
}
return $options;
}
//ItemType에 따른 FilterOption 설정용
public function getFilterOptionsByItemType(string $item_type): array
{
return $this->getServiceItemLinkService($item_type)->getEntities();
}
//Service마다 ItemEntities 설정용
public function setItemEntitiesByService(ServiceEntity $entity): ServiceEntity
{
foreach (SERVICE_ITEM_TYPES as $item_type => $label) {
$entity->setItemEntities(
$item_type,
$this->getServiceItemService()->getEntities([
$itemEntities = $this->getServiceItemService()->getEntities([
'serviceinfo_uid' => $entity->getPK(),
'item_type' => $item_type
])
);
]);
$entity->setItemEntities($item_type, $itemEntities);
}
return $entity;
}