dbmsv3 init...1

This commit is contained in:
choi.jh 2025-10-17 11:36:43 +09:00
parent e067709b14
commit 744de2f644
14 changed files with 101 additions and 122 deletions

View File

@ -29,15 +29,23 @@ class ServiceCell extends CustomerCell
$this->getService()->setFormFilters();
$this->getService()->setFormRules();
$this->getService()->setFormOptions();
//서비스별 미납 Count
$unPaids = $this->getPaymentService()->getUnPaids('serviceinfo_uid', ['clientinfo_uid' => $params['clientinfo_uid']]);
$entities = $this->getService()->getEntities(['clientinfo_uid' => $params['clientinfo_uid']]);
//서비스별 서버리스트
$entities = [];
$childServers = [];
foreach ($this->getService()->getEntities(['clientinfo_uid' => $params['clientinfo_uid']]) as $entity) {
$entities[] = $entity;
$childServers[$entity->getPK()] = $this->getService()->getServerService()->getEntities(['serviceinfo_uid' => $entity->getPK()]);
}
$template = array_key_exists('template', $params) ? $params['template'] : __FUNCTION__;
return view('cells/service/' . $template, [
'serviceCellDatas' => [
'control' => $this->getService()->getControlDatas(),
'service' => $this->getService(),
'entities' => $entities,
'unPaids' => $unPaids,
'entities' => $entities,
'childServers' => $childServers,
'serverPartHelper' => new ServerPartHelper(),
]
]);

View File

@ -13,7 +13,6 @@ use Psr\Log\LoggerInterface;
class ServiceController extends CustomerController
{
private ?ServerService $_serverService = null;
private ?PaymentService $_paymentService = null;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
@ -31,20 +30,6 @@ class ServiceController extends CustomerController
}
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
{
@ -88,28 +73,16 @@ class ServiceController extends CustomerController
$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
$this->unPaids = $this->getService()->getPaymentService()->getUnPaids('serviceinfo_uid');
//서비스별 서버리스트
$childServers = [];
$this->unPaids = $this->getPaymentService()->getUnPaids('serviceinfo_uid');
foreach ($this->getService()->getEntities() as $entity) {
$entities[] = $entity;
$childServers[$entity->getPK()] = $this->getChildServers($entity);
$childServers[$entity->getPK()] = $this->getService()->getServerService()->getEntities(['serviceinfo_uid' => $entity->getPK()]);
}
$this->childServers = $childServers;
return $entities;
@ -157,11 +130,9 @@ class ServiceController extends CustomerController
if (!$entity instanceof ServiceEntity) {
throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다.");
}
$formDatas = $this->getService()->getFormDatas();
$formDatas['type'] = 'alternative'; //대체서버로 등록하기위해 필요
$this->entity = $this->getService()->addServer($entity, $formDatas);
$this->entity = $this->getService()->addServer($entity, $this->getService()->getFormDatas());
$db->transCommit();
return "대체서버추가가 완료되었습니다.";
return "<script>alert('대체서버추가가 완료되었습니다.'); history.back();</script>";
} catch (\Exception $e) {
$db->transRollback();
return $this->getResultFail($e->getMessage());

View File

@ -56,34 +56,12 @@ class SearchController extends AdminController
}
return $result;
}
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;
}
protected function index_process(array $entities = []): array
{
$keyword = $this->request->getGet('keyword'); // 검색어
if (!$keyword) {
throw new \Exception("[{$keyword}] 검색어가 지정되지 않았습니다. ");
}
// ->select([
// 's.serviceinfo_uid',
// 's.uid AS server_uid',
// 's.title AS server_title',
// 'c.uid AS client_uid',
// 'c.name AS client_name',
// 'sp.uid AS part_uid',
// 'sp.title AS part_title'
// ])
$db = \Config\Database::connect();
$builder = $db->table('serverinfo s')
->distinct()
@ -108,11 +86,11 @@ class SearchController extends AdminController
foreach ($results as $result) {
$uids[] = "'{$result['serviceinfo_uid']}'";
}
//서비스별 미납 Count
//서비스별 서버리스트
$childServers = [];
foreach ($this->getService()->getEntities("uid IN (" . implode(",", $uids) . ")") as $entity) {
$entities[] = $entity;
$childServers[$entity->getPK()] = $this->getChildServers($entity);
$childServers[$entity->getPK()] = $this->getService()->getServerService()->getEntities(['serviceinfo_uid' => $entity->getPK()]);
}
$this->childServers = $childServers;
return $entities;

View File

@ -221,15 +221,6 @@ class ServiceService extends CustomerService
case 'serverinfo_uid':
$options = $this->getServerService()->getEntities();
break;
case 'CPU':
case 'RAM':
case 'DISK':
case 'SOFTWARE':
case 'SWITCH':
case 'IP':
case 'CS':
$options = $this->getServerService()->getFormOption($field, $options);
break;
default:
$options = parent::getFormOption($field, $options);
break;
@ -285,8 +276,11 @@ class ServiceService extends CustomerService
//대체서버추가(가격변동은 없음)
public function addServer(ServiceEntity $entity, array $formDatas): ServiceEntity
{
//대체서버추가 및 결제처리는 하지않음
return $this->getServerService()->setService('create', $entity, ['type' => SERVER['TYPES']['ALTERNATIVE']]);
if (!array_key_exists('serverinfo_uid', $formDatas)) {
throw new \Exception(__METHOD__ . "에서 오류발생:대체서버가 지정되지 않았습니다.");
}
$formDatas['type'] = 'alternative'; //대체서버로 등록하기위해 필요
return $this->getServerService()->setService('create', $entity, $formDatas);
}
//대체서버를 메인서버로 설정
public function changeServer(ServiceEntity $entity, array $formDatas): ServiceEntity

View File

@ -154,7 +154,7 @@ class ServerService extends EquipmentService implements ServiceInterface
switch ($action) {
case 'create':
if (!array_key_exists('serverinfo_uid', $serviceFormDatas)) {
throw new \Exception(__METHOD__ . "에서 {$action}오류발생: 서버가 지정되지 않았습니다.");
throw new \Exception(__METHOD__ . "에서 {$action}오류발생: 서버가 지정되지 않았습니다.\n" . var_export($serviceFormDatas, true));
}
$entity = $this->getEntity($serviceFormDatas['serverinfo_uid']);
if (!$entity instanceof ServerEntity || $entity->getStatus() != STATUS['AVAILABLE']) {

View File

@ -1,6 +1,16 @@
<?= $this->extend(LAYOUTS[$viewDatas['layout']]['path']) ?>
<?= $this->section('content') ?>
<link href="/css/<?= $viewDatas['layout'] ?>/index.css" media="screen" rel="stylesheet" type="text/css" />
<style>
textarea.note-box {
width: 100%;
min-height: 150px;
height: 100%;
/* 부모의 높이를 꽉 채움 */
resize: none;
box-sizing: border-box;
}
</style>
<?php if ($error = session('error')): echo $viewDatas['service']->getHelper()->alert($error) ?><?php endif ?>
<div class="layout_top"><?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/top'); ?></div>
<!-- Layout Middle Start -->

View File

@ -60,7 +60,16 @@
<td nowrap>
<?= $viewDatas['service']->getHelper()->getFieldView('clientinfo_uid', $entity->getClientInfoUID(), $viewDatas) ?>
</td>
<td nowrap><?= implode("", $viewDatas['childServers'][$entity->getPK()]) ?></td>
<td nowrap>
<?php foreach ($viewDatas['childServers'][$entity->getPK()] as $serverEntity): ?>
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $serverEntity->getPK(),
'types' => SERVERPART['SERVICE_PARTTYPES'],
'serviceinfo_serverinfo_uid' => $entity->getServerEntity()->getPK(),
'template' => 'partlist_service'
]) ?>
<?php endforeach ?>
</td>
<td nowrap class=" text-end">
<?= $viewDatas['service']->getHelper()->getFieldView('sale', $entity->getSale(), $viewDatas) ?>
</td>

View File

@ -29,4 +29,5 @@
</table>
</div>
<div class="form_bottom"><?= $this->include("templates/{$viewDatas['layout']}/form_content_bottom"); ?></div>
<?= $this->include("templates/common/" . (isset($viewDatas['modal_type']) ? $viewDatas['modal_type'] : 'modal_iframe')); ?>
<?= $this->endSection() ?>

View File

@ -36,7 +36,7 @@
<th class="index_head_short_column" style="width:40px;">번호</th>
<th class="index_head_short_column">
<?= $viewDatas['service']->getHelper()->getListLabel('site', lang("{$viewDatas['class_path']}.label.site"), $viewDatas) ?>
/<?= $viewDatas['service']->getHelper()->getListLabel('location', lang("{$viewDatas['class_path']}.label.location"), $viewDatas) ?>
/ <?= $viewDatas['service']->getHelper()->getListLabel('location', lang("{$viewDatas['class_path']}.label.location"), $viewDatas) ?>
</th>
<th class="index_head_short_column">
<?= $viewDatas['service']->getHelper()->getListLabel('clientinfo_uid', lang("{$viewDatas['class_path']}.label.clientinfo_uid"), $viewDatas) ?>
@ -74,9 +74,17 @@
</td>
<td nowrap>
<?= $viewDatas['service']->getHelper()->getFieldView('clientinfo_uid', $entity->getClientInfoUID(), $viewDatas) ?>
<BR><?= $viewDatas['service']->getHelper()->getFieldView('code', $entity->getCode(), $viewDatas) ?>
</td>
<td><?= implode("", $viewDatas['childServers'][$entity->getPK()]) ?></td>
<td>
<?php foreach ($viewDatas['childServers'][$entity->getPK()] as $serverEntity): ?>
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $serverEntity->getPK(),
'types' => SERVERPART['SERVICE_PARTTYPES'],
'serviceinfo_serverinfo_uid' => $entity->getServerEntity()->getPK(),
'template' => 'partlist_service'
]) ?>
<?php endforeach ?>
</td>
<td nowrap class="text-end">
<?= $viewDatas['service']->getHelper()->getFieldView('sale', $entity->getSale(), $viewDatas) ?>
</td>

View File

@ -37,4 +37,5 @@
</table>
<div class="form_bottom"><?= $this->include("templates/{$viewDatas['layout']}/form_content_bottom"); ?></div>
</div>
<?= $this->include("templates/common/" . (isset($viewDatas['modal_type']) ? $viewDatas['modal_type'] : 'modal_iframe')); ?>
<?= $this->endSection() ?>

View File

@ -12,8 +12,8 @@
<?php endforeach ?>
<?php $view_texts = [] ?>
<?php foreach ($htmls as $type => $datas): ?><?php $view_texts[] = implode(',', $texts[$type]) ?><?php endforeach ?>
<?php $text = implode(" / ", $view_texts) ?>
<span class="serverparts rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<?php $text = implode("/", $view_texts) ?>
<span class="serverparts" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<?php $view_htmls = [] ?>
<?php foreach ($htmls as $type => $datas): ?><?php $view_htmls[] = implode(",", $datas) ?><?php endforeach ?>
<?= implode(" / ", $view_htmls) ?>
<?= implode("/", $view_htmls) ?>

View File

@ -17,19 +17,18 @@
$serverPartCellDatas['serverEntity']->getOS()
] ?>
<?php foreach ($htmls as $type => $datas): ?><?php $view_htmls[] = implode(",", $datas) ?><?php endforeach ?>
<?php $view_texts = [] ?>
<?php if (array_key_exists('serverEntity', $serverPartCellDatas) && $serverPartCellDatas['serverEntity']): ?>
<?php $view_texts[] = $serverPartCellDatas['serverEntity']->getCode() ?>
<?php $view_texts[] = $serverPartCellDatas['serverEntity']->getIP() ?>
<?php $view_texts[] = $serverPartCellDatas['serverEntity']->getSwitch() ?>
<?php $view_texts[] = $serverPartCellDatas['serverEntity']->getOS() ?>
<?php endif ?>
<?php $view_texts = [
$serverPartCellDatas['serverEntity']->getCode(),
$serverPartCellDatas['serverEntity']->getIP(),
$serverPartCellDatas['serverEntity']->getSwitch(),
$serverPartCellDatas['serverEntity']->getOS()
] ?>
<?php foreach ($texts as $type => $datas): ?><?php $view_texts[] = implode(',', $datas) ?><?php endforeach ?>
<?php $text = implode("/", $view_texts) ?>
<div class="text-nowrap" style="font-size: 0.9em;">
<?php $text = implode(" / ", $view_texts) ?>
<span class="serverparts rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<span class="serverparts" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<?= $serverPartCellDatas['serviceinfo_serverinfo_uid'] == $serverPartCellDatas['serverEntity']->getPK() ? "📌" : "<a href=\"/admin/customer/service/changeServer/{$serverPartCellDatas['serverEntity']->getServiceInfoUID()}?serverinfo_uid={$serverPartCellDatas['serverEntity']->getPK()}\">✔️</a>" ?>
<?= implode(" / ", $view_htmls) ?>
<?= implode("/", $view_htmls) ?>
<?php if ($serverPartCellDatas['serverEntity']): ?>
<a href="/admin/customer/service/terminateServer/<?= $serverPartCellDatas['serverEntity']->getServiceInfoUID() ?>?serverinfo_uid=<?= $serverPartCellDatas['serverEntity']->getPK() ?>"></a>
<?php endif ?>

View File

@ -1,26 +1,11 @@
<style>
.note-box {
width: 100%;
height: 140px;
resize: none;
}
</style>
<?php foreach ($serviceCellDatas['entities'] as $entity): ?>
<?php $serviceCellDatas['entity'] = $entity ?>
<?php $serverEntity = $entity->getServerEntity() ?>
<div class="rounded border border-gray p-2 mt-3">
<table class="table table-bordered table-hover table-striped">
<table class="table table-bordered table-striped">
<tr class="text-center">
<th style="width: 120px">서비스정보</th>
<th style="width: 120px">서버정보</th>
<th style="width: 250px">
<?= $serviceCellDatas['serverPartHelper']->getListButton('CPU', 'CPU', ['serverinfo_uid' => $serverEntity->getPK()]) ?>
/ <?= $serviceCellDatas['serverPartHelper']->getListButton('RAM', 'RAM', ['serverinfo_uid' => $serverEntity->getPK()]) ?>
/ <?= $serviceCellDatas['serverPartHelper']->getListButton('DISK', 'DISK', ['serverinfo_uid' => $serverEntity->getPK()]) ?>
</th>
<th style="width: 200px"><?= $serviceCellDatas['serverPartHelper']->getListButton('IP', '추가IP', ['serverinfo_uid' => $serverEntity->getPK()]) ?></th>
<th style="width: 200px"><?= $serviceCellDatas['serverPartHelper']->getListButton('CS', 'CS', ['serverinfo_uid' => $serverEntity->getPK()]) ?></th>
<th>서비스 비고</th>
<th>서버</th>
<th style="width: 600px">서비스 비고</th>
<th style="width: 200px">결제처리</th>
</tr>
<tr class="text-left">
@ -28,23 +13,11 @@
<div><?= $serviceCellDatas['service']->getHelper()->getFieldView('site', $entity->getSite(), $serviceCellDatas) ?></div>
<div><?= $serviceCellDatas['service']->getHelper()->getFieldView('location', $entity->getLocation(), $serviceCellDatas) ?></div>
</td>
<td class="text-center" nowrap><?= view('cells/service/server', ['serverEntities' => $serviceCellDatas['childServers'][$entity->getPK()]]) ?></td>
<td class="text-center" nowrap>
<div> <?= $serviceCellDatas['serverPartHelper']->getFieldView('SERVER', "", ['serverEntity' => $serverEntity]) ?></div>
<div>[<?= $serverEntity->getTitle() ?>]</div>
<div>[<?= $serverEntity->getIP() ?>]</div>
<div>[<?= $serverEntity->getOS() ?>]</div>
</td>
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $serverEntity->getPK(),
'types' => SERVERPART['ALL_PARTTYPES'],
'template' => 'part_detail'
]) ?>
<td>
<?= form_open("/admin/customer/service/history/{$entity->getPK()}?return_url=" . urlencode(current_url()), ['method' => "post"]) ?>
<div class="row align-items-center">
<div class="col-9"><textarea name="history" class="form-control note-box"><?= $entity->getHistory() ?></textarea></div>
<div class="col-3"><?= form_submit('', '저장', array("class" => "btn btn-outline btn-primary")); ?></div>
</div>
<textarea name="history" class="form-control note-box"><?= $entity->getHistory() ?></textarea>
<?= form_submit('', '저장', array("class" => "btn btn-outline btn-primary m-3")); ?>
<?= form_close() ?>
</td>
<td>

View File

@ -0,0 +1,27 @@
<table class="table table-bordered table-striped">
<?php foreach ($serverEntities as $serverEntity): ?>
<tr class="text-center">
<th style="width: 250px"><?= $serviceCellDatas['serverPartHelper']->getFieldView('SERVER', "", ['serverEntity' => $serverEntity]) ?></th>
<th style="width: 250px">
<?= $serviceCellDatas['serverPartHelper']->getListButton('CPU', 'CPU', ['serverinfo_uid' => $serverEntity->getPK()]) ?>
/ <?= $serviceCellDatas['serverPartHelper']->getListButton('RAM', 'RAM', ['serverinfo_uid' => $serverEntity->getPK()]) ?>
/ <?= $serviceCellDatas['serverPartHelper']->getListButton('DISK', 'DISK', ['serverinfo_uid' => $serverEntity->getPK()]) ?>
</th>
<th style="width: 200px"><?= $serviceCellDatas['serverPartHelper']->getListButton('IP', '추가IP', ['serverinfo_uid' => $serverEntity->getPK()]) ?></th>
<th style="width: 200px"><?= $serviceCellDatas['serverPartHelper']->getListButton('CS', 'CS', ['serverinfo_uid' => $serverEntity->getPK()]) ?></th>
</tr>
<tr class="text-center">
<td nowrap>
<div><?= $serverEntity->getTitle() ?></div>
<div><?= $serverEntity->getIP() ?></div>
<div><?= $serverEntity->getOS() ?></div>
</td>
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $serverEntity->getPK(),
'types' => SERVERPART['ALL_PARTTYPES'],
'template' => 'part_detail'
]) ?>
</tr>
<?php endforeach; ?>
</table>