diff --git a/extdbms/lib/Controllers/DBMS/Client/PaymentController.php b/extdbms/lib/Controllers/DBMS/Client/PaymentController.php index 3941ef9..3be7500 100644 --- a/extdbms/lib/Controllers/DBMS/Client/PaymentController.php +++ b/extdbms/lib/Controllers/DBMS/Client/PaymentController.php @@ -2,6 +2,8 @@ namespace lib\Controllers\DBMS\Client; +use lib\Models\AddDbModel; +use lib\Models\ClientModel; use lib\Utils\Pagination; class PaymentController extends ClientController @@ -44,42 +46,53 @@ class PaymentController extends ClientController //WEB 접속방법 : http://localhostsite/client/payment/unpaid public function nonpayment(array $params): string { - //사이트 정보 가져오기 - if (!array_key_exists('sitekey', $params)) { - throw new \Exception("sitekey 값이 정의되지 않았습니다."); - } - $sitekey = $params['sitekey']; - $this->siteInfo = DBMS_SITEINFOS[$sitekey]; - if (!array_key_exists($sitekey, DBMS_SITEINFOS)) { - throw new \Exception("[{$sitekey}]에 해당하는 사이트정보가 없습니다."); - } - //사용자정보가져오기 - $client_code = $params['client_code']; - if (!array_key_exists('client_code', $params)) { - throw new \Exception("client_code 값이 정의되지 않았습니다."); - } - $client = $this->getClientService()->getEntityByCode($client_code); - if (!$client) { - throw new \Exception("[{$client_code}]에 해당하는 사이트정보가 없습니다."); - } - $this->client = $client; + //Client_Code = ["C219"=>WinIDC,"C116"=>IDC-JP"] -> 미지급금계산 제외 Client_Code + $exclude_clients = ['C116', 'C219']; //mode 당일,1일전,2일전,3일전,custom - $nonpaymentDay = 'all'; + $today = date("Y-m-d"); switch ($params['mode']) { + case 'today': + $this->getServiceService()->getModel()->where("service_payment_date = CURDATE()"); + $this->message = "오늘[{$today}]기준 당일 "; + break; case '1day': + $nonpaymentDay = 1; + $this->getServiceService()->getModel()->where("service_payment_date = Date_Add(CURDATE(),INTERVAL {$nonpaymentDay} DAY)"); + $this->message = "오늘[{$today}]기준 {$nonpaymentDay}일전"; break; case '2day': + $nonpaymentDay = 2; + $this->getServiceService()->getModel()->where("service_payment_date = Date_Add(CURDATE(),INTERVAL {$nonpaymentDay} DAY)"); + $this->message = "오늘[{$today}]기준 {$nonpaymentDay}일전"; break; case '3day': + $nonpaymentDay = 3; + $this->getServiceService()->getModel()->where("service_payment_date = Date_Add(CURDATE(),INTERVAL {$nonpaymentDay} DAY)"); + $this->message = "오늘[{$today}]기준 {$nonpaymentDay}일전"; break; - case 'custom': - break; + case 'all': default: + $this->message = "오늘[{$today}]기준 전체"; + break; } - $total = count($temps); - $page = $parmas['page'] ?? 1; - $perPage = $parmas['perPage'] ?? 10; - $this->pagination = new Pagination($total, (int)$page, (int)$perPage); + $table = $this->getServiceService()->getModel()->getTable(); + $clientTable = ClientModel::TABLE; + $addDbTable = AddDbModel::TABLE; + $this->getServiceService()->getModel()->select("{$clientTable}.Client_Name,{$table}.service_code,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,addDB_case,addDB_nonpayment,addDB_payment,addDB_accountStatus,addDB_ip,addDB_payment_date"); + $this->getServiceService()->getModel()->join($clientTable, "{$table}.client_code = {$clientTable}.Client_Code"); + $this->getServiceService()->getModel()->join($addDbTable, "{$table}.service_code = {$addDbTable}.service_code"); + $this->getServiceService()->getModel()->whereNotIn("{$addDbTable}.client_code", $exclude_clients); + $this->getServiceService()->getModel()->whereNotIn("{$addDbTable}.addDB_accountStatus", ["complete"]); + $this->getServiceService()->getModel()->orderBy("service_payment_date", "DESC"); + + $this->mode = $params['mode']; + $this->total = $this->getServiceService()->getCount(); + $this->entities = $this->getServiceService()->getEntities(); + // $total = count($temps); + // $page = $parmas['page'] ?? 1; + // $perPage = $parmas['perPage'] ?? 10; + // $this->pagination = new Pagination($total, (int)$page, (int)$perPage); + //
pagination->render("http://{$_SERVER['HTTP_HOST']}:6752/IdcDepositNonPaymentListMK.dep?mode=", ['mode' => "{$this->mode}", 'ea' => "{$this->total}"])>
return $this->render(path: __FUNCTION__); } } //Class diff --git a/extdbms/lib/Database/QueryBuilder.php b/extdbms/lib/Database/QueryBuilder.php index 297271a..a76e86a 100644 --- a/extdbms/lib/Database/QueryBuilder.php +++ b/extdbms/lib/Database/QueryBuilder.php @@ -3,6 +3,7 @@ namespace lib\Database; use PDO; +use PDOStatement; class QueryBuilder { @@ -36,9 +37,10 @@ class QueryBuilder return $this; } - protected function buildSelectSql(): string + protected function buildSelectSql(?string $select = null): string { - $sql = "SELECT " . implode(', ', $this->select) . " FROM {$this->table}"; + $select = $select ?? implode(', ', $this->select); + $sql = "SELECT {$select} FROM {$this->table}"; // ⬇️ Join 처리 추가 if (!empty($this->joins)) { $sql .= ' ' . implode(' ', $this->joins); @@ -237,9 +239,9 @@ class QueryBuilder //Result부분 //binding까지 완료한 SQL문을 return함 - final public function toRawSql(): string + final public function toRawSql(?string $select = null): string { - $raw = $this->buildSelectSql(); + $raw = $this->buildSelectSql($select); foreach ($this->bindings as $key => $value) { $escaped = is_numeric($value) ? $value : $this->pdo->quote($value); // 명명된 바인딩 @@ -252,35 +254,38 @@ class QueryBuilder } return $raw; } - final public function get(): array + private function execute(?string $select = null): PDOStatement { if ($this->_debug) { echo php_sapi_name() === 'cli' - ? "\nSQL DEBUG: " . $this->toRawSql() . "\n" - : "
SQL DEBUG: " . $this->toRawSql() . "
"; + ? "\nSQL DEBUG: " . $this->toRawSql($select) . "\n" + : "
SQL DEBUG: " . $this->toRawSql($select) . "
"; } $this->latestQuery = $this->toRawSql(); - $stmt = $this->pdo->prepare($this->buildSelectSql()); + $stmt = $this->pdo->prepare($this->buildSelectSql($select)); foreach ($this->bindings as $key => $value) { $stmt->bindValue($key, $value); } $stmt->execute(); + return $stmt; + } + final public function get(): array + { + $stmt = $this->execute(); $this->where = []; $this->bindings = []; return $stmt->fetchAll(PDO::FETCH_ASSOC); } - final public function first(): ?array { $this->limit = 1; $results = $this->get(); return $results[0] ?? null; } - final public function count(string $select = "COUNT(*) as cnt"): int { - $this->select = [$select]; - $results = $this->get(); + $stmt = $this->execute($select); + $results = $stmt->fetchAll(PDO::FETCH_ASSOC); return (int)($results[0]['cnt'] ?? 0); } diff --git a/extdbms/lib/Views/dbms/client/payment/nonpayment.php b/extdbms/lib/Views/dbms/client/payment/nonpayment.php index 0ab786f..df461cc 100644 --- a/extdbms/lib/Views/dbms/client/payment/nonpayment.php +++ b/extdbms/lib/Views/dbms/client/payment/nonpayment.php @@ -1,128 +1,13 @@ - -
- >전체 - >당일 - >1일전 - >2일전 - >3일전 - - + mode == "all" ? "checked" : "" ?>>전체 + mode == "today" ? "checked" : "" ?>>당일 + mode == "1day" ? "checked" : "" ?>>1일전 + mode == "2day" ? "checked" : "" ?>>2일전 + mode == "3day" ? "checked" : "" ?>>3일전
- $total) { - $list_no = $total; -} -$total_page = ($total != '0') ? ceil($total / $list_no) : '0'; - -$page = $_GET[curPage]; - -if (!$page) { - $page = 1; -} elseif ($page >= $total_page) { - $page = $total_page; -} else { - $page = $page; -} - -$next_page = ($page - '1') * $list_no; -$next_no = $next_page + $list_no; - -switch ($_GET[mode]) { - case "today": - //당일 - $query = "SELECT clientdb.Client_Code,Client_Name,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,adddb_case,adddb.client_code,adddb.service_code,adddb_nonpayment,adddb_payment,adddb_accountStatus,addDB_ip,addDB_payment_date FROM clientdb INNER JOIN servicedb ON clientdb.client_code = servicedb.client_code INNER JOIN adddb ON servicedb.service_code = adddb.service_code WHERE servicedb.service_code = adddb.service_code AND adddb.client_code not in ('C116','C219') AND adddb.adddb_accountStatus not in ('complete') AND service_payment_date = CURDATE() ORDER BY service_payment_date,Client_Name,adddb_accountStatus ASC limit " . $next_page . "," . $next_no; - break; - case "1day": - //1일전 - $query = "SELECT clientdb.Client_Code,Client_Name,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,adddb_case,adddb.client_code,adddb.service_code,adddb_nonpayment,adddb_payment,adddb_accountStatus,addDB_ip,addDB_payment_date FROM clientdb INNER JOIN servicedb ON clientdb.client_code = servicedb.client_code INNER JOIN adddb ON servicedb.service_code = adddb.service_code WHERE servicedb.service_code = adddb.service_code AND adddb.client_code not in ('C116','C219') AND adddb.adddb_accountStatus not in ('complete') AND service_payment_date = Date_Add(curdate(),INTERVAL 1 DAY) ORDER BY service_payment_date,Client_Name,adddb_accountStatus ASC limit " . $next_page . "," . $next_no; - break; - case "2day": - //2일전 - $query = "SELECT clientdb.Client_Code,Client_Name,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,adddb_case,adddb.client_code,adddb.service_code,adddb_nonpayment,adddb_payment,adddb_accountStatus,addDB_ip,addDB_payment_date FROM clientdb INNER JOIN servicedb ON clientdb.client_code = servicedb.client_code INNER JOIN adddb ON servicedb.service_code = adddb.service_code WHERE servicedb.service_code = adddb.service_code AND adddb.client_code not in ('C116','C219') AND adddb.adddb_accountStatus not in ('complete') AND service_payment_date = Date_Add(curdate(),INTERVAL 2 DAY) ORDER BY service_payment_date,Client_Name,adddb_accountStatus ASC limit " . $next_page . "," . $next_no; - break; - case "3day": - //3일전 - $query = "SELECT clientdb.Client_Code,Client_Name,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,adddb_case,adddb.client_code,adddb.service_code,adddb_nonpayment,adddb_payment,adddb_accountStatus,addDB_ip,addDB_payment_date FROM clientdb INNER JOIN servicedb ON clientdb.client_code = servicedb.client_code INNER JOIN adddb ON servicedb.service_code = adddb.service_code WHERE servicedb.service_code = adddb.service_code AND adddb.client_code not in ('C116','C219') AND adddb.adddb_accountStatus not in ('complete') AND service_payment_date = Date_Add(curdate(),INTERVAL 3 DAY) ORDER BY service_payment_date,Client_Name,adddb_accountStatus ASC limit " . $next_page . "," . $next_no; - break; - - case "custom": - //커스텀 - //$query = "SELECT clientdb.Client_Code,Client_Name,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,adddb_case,adddb.client_code,adddb.service_code,adddb_nonpayment,adddb_payment,adddb_accountStatus,addDB_ip,addDB_payment_date FROM clientdb INNER JOIN servicedb ON clientdb.client_code = servicedb.client_code INNER JOIN adddb ON servicedb.service_code = adddb.service_code WHERE servicedb.service_code = adddb.service_code AND adddb.client_code not in ('C116','C219') AND adddb.adddb_accountStatus not in ('complete') AND service_payment_date = CURDATE() Group By server_code ORDER BY service_payment_date,Client_Name,adddb_accountStatus ASC limit ".$next_page.",".$next_no; - $query = "SELECT clientdb.Client_Code,Client_Name,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,adddb_case,adddb.client_code,adddb.service_code,adddb_nonpayment,adddb_payment,adddb_accountStatus,addDB_ip,addDB_payment_date FROM clientdb INNER JOIN servicedb ON clientdb.client_code = servicedb.client_code INNER JOIN adddb ON servicedb.service_code = adddb.service_code WHERE servicedb.service_code = adddb.service_code AND adddb.client_code not in ('C116','C219') AND adddb.adddb_accountStatus not in ('complete') AND service_payment_date = Date_Add(curdate(),INTERVAL 1 DAY) Group By server_code ORDER BY service_payment_date,Client_Name,adddb_accountStatus ASC limit " . $next_page . "," . $next_no; - break; - - default: - //전체 - $query = "SELECT clientdb.Client_Code,Client_Name,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,adddb_case,adddb.client_code,adddb.service_code,adddb_nonpayment,adddb_payment,adddb_accountStatus,addDB_ip,addDB_payment_date FROM clientdb INNER JOIN servicedb ON clientdb.client_code = servicedb.client_code INNER JOIN adddb ON servicedb.service_code = adddb.service_code WHERE servicedb.service_code = adddb.service_code AND adddb.client_code not in ('C116','C219') AND adddb.adddb_accountStatus not in ('complete') ORDER BY service_payment_date,Client_Name,adddb_accountStatus ASC limit " . $next_page . "," . $next_no; - break; -} - -$result = @mysql_query($query, $db_connect) or die($db_q_error); -?> - - 엑셀 + +message ?> 미납리스트 엑셀
@@ -140,39 +25,24 @@ $result = @mysql_query($query, $db_connect) or die($db_q_error); - - - + entities as $entity) { ?> - - - - - - + + + + + - - - - - - + + + + + + - + - + - -
Client_Name ?>addDB_case ?>server_code ?>service_ip ?>service_payment_date ?>service_amount ?>addDB_accountStatus ?>addDB_nonpayment ?> service_note ?>
-
- pagination->render("http://{$_SERVER['HTTP_HOST']}:6752/IdcDepositNonPaymentListMK.dep?mode=", ['mode' => "{$this->mode}", 'ea' => "{$this->ea}"]) ?> -
\ No newline at end of file + \ No newline at end of file