dbmsv4 init...1

This commit is contained in:
최준흠 2025-12-02 18:24:50 +09:00
parent e347f0abc5
commit 2b83afd59f
12 changed files with 175 additions and 84 deletions

View File

@ -59,12 +59,10 @@ class ServiceController extends CustomerController
{ {
try { try {
$action = __FUNCTION__; $action = __FUNCTION__;
$fields = ['serverinfo_uid']; $this->action_init_process($action, $this->request->getVar());
$this->service->getFormService()->setFormFields($fields); return $this->action_render_process($action, $this->getViewDatas(), $this->request->getVar('ActionTemplate') ?? 'server');
$this->service->getFormService()->setFormRules($action, $fields);
return $this->action_render_process($action, $this->getViewDatas(), $this->request->getVar('ActionTemplate'));
} catch (\Throwable $e) { } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버추가 오류:" . $e->getMessage()); return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버 추가폼 오류:" . $e->getMessage());
} }
} }
public function alternative_create(int $uid): string|RedirectResponse public function alternative_create(int $uid): string|RedirectResponse
@ -77,7 +75,7 @@ class ServiceController extends CustomerController
//서비스정보 가져오기 //서비스정보 가져오기
$entity = $this->service->getEntity($uid); $entity = $this->service->getEntity($uid);
//대체서버 추가 //대체서버 추가
service('equipment_serverservice')->attachToService($entity, $this->request->getPost()); service('equipment_serverservice')->attachToService($entity, $this->request->getPost('serverinfo_uid'));
return $this->action_redirect_process('info', "{$this->getTitle()}에서 대체서버추가가 완료되었습니다"); return $this->action_redirect_process('info', "{$this->getTitle()}에서 대체서버추가가 완료되었습니다");
} catch (\Throwable $e) { } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버추가 오류:" . $e->getMessage()); return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버추가 오류:" . $e->getMessage());
@ -109,7 +107,7 @@ class ServiceController extends CustomerController
//서비스정보 가져오기 //서비스정보 가져오기
$entity = $this->service->getEntity($uid); $entity = $this->service->getEntity($uid);
//대체서버 해지 //대체서버 해지
service('equipment_serverservice')->detachFromService($entity, $this->request->getGet()); service('equipment_serverservice')->detachFromService($entity, $this->request->getGet('serverinfo_uid'));
return $this->action_redirect_process('info', "{$this->getTitle()}에서 대체서버해지가 완료되었습니다"); return $this->action_redirect_process('info', "{$this->getTitle()}에서 대체서버해지가 완료되었습니다");
} catch (\Throwable $e) { } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버 해지 오류:" . $e->getMessage()); return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버 해지 오류:" . $e->getMessage());

View File

@ -113,18 +113,45 @@ abstract class CommonForm
return $this->_batchjobButtons; return $this->_batchjobButtons;
} }
//Validation용 //Validation용
// final public function validate(array $formDatas): bool
// {
// $validation = service('validation');
// $dynamicRules = [];
// foreach ($this->getFormRules() as $field => $rule) {
// //field별 추가 커스텀 룰 적용
// list($field, $rule) = $this->getValidationRule($field, $rule);
// $dynamicRules[$field] = ['rules' => $rule, 'label' => $this->getFormFields()[$field]];
// }
// $validation->setRules($dynamicRules);
// return $validation->run($formDatas);
// }
final public function validate(array $formDatas): bool final public function validate(array $formDatas): bool
{ {
$validation = service('validation'); $validation = service('validation');
$dynamicRules = []; $dynamicRules = [];
$dynamicLabels = []; // 레이블 배열 추가
foreach ($this->getFormRules() as $field => $rule) { foreach ($this->getFormRules() as $field => $rule) {
//field별 추가 커스텀 룰 적용
list($field, $rule) = $this->getValidationRule($field, $rule); list($field, $rule) = $this->getValidationRule($field, $rule);
$dynamicRules[$field] = ['rules' => $rule, 'label' => $this->getFormFields()[$field]]; $dynamicRules[$field] = $rule; // 규칙만 저장
$dynamicLabels[$field] = $this->getFormFields()[$field];
} }
$validation->setRules($dynamicRules); log_message('debug', 'Rules: ' . var_export($dynamicRules, true));
return $validation->run($formDatas); log_message('debug', 'Data: ' . var_export($formDatas, true));
// setRules의 세 번째 인자로 레이블 전달
$validation->setRules($dynamicRules, [], $dynamicLabels);
// run()에는 데이터만 전달 (setRules에서 이미 설정됨)
$result = $validation->run($formDatas);
if ($result === false) {
// run()이 false를 반환했다면, 이 시점에서 getErrors()에는 메시지가 있어야 합니다.
log_message('debug', 'Validate Run Failed. Errors: ' . var_export($validation->getErrors(), true));
} else {
log_message('debug', 'Validate Run Succeeded.');
}
return $result;
} }
//필수함수 //필수함수
//사용자정의 함수 //사용자정의 함수
protected function getValidationRule(string $field, string $rule): array protected function getValidationRule(string $field, string $rule): array
@ -186,7 +213,7 @@ abstract class CommonForm
$entities = []; $entities = [];
switch ($field) { switch ($field) {
default: default:
if (in_array($action, ['create_form', 'modify_form'])) { if (in_array($action, ['create_form', 'modify_form', 'alternative_create_form'])) {
if (array_key_exists($field, $formDatas)) { if (array_key_exists($field, $formDatas)) {
$where = sprintf("status = '%s' OR %s='%s'", STATUS['AVAILABLE'], $this->getAttribute('pk_field'), $formDatas[$field]); $where = sprintf("status = '%s' OR %s='%s'", STATUS['AVAILABLE'], $this->getAttribute('pk_field'), $formDatas[$field]);
} else { } else {

View File

@ -77,9 +77,6 @@ class ServiceHelper extends CustomerHelper
public function getListButton(string $action, string $label, array $viewDatas, array $extras = []): string public function getListButton(string $action, string $label, array $viewDatas, array $extras = []): string
{ {
switch ($action) { switch ($action) {
case 'modify':
$action = parent::getListButton($action, $label, $viewDatas, $extras);
break;
case 'addServer': case 'addServer':
$action = form_label( $action = form_label(
$label ? $label : ICONS['REBOOT'], $label ? $label : ICONS['REBOOT'],

View File

@ -4,6 +4,7 @@ namespace App\Services;
use App\DTOs\CommonDTO; use App\DTOs\CommonDTO;
use App\Entities\CommonEntity; use App\Entities\CommonEntity;
use App\Entities\PaymentEntity;
use App\Libraries\AuthContext; use App\Libraries\AuthContext;
use App\Models\CommonModel; use App\Models\CommonModel;
use CodeIgniter\Database\Exceptions\DatabaseException; use CodeIgniter\Database\Exceptions\DatabaseException;
@ -168,6 +169,9 @@ abstract class CommonService
//생성용 //생성용
protected function create_process(array $formDatas): object protected function create_process(array $formDatas): object
{ {
if ($this instanceof PaymentService) {
log_message('debug', var_export($formDatas, true));
}
//FormData 검증 //FormData 검증
if (!$this->getFormService()->validate($formDatas)) { if (!$this->getFormService()->validate($formDatas)) {
throw new ValidationException(implode("\n", service('validation')->getErrors())); throw new ValidationException(implode("\n", service('validation')->getErrors()));
@ -180,7 +184,11 @@ abstract class CommonService
if (!$entity instanceof $entityClass) { if (!$entity instanceof $entityClass) {
throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 {$entityClass}만 가능"); throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 {$entityClass}만 가능");
} }
return $this->save_process($entity); $entity = $this->save_process($entity);
if ($entity instanceof PaymentEntity) {
log_message('debug', var_export($entity, true));
}
return $entity;
} }
final public function create(object $dto): object final public function create(object $dto): object
{ {

View File

@ -2,15 +2,17 @@
namespace App\Services\Customer; namespace App\Services\Customer;
use RuntimeException;
use DateTimeZone;
use DateTimeImmutable;
use App\Models\Customer\ServiceModel;
use App\Helpers\Customer\ServiceHelper;
use App\Forms\Customer\ServiceForm;
use App\Entities\Customer\ServiceEntity;
use App\Entities\CommonEntity;
use App\DTOs\Customer\ServiceDTO; use App\DTOs\Customer\ServiceDTO;
use App\Entities\CommonEntity;
use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerEntity;
use App\Entities\PaymentEntity;
use App\Forms\Customer\ServiceForm;
use App\Helpers\Customer\ServiceHelper;
use App\Models\Customer\ServiceModel;
use DateTimeImmutable;
use DateTimeZone;
use RuntimeException;
class ServiceService extends CustomerService class ServiceService extends CustomerService
{ {
@ -118,6 +120,9 @@ class ServiceService extends CustomerService
'created_at' 'created_at'
]; ];
break; break;
case 'alternative_create_form':
$fields = ['serverinfo_uid'];
break;
} }
$this->getFormService()->setFormFields($fields); $this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules($action, $fields); $this->getFormService()->setFormRules($action, $fields);
@ -171,17 +176,35 @@ class ServiceService extends CustomerService
return $date->format('Y-m-d'); return $date->format('Y-m-d');
} }
// 서비스금액관련처리 // 서비스금액관련처리
public function getCalculatedAmount(int $serverinfo_uid, int $rack, int $line, int $sale): int final public function getCalculatedAmount(int $serverinfo_uid, int $rack, int $line, int $sale): int
{ {
$serverService = service('equipment_serverservice'); $server_amount = service('equipment_serverservice')->getCalculatedAmount($serverinfo_uid);
//기본:상면비+회선비+서버금액(price)+서버파트연결(월비용)-할인액 //기본:서버금액(서버비+서버파트(월비용))+상면비+회선비-할인액
return $rack + $line + $serverService->getCalculatedAmount($serverinfo_uid) - $sale; $amount = (int)$server_amount + $rack + $line - $sale;
// echo "{$server_amount} + {$rack} + $line - {$sale} = {$amount}";
// exit;
return $amount;
}
private function updateAmount(ServiceEntity $entity): ServiceEntity
{
$action = 'modify';
$fields = ['amount'];
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules($action, $fields);
$formDatas['amount'] = $this->getCalculatedAmount(
$entity->getServerInfoUID(),
$entity->getRack(),
$entity->getLine(),
$entity->getSale()
);
return parent::modify_process($entity, $formDatas);
} }
//기본 기능부분 //기본 기능부분
protected function getEntity_process(mixed $entity): ServiceEntity protected function getEntity_process(mixed $entity): ServiceEntity
{ {
return $entity; return $entity;
} }
protected function create_process(array $formDatas): ServiceEntity protected function create_process(array $formDatas): ServiceEntity
{ {
//필수항목검사 //필수항목검사
@ -190,22 +213,17 @@ class ServiceService extends CustomerService
} }
//서비스코드생성 //서비스코드생성
$formDatas['code'] = $formDatas['site'] . "_s" . uniqid(); $formDatas['code'] = $formDatas['site'] . "_s" . uniqid();
//서비스 전체금액 구하기
$formDatas['amount'] = $this->getCalculatedAmount(
(int)$formDatas['serverinfo_uid'],
(int)$formDatas['rack'],
(int)$formDatas['line'],
(int)$formDatas['sale']
);
//서비스 생성 //서비스 생성
$entity = parent::create_process($formDatas); $entity = parent::create_process($formDatas);
if (!$entity instanceof ServiceEntity) { if (!$entity instanceof ServiceEntity) {
throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 ServiceEntity만 가능"); throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 ServiceEntity만 가능");
} }
//서비스비용 설정
$entity = $this->updateAmount($entity);
//서버정보 연결 //서버정보 연결
service('equipment_serverservice')->attachToService($entity); service('equipment_serverservice')->attachToService($entity, $entity->getServerInfoUID());
//결제정보 연결 //결제정보 생성
service('paymentservice')->attachToService($entity); service('paymentservice')->createByService($entity);
return $entity; return $entity;
} }
protected function modify_process($entity, array $formDatas): ServiceEntity protected function modify_process($entity, array $formDatas): ServiceEntity
@ -214,25 +232,21 @@ class ServiceService extends CustomerService
if (!array_key_exists('serverinfo_uid', $formDatas)) { if (!array_key_exists('serverinfo_uid', $formDatas)) {
throw new RuntimeException(__METHOD__ . '에서 오류발생: 서버정보가 정의되지 않았습니다.'); throw new RuntimeException(__METHOD__ . '에서 오류발생: 서버정보가 정의되지 않았습니다.');
} }
//수정전 서비스정보를 currentEntity 복사해준다. //변경전 정보
if ($entity->getServerInfoUID() !== $formDatas['serverinfo_uid']) { $oldEntity = clone $entity;
//결제정보 해지(삭제)처리
service('paymentservice')->detachFromService($entity);
//서비스 전체금액 구하기
$formDatas['amount'] = $this->getCalculatedAmount(
(int)$formDatas['serverinfo_uid'],
(int)$entity->getRack(),
(int)$entity->getLine(),
(int)$entity->getSale()
);
}
//서비스 수정 //서비스 수정
$entity = parent::modify_process($entity, $formDatas); $entity = parent::modify_process($entity, $formDatas);
if (!$entity instanceof ServiceEntity) { if (!$entity instanceof ServiceEntity) {
throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 ServiceEntity만 가능"); throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 ServiceEntity만 가능");
} }
//결제정보 연결 //서비스비용 설정
service('paymentservice')->attachToService($entity); $entity = $this->updateAmount($entity);
//서버정보 연결 신규서버로 변경되었으면 신규서버 추가
if ($oldEntity->getServerInfoUID() !== $entity->getServerInfoUID()) {
service('equipment_serverservice')->attachToService($entity, $entity->getServerInfoUID());
}
//결제정보 수정
service('paymentservice')->modifyByService($entity);
return $entity; return $entity;
} }
//List 검색용 //List 검색용

View File

@ -239,10 +239,13 @@ class ServerService extends EquipmentService
//OrderBy 처리 //OrderBy 처리
//서비스관련 //서비스관련
public function attachToService(ServiceEntity $serviceEntity, array $formDatas = []): void //Service 결제데이터 가져오기
public function attachToService(ServiceEntity $serviceEntity, int $uid): void
{ {
//서버정보 가져오기 $entity = $this->getEntity($uid);
$entity = $this->getEntity($serviceEntity->getServerInfoUID()); if (!$entity instanceof ServerEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 해당하는 서버정보을 찾을수 없습니다.");
}
$formDatas['serviceinfo_uid'] = $serviceEntity->getPK(); $formDatas['serviceinfo_uid'] = $serviceEntity->getPK();
$formDatas["clientinfo_uid"] = $serviceEntity->getClientInfoUID(); $formDatas["clientinfo_uid"] = $serviceEntity->getClientInfoUID();
$formDatas['status'] = $formDatas['status'] ?? STATUS['OCCUPIED']; $formDatas['status'] = $formDatas['status'] ?? STATUS['OCCUPIED'];
@ -251,10 +254,12 @@ class ServerService extends EquipmentService
$this->getFormService()->setFormRules('modify', $fields); $this->getFormService()->setFormRules('modify', $fields);
parent::modify_process($entity, $formDatas); parent::modify_process($entity, $formDatas);
} }
public function detachFromService(ServiceEntity $serviceEntity, array $formDatas = []): void public function detachFromService(int $uid): void
{ {
//서버정보 가져오기 $entity = $this->getEntity($uid);
$entity = $this->getEntity($serviceEntity->getServerInfoUID()); if (!$entity instanceof ServerEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 해당하는 서버정보을 찾을수 없습니다.");
}
$formDatas['serviceinfo_uid'] = NULL; $formDatas['serviceinfo_uid'] = NULL;
$formDatas["clientinfo_uid"] = NULL; $formDatas["clientinfo_uid"] = NULL;
$formDatas['status'] = $formDatas['status'] ?? STATUS['AVAILABLE']; $formDatas['status'] = $formDatas['status'] ?? STATUS['AVAILABLE'];

View File

@ -209,38 +209,41 @@ class PaymentService extends CommonService
} }
//서비스관련 //서비스관련
public function attachToService(ServiceEntity $serviceEntity): void private function getFormDatasByService(ServiceEntity $serviceEntity, array $formDatas = []): array
{ {
//결제정보 생성
$formDatas = [];
$formDatas['serviceinfo_uid'] = $serviceEntity->getPK(); $formDatas['serviceinfo_uid'] = $serviceEntity->getPK();
$formDatas["clientinfo_uid"] = $serviceEntity->getClientInfoUID(); $formDatas["clientinfo_uid"] = $serviceEntity->getClientInfoUID();
$formDatas['amount'] = $serviceEntity->getAmount();
$formDatas['billing'] = $formDatas['billing'] ?? PAYMENT['BILLING']['MONTH'];
$formDatas['billing_at'] = $serviceEntity->getBillingAt();
$formDatas['pay'] = $formDatas['pay'] ?? PAYMENT['PAY']['ACCOUNT'];
$formDatas['status'] = $formDatas['status'] ?? STATUS['UNPAID'];
$formDatas['title'] = sprintf( $formDatas['title'] = sprintf(
"%s %s 서비스비용", "%s %s 서비스비용",
$serviceEntity->getTitle(), $formDatas['title'] ?? $serviceEntity->getTitle(),
DateTime::createFromFormat('Y-m-d', $serviceEntity->getBillingAt())->format('Y년 m월') DateTime::createFromFormat('Y-m-d', $formDatas['billing_at'])->format('Y년 m월')
); );
$formDatas['amount'] = $serviceEntity->getAmount(); return $formDatas;
$formDatas['billing'] = PAYMENT['BILLING']['MONTH']; }
$formDatas['billing_at'] = $serviceEntity->getBillingAt(); public function createByService(ServiceEntity $serviceEntity): PaymentEntity
$formDatas['pay'] = PAYMENT['PAY']['ACCOUNT']; {
$formDatas['status'] = STATUS['UNPAID']; $formDatas = $this->getFormDatasByService($serviceEntity);
$fields = array_keys($formDatas); $fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields); $this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('create', $fields); $this->getFormService()->setFormRules('create', $fields);
$this->create_process($formDatas); return parent::create_process($formDatas);
} }
public function detachFromService(ServiceEntity $serviceEntity): void public function modifyByService(ServiceEntity $serviceEntity): PaymentEntity
{ {
//서비스정보의 지급기한일과 같은 결제정보 가져오기 //서비스정보의 지급기한일과 같은 결제정보 가져와서 결제정보 수정
$entity = $this->getEntity(['serviceinfo_uid' => $serviceEntity->getPK(), 'billing_at' => $serviceEntity->getBillingAt()]); $entity = $this->getEntity(['serviceinfo_uid' => $serviceEntity->getPK(), 'billing_at' => $serviceEntity->getBillingAt()]);
if (!$entity) { if (!$entity instanceof PaymentEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 해당하는 결제정보을 찾을수 없습니다."); throw new \Exception(__METHOD__ . "에서 오류발생: 해당하는 결제정보을 찾을수 없습니다.");
} }
//결제가 완료된 경우라면 처리불가 $formDatas = $this->getFormDatasByService($serviceEntity);
if ($entity->getStatus() === STATUS['PAID']) { $fields = array_keys($formDatas);
throw new \Exception(__METHOD__ . "에서 오류발생: 해당하는 결제정보는 이미 결제처리가 완료되어 수정이 불가합니다."); $this->getFormService()->setFormFields($fields);
} $this->getFormService()->setFormRules('modify', $fields);
$this->delete_process($entity->getPK()); return parent::modify_process($entity, $formDatas);
} }
} }

View File

@ -38,7 +38,7 @@
"[청구서발행]", "[청구서발행]",
'payment_invoice', 'payment_invoice',
[ [
"data-src" => "/admin/payment?clientinfo_uid=" . $viewDatas['entity']->getPK() . "&ActionTemplate=popup", "data-src" => "/admin/payment?clientinfo_uid={$viewDatas['entity']->getPK()}&ActionTemplate=popup",
"data-bs-toggle" => "modal", "data-bs-toggle" => "modal",
"data-bs-target" => "#modal_action_form", "data-bs-target" => "#modal_action_form",
"class" => "text-primary form-label-sm", "class" => "text-primary form-label-sm",
@ -52,7 +52,7 @@
'서비스추가', '서비스추가',
'create_service', 'create_service',
[ [
"data-src" => '/admin/customer/service/create?clientinfo_uid=' . $viewDatas['entity']->getPK(), "data-src" => "/admin/customer/service/create?clientinfo_uid={$viewDatas['entity']->getPK()}",
"data-bs-toggle" => "modal", "data-bs-toggle" => "modal",
"data-bs-target" => "#modal_action_form", "data-bs-target" => "#modal_action_form",
"class" => "btn btn-sm btn-primary form-label-sm", "class" => "btn btn-sm btn-primary form-label-sm",

View File

@ -0,0 +1,25 @@
<?= $this->extend($viewDatas['layout']['layout']) ?>
<?= $this->section('content') ?>
<?= session('message') ? $viewDatas['helper']->alertTrait(session('message')) : ""; ?>
<div id="container" class="content">
<div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div>
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
<table class="table table-bordered">
<tr>
<th class="bg-light" colspan="2"><?= $viewDatas['title'] ?></th>
</tr>
<?php foreach ($viewDatas['formFields'] as $field => $label): ?>
<tr>
<th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th>
<td nowrap class="text-start">
<?= $viewDatas['helper']->getFieldForm($field, old($field) ?? ($viewDatas['formDatas'][$field] ?? null), $viewDatas) ?>
<div><?= validation_show_error($field); ?></div>
</td>
</tr>
<?php endforeach; ?>
</table>
<div class="text-center"><?= form_submit('', '입력', array("class" => "btn btn-outline btn-primary")); ?></div>
<?= form_close(); ?>
<div class="form_bottom"><?= $this->include("{$viewDatas['layout']['template']}/form_content_bottom"); ?></div>
</div>
<?= $this->endSection() ?>

View File

@ -21,6 +21,7 @@
<div><?= $entity->getTitle() ?></div> <div><?= $entity->getTitle() ?></div>
<div><?= $entity->getIP() ?></div> <div><?= $entity->getIP() ?></div>
<div><?= $entity->getOS() ?></div> <div><?= $entity->getOS() ?></div>
<div>금액 : <span class="text-danger"><?= number_format($entity->getPrice()) ?></span>원</div>
</td> </td>
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [ <?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $entity->getPK(), 'serverinfo_uid' => $entity->getPK(),

View File

@ -16,7 +16,6 @@
<div><?= $serverPartCellDatas['helper']->getFieldView('IP', $entity->getPK(), $serverPartCellDatas) ?></div> <div><?= $serverPartCellDatas['helper']->getFieldView('IP', $entity->getPK(), $serverPartCellDatas) ?></div>
<?php endforeach ?> <?php endforeach ?>
<?php endforeach ?> <?php endforeach ?>
&nbsp;
</td> </td>
<td> <td>
<?php foreach ($serverPartCellDatas['entities']['CS'] as $entities): ?> <?php foreach ($serverPartCellDatas['entities']['CS'] as $entities): ?>

View File

@ -10,11 +10,25 @@
<?php $serviceCellDatas['entity'] = $entity ?> <?php $serviceCellDatas['entity'] = $entity ?>
<tr class="text-left"> <tr class="text-left">
<td class="text-center" nowrap> <td class="text-center" nowrap>
<div><?= $entity->getCode() ?></div> <div><?= $serviceCellDatas['helper']->getFieldView('site', $entity->getSite(), $serviceCellDatas) ?> /
<?= $serviceCellDatas['helper']->getFieldView('location', $entity->getLocation(), $serviceCellDatas) ?>
</div>
<div><?= form_label(
$entity->getCode(),
'modify_service',
[
"data-src" => "/admin/customer/service/modify/{$entity->getPK()}?clientinfo_uid={$entity->getClientInfoUID()}",
"data-bs-toggle" => "modal",
"data-bs-target" => "#modal_action_form",
"class" => "text-primary form-label-sm",
]
);
?></div>
<div><?= $entity->getTitle() ?></div> <div><?= $entity->getTitle() ?></div>
<div><?= $serviceCellDatas['helper']->getFieldView('site', $entity->getSite(), $serviceCellDatas) ?></div> <div>상면비 : <span class="text-danger"><?= number_format($entity->getRack()) ?></span>원</div>
<div><?= $serviceCellDatas['helper']->getFieldView('location', $entity->getLocation(), $serviceCellDatas) ?></div> <div>회선비 : <span class="text-danger"><?= number_format($entity->getLine()) ?></span>원</div>
<div class="mt-3"><?= $serviceCellDatas['helper']->getListButton('addServer', '대체서버추가', ['entity' => $entity], ['class' => 'btn btn-sm btn-primary']) ?></div> <div>할인액 : <span class="text-danger"><?= number_format($entity->getSale()) ?></span>원</div>
<div class=" mt-3"><?= $serviceCellDatas['helper']->getListButton('addServer', '대체서버추가', ['entity' => $entity], ['class' => 'btn btn-sm btn-primary']) ?></div>
</td> </td>
<td class="text-center" nowrap><?= view_cell("\App\Cells\Equipment\ServerCell::detail", ['serviceEntity' => $entity]) ?></td> <td class="text-center" nowrap><?= view_cell("\App\Cells\Equipment\ServerCell::detail", ['serviceEntity' => $entity]) ?></td>
<td class="text-center" nowrap> <td class="text-center" nowrap>