dbmsv4 init...1

This commit is contained in:
최준흠 2025-11-26 11:30:44 +09:00
parent 6ab2ad8b9f
commit 6bc04300a0
26 changed files with 349 additions and 32 deletions

View File

@ -72,7 +72,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
}); });
$routes->group('payment', function ($routes) { $routes->group('payment', function ($routes) {
$routes->get('/', 'PaymentController::index'); $routes->get('/', 'PaymentController::index');
//일회성결제관련용
$routes->get('create', 'PaymentController::create_form'); $routes->get('create', 'PaymentController::create_form');
$routes->post('create', 'PaymentController::create'); $routes->post('create', 'PaymentController::create');
$routes->get('modify/(:num)', 'PaymentController::modify_form/$1'); $routes->get('modify/(:num)', 'PaymentController::modify_form/$1');
@ -83,9 +82,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
$routes->post('batchjob', 'PaymentController::batchjob'); $routes->post('batchjob', 'PaymentController::batchjob');
$routes->post('batchjob_delete', 'PaymentController::batchjob_delete'); $routes->post('batchjob_delete', 'PaymentController::batchjob_delete');
$routes->get('download/(:alpha)', 'PaymentController::download/$1'); $routes->get('download/(:alpha)', 'PaymentController::download/$1');
//결체처리
$routes->post('paid', 'PaymentController::paid');
//청구서발행용
$routes->post('invoice', 'PaymentController::invoice'); $routes->post('invoice', 'PaymentController::invoice');
}); });
//Customer 관련 //Customer 관련

View File

@ -21,7 +21,8 @@ abstract class AbstractCRUDController extends AbstractWebController
protected function create_form_process(array $formDatas = []): array protected function create_form_process(array $formDatas = []): array
{ {
// Form Default값 설정 (오버라이드 포인트) //초기 기본 Default값 지정
$formDatas = $this->request->getVar();
return $formDatas; return $formDatas;
} }
@ -102,6 +103,7 @@ abstract class AbstractCRUDController extends AbstractWebController
} }
$this->addViewDatas('entity', $entity); $this->addViewDatas('entity', $entity);
$action = __FUNCTION__; $action = __FUNCTION__;
//FormService에서 필요한 기존 데이터를 $entity에서 추출해서 넘김
$this->action_init_process($action, $entity->toArray()); $this->action_init_process($action, $entity->toArray());
return $this->modify_form_result_process($action); return $this->modify_form_result_process($action);
} catch (\Throwable $e) { } catch (\Throwable $e) {

View File

@ -118,6 +118,8 @@ abstract class AbstractWebController extends Controller
if ($template_path) { if ($template_path) {
$view_path .= '/' . $template_path; $view_path .= '/' . $template_path;
} }
//최종 ViewPath
$viewDatas['view_path'] = $view_path;
$full_path = $view_path . '/' . $view_file; $full_path = $view_path . '/' . $view_file;
// echo $full_path; // echo $full_path;
// exit; // exit;

View File

@ -27,6 +27,7 @@ class ServiceController extends CustomerController
//Custom 추가 함수 //Custom 추가 함수
public function create_form_process(array $formDatas = []): array public function create_form_process(array $formDatas = []): array
{ {
$formDatas = parent::create_form_process($formDatas);
$formDatas['location'] = 'chiba'; $formDatas['location'] = 'chiba';
$formDatas['rack'] = '100000'; $formDatas['rack'] = '100000';
$formDatas['line'] = '300000'; $formDatas['line'] = '300000';

View File

@ -27,6 +27,7 @@ class ServerController extends EquipmentController
//Custom 추가 함수 //Custom 추가 함수
public function create_form_process(array $formDatas = []): array public function create_form_process(array $formDatas = []): array
{ {
$formDatas = parent::create_form_process($formDatas);
$formDatas['code'] = sprintf("%d%dXX-M%d", date("y"), ceil((int)date("m") / 3), $this->service->getNextPK()); $formDatas['code'] = sprintf("%d%dXX-M%d", date("y"), ceil((int)date("m") / 3), $this->service->getNextPK());
return $formDatas; return $formDatas;
} }

View File

@ -2,7 +2,10 @@
namespace App\Controllers\Admin; namespace App\Controllers\Admin;
use App\Entities\Customer\ClientEntity;
use App\Entities\Customer\ServiceEntity;
use App\Entities\PaymentEntity; use App\Entities\PaymentEntity;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -24,4 +27,77 @@ class PaymentController extends AdminController
} }
//기본 함수 작업 //기본 함수 작업
//Custom 추가 함수 //Custom 추가 함수
//일회성 추가용
public function create_form_process(array $formDatas = []): array
{
$formDatas = parent::create_form_process($formDatas);
$formDatas['billing'] = PAYMENT['BILLING']['ONETIME'];
$formDatas['billing_at'] = date('Y-m-d');
$formDatas['pay'] = PAYMENT['PAY']['ACCOUNT'];
$formDatas['status'] = STATUS['UNPAID'];
return $formDatas;
}
//청구서 발행관련
private function invoice_pre_process(): array
{
$postDatas = $this->request->getPost();
$uids = $postDatas['batchjob_uids'] ?? [];
if (empty($uids)) {
throw new \Exception("청구서에 적용될 리스트를 선택하셔야합니다");
}
return $uids;
}
private function invoice_result_process(string $action): string|RedirectResponse
{
return $this->action_render_process($action, $this->getViewDatas(), $this->request->getVar('ActionTemplate') ?? 'payment');
}
public function invoice(): string|RedirectResponse
{
try {
$action = __FUNCTION__;
$this->action_init_process($action);
//변경할 UIDS
$uids = $this->invoice_pre_process();
$rows = [];
$clientEntities = [];
$serviceEntities = [];
foreach ($uids as $uid) {
//기존 Entity 가져오기
$entity = $this->service->getEntity($uid);
if (!$entity instanceof PaymentEntity) {
throw new \Exception(__METHOD__ . "에서 {$uid}에 대한 결제정보를 찾을수 없습니다.");
}
//지급기한일이 오늘보다 작거나 같고 미지급인경우
if ($entity->getBillingAt() <= date("Y-m-d") && $entity->getStatus() === STATUS['UNPAID']) {
//고객 정보가져오기
if (array_key_exists($entity->getClientInfoUID(), $clientEntities)) {
$clientEntity = $clientEntities[$entity->getClientInfoUID()];
} else {
$clientEntity = service('customer_clientservice')->getEntity($entity->getClientInfoUID());
if (!$clientEntity instanceof ClientEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생:{$entity->getClientInfoUID()}에 대한 고객정보를 찾을수 없습니다.");
}
$clientEntities[$entity->getClientInfoUID()] = $clientEntity;
}
//서비스 정보가져오기
if (array_key_exists($entity->getServiceInfoUid(), $serviceEntities)) {
$serviceEntity = $serviceEntities[$entity->getServiceInfoUid()];
} else {
$serviceEntity = service('customer_serviceservice')->getEntity($entity->getServiceInfoUid());
if (!$serviceEntity instanceof ServiceEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생:{$entity->getServiceInfoUid()}에 대한 서비스정보를 찾을수 없습니다.");
}
$serviceEntities[$entity->getServiceInfoUid()] = $serviceEntity;
}
//Invoice Data 가져오기
$rows = $this->service->getInvoices($clientEntity, $serviceEntity, $entity, $rows);
}
}
// dd($rows);
$this->addViewDatas('rows', $rows);
return $this->invoice_result_process($action);
} catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 청구서발행 오류:" . $e->getMessage());
}
}
} }

View File

@ -5,7 +5,6 @@ namespace App\Controllers;
use App\Entities\CommonEntity; use App\Entities\CommonEntity;
use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\DownloadResponse;
use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\Validation\Exceptions\ValidationException;
use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Html; use PhpOffice\PhpSpreadsheet\Reader\Html;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf; use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;
@ -21,22 +20,17 @@ abstract class CommonController extends AbstractCRUDController
protected function batchjob_pre_process(array $postDatas = []): array protected function batchjob_pre_process(array $postDatas = []): array
{ {
$postDatas = $this->request->getPost(); $postDatas = $this->request->getPost();
// 1. postDatas에서 선택된 uids 정보 추출 // 1. postDatas에서 선택된 uids 정보 추출
$uids = $postDatas['batchjob_uids'] ?? []; $uids = $postDatas['batchjob_uids'] ?? [];
if (empty($uids)) { if (empty($uids)) {
throw new \Exception("적용할 리스트을 선택하셔야합니다."); throw new \Exception("적용할 리스트을 선택하셔야합니다.");
} }
// 2. 변경할 데이터 추출 및 정리 // 2. 변경할 데이터 추출 및 정리
unset($postDatas['batchjob_uids'], $postDatas['batchjob_submit']); unset($postDatas['batchjob_uids'], $postDatas['batchjob_submit']); //formDatas에 포함되지 않게하기위함
$formDatas = array_filter($postDatas, fn($value) => $value !== "" && $value !== null); $formDatas = array_filter($postDatas, fn($value) => $value !== "" && $value !== null);
if (empty($formDatas)) { if (empty($formDatas)) {
throw new \Exception("변경할 조건항목을 선택하셔야합니다."); throw new \Exception("변경할 조건항목을 선택하셔야합니다.");
} }
// 3. 데이터가 있는 필드 추출 // 3. 데이터가 있는 필드 추출
$selectedFields = array_keys($formDatas); $selectedFields = array_keys($formDatas);
return array($uids, $selectedFields, $formDatas); return array($uids, $selectedFields, $formDatas);
@ -89,11 +83,9 @@ abstract class CommonController extends AbstractCRUDController
{ {
$postDatas = $this->request->getPost(); $postDatas = $this->request->getPost();
$uids = $postDatas['batchjob_uids'] ?? []; $uids = $postDatas['batchjob_uids'] ?? [];
if (empty($uids)) { if (empty($uids)) {
throw new \Exception("삭제할 리스트을 선택하셔야합니다."); throw new \Exception("삭제할 리스트을 선택하셔야합니다.");
} }
// $uids는 배열로 반환
return $uids; return $uids;
} }

View File

@ -89,6 +89,7 @@ class ServerForm extends EquipmentForm
$tempOptions[$tempEntity->getTitle()] = $tempEntity->getTitle(); $tempOptions[$tempEntity->getTitle()] = $tempEntity->getTitle();
// $options['attributes'][$tempEntity->getPK()] = ['data-role' => implode(DEFAULTS['DELIMITER_ROLE'], $tempEntity->getRole())]; // $options['attributes'][$tempEntity->getPK()] = ['data-role' => implode(DEFAULTS['DELIMITER_ROLE'], $tempEntity->getRole())];
} }
//formDatas에 값이 있고, $tempOptions에 없다면 추가(VPN의 경우)
if (array_key_exists($field, $formDatas) && $formDatas[$field]) { if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
if (!array_key_exists($formDatas[$field], $tempOptions)) { if (!array_key_exists($formDatas[$field], $tempOptions)) {
$tempOptions[$formDatas[$field]] = $formDatas[$field]; $tempOptions[$formDatas[$field]] = $formDatas[$field];

View File

@ -336,7 +336,9 @@ abstract class CommonService
public function setOrderBy(mixed $field = null, mixed $value = null): void public function setOrderBy(mixed $field = null, mixed $value = null): void
{ {
if ($field !== null && $value !== null) { if ($field !== null && $value !== null) {
$this->model->orderBy(sprintf(" %s.%s %s", $this->model->getTable(), $field, $value)); $this->model->orderBy(sprintf("%s.%s %s", $this->model->getTable(), $field, $value));
} else {
$this->model->orderBy(sprintf("%s.%s %s", $this->model->getTable(), $this->model->getPKField(), "DESC"));
} }
} }
} }

View File

@ -86,7 +86,16 @@ class AccountService extends CustomerService
break; break;
case 'index': case 'index':
case 'download': case 'download':
$fields = [...$fields, 'created_at']; $fields = [
"clientinfo_uid",
"bank",
"title",
"alias",
"issue_at",
"amount",
"status",
'created_at',
];
break; break;
} }
$this->getFormService()->setFormFields($fields); $this->getFormService()->setFormFields($fields);

View File

@ -80,7 +80,13 @@ class CouponService extends CustomerService
break; break;
case 'index': case 'index':
case 'download': case 'download':
$fields = [...$fields, 'created_at']; $fields = [
"clientinfo_uid",
"title",
"cnt",
"status",
'created_at'
];
break; break;
} }
$this->getFormService()->setFormFields($fields); $this->getFormService()->setFormFields($fields);

View File

@ -59,9 +59,9 @@ class PointService extends CustomerService
$fields = [ $fields = [
"clientinfo_uid", "clientinfo_uid",
"title", "title",
"content",
"amount", "amount",
"status", "status",
"content",
]; ];
$filters = [ $filters = [
"clientinfo_uid", "clientinfo_uid",
@ -80,7 +80,13 @@ class PointService extends CustomerService
break; break;
case 'index': case 'index':
case 'download': case 'download':
$fields = [...$fields, 'created_at']; $fields = [
"clientinfo_uid",
"title",
"amount",
"status",
'created_at'
];
break; break;
} }
$this->getFormService()->setFormFields($fields); $this->getFormService()->setFormFields($fields);

View File

@ -64,7 +64,7 @@ class LineService extends EquipmentService
"end_at", "end_at",
]; ];
$filters = [ $filters = [
"clientinfo_uid", "type",
"status", "status",
]; ];
$indexFilter = $filters; $indexFilter = $filters;

View File

@ -169,7 +169,7 @@ class ServerService extends EquipmentService
// dd($totalCounts); // dd($totalCounts);
return $totalCounts; return $totalCounts;
} }
//검색어에 따른 서버정보를 검색 후 해당하는 서비스리스트를 가져온다. //전체 검색어에 따른 서버정보를 검색 후 해당하는 서비스리스트를 가져온다.
final public function getSearchServices(string $keyword): array final public function getSearchServices(string $keyword): array
{ {
$builder = $this->model->distinct()->select('serverinfo.serviceinfo_uid AS serviceinfo_uid') $builder = $this->model->distinct()->select('serverinfo.serviceinfo_uid AS serviceinfo_uid')
@ -227,4 +227,14 @@ class ServerService extends EquipmentService
// $this->getServiceService()->setAmount($serviceEntity, $this->getCalculatedAmount($entity)); // $this->getServiceService()->setAmount($serviceEntity, $this->getCalculatedAmount($entity));
// return $entity; // return $entity;
// } // }
//List 검색용
//FormFilter 조건절 처리
//검색어조건절처리
public function setSearchWord(string $word): void
{
$this->model->orLike($this->model->getTable() . '.ip', $word, 'both');
parent::setSearchWord($word);
}
//OrderBy 처리
} }

View File

@ -3,6 +3,9 @@
namespace App\Services; namespace App\Services;
use App\DTOs\PaymentDTO; use App\DTOs\PaymentDTO;
use App\Entities\Customer\ClientEntity;
use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerEntity;
use App\Entities\PaymentEntity; use App\Entities\PaymentEntity;
use App\Forms\PaymentForm; use App\Forms\PaymentForm;
use App\Helpers\PaymentHelper; use App\Helpers\PaymentHelper;
@ -62,27 +65,20 @@ class PaymentService extends CommonService
"amount", "amount",
"billing", "billing",
"billing_at", "billing_at",
"pay",
"status",
"content", "content",
]; ];
$filters = ['user_uid', 'clientinfo_uid', 'serviceinfo_uid', 'status', 'billing', 'pay']; $filters = ['user_uid', 'clientinfo_uid', 'serviceinfo_uid', 'status', 'billing', 'pay'];
$indexFilter = ['clientinfo_uid', 'serviceinfo_uid', 'status', 'billing']; $indexFilter = ['clientinfo_uid', 'serviceinfo_uid', 'status', 'billing'];
$batchjobFilters = ['status']; $batchjobFilters = ['status'];
$batchjobButtons = ['batchjob' => '일괄결제', 'invoice' => '청구서발행'];
switch ($action) { switch ($action) {
case 'create': case 'create':
case 'create_form': case 'create_form':
break; break;
case 'modify': case 'modify':
case 'modify_form': case 'modify_form':
$fields = [
"serviceinfo_uid",
"title",
"amount",
"billing",
"billing_at",
"pay",
"status",
"content"
];
break; break;
case 'view': case 'view':
$fields = [ $fields = [
@ -125,6 +121,7 @@ class PaymentService extends CommonService
$this->getFormService()->setFormOptions($action, $filters, $formDatas); $this->getFormService()->setFormOptions($action, $filters, $formDatas);
$this->getFormService()->setIndexFilters($indexFilter); $this->getFormService()->setIndexFilters($indexFilter);
$this->getFormService()->setBatchjobFilters($batchjobFilters); $this->getFormService()->setBatchjobFilters($batchjobFilters);
$this->getFormService()->setBatchjobButtons($batchjobButtons);
} }
//기본 기능부분 //기본 기능부분
protected function getEntity_process(mixed $entity): PaymentEntity protected function getEntity_process(mixed $entity): PaymentEntity
@ -178,4 +175,37 @@ class PaymentService extends CommonService
} }
return $unPaids; return $unPaids;
} }
//청구서 관련
public function getInvoices(ClientEntity $clientEntity, ServiceEntity $serviceEntity, PaymentEntity $entity, array $rows): array
{
if (!array_key_exists($clientEntity->getPK(), $rows)) {
$rows[$clientEntity->getPK()] = [
'name' => $clientEntity->getName(),
'total_amount' => 0,
'services' => [],
];
}
if (!array_key_exists($serviceEntity->getPK(), $rows[$clientEntity->getPK()]['services'])) {
$serverEntity = service('equipment_serverservice')->getEntity($serviceEntity->getServerInfoUID());
if (!$serverEntity instanceof ServerEntity) {
dd($serverEntity);
throw new \Exception(__METHOD__ . "에서 오류발생:[{$serviceEntity->getServerInfoUID()}]에 대한 서버정보를 찾을 수 없습니다.");
}
$rows[$clientEntity->getPK()]['services'][$serviceEntity->getPK()] = [
'ip' => $serverEntity->getIP(),
'billing_at' => $serviceEntity->getBillingAt(),
'amount' => 0,
'items' => [],
];
}
//entities에 총 결제금액 설정
$rows[$clientEntity->getPK()]['services'][$serviceEntity->getPK()]['items'][] = [
'title' => $entity->getTitle(),
'amount' => $entity->getAmount()
];
$rows[$clientEntity->getPK()]['services'][$serviceEntity->getPK()]['amount'] += $entity->getAmount();
$rows[$clientEntity->getPK()]['total_amount'] += $entity->getAmount();
return $rows;
}
} }

View File

@ -5,6 +5,9 @@
<div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div> <div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div>
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?> <?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
<table class="table table-bordered"> <table class="table table-bordered">
<tr>
<th class="bg-light" colspan="2"><?= $viewDatas['title'] ?></th>
</tr>
<?php foreach ($viewDatas['formFields'] as $field => $label): ?> <?php foreach ($viewDatas['formFields'] as $field => $label): ?>
<tr> <tr>
<th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th> <th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th>

View File

@ -5,6 +5,9 @@
<div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div> <div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div>
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?> <?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
<table class="table table-bordered"> <table class="table table-bordered">
<tr>
<th class="bg-light" colspan="2"><?= $viewDatas['title'] ?></th>
</tr>
<?php foreach ($viewDatas['formFields'] as $field => $label): ?> <?php foreach ($viewDatas['formFields'] as $field => $label): ?>
<tr> <tr>
<th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th> <th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th>

View File

@ -0,0 +1,56 @@
<?= $this->extend($viewDatas['layout']['layout']) ?>
<?= $this->section('content') ?>
<div id="container" class="content">
<link href="/css/<?= $viewDatas['layout']['path'] ?>/form.css" media="screen" rel="stylesheet" type="text/css" />
<div class="action_form" style="width:700px;">
<!-- 청구서 정보 -->
<table class=" table table-bordered text-center">
<tbody>
<tr>
<th class="p-0">메일 제목</th>
<td colspan="3">서비스 요금 청구서 </td>
</tr>
<tr>
<th class="p-0">발신자</th>
<td class="p-0">support@prime-idc.jp</td>
<th class="p-0">발행일</th>
<td class="p-0"><?= date("Y-m-d") ?></td>
</tr>
</tbody>
</table>
<!-- 서비스 테이블 -->
<?php foreach ($viewDatas['rows'] as $row): ?>
<table class="table table-sm table-bordered text-center">
<tr>
<th class="p-0">고객명</th>
<th class="p-0"> 결제 금액</th>
</tr>
<tr>
<td class="p-0"><?= $row['name'] ?></td>
<td class="p-0"><?= number_format($row['total_amount']) ?>원</td>
</tr>
<tr>
<td colspan="2">
<table class="table table-sm table-bordered">
<?php foreach ($row['services'] as $service): ?>
<tr>
<th class="p-0">서버 IP</th>
<th class="p-0">항목</th>
<th class="p-0">결제일</th>
</tr>
<tr>
<td class="p-0"><?= $service['ip'] ?></td>
<td class="p-0" nowrap><?= view("{$viewDatas['view_path']}/invoice_items", ['service' => $service]); ?></td>
<td class="p-0 text-nowrap"><?= $service['billing_at'] ?></td>
</tr>
<?php endforeach; ?>
</table>
</td>
</tr>
</table>
<?php endforeach; ?>
<?= $this->include("{$viewDatas['view_path']}/invoice_info"); ?>
<?= $this->include("{$viewDatas['view_path']}/invoice_mobile"); ?>
</div>
</div>
<?= $this->endSection() ?>

View File

@ -0,0 +1,74 @@
<pre class="border border-1 text-start">
청구서를 받으셨던 서버인 경우에도 발행하는 시점까지 미납인 경우 발행됩니다.
입금을 하신 경우에는 연락 부탁드립니다. 입금 하실 계좌 번호 입니다.
<div class="text-danger">
은행명 : 국민은행
계좌번호 : 331301-04-217387
예금주 : )듀나미스
</div>
고객명과 입금자명이 상이한 경우 반드시 확인 연락이 필요합니다.
입금 청구서에 기재되어 있는 고객명으로 입금해주시면 별도의 입금 확인
전화가 필요없습니다.
기타 서비스 요금 안내
- 도메인 구매 대행 서비스 : 도메인 1개당 3만원 (1회성 비용으로 구매를
<span class="text-danger">요청하신 달에만 요금이 청구</span>됩니다)
- IP 추가 : 일반회선 10만원 / 보안회선 10만원(추가 하신 날로 부터 사용을 중지
하시는 달까지 <span class="text-danger">매월 요금이 청구</span> 됩니다.)
- IP 변경
- 단순 IP 변경의 경우(오래 사용하여 변경, 정기적인 변경, 관리자 변경 )에는
무료로 변경 드리고 있습니다.
- IP에 문제(<span class="text-danger">KCSC로 연결, 접근(원격접속) 차단, 공격을 받아 다른 IP로 변경 </span>)
있어 변경 하실 경우에는 요금이 청구 됩니다.
* 청구비용 10만원 (1회성 비용으로 구매를 요청하신 달에만 요금이 청구 됩니다)
- 서비스는 선입금으로 제공 드리고 있습니다.
- VPN 결제일의 자정까지 결제처리가 안될시 자동차단처리가 되게됩니다.
이점 양해 부탁드리겠습니다.
<span class="text-danger"> 이용 해지시에는 사용하셨던 IP에 연결 되어 있는 도메인들은 연결 해제를
주시기 바랍니다.</span>
보장 트래픽 : 기본 트래픽 사용량은 IN 10Mbps / OUT 10Mbps 입니다
보장 트래픽 이상을 사용할 경우 트래픽 과금이 발생할 있습니다
알림(필히 숙지 하여 주시기 바랍니다.)
1. 등록 하신 고객명 / 전화번호 / 메일 주소는 차후 고객님 확인을 위해
사용되오니고객님께서도 필히 알고 계셔야 합니다.
또한 전화번호와 메일주소 또는 메신저는 고객님에게 연락을 취해야 경우
사용됩니다.변동사항이 있을 경우에는 반드시 연락을 하여 변경해 주시기 바랍니다.
변동사항을 에게 알려 주시지 않거나, 등록된 연락처로 연락을 해도 연결이 안되어
발생하는 피해에 대해서는 책임을 지지 않습니다.
2. 결제는 납부기한내에 주셔야 합니다.
혹시라도 납부기한내에 결제를 하지 못하실 경우는 미리 연락을 주시면 납부기한
최대 3일간은 서버 접속이 유지됩니다.
하지만 납부기한까지 연락을 안주시거나 연락을 하셨더라도 납부기한을
3 초과하시면 서버 접속이 차단되고 차단후에도 3일동안 연락이 없을 경우
자동 해지 처리 되고 데이터는 삭제처리 되오니 주의 하시기 바랍니다.
3. 환불정책
월단위 계약(계산)이므로 중도 <span class="text-danger">환불(일할계산) 안됩니다.</span>
, 셋팅에 문제가 있거나 기타 문제가 있을 경우 서버를 인계 받으시고 <span class="text-danger">3 안으로는
환불 요청을 하실 있습니다.</span>
4. 서버 운영중 해킹으로 발생한 피해는 저희 에서 책임을 지지 않습니다.
서버운영에 있어서 보안에 각별히 주의 부탁드리겠습니다.
<해킹 대비 보안조치사항>
- 주기적인 window 보안 업데이트
- linux ,mysql , php, jsp 보안권고
- 서버 원격 접속 패스워드 mssql 패스워드 변경
* 영문,숫자,특수문자 8자리 이상 조합하여 사용 권고
* 매월 주기적으로 패스워드 변경
* 패스워드 노출 즉각 변경
- 서버내 방화벽에서 특정IP만 서버에 접속할 있도록 방화벽 설정
- 원격접속 포트 기본포트에서 변경 설정 (기본 포트 window : 3389 / linux : 22 )
* 무료 설치 : Microsoft Security Essential 설치
- 웹서비스 보안을 위한 웹방화벽 설치 대행서비스(유료)
# 원격포트 변경 및 원격접속 제한 설정은 홈페이지에 등록되어 있습니다.
자세한 사항은 센터로 문의주시기 바랍니다.
5. 서버 운영중 장비부품 문제(:하드디스크의 고장 ) 발생한 피해는
책임을 지지 않습니다.
(요청하시면 백업을 위해 무료로 추가 하드를 제공해 드리고 있지만, 추가가 불가능한
경우도 있습니다. 번거로우시더라도 주기적인 데이터백업을 부탁드리겠습니다.)
</pre>

View File

@ -0,0 +1,13 @@
<table class="table table-sm">
<?php $cnt = 1 ?>
<?php foreach ($service['items'] as $item): ?>
<tr>
<td class="p-0 text-nowrap text-start" width="80%"><?= $cnt++ ?>. <?= $item['title'] ?></td>
<td class="p-0 text-nowrap text-end"><?= number_format($item['amount']) ?>원</td>
</tr>
<?php endforeach; ?>
<tr>
<td class="p-0 text-nowrap text-end">총계</td>
<td class="p-0 text-nowrap text-end"><?= number_format($service['amount']) ?>원</td>
</tr>
</table>

View File

@ -0,0 +1,22 @@
<?php foreach ($viewDatas['rows'] as $row): ?>
<div class="action_form" style="background-color:azure; width:600px; margin-bottom:20px;">
안녕하세요 Prime IDC 입니다.<BR>
항상 저희 IDC를 이용해 주셔서 감사합니다.<BR>
서버비 안내 드립니다.<BR>
<div class="p-0">고객명: <?= $row['name'] ?> , 총 결제금액: <?= number_format($row['total_amount']) ?>원</div>
===========================<BR>
<ol>
<?php foreach ($row['services'] as $service): ?>
<li class="p-0">서버IP:<?= $service['ip'] ?> , 결제금:<?= number_format($service['amount']) ?>원 , 결제일:<?= $service['billing_at'] ?></li>
<?php endforeach; ?>
</ol>
===========================<BR>
Prime IDC 계좌<BR>
예금주 : )듀나미스<BR>
은행명 : 국민은행<BR>
계좌번호 : 331301-04-217387<BR>
===========================<BR>
결제담당자분 확인 말씀 한번 부탁 드립니다.<BR>
감사합니다.<BR>
</div>
<?php endforeach; ?>

View File

@ -5,6 +5,9 @@
<div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div> <div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div>
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?> <?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
<table class="table table-bordered"> <table class="table table-bordered">
<tr>
<th class="bg-light" colspan="2"><?= $viewDatas['title'] ?></th>
</tr>
<?php foreach ($viewDatas['formFields'] as $field => $label): ?> <?php foreach ($viewDatas['formFields'] as $field => $label): ?>
<tr> <tr>
<th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th> <th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th>

View File

@ -5,6 +5,9 @@
<div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div> <div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div>
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?> <?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
<table class="table table-bordered"> <table class="table table-bordered">
<tr>
<th class="bg-light" colspan="2"><?= $viewDatas['title'] ?></th>
</tr>
<?php foreach ($viewDatas['formFields'] as $field => $label): ?> <?php foreach ($viewDatas['formFields'] as $field => $label): ?>
<tr> <tr>
<th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th> <th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th>

View File

@ -4,6 +4,9 @@
<div id="container" class="content"> <div id="container" class="content">
<div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div> <div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div>
<table class="table table-bordered"> <table class="table table-bordered">
<tr>
<th class="bg-light" colspan="2"><?= $viewDatas['title'] ?></th>
</tr>
<?php foreach ($viewDatas['formFields'] as $field => $label): ?> <?php foreach ($viewDatas['formFields'] as $field => $label): ?>
<tr> <tr>
<th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th> <th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th>

View File

@ -7,7 +7,7 @@
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <tr>
<th class="bg-light">서버정보[<?= $viewDatas['entity']->getCode() ?>]</th> <th class="bg-light">서버정보[<?= $viewDatas['entity']->getCode() ?>]</th>
<th class="bg-light">추가정보</th> <th class="bg-light">부가서비스</th>
</tr> </tr>
<td> <td>
<table class="table table-bordered"> <table class="table table-bordered">

View File

@ -4,6 +4,9 @@
<div id="container" class="content"> <div id="container" class="content">
<div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div> <div class="form_top"><?= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?></div>
<table class="table table-bordered"> <table class="table table-bordered">
<tr>
<th class="bg-light" colspan="2"><?= $viewDatas['title'] ?></th>
</tr>
<?php foreach ($viewDatas['formFields'] as $field => $label): ?> <?php foreach ($viewDatas['formFields'] as $field => $label): ?>
<tr> <tr>
<th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th> <th nowrap class="text-end bg-light" width="20%"><?= $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?></th>