isLogin) { $this->sys_error("Invalid Token"); exit; } $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $query = "SELECT prd.*, mu.M_UserFullName as M_RequesterFullName FROM purchase_request_direct as prd JOIN m_user as mu ON prd.PurchaseRequestCreatedUserID = mu.M_UserID WHERE PurchaseRequestDirectIsActive = 'Y' AND PurchaseRequestCreatedUserID = {$userId} AND PurchaseRequestDirectNumber LIKE '%" . $payload["search"] . "%'"; $queryCount = "SELECT count(*) as total FROM purchase_request_direct as prd JOIN m_user as mu ON prd.PurchaseRequestCreatedUserID = mu.M_UserID WHERE PurchaseRequestDirectIsActive = 'Y' AND PurchaseRequestCreatedUserID = {$userId} AND PurchaseRequestDirectNumber LIKE '%" . $payload["search"] . "%'"; if ((isset($payload["startDate"]) && isset($payload["endDate"])) && (trim($payload["startDate"]) !== "" && trim($payload["endDate"]) !== "")) { $query .= " AND (PurchaseRequestDirectDate BETWEEN '{$payload["startDate"]} 00:00:00' AND '{$payload["endDate"]} 23:59:59' OR PurchaseRequestDirectDateUse BETWEEN '{$payload["startDate"]} 00:00:00' AND '{$payload["endDate"]} 23:59:59')"; $queryCount .= " AND (PurchaseRequestDirectDate BETWEEN '{$payload["startDate"]} 00:00:00' AND '{$payload["endDate"]} 23:59:59' OR PurchaseRequestDirectDateUse BETWEEN '{$payload["startDate"]} 00:00:00' AND '{$payload["endDate"]} 23:59:59')"; } if ($payload["status"]) { $query .= " AND PurchaseRequestDirectStatus = {$payload["status"]}"; $queryCount .= " AND PurchaseRequestDirectStatus = {$payload["status"]}"; } $exec = $this->db->query($queryCount, []); $numberLimit = 20; $numberOffset = 0; if ($payload["currentPage"] > 0) { $numberOffset = ($payload["currentPage"] - 1) * $numberLimit; } $totalCount = 0; $totalPage = 0; if ($exec) { $totalCount = $exec->result_array()[0]["total"]; $totalPage = ceil($totalCount / $numberLimit); } else { $this->db->trans_rollback(); $this->sys_error_db("select purchase request", $this->db);; exit; } $query .= " ORDER BY PurchaseRequestDirectNumber DESC LIMIT {$numberLimit} OFFSET {$numberOffset}"; $exec = $this->db->query($query, []); if ($exec) { $rows = $exec->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select purchase request", $this->db); exit; } $result = array( "total" => $totalPage, "totalFilter" => $totalCount, "records" => $rows, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function searchDetail() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $payload = $this->sys_input; $queryCount = "SELECT count(*) as total FROM purchase_request_direct_detail WHERE PurchaseRequestDirectDetailIsActive = 'Y' AND PurchaseRequestDirectDetailPurchaseRequestDirectID = {$payload['PRID']}"; $exec = $this->db->query($queryCount, []); $totalCount = 0; if ($exec) { $totalCount = $exec->result_array()[0]["total"]; } else { $this->db->trans_rollback(); $this->sys_error_db("select purchase request detail", $this->db);; exit; } $query = "SELECT *, ROW_NUMBER() OVER(ORDER BY PurchaseRequestDirectDetailID) RowNumber FROM purchase_request_direct_detail WHERE PurchaseRequestDirectDetailIsActive = 'Y' AND PurchaseRequestDirectDetailPurchaseRequestDirectID = {$payload['PRID']} ORDER BY PurchaseRequestDirectDetailStatus ASC, PurchaseRequestDirectDetailID ASC"; $exec = $this->db->query($query, []); if ($exec) { $rows = $exec->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select purchase request detail", $this->db); exit; } $result = array( "totalFilter" => $totalCount, "records" => $rows, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function getBranch() { try { $query = "SELECT DISTINCT M_BranchCode, M_BranchName FROM m_branch WHERE M_BranchIsActive = 'Y' ORDER BY M_BranchName ASC"; $exec = $this->db->query($query, []); if ($exec) { $rows = $exec->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select branch", $this->db); exit; } $result = array( "records" => $rows, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function saveRequest() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $this->db->trans_begin(); $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $pdSql = "SELECT `fn_numbering`('PD') AS PD"; $exec = $this->db->query($pdSql, []); $pd = ""; $dateNow = date('Y-m-d'); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("purchase request insert error", $this->db); exit; } else { $pd = $exec->result_array()[0]["PD"]; } $sql = "INSERT INTO purchase_request_direct( PurchaseRequestDirectNumber, PurchaseRequestDirectDate, PurchaseRequestDirectDateUse, PurchaseRequestDirectM_BranchCode, PurchaseRequestDirectDescription, PurchaseRequestDirectNote, PurchaseRequestDirectTotalEstimation, PurchaseRequestDirectTotalPaid, PurchaseRequestDirectTotalRealitation, PurchaseRequestDirectStatus, PurchaseRequestApprovedDate, PurchaseRequestApprovedBy, PurchaseRequestConfirmedDate, PurchaseRequestConfirmedBy, PurchaseRequestPaidDate, PurchaseRequestPaidBy, PurchaseRequestDirectIsActive, PurchaseRequestCreated, PurchaseRequestLastUpdated, PurchaseRequestDeleted, PurchaseRequestCreatedUserID, PurchaseRequestLastUpdatedUserID, PurchaseRequestDeletedUserID ) VALUES ('{$pd}', '{$dateNow}', '{$payload['PRDateUse']}', '{$payload['PRBranch']}', '{$payload['PRDescription']}', NULL, 0, 0, 0, 'Draft', NULL, NULL, NULL, NULL, NULL, NULL, 'Y', NOW(), NULL, NULL, {$userId}, NULL, NULL)"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("purchase request insert error", $this->db); exit; } $this->db->trans_commit(); $newInsert = "SELECT * FROM purchase_request_direct WHERE PurchaseRequestDirectNumber = '{$pd}' AND PurchaseRequestDirectIsActive = 'Y'"; $records = $this->db->query($newInsert, [])->result_array(); $result = array("total" => 1, "records" => $records); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function updateRequest() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $this->db->trans_begin(); $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $sql = "UPDATE purchase_request_direct SET PurchaseRequestDirectDateUse = '{$payload['PRDateUse']}', PurchaseRequestDirectM_BranchCode = '{$payload['PRBranch']}', PurchaseRequestDirectDescription = '{$payload['PRDescription']}', PurchaseRequestLastUpdated = NOW(), PurchaseRequestLastUpdatedUserID = {$userId} WHERE PurchaseRequestDirectID = {$payload['PRID']}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("purchase request update error", $this->db); exit; } $this->db->trans_commit(); $newUpdate = "SELECT * FROM purchase_request_direct WHERE PurchaseRequestDirectID = {$payload['PRID']} AND PurchaseRequestDirectIsActive = 'Y'"; $records = $this->db->query($newUpdate, [])->result_array(); $result = array("total" => 1, "records" => $records); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function deleteRequest() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $this->db->trans_begin(); $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $sql = "UPDATE purchase_request_direct SET PurchaseRequestDeleted = NOW(), PurchaseRequestDeletedUserID = {$userId}, PurchaseRequestDirectIsActive = 'N' WHERE PurchaseRequestDirectID = {$payload['PRID']}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("purchase request delete error", $this->db); exit; } $this->db->trans_commit(); $result = array("total" => 1, "records" => array("xId" => 0)); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function saveDetail() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $this->db->trans_begin(); $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $PRDTotalPrice = intval($payload['PRDAmountRequest']) * intval($payload['PRDEstimationPrice']); $query = "SELECT COUNT(*) as exist FROM purchase_request_direct_detail WHERE PurchaseRequestDirectDetailIsActive = 'Y' AND PurchaseRequestDirectDescription = '{$payload['PRDDescriptionDetail']}' AND PurchaseRequestDirectDetailPurchaseRequestDirectID = {$payload['PRID']}"; $exist = $this->db->query($query, []); if ($exist) { $row = $exist->row()->exist; } else { $this->sys_error_db("exist error", $this->db); exit; } if ($row == 0) { $sql = "INSERT INTO purchase_request_direct_detail( PurchaseRequestDirectDetailPurchaseRequestDirectID, PurchaseRequestDirectDescription, PurchaseRequestDirectDetailAmountRequest, PurchaseRequestDirectDetailAmount, PurchaseRequestDirectDetailEstimationPrice, PurchaseRequestDirectDetailTotalEstimationPrice, PurchaseRequestDirectDetailTotalRealitationPrice, PurchaseRequestDirectDetailStatus, PurchaseRequestDirectDetailIsActive, PurchaseRequestDirectDetailCreated, PurchaseRequestDirectDetailLastUpdated, PurchaseRequestDirectDetailDeleted, PurchaseRequestDirectDetailCreatedUserID, PurchaseRequestDirectDetailLastUpdatedUserID, PurchaseRequestDirectDetailDeletedUserID ) VALUES ({$payload['PRID']}, '{$payload['PRDDescriptionDetail']}', {$payload['PRDAmountRequest']}, NULL, {$payload['PRDEstimationPrice']}, {$PRDTotalPrice}, NULL, 'Pending', 'Y', NOW(), NULL, NULL, {$userId}, NULL, NULL)"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("request insert error", $this->db); exit; } else { $sqlTotalPrice = "SELECT SUM(PurchaseRequestDirectDetailTotalEstimationPrice) AS Total FROM purchase_request_direct_detail WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = {$payload['PRID']} AND PurchaseRequestDirectDetailIsActive = 'Y'"; $exec = $this->db->query($sqlTotalPrice, []); $total = 0; if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order purchase request error", $this->db); exit; } else { $total = $exec->result_array()[0]["Total"]; } $sql = "UPDATE purchase_request_direct SET PurchaseRequestDirectTotalEstimation = {$total}, PurchaseRequestLastUpdated = NOW(), PurchaseRequestLastUpdatedUserID = {$userId} WHERE PurchaseRequestDirectID = {$payload['PRID']} AND PurchaseRequestDirectIsActive = 'Y'"; $exec = $this->db->query($sql, []); } $this->db->trans_commit(); $result = array("total" => 1, "records" => array("xId" => 0)); $this->sys_ok($result); } else { $errors = array(); if ($row != 0) { array_push($errors, array('msg' => 'Data sudah ada')); } $result = array("total" => -1, "errors" => $errors, "records" => array('status' => 'ERROR')); $this->sys_ok($result); } } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function updateDetail() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $this->db->trans_begin(); $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $PRDTotalPrice = intval($payload["PRDAmountRequest"]) * intval($payload["PRDEstimationPrice"]); $sql = "UPDATE purchase_request_direct_detail SET PurchaseRequestDirectDescription = '{$payload["PRDDescriptionDetail"]}', PurchaseRequestDirectDetailAmountRequest = {$payload["PRDAmountRequest"]}, PurchaseRequestDirectDetailEstimationPrice = {$payload["PRDEstimationPrice"]}, PurchaseRequestDirectDetailTotalEstimationPrice = {$PRDTotalPrice}, PurchaseRequestDirectDetailLastUpdated = NOW(), PurchaseRequestDirectDetailLastUpdatedUserID = {$userId} WHERE PurchaseRequestDirectDetailID = {$payload["PRDID"]}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("request update error", $this->db); exit; } else { $sqlTotalPrice = "SELECT SUM(PurchaseRequestDirectDetailTotalEstimationPrice) AS Total FROM purchase_request_direct_detail WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = {$payload["PRID"]} AND PurchaseRequestDirectDetailIsActive = 'Y'"; $exec = $this->db->query($sqlTotalPrice, []); $total = 0; if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order purchase request error", $this->db); exit; } else { $total = $exec->result_array()[0]["Total"]; } $sql = "UPDATE purchase_request_direct SET PurchaseRequestDirectTotalEstimation = {$total}, PurchaseRequestLastUpdated = NOW(), PurchaseRequestLastUpdatedUserID = {$userId} WHERE PurchaseRequestDirectID = {$payload["PRID"]} AND PurchaseRequestDirectIsActive = 'Y'"; $exec = $this->db->query($sql, []); } $this->db->trans_commit(); $result = array("total" => 1, "records" => array("xId" => $payload["PRDID"])); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function deleteDetail() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $this->db->trans_begin(); $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $sql = "UPDATE purchase_request_direct_detail SET PurchaseRequestDirectDetailDeleted = NOW(), PurchaseRequestDirectDetailDeletedUserID = {$userId}, PurchaseRequestDirectDetailIsActive = 'N' WHERE PurchaseRequestDirectDetailID = {$payload["PRDID"]}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("request delete error", $this->db); exit; } else { $sqlTotalPrice = "SELECT SUM(PurchaseRequestDirectDetailTotalEstimationPrice) AS Total FROM purchase_request_direct_detail WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = {$payload["PRID"]} AND PurchaseRequestDirectDetailIsActive = 'Y'"; $exec = $this->db->query($sqlTotalPrice, []); $total = 0; if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order purchase request error", $this->db); exit; } else { $total = $exec->result_array()[0]["Total"] ?? 0; } $sql = "UPDATE purchase_request_direct SET PurchaseRequestDirectTotalEstimation = {$total}, PurchaseRequestLastUpdated = NOW(), PurchaseRequestLastUpdatedUserID = {$userId} WHERE PurchaseRequestDirectID = {$payload["PRID"]} AND PurchaseRequestDirectIsActive = 'Y'"; $exec = $this->db->query($sql, []); } $this->db->trans_commit(); $result = array("total" => 1, "records" => array("xId" => 0)); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function orderRequest() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $this->db->trans_begin(); $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $sqlDetail = "UPDATE purchase_request_direct_detail SET PurchaseRequestDirectDetailLastUpdated = NOW(), PurchaseRequestDirectDetailLastUpdatedUserID = {$userId} WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = {$payload["PRID"]} AND PurchaseRequestDirectDetailIsActive = 'Y' AND PurchaseRequestDirectDetailStatus = 'Pending'"; $exec = $this->db->query($sqlDetail, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order purchase request error", $this->db); exit; } $sql = "UPDATE purchase_request_direct SET PurchaseRequestDirectStatus = 'Pending', PurchaseRequestLastUpdated = NOW(), PurchaseRequestLastUpdatedUserID = {$userId} WHERE PurchaseRequestDirectID = {$payload["PRID"]} AND PurchaseRequestDirectIsActive = 'Y'"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order purchase request error", $this->db); exit; } $this->db->trans_commit(); $sql = "SELECT *, ROW_NUMBER() OVER(ORDER BY PurchaseRequestDirectNumber) RowNumber FROM purchase_request_direct WHERE PurchaseRequestDirectIsActive = 'Y' AND PurchaseRequestCreatedUserID = {$userId} AND PurchaseRequestDirectID = {$payload["PRID"]}"; $exec = $this->db->query($sql, []); $row = []; if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order purchase request error", $this->db); exit; } else { $row = $exec->result_array(); } $result = array("total" => 1, "records" => $row); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } }