isLogin) { $this->sys_error("Invalid Token"); exit; } */ $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $startdate = $payload["startdate"]; $enddate = $payload["enddate"]; $query = "SELECT pv.*, M_BranchID, M_BranchCode, M_BranchName, CONCAT(cs.coaAccountNo, ' | ', cs.coaDescription) as CoaSource, -- CONCAT(ce.coaAccountNo, ' | ', ce.coaDescription) as CoaExpense, CONCAT(ct.coaAccountNo, ' | ', ct.coaDescription) as CoaTemporary, cs.coaDescription coaDescriptionSource, -- ce.coaDescription coaDescriptionExpense, ct.coaDescription coaDescriptionTemporary, cs.coaAccountNo coaAccountNoSource, -- ce.coaAccountNo coaAccountNoExpense, ct.coaAccountNo coaAccountNoTemporary FROM payment_voucher as pv LEFT JOIN m_branch ON M_BranchCode = PaymentVoucherM_BranchCode JOIN coa cs ON cs.coaID = PaymentVoucherCoaSourceID -- JOIN coa ce ON ce.coaID = PaymentVoucherCoaExpenseID JOIN coa ct ON ct.coaID = PaymentVoucherCoaTemporaryID WHERE PaymentVoucherIsActive = 'Y' AND DATE(PaymentVoucherDate) BETWEEN '{$startdate}' AND '{$enddate}' AND (PaymentVoucherNumber LIKE '%" . $payload["search"] . "%')"; $queryCount = "SELECT count(*) as total FROM payment_voucher as pv WHERE PaymentVoucherIsActive = 'Y' AND DATE(PaymentVoucherDate) BETWEEN '{$startdate}' AND '{$enddate}' AND (PaymentVoucherNumber LIKE '%" . $payload["search"] . "%')"; if ((isset($payload["startDate"]) && isset($payload["endDate"])) && (trim($payload["startDate"]) !== "" && trim($payload["endDate"]) !== "")) { $query .= " AND (PaymentVoucherDate BETWEEN '{$payload["startDate"]} 00:00:00' AND '{$payload["endDate"]} 23:59:59')"; $queryCount .= " AND (PaymentVoucherDate BETWEEN '{$payload["startDate"]} 00:00:00' AND '{$payload["endDate"]} 23:59:59')"; } if ($payload["status"] !== 'All') { $query .= " AND PaymentVoucherStatus = '{$payload["status"]}'"; $queryCount .= " AND PaymentVoucherStatus = '{$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 payment voucher", $this->db);; exit; } $query .= " ORDER BY PaymentVoucherDate 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 payment voucher", $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 payment_voucher_detail WHERE PaymentVoucherDetailIsActive = 'Y' AND PaymentVoucherDetailPaymentVoucherID = {$payload['ID']}"; $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 payment voucher detail", $this->db);; exit; } $query = "SELECT payment_voucher_detail.*, ROW_NUMBER() OVER(ORDER BY PaymentVoucherDetailID) RowNumber, PurchaseRequestDirectID, PurchaseRequestDirectNumber, PurchaseRequestDirectTotalRealitation, PurchaseRequestDirectAccountFilled FROM payment_voucher_detail LEFT JOIN purchase_request_direct ON PurchaseRequestDirectID = PaymentVoucherDetailPurchaseRequestDirectID WHERE PaymentVoucherDetailIsActive = 'Y' AND PaymentVoucherDetailPaymentVoucherID = {$payload['ID']}"; $exec = $this->db->query($query, []); if ($exec) { $rows = $exec->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select payment voucher 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 voucherDetailItem() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $para = $this->sys_input; $sql = "SELECT PurchaseDirectCategoryID, PurchaseDirectCategoryName, PurchaseRequestDirectDescription, PurchaseRequestDirectDetailID, PurchaseRequestDirectDetailItemUnitID, PurchaseRequestDirectDetailTotalEstimationPrice, PurchaseRequestDirectDetailPurchaseRequestDirectID, IFNULL(PurchaseRequestDirectDetailAccount, '') as account_number, '' as err_message FROM purchase_request_direct_detail JOIN purchase_direct_category ON PurchaseDirectCategoryID = PurchaseRequestDirectDetailPurchaseRequestDirectCategoryID WHERE PurchaseRequestDirectDetailIsActive = 'Y' AND PurchaseRequestDirectDetailPurchaseRequestDirectID = ?"; $que = $this->db->query($sql, [$para['PRDirectID']]); if (!$que) { $this->sys_error_db("[Error] get detail item voucher purchase request direct"); exit; } $data = $que->result_array(); $this->sys_ok($data); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function getBranch() { try { $payload = $this->sys_input; $query = "SELECT DISTINCT M_BranchCode, M_BranchName FROM m_branch WHERE M_BranchIsActive = 'Y' AND (M_BranchCode LIKE '%" . $payload["search"] . "%' OR M_BranchName LIKE '%" . $payload["search"] . "%') 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 getCoa() { try { $payload = $this->sys_input; $query = "SELECT * FROM coa WHERE coaIsActive = 'Y' AND coaIsInput = 'Y' AND (coaAccountNo LIKE '%" . $payload["search"] . "%' OR coaDescription LIKE '%" . $payload["search"] . "%') ORDER BY coaAccountNo ASC"; $exec = $this->db->query($query, []); if ($exec) { $rows = $exec->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select coa", $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 getPurchase() { try { $payload = $this->sys_input; $query = "SELECT prd.*, u.M_UserUsername as user_request FROM purchase_request_direct prd JOIN m_user u ON prd.PurchaseRequestCreatedUserID = u.M_UserID WHERE prd.PurchaseRequestDirectIsActive = 'Y' AND prd.PurchaseRequestDirectApprovedBy IS NOT NULL AND prd.PurchaseRequestDirectM_BranchCode = '{$payload["branchcode"]}' AND prd.PurchaseRequestDirectID not in ( select PaymentVoucherDetailPurchaseRequestDirectID from payment_voucher JOIN payment_voucher_detail ON PaymentVoucherDetailPaymentVoucherID = PaymentVoucherID AND PaymentVoucherDetailIsActive = 'Y' where PaymentVoucherIsActive = 'Y') ORDER BY prd.PurchaseRequestDirectNumber 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 getTotalApproved() { try { $payload = $this->sys_input; $total = 0; $query = "SELECT COUNT(*) as total FROM purchase_request_direct WHERE PurchaseRequestDirectIsActive = 'Y' AND PurchaseRequestDirectApprovedBy IS NOT NULL AND PurchaseRequestDirectM_BranchCode = '{$payload["branchcode"]}' AND PurchaseRequestDirectID not in ( select PaymentVoucherDetailPurchaseRequestDirectID from payment_voucher JOIN payment_voucher_detail ON PaymentVoucherDetailPaymentVoucherID = PaymentVoucherID AND PaymentVoucherDetailIsActive = 'Y' where PaymentVoucherIsActive = 'Y')"; $exec = $this->db->query($query); if ($exec) { $total = $exec->row()->total; } else { $this->db->trans_rollback(); $this->sys_error_db("select branch", $this->db); exit; } $result = array( "total" => $total, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function save() { 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`('PV') AS PV"; $exec = $this->db->query($pdSql, []); $pd = ""; $dateNow = date('Y-m-d'); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher insert error", $this->db); exit; } else { $pd = $exec->result_array()[0]["PV"]; } $sql = "INSERT INTO payment_voucher( PaymentVoucherDate, PaymentVoucherNumber, PaymentVoucherM_BranchCode, PaymentVoucherCoaSourceID, PaymentVoucherCoaExpenseID, PaymentVoucherCoaTemporaryID, PaymentVoucherTotal, PaymentVoucherStatus, PaymentVoucherUserID, PaymentVoucherCreated, PaymentVoucherLastUpdated) VALUES ('{$dateNow}', '{$pd}', '{$payload['BranchCode']}', '{$payload['CoaSourceID']}', '{$payload['CoaExpenseID']}', '{$payload['CoaTemporaryID']}', '{$payload['total']}', 'Draft', {$userId}, now(), now())"; $exec = $this->db->query($sql); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher insert error", $this->db); exit; } $last_id = $this->db->insert_id(); foreach ($payload['details'] as $k => $v) { $sql = "INSERT INTO payment_voucher_detail( PaymentVoucherDetailPaymentVoucherID, PaymentVoucherDetailPurchaseRequestDirectID, PaymentVoucherDetailTotal, PaymentVoucherDetailUserID, PaymentVoucherDetailCreated, PaymentVoucherDetailLastUpdated) VALUES ('{$last_id}', '{$v['PurchaseRequestDirectID']}', '{$v['PurchaseRequestDirectTotalRealitation']}', {$userId}, now(), now())"; $exec = $this->db->query($sql); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher detail insert error", $this->db); exit; } } $this->db->trans_commit(); $newInsert = "SELECT * FROM payment_voucher WHERE PaymentVoucherNumber = '{$pd}' AND PaymentVoucherIsActive = '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 update() { 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 payment_voucher SET PaymentVoucherM_BranchCode = '{$payload['BranchCode']}', PaymentVoucherCoaSourceID = '{$payload['CoaSourceID']}', PaymentVoucherCoaExpenseID = '{$payload['CoaExpenseID']}', PaymentVoucherCoaTemporaryID = '{$payload['CoaTemporaryID']}', PaymentVoucherTotal = '{$payload['total']}', PaymentVoucherUserID = {$userId}, PaymentVoucherLastUpdated = now() WHERE PaymentVoucherID = {$payload['ID']}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher update error", $this->db); exit; } $sql = "DELETE FROM payment_voucher_detail WHERE PaymentVoucherDetailPaymentVoucherID = {$payload['ID']}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher detail delete error", $this->db); exit; } foreach ($payload['details'] as $k => $v) { $sql = "INSERT INTO payment_voucher_detail( PaymentVoucherDetailPaymentVoucherID, PaymentVoucherDetailPurchaseRequestDirectID, PaymentVoucherDetailTotal, PaymentVoucherDetailUserID, PaymentVoucherDetailCreated, PaymentVoucherDetailLastUpdated) VALUES ('{$payload['ID']}', '{$v['PurchaseRequestDirectID']}', '{$v['PurchaseRequestDirectTotalRealitation']}', {$userId}, now(), now())"; $exec = $this->db->query($sql); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher detail insert error", $this->db); exit; } } $this->db->trans_commit(); $newUpdate = "SELECT * FROM payment_voucher WHERE PaymentVoucherID = {$payload['ID']} AND PaymentVoucherIsActive = '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 delete() { 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 payment_voucher SET PaymentVoucherIsActive = 'N' WHERE PaymentVoucherID = {$payload['ID']}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher delete error", $this->db); exit; } $sql = "UPDATE payment_voucher_detail SET PaymentVoucherDetailIsActive = 'N' WHERE PaymentVoucherDetailPaymentVoucherID = {$payload['ID']}"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("payment voucher detail 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 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 payment_voucher_detail SET PaymentVoucherDetailLastUpdated = NOW(), PaymentVoucherDetailLastUpdatedUserID = {$userId} WHERE PaymentVoucherDetailPaymentVoucherID = {$payload["ID"]} AND PaymentVoucherDetailIsActive = 'Y' AND PaymentVoucherDetailStatus = 'Pending'"; $exec = $this->db->query($sqlDetail, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order payment voucher error", $this->db); exit; } $sql = "UPDATE payment_voucher SET PaymentVoucherStatus = 'Pending', PurchaseRequestLastUpdated = NOW(), PurchaseRequestLastUpdatedUserID = {$userId} WHERE PaymentVoucherID = {$payload["ID"]} AND PaymentVoucherIsActive = 'Y'"; $exec = $this->db->query($sql, []); if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order payment voucher error", $this->db); exit; } $this->db->trans_commit(); $sql = "SELECT *, ROW_NUMBER() OVER(ORDER BY PaymentVoucherNumber) RowNumber FROM payment_voucher WHERE PaymentVoucherIsActive = 'Y' AND PaymentVoucherUserID = {$userId} AND PaymentVoucherID = {$payload["ID"]}"; $exec = $this->db->query($sql, []); $row = []; if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("order payment voucher 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); } } function saveAccountDetail() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $param = $this->sys_input; $userId = $this->sys_user["M_UserID"]; foreach ($param['detail'] as $key => $obj) { $sql = "UPDATE purchase_request_direct_detail SET PurchaseRequestDirectDetailAccount = ?, PurchaseRequestDirectDetailLastUpdatedUserID = ?, PurchaseRequestDirectDetailLastUpdated = NOW() WHERE PurchaseRequestDirectDetailID = ? "; $que = $this->db->query($sql, [ $obj['account_number'], $userId, $obj['PurchaseRequestDirectDetailID'] ]); if (!$que) { $this->db->trans_rollback(); $this->sys_error_db("[Error] update account item voucher", $this->db); exit; } } $sqlheader = "UPDATE purchase_request_direct SET PurchaseRequestDirectAccountFilled = 'Y' WHERE PurchaseRequestDirectID = ?"; $queheader = $this->db->query($sqlheader, [$param['PRDID']]); if (!$queheader) { $this->db->trans_rollback(); $this->sys_error_db("[Error] update header status account is filled", $this->db); exit; } $this->db->trans_commit(); $this->sys_ok("[Success]"); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function getPurchaseUpdate() { try { // if (!$this->isLogin) { // $this->sys_error("Invalid Token"); // } $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $query = "SELECT *, 'N' as flag_isadd FROM purchase_request_direct WHERE PurchaseRequestDirectIsActive = 'Y' AND PurchaseRequestDirectApprovedBy IS NOT NULL AND PurchaseRequestDirectM_BranchCode = '{$payload["branchcode"]}'"; $exec = $this->db->query($query, []); if ($exec) { $rows = $exec->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select request", $this->db); exit; } // print_r($rows); // exit; foreach ($rows as $k => $v) { $PurchaseRequestDirectID = $v["PurchaseRequestDirectID"]; $sql = "SELECT * FROM payment_voucher_detail WHERE PaymentVoucherDetailIsActive = 'Y' AND PaymentVoucherDetailPurchaseRequestDirectID = {$PurchaseRequestDirectID}"; $qry = $this->db->query($sql, []); if ($qry) { $rows_detail = $qry->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select detail", $this->db); exit; } // print_r($rows_detail); // exit; if (count($rows_detail) > 0) { $rows[$k]['flag_isadd'] = 'Y'; } } $result = array( "records" => $rows, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function getPurchaseUpdateNew() { try { // if (!$this->isLogin) { // $this->sys_error("Invalid Token"); // } $payload = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $query = "SELECT *, 'N' as flag_isadd FROM purchase_request_direct WHERE PurchaseRequestDirectIsActive = 'Y' AND PurchaseRequestDirectApprovedBy IS NOT NULL AND PurchaseRequestDirectM_BranchCode = '{$payload["branchcode"]}' AND PurchaseRequestDirectID not in ( select PaymentVoucherDetailPurchaseRequestDirectID from payment_voucher JOIN payment_voucher_detail ON PaymentVoucherDetailPaymentVoucherID = PaymentVoucherID AND PaymentVoucherDetailIsActive = 'Y' where PaymentVoucherIsActive = 'Y' AND PaymentVoucherDetailPaymentVoucherID <> '{$payload["ID"]}' AND PaymentVoucherM_BranchCode = '{$payload["branchcode"]}' union select PaymentVoucherDetailPurchaseRequestDirectID from payment_voucher JOIN payment_voucher_detail ON PaymentVoucherDetailPaymentVoucherID = PaymentVoucherID AND PaymentVoucherDetailIsActive = 'Y' where PaymentVoucherIsActive = 'Y' AND PaymentVoucherDetailPaymentVoucherID = '{$payload["ID"]}' AND PaymentVoucherM_BranchCode = '{$payload["branchcode"]}' ) UNION SELECT purchase_request_direct.*, 'Y' as flag_isadd FROM payment_voucher_detail JOIN purchase_request_direct ON PurchaseRequestDirectID = PaymentVoucherDetailPurchaseRequestDirectID WHERE PaymentVoucherDetailIsActive = 'Y' AND PaymentVoucherDetailPaymentVoucherID = '{$payload["ID"]}'"; $exec = $this->db->query($query, []); if ($exec) { $rows = $exec->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select request", $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 moveToKasir() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $param = $this->sys_input; $sql = "UPDATE payment_voucher SET PaymentVoucherStatus = 'Draft' WHERE PaymentVoucherID = ?"; $que = $this->db->query($sql, $param['ID']); if (!$que) { $this->db->trans_rollback(); $this->sys_error_db("[Error] edit voucher status to draft"); exit; } $this->db->trans_commit(); $this->sys_ok("Success"); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } }