dbmsv2 init...1

This commit is contained in:
choi.jh 2025-09-17 14:21:54 +09:00
parent 090a01de92
commit 3d7ff7bbfb
24 changed files with 210 additions and 150 deletions

View File

@ -7,10 +7,19 @@ use App\Services\Customer\ServiceService;
class ServiceCell extends CustomerCell class ServiceCell extends CustomerCell
{ {
private ?PaymentService $_paymentService = null;
public function __construct() public function __construct()
{ {
parent::__construct(new ServiceService()); parent::__construct(new ServiceService());
} }
final public function getPaymentService(): PaymentService
{
if (!$this->_paymentService) {
$this->_paymentService = new PaymentService();
}
return $this->_paymentService;
}
public function detail(array $params): string public function detail(array $params): string
{ {
@ -19,14 +28,25 @@ class ServiceCell extends CustomerCell
$this->getService()->setFormFilters(); $this->getService()->setFormFilters();
$this->getService()->setFormRules(); $this->getService()->setFormRules();
$this->getService()->setFormOptions(); $this->getService()->setFormOptions();
$entities = $this->getService()->getEntities(['clientinfo_uid' => $params['userinfo_uid']]); $unPaids = [];
$entities = [];
foreach ($this->getService()->getEntities(['clientinfo_uid' => $params['clientinfo_uid']]) as $entity) {
if (!array_key_exists($entity->getPK(), $unPaids)) {
$unPaids[$entity->getPK()] = ['cnt' => 0, 'amount' => 0];
}
foreach ($this->getPaymentService()->getUnPaids('serviceinfo_uid', ['serviceinfo_uid' => $entity->getPK()]) as $unPaid) {
$unPaids[$entity->getPK()]['cnt'] += $unPaid->cnt;
$unPaids[$entity->getPK()]['amount'] += $unPaid->amount;
}
$entities[] = $entity;
}
$template = array_key_exists('template', $params) ? $params['template'] : __FUNCTION__; $template = array_key_exists('template', $params) ? $params['template'] : __FUNCTION__;
return view('cells/service/' . $template, [ return view('cells/service/' . $template, [
'serviceCellDatas' => [ 'serviceCellDatas' => [
'control' => $this->getService()->getControlDatas(), 'control' => $this->getService()->getControlDatas(),
'service' => $this->getService(), 'service' => $this->getService(),
'entities' => $entities, 'entities' => $entities,
'paymentService' => new PaymentService() 'unPaids' => $unPaids
] ]
]); ]);
} }

View File

@ -117,6 +117,7 @@ class ClientController extends CustomerController
'clientinfo_uid' => $entity->getPK(), 'clientinfo_uid' => $entity->getPK(),
'status' => STATUS['AVAILABLE'] 'status' => STATUS['AVAILABLE']
]); ]);
//서비스별 미납 Count
$this->unPaids = $this->getService()->getPaymentService()->getUnPaids('clientinfo_uid', [ $this->unPaids = $this->getService()->getPaymentService()->getUnPaids('clientinfo_uid', [
'clientinfo_uid' => $entity->getPK() 'clientinfo_uid' => $entity->getPK()
]); ]);

View File

@ -91,12 +91,7 @@ class ServiceController extends CustomerController
protected function index_process(array $entities = []): array protected function index_process(array $entities = []): array
{ {
//서비스별 미납 Count //서비스별 미납 Count
$unpaids = ['count' => 0, 'amount' => 0]; $this->unPaids = $this->getPaymentService()->getUnPaids('serviceinfo_uid');
foreach ($this->getPaymentService()->getUnPaids('serviceinfo_uid') as $row) {
$unpaids[$row->serviceinfo_uid]['count'] = $row->cnt;
$unpaids[$row->serviceinfo_uid]['amount'] = $row->amount;
};
$this->unpaids = $unpaids;
//부모함수처리 //부모함수처리
return parent::index_process($entities); return parent::index_process($entities);
} }

View File

@ -77,14 +77,13 @@ class Home extends AdminController
$this->newServiceCount = count($this->newServiceEntities); $this->newServiceCount = count($this->newServiceEntities);
//서비스별 미납 Count //서비스별 미납 Count
$totalUnPaidCount = 0; $totalUnPaidCount = 0;
$unpaids = ['count' => 0, 'amount' => 0]; $totalUnPaidAmount = 0;
foreach ($this->getPaymentService()->getUnPaids('serviceinfo_uid') as $row) { foreach ($this->getPaymentService()->getUnPaids('serviceinfo_uid') as $unPaid) {
$unpaids[$row->serviceinfo_uid]['count'] = $row->cnt; $totalUnPaidCount += $unPaid->cnt;
$unpaids[$row->serviceinfo_uid]['amount'] = $row->amount; $totalUnPaidAmount += $unPaid->amount;
$totalUnPaidCount += $row->cnt; }
};
$this->unpaids = $unpaids;
$this->totalUnPaidCount = $totalUnPaidCount; $this->totalUnPaidCount = $totalUnPaidCount;
$this->totalUnPaidAmount = $totalUnPaidAmount;
helper(['form']); helper(['form']);
return $this->getResultSuccess(); return $this->getResultSuccess();
} }

View File

@ -17,11 +17,6 @@ abstract class CommonEntity extends Entity
parent::__construct($data); parent::__construct($data);
} }
final public function __call($name, $arguments): string
{
return "";
}
public function getPK(): int|string public function getPK(): int|string
{ {
$field = constant("static::PK"); $field = constant("static::PK");

View File

@ -18,15 +18,16 @@ class PaymentHelper extends CustomerHelper
case "countdown": //결제일Countdown case "countdown": //결제일Countdown
$value = $viewDatas['entity']->getCountDueAt(); $value = $viewDatas['entity']->getCountDueAt();
break; break;
case 'item_uid':
//ItemType에 따라 필터옵션에서 Title을 가져옴
$value = $viewDatas['control']['field_optons'][$viewDatas['entity']->getItemType()][$value]->getTitle();
break;
case 'serviceinfo_uid': case 'serviceinfo_uid':
case 'clientinfo_uid': case 'clientinfo_uid':
case 'billing_method': case 'billing_method':
$value = array_key_exists($value, $viewDatas['control']['field_optons'][$field]) && $viewDatas['control']['field_optons'][$field][$value] ? $viewDatas['control']['field_optons'][$field][$value]->getTitle() : ""; $value = array_key_exists($value, $viewDatas['control']['field_optons'][$field]) && $viewDatas['control']['field_optons'][$field][$value] ? $viewDatas['control']['field_optons'][$field][$value]->getTitle() : "";
break; break;
case 'billing':
case 'pay':
case 'status':
$value = array_key_exists($value, $viewDatas['control']['field_optons'][$field]) && $viewDatas['control']['field_optons'][$field][$value] ? $viewDatas['control']['field_optons'][$field][$value] : "";
break;
default: default:
$value = parent::getFieldView($field, $value, $viewDatas, $extras); $value = parent::getFieldView($field, $value, $viewDatas, $extras);
break; break;
@ -40,7 +41,6 @@ class PaymentHelper extends CustomerHelper
{ {
switch ($action) { switch ($action) {
case 'create': case 'create':
case 'batchjob':
case 'batchjob_delete': case 'batchjob_delete':
$action = ""; $action = "";
break; break;

View File

@ -79,7 +79,11 @@ class ServiceHelper extends CustomerHelper
case 'billing_at': case 'billing_at':
if (array_key_exists('unPaids', $viewDatas)) { if (array_key_exists('unPaids', $viewDatas)) {
if (array_key_exists($viewDatas['entity']->getPK(), $viewDatas['unPaids'])) { if (array_key_exists($viewDatas['entity']->getPK(), $viewDatas['unPaids'])) {
$value .= "<div><a href=\"/admin/customer/payment?={$viewDatas['entity']->getPK()}\">미지급: <span style=\"color:red;\">" . $viewDatas['unPaids'][$viewDatas['entity']->getPK()] . "</span>개</a></div>"; foreach ($viewDatas['unPaids'] as $unPaid) {
if ($unPaid->serviceinfo_uid = $viewDatas['entity']->getPK()) {
$value .= "<div><a href=\"/admin/customer/payment?={$viewDatas['entity']->getPK()}\">미지급: <span style=\"color:red;\">" . $unPaid->cnt . "개,총 " . number_format($unPaid->amount) . "원</span></a></div>";
}
}
} }
} }
break; break;

View File

@ -0,0 +1,5 @@
<?php
namespace App\Interfaces\Customer;
interface CustomerInterFace {}

View File

@ -0,0 +1,5 @@
<?php
namespace App\Interfaces\Equipment;
interface EquipmentInterFace {}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Interfaces\Equipment;
use App\Entities\Equipment\ServerPartEntity;
interface ServerPartInterface extends EquipmentInterFace
{
public function setServerPart(ServerPartEntity $serverPartEntity, mixed $uid, string $status): mixed;
}

View File

@ -14,6 +14,7 @@ class ServerPartModel extends EquipmentModel
protected $returnType = ServerPartEntity::class; protected $returnType = ServerPartEntity::class;
protected $allowedFields = [ protected $allowedFields = [
"part_uid", "part_uid",
"clientinfo_uid",
"serverinfo_uid", "serverinfo_uid",
"serviceinfo_uid", "serviceinfo_uid",
"type", "type",
@ -39,6 +40,7 @@ class ServerPartModel extends EquipmentModel
case "amount": case "amount":
$rule = "required|numeric"; $rule = "required|numeric";
break; break;
case "clientinfo_uid":
case "serviceinfo_uid": case "serviceinfo_uid":
$rule = "permit_empty|numeric"; $rule = "permit_empty|numeric";
break; break;

View File

@ -2,7 +2,6 @@
namespace App\Services; namespace App\Services;
use App\Entities\FormOptionEntity;
use App\Models\CommonModel; use App\Models\CommonModel;
use App\Helpers\CommonHelper; use App\Helpers\CommonHelper;

View File

@ -3,10 +3,12 @@
namespace App\Services\Customer; namespace App\Services\Customer;
use App\Entities\Customer\PaymentEntity; use App\Entities\Customer\PaymentEntity;
use App\Entities\Equipment\ServerPartEntity;
use App\Helpers\Customer\PaymentHelper; use App\Helpers\Customer\PaymentHelper;
use App\Interfaces\Equipment\ServerPartInterFace;
use App\Models\Customer\PaymentModel; use App\Models\Customer\PaymentModel;
class PaymentService extends CustomerService class PaymentService extends CustomerService implements ServerPartInterFace
{ {
public function __construct() public function __construct()
{ {
@ -38,6 +40,7 @@ class PaymentService extends CustomerService
{ {
return [ return [
'clientinfo_uid', 'clientinfo_uid',
"serviceinfo_uid",
'billing', 'billing',
'pay', 'pay',
'status', 'status',
@ -48,6 +51,7 @@ class PaymentService extends CustomerService
{ {
return [ return [
'clientinfo_uid', 'clientinfo_uid',
"serviceinfo_uid",
'billing', 'billing',
'title', 'title',
'amount', 'amount',
@ -61,11 +65,12 @@ class PaymentService extends CustomerService
} }
public function getBatchjobFields(): array public function getBatchjobFields(): array
{ {
return ['clientinfo_uid', 'billing', 'pay', 'status']; return ['pay', 'status'];
} }
public function getBatchjobButtons(): array public function getBatchjobButtons(): array
{ {
return [ return [
'batchjob' => '일괄 결제 ',
'invoice' => '청구서 발행', 'invoice' => '청구서 발행',
]; ];
} }
@ -89,6 +94,24 @@ class PaymentService extends CustomerService
} }
return $options; return $options;
} }
//서비스 설정
public function setServerPart(ServerPartEntity $serverPartEntity, mixed $uid, string $status): PaymentEntity
{
if ($serverPartEntity->getBilling() === PAYMENT['BILLING']['ONETIME']) {
if ($serverPartEntity->getServiceInfoUID() === null) {
throw new \Exception("일회성 부품 추가는 서비스정보가 정의된 후에만 가능합니다.");
}
}
$formDatas = [];
$formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID();
$formDatas['title'] = sprintf("[%s] 일회성 추가", $serverPartEntity->getPartEntity()->getTitle());
$formDatas['amount'] = $serverPartEntity->getAmount();
$formDatas['billing'] = $serverPartEntity->getBilling();
$formDatas['billing_at'] = date("Y-m-d"); //일회성은 지급일이 당일기준처리
return $this->create($formDatas);
}
//List 검색용 //List 검색용
//OrderBy 처리 //OrderBy 처리
public function setOrderBy(mixed $field = null, mixed $value = null): void public function setOrderBy(mixed $field = null, mixed $value = null): void
@ -99,13 +122,12 @@ class PaymentService extends CustomerService
//총 미납건수, 금액 //총 미납건수, 금액
public function getUnPaids(string $group, array $where = []): array public function getUnPaids(string $group, array $where = []): array
{ {
$rows = $this->getModel()->groupBy($group) return $this->getModel()->groupBy($group)
->select("COUNT(uid) as cnt, SUM(amount) as amount") ->select("serviceinfo_uid,COUNT(uid) as cnt, SUM(amount) as amount")
->where(['billing_at <=' => date('Y-m-d')]) ->where(['billing_at <=' => date('Y-m-d')])
->where(['status' => STATUS['UNPAID']]) ->where(['status' => STATUS['UNPAID']])
->where($where) ->where($where)
->get()->getResult(); ->get()->getResult();
return $rows;
} }
//생성 //생성
@ -113,7 +135,6 @@ class PaymentService extends CustomerService
{ {
// 관리자 UID는 현재 인증된 사용자로 설정 // 관리자 UID는 현재 인증된 사용자로 설정
$formDatas['user_uid'] = $this->getMyAuth()->getUIDByAuthInfo(); $formDatas['user_uid'] = $this->getMyAuth()->getUIDByAuthInfo();
dd($formDatas);
return parent::create($formDatas); return parent::create($formDatas);
} }
//수정 //수정

View File

@ -199,22 +199,6 @@ class ServiceService extends CustomerService
return $this->getModel()->query($sql, [$billing_at, $status]); return $this->getModel()->query($sql, [$billing_at, $status]);
} }
//기본기능 //기본기능
//서버정보 상태설정용
private function setServer_process(ServiceEntity $entity, mixed $serverinfo_uid, string $status): ServiceEntity
{
//서버경우 서비스중으로 설정
$serverEntity = $this->getServerService()->getEntity($serverinfo_uid);
if (!($serverEntity instanceof ServerEntity)) {
throw new \Exception("{$serverinfo_uid}에 해당하는 서버정보를 찾을수없습니다.");
}
//서버정보 상태수정
$serverEntity = $this->getServerService()->modify(
$serverEntity,
['serviceEntity' => $entity, 'status' => $status],
);
return $entity->setServerEntity($serverEntity);
}
//생성 //생성
public function create(array $formDatas): ServiceEntity public function create(array $formDatas): ServiceEntity
{ {
@ -222,11 +206,11 @@ class ServiceService extends CustomerService
throw new \Exception("서버가 지정되지 않았습니다."); throw new \Exception("서버가 지정되지 않았습니다.");
} }
$entity = parent::create($formDatas); $entity = parent::create($formDatas);
return $this->setServer_process( return $entity->setServerEntity($this->getServerService()->setService(
$entity, $entity,
$formDatas['serverinfo_uid'], $formDatas['serverinfo_uid'],
STATUS['OCCUPIED'] STATUS['OCCUPIED']
); ));
} }
//수정 //수정
public function modify(mixed $entity, array $formDatas): ServiceEntity public function modify(mixed $entity, array $formDatas): ServiceEntity
@ -236,7 +220,7 @@ class ServiceService extends CustomerService
} }
//기존서버정보 사용가능으로 설정 //기존서버정보 사용가능으로 설정
if ($entity->getServerInfoUID() && $entity->getServerInfoUID() !== $formDatas['serverinfo_uid']) { if ($entity->getServerInfoUID() && $entity->getServerInfoUID() !== $formDatas['serverinfo_uid']) {
$entity = $this->setServer_process( $entity = $this->getServerService()->setService(
$entity, $entity,
$entity->getServerEntity()->getPK(), $entity->getServerEntity()->getPK(),
STATUS['AVAILABLE'] STATUS['AVAILABLE']
@ -246,7 +230,7 @@ class ServiceService extends CustomerService
$entity = parent::modify($entity, $formDatas); $entity = parent::modify($entity, $formDatas);
//신규서버정보 사용중으로 설정 //신규서버정보 사용중으로 설정
if ($entity->getServerInfoUID() !== $formDatas['serverinfo_uid']) { if ($entity->getServerInfoUID() !== $formDatas['serverinfo_uid']) {
$entity = $this->setServer_process( $entity = $this->getServerService()->setService(
$entity, $entity,
$formDatas['serverinfo_uid'], $formDatas['serverinfo_uid'],
STATUS['OCCUPIED'] STATUS['OCCUPIED']
@ -258,7 +242,7 @@ class ServiceService extends CustomerService
public function delete(mixed $entity): ServiceEntity public function delete(mixed $entity): ServiceEntity
{ {
//기존서버정보 사용가능으로 설정 //기존서버정보 사용가능으로 설정
$entity = $this->setServer_process( $entity = $this->getServerService()->setService(
$entity, $entity,
$entity->getServerEntity()->getPK(), $entity->getServerEntity()->getPK(),
STATUS['AVAILABLE'] STATUS['AVAILABLE']
@ -269,7 +253,6 @@ class ServiceService extends CustomerService
public function history(mixed $entity, array $formDatas): ServiceEntity public function history(mixed $entity, array $formDatas): ServiceEntity
{ {
//서비스 정보수정 //서비스 정보수정
$entity = $this->getModel()->modify($entity, $formDatas); return $this->getModel()->modify($entity, $formDatas);
return $entity;
} }
} }

View File

@ -2,10 +2,13 @@
namespace App\Services\Equipment; namespace App\Services\Equipment;
use App\Entities\Equipment\CSEntity;
use App\Entities\Equipment\ServerPartEntity;
use App\Helpers\Equipment\CSHelper; use App\Helpers\Equipment\CSHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Equipment\CSModel; use App\Models\Equipment\CSModel;
class CSService extends EquipmentService class CSService extends EquipmentService implements ServerPartInterface
{ {
public function __construct() public function __construct()
{ {
@ -51,6 +54,28 @@ class CSService extends EquipmentService
return ['type', 'status']; return ['type', 'status'];
} }
//기본 기능부분 //기본 기능부분
//서비스파트 설정
public function setServerPart(ServerPartEntity $serverPartEntity, mixed $uid, string $status): CSEntity
{
$entity = $this->getEntity($uid);
if (!($entity instanceof CSEntity)) {
throw new \Exception("{$uid}에 해당하는 CS정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
if ($status === STATUS['AVAILABLE']) {
//사용가능
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
} else {
$formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID();
}
$formDatas['status'] = $status;
return $this->modify($entity, $formDatas);
}
//List 검색용 //List 검색용
//OrderBy 처리 //OrderBy 처리
public function setOrderBy(mixed $field = null, mixed $value = null): void public function setOrderBy(mixed $field = null, mixed $value = null): void

View File

@ -3,14 +3,14 @@
namespace App\Services\Equipment; namespace App\Services\Equipment;
use App\Entities\Equipment\IPEntity; use App\Entities\Equipment\IPEntity;
use App\Entities\Equipment\LineEntity; use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Equipment\ServerEntity;
use App\Helpers\Equipment\IPHelper; use App\Helpers\Equipment\IPHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Equipment\IPModel; use App\Models\Equipment\IPModel;
use App\Services\Equipment\EquipmentService; use App\Services\Equipment\EquipmentService;
use App\Services\Equipment\LineService; use App\Services\Equipment\LineService;
class IPService extends EquipmentService class IPService extends EquipmentService implements ServerPartInterface
{ {
private ?LineService $_lineService = null; private ?LineService $_lineService = null;
public function __construct() public function __construct()
@ -78,6 +78,30 @@ class IPService extends EquipmentService
} }
return $options; return $options;
} }
//서비스 설정
public function setServerPart(ServerPartEntity $serverPartEntity, mixed $uid, string $status): IPEntity
{
$entity = $this->getEntity($uid);
if (!($entity instanceof IPEntity)) {
throw new \Exception("{$uid}에 해당하는 IP정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
//기존IP 사용자로 고객정보 설정
$formDatas['old_clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
if ($status === STATUS['AVAILABLE']) {
//사용가능
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
} else {
$formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID();
}
$formDatas['status'] = $status;
return $this->modify($entity, $formDatas);
}
//List 검색용 //List 검색용
//OrderBy 처리 //OrderBy 처리
public function setOrderBy(mixed $field = null, mixed $value = null): void public function setOrderBy(mixed $field = null, mixed $value = null): void

View File

@ -168,67 +168,25 @@ class ServerPartService extends EquipmentService
return $options; return $options;
} }
//파트별 정보 수정작업 //파트별 정보 수정작업
private function setPart_process(ServerPartEntity $entity, mixed $part_uid, string $status): mixed private function setServerPart(ServerPartEntity $entity, mixed $part_uid, string $status): mixed
{ {
//Type에 따른 부품서비스 정의 //Type에 따른 부품서비스 정의
switch ($entity->getType()) { switch ($entity->getType()) {
case 'SWITCH': case 'SWITCH':
$partService = $this->getSwitchService(); $partEntity = $this->getSwitchService()->setServerPart($entity, $part_uid, $status);
break; break;
case 'IP': case 'IP':
$partService = $this->getIPService(); $partEntity = $this->getIPService()->setServerPart($entity, $part_uid, $status);
break; break;
case 'CS': case 'CS':
$partService = $this->getCSService(); $partEntity = $this->getCSService()->setServerPart($entity, $part_uid, $status);
break; break;
default: default:
$partService = $this->getPartService(); throw new \Exception(__METHOD__ . "에서 오류발생: {$entity->getType()}은 지정되지 않은 부품파트입니다.");
break; // break;
}
//부품정보가져오기
$partEntity = $partService->getEntity($part_uid);
if (!$partEntity) {
throw new \Exception(__METHOD__ . "에서 오류:{$part_uid}에 해닫하는 {$entity->getType()}정보가 없습니다.");
}
$formDatas = [];
switch ($entity->getType()) {
case 'IP':
//기존IP 사용자로 고객정보 설정
$formDatas['old_clientinfo_uid'] = $partEntity->getClientInfoUID();
case 'SWITCH':
case 'CS':
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
if ($status === STATUS['AVAILABLE']) {
//사용가능
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
} else {
$formDatas['clientinfo_uid'] = $entity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $entity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $entity->getServerInfoUID();
}
$formDatas['part_uid'] = $part_uid;
$formDatas['status'] = $status;
$partEntity = $partService->modify($partEntity, $formDatas);
break;
} }
return $partEntity; return $partEntity;
} }
//일회성 결제 추가 처리
private function setPayment_process(ServerPartEntity $entity): PaymentEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = $entity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $entity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $entity->getServerInfoUID();
$formDatas['title'] = sprintf("부품정보 [%s]에 대한 일회성 추가", $entity->getPartEntity()->getTitle());
$formDatas['amount'] = $entity->getAmount();
$formDatas['billing'] = $entity->getBilling();
$formDatas['billing_at'] = date("Y-m-d"); //일회성은 지급일이 당일기준처리
return $this->getPaymentService()->create($formDatas);
}
//부품연결정보생성 //부품연결정보생성
public function create(array $formDatas): ServerPartEntity public function create(array $formDatas): ServerPartEntity
{ {
@ -251,27 +209,20 @@ class ServerPartService extends EquipmentService
$entity = parent::create($formDatas); $entity = parent::create($formDatas);
//부품연결정보에 부품정보 정의 //부품연결정보에 부품정보 정의
$entity = $entity->setPartEntity( $entity = $entity->setPartEntity(
$this->setPart_process($entity, $formDatas['part_uid'], STATUS['OCCUPIED']) $this->setServerPart($entity, $formDatas['part_uid'], STATUS['OCCUPIED'])
); );
//일회성인경우 결제정보에 추가한다. //일회성인경우 결제정보에 추가한다.
if ($entity->getBilling() === PAYMENT['BILLING']['ONETIME']) { $this->getPaymentService()->setServerPart($entity, 0, "");
$paymentEntity = $this->setPayment_process($entity);
}
return $entity; return $entity;
} }
//수정 //수정
public function modify(mixed $entity, array $formDatas): ServerPartEntity public function modify(mixed $entity, array $formDatas): ServerPartEntity
{ {
//서버정보가져오기 //서버정보가져오기
$serverEntity = null;
if (array_key_exists('serverEntity', $formDatas)) {
$serverEntity = $formDatas['serverEntity'];
} else {
if (!array_key_exists('serverinfo_uid', $formDatas)) { if (!array_key_exists('serverinfo_uid', $formDatas)) {
throw new \Exception("서버 정보가 지정되지 않았습니다."); throw new \Exception("서버 정보가 지정되지 않았습니다.");
} }
$serverEntity = $this->getServerService()->getEntity($formDatas['serverinfo_uid']); $serverEntity = $this->getServerService()->getEntity($formDatas['serverinfo_uid']);
}
if (!($serverEntity instanceof ServerEntity)) { if (!($serverEntity instanceof ServerEntity)) {
throw new \Exception("서버 정보가 지정되지 않았습니다."); throw new \Exception("서버 정보가 지정되지 않았습니다.");
} }
@ -280,21 +231,20 @@ class ServerPartService extends EquipmentService
$formDatas["serverinfo_uid"] = $serverEntity->getPK(); $formDatas["serverinfo_uid"] = $serverEntity->getPK();
//기존 Part_UID와 신규 Part_UID가 다르면 기존 Part정보 사용가능으로 변경 //기존 Part_UID와 신규 Part_UID가 다르면 기존 Part정보 사용가능으로 변경
if ($entity->getPartUID() != $formDatas['part_uid']) { if ($entity->getPartUID() != $formDatas['part_uid']) {
$this->setPart_process($entity, $entity->getPartUID(), STATUS['AVAILABLE']); $this->setServerPart($entity, $entity->getPartUID(), STATUS['AVAILABLE']);
} }
//기존 정보변경 //기존 정보변경
$entity = parent::modify($entity, $formDatas); $entity = parent::modify($entity, $formDatas);
//부품연결정보에 부품정보 정의 //부품연결정보에 부품정보 정의
return $entity->setPartEntity($this->setPart_process( return $entity->setPartEntity(
$entity, $this->setServerPart($entity, $formDatas['part_uid'], STATUS['OCCUPIED'])
$formDatas['part_uid'], );
STATUS['OCCUPIED']
));
} }
//삭제 //삭제
public function delete(mixed $entity): ServerPartEntity public function delete(mixed $entity): ServerPartEntity
{ {
$this->setPart_process($entity, $entity->getPartUID(), STATUS['AVAILABLE']); //부품연결정보에 부품정보 정의
$this->setServerPart($entity, $entity->getPartUID(), STATUS['AVAILABLE']);
return parent::delete($entity); return parent::delete($entity);
} }
} }

View File

@ -121,19 +121,28 @@ class ServerService extends EquipmentService
throw new \Exception("Server코드[{$formDatas['code']}의 형식이 맞지않습니다"); throw new \Exception("Server코드[{$formDatas['code']}의 형식이 맞지않습니다");
} }
} }
//Service별 수정 //서비스 설정
public function setService(ServiceEntity $serviceEntity, mixed $uid, string $status): ServerEntity
{
$entity = $this->getEntity($uid);
if (!($entity instanceof ServerEntity)) {
throw new \Exception("{$uid}에 해당하는 서버정보를 찾을수없습니다.");
}
$formDatas = [];
$formDatas['clientinfo_uid'] = $serviceEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serviceEntity->getPK();
$formDatas['status'] = $status;
//서버정보 상태수정
return $this->modify($entity, $formDatas);
}
// 수정
public function modify(mixed $entity, array $formDatas): ServerEntity public function modify(mixed $entity, array $formDatas): ServerEntity
{ {
//서비스정보가져오기 //서비스정보가져오기
$serviceEntity = null;
if (array_key_exists('serviceEntity', $formDatas)) {
$serviceEntity = $formDatas['serviceEntity'];
} else {
if (!array_key_exists('serviceinfo_uid', $formDatas)) { if (!array_key_exists('serviceinfo_uid', $formDatas)) {
throw new \Exception("서비스 정보가 지정되지 않았습니다."); throw new \Exception("서비스 정보가 지정되지 않았습니다.");
} }
$serviceEntity = $this->getServiceService()->getEntity($formDatas['serviceinfo_uid']); $serviceEntity = $this->getServiceService()->getEntity($formDatas['serviceinfo_uid']);
}
if ($serviceEntity instanceof ServiceEntity) { if ($serviceEntity instanceof ServiceEntity) {
//서비스상태에 따라 //서비스상태에 따라
if ($formDatas['status'] === STATUS['AVAILABLE']) { if ($formDatas['status'] === STATUS['AVAILABLE']) {

View File

@ -2,12 +2,14 @@
namespace App\Services\Equipment; namespace App\Services\Equipment;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Equipment\SwitchEntity; use App\Entities\Equipment\SwitchEntity;
use App\Helpers\Equipment\SwitchHelper; use App\Helpers\Equipment\SwitchHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Equipment\SwitchModel; use App\Models\Equipment\SwitchModel;
use App\Services\Equipment\EquipmentService; use App\Services\Equipment\EquipmentService;
class SwitchService extends EquipmentService class SwitchService extends EquipmentService implements ServerPartInterface
{ {
public function __construct() public function __construct()
{ {
@ -48,15 +50,27 @@ class SwitchService extends EquipmentService
} }
//기본 기능부분 //기본 기능부분
//FieldForm관련용 //FieldForm관련용
//상태변경 //서비스파트 설정
public function setStatus(string $code, string $status): SwitchEntity public function setServerPart(ServerPartEntity $serverPartEntity, mixed $uid, string $status): SwitchEntity
{ {
//code의 경우 사용가능/사용중으로 설정작업 $entity = $this->getEntity($uid);
$entity = $this->getEntity($code); if (!($entity instanceof SwitchEntity)) {
if (!$entity) { throw new \Exception("{$uid}에 해당하는 스위치정보를 찾을수없습니다.");
throw new \Exception("{$code}에 대한 Switch Port정보를 찾을수 없습니다.");
} }
return $this->getModel()->modify($entity, ['status' => $status]); //부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
if ($status === STATUS['AVAILABLE']) {
//사용가능
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
} else {
$formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID();
}
$formDatas['status'] = $status;
return $this->modify($entity, $formDatas);
} }
//List 검색용 //List 검색용
//OrderBy 처리 //OrderBy 처리

View File

@ -80,7 +80,7 @@
</div> </div>
</div> </div>
<?= form_close() ?> <?= form_close() ?>
<?= view_cell("\App\Cells\Customer\ServiceCell::detail", ['userinfo_uid' => $viewDatas['entity']->getPK()]) ?> <?= view_cell("\App\Cells\Customer\ServiceCell::detail", ['clientinfo_uid' => $viewDatas['entity']->getPK()]) ?>
</div> </div>
<!-- index_body --> <!-- index_body -->
</div> </div>

View File

@ -132,7 +132,7 @@
<i class="fa fa-support fa-5x"></i> <i class="fa fa-support fa-5x"></i>
</div> </div>
<div class="col-8 text-end"> <div class="col-8 text-end">
<div class="huge"><?= $viewDatas['totalUnPaidCount'] ?></div> <div class="huge"><?= number_format($viewDatas['totalUnPaidCount']) ?>건/<?= number_format($viewDatas['totalUnPaidAmount']) ?>원</div>
<div><?= date("Y-m-d") ?> 금일 기준 미납 서비스</div> <div><?= date("Y-m-d") ?> 금일 기준 미납 서비스</div>
</div> </div>
</div> </div>

View File

@ -7,7 +7,6 @@
</style> </style>
<?php foreach ($serviceCellDatas['entities'] as $entity): ?> <?php foreach ($serviceCellDatas['entities'] as $entity): ?>
<?php $serviceCellDatas['entity'] = $entity ?> <?php $serviceCellDatas['entity'] = $entity ?>
<?php $unpaids = $serviceCellDatas['paymentService']->getUnPaids('serviceinfo_uid', ['serviceinfo_uid' => $entity->getPK()]) ?>
<div class="rounded border border-gray p-2 mt-3"> <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-hover table-striped">
<tr class="text-center"> <tr class="text-center">
@ -59,7 +58,7 @@
</tr> </tr>
<tr> <tr>
<th class="fw-bold">미납금</th> <th class="fw-bold">미납금</th>
<td class="amount-red"><?= array_key_exists('amount', $unpaids) ? number_format($unpaids['amount']) : 0 ?>원</td> <td class="amount-red">: <?= $serviceCellDatas['unPaids'][$entity->getPK()]['cnt'] ?>건,<?= number_format($serviceCellDatas['unPaids'][$entity->getPK()]['amount']) ?>원</td>
</tr> </tr>
<tr> <tr>
<td colspan="2" class="text-center"><a href="/admin/customer/payment?clientinfo_uid=<?= $entity->getClientInfoUID() ?>"><button class="btn btn-success">결제내역</button></a></td> <td colspan="2" class="text-center"><a href="/admin/customer/payment?clientinfo_uid=<?= $entity->getClientInfoUID() ?>"><button class="btn btn-success">결제내역</button></a></td>

View File

@ -12,6 +12,6 @@
<a href="/admin/customer/service"><?= ICONS['SERVICE'] ?> 서비스내역</a> <a href="/admin/customer/service"><?= ICONS['SERVICE'] ?> 서비스내역</a>
</div> </div>
<div class="accordion-item"> <div class="accordion-item">
<a href="/admin/customer/payment?status=default"><?= ICONS['PAYMENT'] ?> 결제내역</a> <a href="/admin/customer/payment?status=<?= STATUS['UNPAID'] ?>"><?= ICONS['PAYMENT'] ?> 결제내역</a>
</div> </div>
</div> </div>

View File

@ -11,7 +11,7 @@
<span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/customer/service">서비스현황</a></span> <span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/customer/service">서비스현황</a></span>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/customer/payment">결제현황</a></span> <span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/customer/payment?status=<?= STATUS['UNPAID'] ?>">결제현황</a></span>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/equipment/server">서버현황</a></span> <span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/equipment/server">서버현황</a></span>