isLogin) { throw new Exception("Invalid token", 1); } $params = $this->sys_input; $keyword = "%"; if ($params['search'] != '') { $keyword .= $params['search'] . "%"; } $offset = 0; $limit = 5; if ($params['currentpage'] > 0) { $offset = ($params['currentpage'] - 1) * $limit; } $sql_base = "SELECT SupplierPaymentID, SupplierPaymentDate, SupplierPaymentNumber, SupplierPaymentAmount, SupplierPaymentStatus, SupplierPaymentIsVerif, SupplierPaymentIsApproved, SupplierInvoiceID, SupplierInvoiceNumber, SupplierInvoiceDraftPaymentDate, SupplierCode, SupplierName FROM supplier_payment JOIN supplier_invoice ON SupplierInvoiceID = SupplierPaymentSupplierInvoiceID AND SupplierPaymentNumber LIKE ? AND (SupplierPaymentDate BETWEEN DATE(?) AND DATE(?)) AND (SupplierPaymentStatus = ? OR ? = 'All') JOIN supplier ON SupplierID = SupplierInvoiceSupplierID WHERE SupplierPaymentIsActive = 'Y' ORDER BY SupplierPaymentID DESC"; $sql_data = $sql_base . " LIMIT ? OFFSET ? "; $que_data = $this->db->query($sql_data, [ $keyword, $params['startdate'], $params['enddate'], $params['status'], $params['status'], $limit, $offset ]); if (!$que_data) { throw new Exception("[Error] failed get data supplier payment", 2); } $sql_total = "SELECT COUNT(*) AS total FROM ($sql_base) AS x"; $que_total = $this->db->query($sql_total, [ $keyword, $params['startdate'], $params['enddate'], $params['status'], $params['status'] ]); if (!$que_total) { throw new Exception("[Error] failed get total data supplier payment", 2); } $output = [ "records" => $que_data->result_array(), "total" =>$que_total->row_array()['total'] ]; $this->sys_ok($output); exit; } catch (Exception $exc) { $message = $exc->getMessage(); $code = $exc->getCode(); if ($code == 1) { $this->sys_error($message); } else { $this->sys_error_db($message); } exit; } } public function searchDetail() { try { if (!$this->isLogin) { throw new Exception("invalid token", 1); } $para = $this->sys_input; $sql = "SELECT SupplierInvoiceID, SupplierInvoiceRefNumber, SupplierInvoiceDeliveryOrderNumber, SupplierInvoiceSupplierInvoiceNumber, SupplierInvoiceSupplierInvoiceDate, SupplierInvoiceSubTotal, SupplierInvoiceTaxPercentPph, SupplierInvoiceTaxPercentPpn, SupplierInvoiceTaxAmountPpn, SupplierInvoiceDiscountAmount, SupplierInvoiceDiscountPercent, SupplierInvoiceShippingCost, SupplierInvoiceGrandTotal, SupplierInvoiceAdjustmentAmount, SupplierInvoiceAdjustmentNote, SupplierInvoiceNote, IF (SupplierInvoiceDiscountAmount > 0, 'R', 'P') AS DiscountType FROM supplier_payment JOIN supplier_invoice ON SupplierPaymentSupplierInvoiceID = SupplierInvoiceID AND SupplierPaymentID = ? AND SupplierPaymentIsActive = 'Y'"; $que = $this->db->query($sql, [$para['paymentID']]); if (!$que) { throw new Exception("[Error] failed get row data", 2); } $data = $que->row_array(); $sql_detail = "SELECT SupplierInvoiceDetailID, SupplierInvoiceDetailSupplierInvoiceID, SupplierInvoiceDetailPurchaseOrderID, SupplierInvoiceDetailPurchaseOrderSummaryID, SupplierInvoiceDetailReceiveOrderPoID, SupplierInvoiceDetailReceiveOrderPoDetailID, SupplierInvoiceDetailItemID, SupplierInvoiceDetailItemUnitID, SupplierInvoiceDetailDescription, SupplierInvoiceDetailQty, SupplierInvoiceDetailPrice, SupplierInvoiceDetailDiscountPercent, SupplierInvoiceDetailDiscountDiscountRupiah, SupplierInvoiceDetailDiscountDiscountType, SupplierInvoiceDetailDiscountAmount, (SupplierInvoiceDetailPrice - SupplierInvoiceDetailDiscountAmount) AS DiscountedPrice, SupplierInvoiceDetailDiscountPoProrata, SupplierInvoiceDetailTotal, M_ItemCode, M_ItemDesc FROM supplier_payment_detail JOIN supplier_invoice_detail ON SupplierInvoiceDetailIsActive = 'Y' AND SupplierPaymentDetailSupplierPaymentID = ? AND SupplierInvoiceDetailSupplierInvoiceID = ? JOIN m_item ON M_ItemID = SupplierInvoiceDetailItemID AND M_ItemIsActive = 'Y' GROUP BY SupplierInvoiceDetailID"; $que_detail = $this->db->query($sql_detail, [ $para['paymentID'], $data['SupplierInvoiceID'] ]); if (!$que_detail) { throw new Exception("[Error] failed to get item payments", 2); } $data['detail'] = $que_detail->result_array(); $this->sys_ok($data); } catch (Exception $exc) { $message = $exc->getMessage(); $code = $exc->getCode(); if ($code == 1) { $this->sys_error($message); } else { $this->sys_error_db($message); } exit; } } public function getUserApproveLevel() { try { if (!$this->isLogin) { throw new Exception("Invalid token", 1); } $userid = $this->sys_user['M_UserID']; $sql_level = "SELECT M_UserM_ApproveLevelID AS level FROM m_user WHERE M_UserIsActive = 'Y' AND M_UserID = ? "; $que_level = $this->db->query($sql_level, [$userid]); if (!$que_level) { throw new Exception("[Error] failed get user approve level", 2); } $data = $que_level->row_array(); $this->sys_ok($data); } catch (Exception $exc) { $message = $exc->getMessage(); $code = $exc->getCode(); if ($code == 1) { $this->sys_error($message); } else { $this->sys_error_db($message); } exit; } } public function updateStatusPayment() { try { if (!$this->isLogin) { throw new Exception("Invalid token", 1); } $this->db->trans_begin(); $para = $this->sys_input; $user = $this->sys_user; if ($para['userlevel'] == '1') { $sql = "UPDATE supplier_payment SET SupplierPaymentIsVerif = 'Y', SupplierPaymentStatus = 'Verified', SupplierPaymentVerifUserID = ?, SupplierPaymentVerifDate = NOW() WHERE SupplierPaymentID = ? AND SupplierPaymentIsActive = 'Y'"; $query = $this->db->query($sql, [ $user['M_UserID'], $para['paymentID'] ]); if (!$query) { $this->db->trans_rollback(); throw new Exception("[Error] failed update status verified", 2); } } if ($para['userlevel'] == '2') { $sql = "UPDATE supplier_payment SET SupplierPaymentIsApproved = 'Y', SupplierPaymentStatus = 'Approved', SupplierPaymentApprovedUserID = ?, SupplierPaymentApprovedDate = NOW() WHERE SupplierPaymentID = ? AND SupplierPaymentIsActive = 'Y'"; $query = $this->db->query($sql, [ $user['M_UserID'], $para['paymentID'] ]); if (!$query) { $this->db->trans_rollback(); throw new Exception("[Error] failed update status approved", 2); } } $this->db->trans_commit(); $this->sys_ok("[Success] success update status Payment"); } catch (Exception $exc) { $message = $exc->getMessage(); $code = $exc->getCode(); if ($code == 1) { $this->sys_error($message); } else { $this->sys_error_db($message); } exit; } } }