isLogin) { $this->sys_error("invalid token"); exit; } $sql = "SELECT SupplierID, SupplierName FROM supplier WHERE SupplierIsActive = 'Y'"; $que = $this->db->query($sql, []); if (!$que) { $this->sys_error_db("[Error] get data supplier"); exit; } $data = $que->result_array(); $this->sys_ok($data); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function getDaftarCabang() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $user = $this->sys_user; $sql = "SELECT M_BranchID, M_BranchCode, M_BranchName FROM m_branch WHERE M_BranchIsActive = 'Y' AND M_BranchS_RegionalID = ?"; $que = $this->db->query($sql, [$user['S_RegionalID']]); if (!$que) { $this->sys_error_db("[Error] get data cabang"); exit; } $data = $que->result_array(); $this->sys_ok($data); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function searchRequestJasa() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $para = $this->sys_input; $keyword = "%"; if ($para['search'] != '') { $keyword = $para['search'] . '%'; } $limit = 10; $offset = 0; if ($para['currpage'] > 0) { $offset = ($para['currpage'] - 1) * $limit; } $sql = "SELECT PurchaseRequestID, PurchaseRequestNumber, PurchaseRequestDetailID, PurchaseRequestFlagID, PurchaseRequestFlagM_BranchCode AS BranchCode, PurchaseRequestItemCategoryID AS ItemCategoryID, PurchaseRequestFlagQtyRest - PurchaseRequestFlagQtyProses AS UnprocessFlagQty, PurchaseRequestDetailQty AS RequestQty, PurchaseRequestDetailQty AS OriginalQty, M_BranchName, M_ItemID, M_ItemCode, M_ItemDesc, ItemUnitID, ItemUnitName, SupplierPricePrice as SupplierPrice FROM purchase_request JOIN purchase_request_detail ON PurchaseRequestDetailPurchaseRequestID = PurchaseRequestID AND PurchaseRequestDetailIsActive = 'Y' AND PurchaseRequestM_BranchCode = ? AND PurchaseRequestItemCategoryID = '4' -- id category item jasa AND PurchaseRequestNumber LIKE ? JOIN purchase_request_flag ON PurchaseRequestFlagPurchaseRequestDetailID = PurchaseRequestDetailID AND PurchaseRequestFlagStatus = 'PO' AND PurchaseRequestFlagIsActive = 'Y' JOIN m_item ON M_ItemID = PurchaseRequestDetailM_ItemID JOIN itemunit ON ItemUnitID = PurchaseRequestDetailItemUnitID JOIN supplier_price ON SupplierPriceSupplierID = ? AND SupplierPriceM_ItemID = M_ItemID AND SupplierPriceItemUnitID = ItemUnitID AND SupplierPriceIsActive = 'Y' JOIN m_branch ON M_BranchCode = PurchaseRequestFlagM_BranchCode AND M_BranchIsActive = 'Y' WHERE NOT EXISTS ( SELECT 1 FROM purchase_order_detail JOIN purchase_order ON PurchaseOrderDetailPurchaseOrderID = PurchaseOrderID AND PurchaseOrderStatus = 'Approved' AND PurchaseOrderIsActive = 'Y' AND PurchaseOrderDetailIsActive = 'Y' WHERE PurchaseOrderDetailPurchaseRequestDetailID = PurchaseRequestDetailID )"; $sql_data = $sql . " LIMIT ? OFFSET ? "; $que_data = $this->db->query($sql_data, [ $para['branchcode'], $keyword, $para['supplierID'], $limit, $offset ]); if (!$que_data) { $this->sys_error_db("[Error] get daftar request jasa"); exit; } $data = $que_data->result_array(); $sql_total = "SELECT COUNT(*) AS total FROM ($sql) AS x"; $que_total = $this->db->query($sql_total, [ $para['branchcode'], $keyword, $para['supplierID'] ]); if (!$que_total) { $this->sys_error_db("[Error] get total request jasa"); exit; } $out = [ "records" => $data, "total" => $que_total->row_array()['total'] ]; $this->sys_ok($out); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function getUserApproveLevel() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $userid = $this->sys_user['M_UserID']; $sql_level = "SELECT M_UserM_ApproveLevelID FROM m_user WHERE M_UserIsActive = 'Y' AND M_UserID = ? "; $que_level = $this->db->query($sql_level, [$userid]); if (!$que_level) { $this->sys_error_db("[Error] failed get approval level user"); exit; } $data = $que_level->row_array(); $this->sys_ok($data); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function getDaftarPOJasa() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $para = $this->sys_input; $user = $this->sys_user; $keyword = "%"; if ($para['search'] != '') { $keyword .= $para['search'] . "%"; } $sql_base = "SELECT PurchaseOrderID, PurchaseOrderDate, PurchaseOrderNote, PurchaseOrderNumber, PurchaseOrderStatus, PurchaseOrderRefNumber, PurchaseOrderGrandTotal, PurchaseOrderS_RegionalID, PurchaseOrderApprovedManagerUserID AS verifiedby, IFNULL(PurchaseOrderApprovedUserID, 0) AS approvedby, T_KontrakJasaID, SupplierID, SupplierName, M_BranchID, M_BranchName, M_BranchCode FROM purchase_order JOIN supplier ON SupplierID = PurchaseOrderSupplierID JOIN t_kontrak_jasa ON T_KontrakJasaPurchaseOrderID = PurchaseOrderID JOIN m_branch ON M_BranchCode = T_KontrakJasaM_BranchCode WHERE PurchaseOrderIsActive = 'Y' AND PurchaseOrderItemCategoryID = '4' AND PurchaseOrderS_RegionalID = ? AND PurchaseOrderDate BETWEEN DATE(?) AND DATE(?) AND (PurchaseOrderStatus = ? OR 'All' = ?) AND PurchaseOrderNumber LIKE ?"; $limit = 10; $offset = 0; if ($para['currpage'] > 0) { $offset = ($para['currpage'] - 1) * $limit; } $sql_data = $sql_base . " LIMIT ? OFFSET ?"; $que_data = $this->db->query($sql_data, [ $user['S_RegionalID'], $para['startdate'], $para['enddate'], $para['status'], $para['status'], $keyword, $limit, $offset ]); if (!$que_data) { $this->sys_error_db("[Error] failed get data listing PO jasa"); exit; } $data_services = $que_data->result_array(); $sql_total = "SELECT COUNT(*) AS total FROM ($sql_base) AS x"; $que_total = $this->db->query($sql_total, [ $user['S_RegionalID'], $para['startdate'], $para['enddate'], $para['status'], $para['status'], $keyword ]); if (!$que_total) { $this->sys_error_db("[Error] failed get total data listing PO jasa"); exit; } $total_services = $que_total->row_array()['total']; $output = [ "records" => $data_services, "total" => $total_services ]; $this->sys_ok($output); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function getDataKontrakPOJasa() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $para = $this->sys_input; # get data from purchase order detail # $sql_detail = "SELECT PurchaseOrderID, PurchaseRequestID, PurchaseRequestNumber, PurchaseOrderDetailPurchaseSummaryID AS PurchaseOrderSummaryID, PurchaseOrderDetailPurchaseRequestDetailID AS PurchaseRequestDetailID, PurchaseOrderDetailPurchaseRequestFlagID AS PurchaseRequestFlagID, PurchaseOrderDetailRequestQty AS OriginalQty, PurchaseOrderDetailQty AS RequestQty, PurchaseOrderDetailPrice AS SupplierPrice, PurchaseOrderDetailTotal, T_KontrakJasaM_BranchCode AS BranchCode, M_BranchName, PurchaseOrderDetailItemID AS M_ItemID, M_ItemCode, M_ItemDesc, PurchaseOrderDetailItemUnitID AS ItemUnitID, ItemUnitName FROM purchase_order JOIN purchase_order_detail ON PurchaseOrderDetailPurchaseOrderID = PurchaseOrderID AND PurchaseOrderDetailIsActive = 'Y' JOIN t_kontrak_jasa ON T_KontrakJasaPurchaseOrderID = PurchaseOrderID JOIN purchase_request ON PurchaseRequestID = PurchaseOrderDetailPurchaseRequestID JOIN m_branch ON M_BranchCode = T_KontrakJasaM_BranchCode JOIN m_item ON M_ItemID = PurchaseOrderDetailItemID JOIN itemunit ON ItemUnitID = PurchaseOrderDetailItemUnitID WHERE PurchaseOrderDetailIsActive = 'Y' AND PurchaseOrderID = ?"; $que_detail = $this->db->query($sql_detail, [$para['poID']]); if (!$que_detail) { $this->sys_error_db("[Error] failed get data po detail jasa"); exit; } $detailjasa = $que_detail->result_array(); # get data from purchase order summary # $sql_sumry = "SELECT PurchaseOrderID, PurchaseOrderSummaryID, PurchaseOrderSummaryQty AS RequestQty, PurchaseOrderSummaryPrice AS SupplierPrice, PurchaseOrderSummaryDiscountRupiah AS DiskonRupiah, PurchaseOrderSummaryDiscountPercent AS DiskonPercent, PurchaseOrderSummaryDiscountAmount AS DiskonAmount, PurchaseOrderSummaryDiscountType AS DiskonType, (PurchaseOrderSummaryPrice - PurchaseOrderSummaryDiscountAmount) AS EndPrice, PurchaseOrderSummaryTotal AS TempTotal, PurchaseOrderSummaryItemID AS M_ItemID, M_ItemCode, M_ItemDesc, PurchaseOrderSummaryItemUnitID AS ItemUnitID, ItemUnitName FROM purchase_order JOIN purchase_order_summary ON PurchaseOrderSummaryPurchaseOrderID = PurchaseOrderID JOIN m_item ON M_ItemID = PurchaseOrderSummaryItemID JOIN itemunit ON ItemUnitID = PurchaseOrderSummaryItemUnitID WHERE PurchaseOrderSummaryIsActive = 'Y' AND PurchaseOrderID = ?"; $que_sumry = $this->db->query($sql_sumry, [$para['poID']]); if (!$que_sumry) { $this->sys_error_db("[Error] failed get data po summary jasa"); exit; } $data_sumry = $que_sumry->result_array(); # get data from purchase order # $sql_pojasa = "SELECT PurchaseOrderID, PurchaseOrderDate AS podate, PurchaseOrderNote AS catatan, PurchaseOrderNumber, PurchaseOrderStatus, PurchaseOrderRefNumber AS reference, PurchaseOrderGrandTotal AS grandtotal, CASE WHEN PurchaseOrderTaxPpnType = 'P' THEN 'percent' ELSE 'absolute' END AS typepajak, CASE WHEN PurchaseOrderTaxPpnType = 'P' THEN PurchaseOrderTaxPercentPpn ELSE PurchaseOrderTaxAmountPpn END AS valuepajak, CASE WHEN PurchaseOrderDiscountPercent > 0.00 THEN 'percent' ELSE 'absolute' END AS typediskon, CASE WHEN PurchaseOrderDiscountPercent > 0.00 THEN PurchaseOrderDiscountPercent ELSE PurchaseOrderDiscountAmount END AS valuediskon, PurchaseOrderSubTotal AS subtotal, PurchaseOrderGrandTotal AS grandtotal, SupplierID AS supplierID, SupplierName, M_BranchID, M_BranchName, M_BranchCode AS branchcode, T_KontrakJasaID, T_KontrakJasaJenisKontrak AS typekontrak, T_KontrakJasaStartDate AS kontrakstart, T_KontrakJasaEndDate AS kontrakend, T_KontrakJasaJumlahPI AS PIOutQty, PurchaseOrderApprovedManagerUserID AS verifiedby FROM purchase_order JOIN supplier ON SupplierID = PurchaseOrderSupplierID JOIN t_kontrak_jasa ON T_KontrakJasaPurchaseOrderID = PurchaseOrderID JOIN m_branch ON M_BranchCode = T_KontrakJasaM_BranchCode WHERE PurchaseOrderIsActive = 'Y' AND PurchaseOrderID = ?"; $que_pojasa = $this->db->query($sql_pojasa, [$para['poID']]); if (!$que_pojasa) { $this->sys_error_db("[Error] failed get data from purchase order"); exit; } $datapo = $que_pojasa->row_array(); # process data output # /* map detail po to summary */ $grouped_detailpo = array(); foreach ($detailjasa as $obj) { $idz = $obj['PurchaseOrderSummaryID']; if (!isset($grouped_detailpo[$idz])) { $grouped_detailpo[$idz] = array(); } $grouped_detailpo[$idz][] = $obj; } foreach ($data_sumry as $key => $summary) { $ids = $summary['PurchaseOrderSummaryID']; if (isset($grouped_detailpo[$ids])) { $data_sumry[$key]['detail'] = $grouped_detailpo[$ids]; } else { $data_sumry[$key]['detail'] = array(); } } $subtotal = floatval($datapo['subtotal']); $grandtotal = floatval($datapo['grandtotal']); $valuediskon = floatval($datapo['valuediskon']); if ($datapo['typediskon'] == 'percent') { $valuediskon = round(floatval($datapo['valuediskon']) * $subtotal / 100, 2); } $valuepajak = floatval($datapo['valuepajak']); if ($datapo['typepajak'] == 'percent') { $price = ($subtotal - $valuediskon); $valuepajak = round(floatval($datapo['valuepajak']) * $price / 100, 2); } $outsummary = [ "subtotal" => $subtotal, "diskon" => $valuediskon, "pajak" => $valuepajak, "total" => $grandtotal ]; /* map summary to purchase order */ $datapo['valuepajak'] = floatval($datapo['valuepajak']); $datapo['valuediskon'] = floatval($datapo['valuediskon']); $datapo['detail'] = $data_sumry; $datapo['summary'] = $outsummary; /* for debugging */ // $output = [ // "po" => $datapo, // "summary" => $data_sumry, // "detail" => $detailjasa, // "grouped" => $grouped_detailpo // ]; // $this->sys_ok($output); $this->sys_ok($datapo); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function getDaftarAttachment() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $para = $this->sys_input; $sql = "SELECT T_JasaAttachmentID AS attach_id, T_JasaAttachmentName AS img_url, T_JasaAttachmentCreated AS created FROM t_jasa_attachment WHERE T_JasaAttachmentIsActive = 'Y' AND T_JasaAttachmentT_KontrakJasaID = ? AND T_JasaAttachmentPurchaseOrderID = ? AND T_JasaAttachmentType = 'order'"; $que = $this->db->query($sql, [ $para['TJasaID'], $para['poID'] ]); if (!$que) { $this->sys_error_db("[Error] failed get data attachment"); exit; } $data = $que->result_array(); $this->sys_ok($data); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } ## MUTATIONS ## public function createPOjasa() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $this->db->trans_begin(); $para = $this->sys_input; $user = $this->sys_user; /* GENERATE nomor PO */ $areaid = $user['M_BranchID']; $areatype = 'B'; if ($user['loginLevel'] == 'regional') { $areaid = $user['S_RegionalID']; $areatype = 'R'; } $sqlusrdivisi = "SELECT M_UserDivisionDivisionID FROM m_userdivision WHERE M_UserDivisionM_UserID = ? AND M_UserDivisionIsActive = 'Y'"; $queusrdivisi = $this->db->query($sqlusrdivisi, [$user['M_UserID']]); if (!$queusrdivisi) { $this->db->trans_rollback(); $this->sys_error_db("[Error] get user divisi", $this->db); exit; } $userDivID = $queusrdivisi->row_array()['M_UserDivisionDivisionID']; $sqlnum = "SELECT `fn_penomoran`(?, ?, ?, ?, ?, ?) AS numpd;"; $quenum = $this->db->query($sqlnum, ['PO', $userDivID, $areatype, $areaid, 'SM', 'N']); if (!$quenum) { $this->db->trans_rollback(); $this->sys_error_db("[Error] generate number doc", $this->db); exit; } $numpd = $quenum->row_array()['numpd']; /* INSERT into table purchase order */ $taxtype = 'R'; $taxpercent = 0; if ($para['typepajak'] == 'percent') { $taxtype = 'P'; $taxpercent = floatval($para['valuepajak']); } $discpercent = 0; if ($para['typediskon'] == 'percent') { $discpercent = floatval($para['valuediskon']); } /* summary */ $summary_subtotal = floatval($para['summary']['subtotal']); $summary_diskon = floatval($para['summary']['diskon']); $summary_pajak = floatval($para['summary']['pajak']); $summary_total = floatval($para['summary']['total']); $sql_po = "INSERT INTO purchase_order ( PurchaseOrderNumber, PurchaseOrderItemCategoryID, -- '4' for asset PurchaseOrderDate, PurchaseOrderRefNumber, PurchaseOrderSupplierID, PurchaseOrderS_RegionalID, PurchaseOrderTaxPpnType, PurchaseOrderTaxPercentPpn, PurchaseOrderDiscountPercent, PurchaseOrderDiscountAmount, PurchaseOrderNote, PurchaseOrderSubTotal, PurchaseOrderTaxAmountPpn, PurchaseOrderGrandTotal, PurchaseOrderUserID, PurchaseOrderCreated ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())"; $que_po = $this->db->query($sql_po, [ $numpd, '4', $para['podate'], $para['reference'],$para['supplierID'], $user['S_RegionalID'], $taxtype, $taxpercent, $discpercent, $summary_diskon, $para['catatan'], $summary_subtotal, $summary_pajak, $summary_total, $user['M_UserID'] ]); if (!$que_po) { $this->db->trans_rollback(); $this->sys_error_db("[Error] insert into table purchase order"); exit; } $PurchaseOrderID = $this->db->insert_id(); # INSERT into table purchase order summary # $summary_detail = $para['detail']; $item_detail = []; foreach ($summary_detail as $key => $obj) { $discpercent = 0; $discabsolut = 0; if ($obj['DiskonType'] == 'P') { $discpercent = $obj['DiskonAmount']; } else { $discabsolut = $obj['DiskonAmount']; } $sql_summary = "INSERT INTO purchase_order_summary ( PurchaseOrderSummaryPurchaseOrderID, PurchaseOrderSummaryItemID, PurchaseOrderSummaryItemUnitID, PurchaseOrderSummaryQty, PurchaseOrderSummaryPrice, PurchaseOrderSummaryTotal, PurchaseOrderSummaryDiscountRupiah, PurchaseOrderSummaryDiscountPercent, PurchaseOrderSummaryDiscountAmount, PurchaseOrderSummaryDiscountType, PurchaseOrderSummaryCreatedUserID, PurchaseOrderSummaryCreated ) VALUES (?,?,?,?,?,?,?,?,?,?,?,NOW())"; $que_summary = $this->db->query($sql_summary, [ $PurchaseOrderID, $obj['M_ItemID'], $obj['ItemUnitID'], $obj['RequestQty'], $obj['SupplierPrice'], $obj['TempTotal'], $discabsolut, $discpercent, $obj['DiskonAmount'], $obj['DiskonType'], $user['M_UserID'] ]); if (!$que_summary) { $this->db->trans_rollback(); $this->sys_error_db("[Error] insert into table purchase order summary"); exit; } /* add detail to an array */ $PurchaseSummaryID = $this->db->insert_id(); foreach ($obj['detail'] as $key => $value) { $obj['detail'][$key]['PurchaseSummaryID'] = $PurchaseSummaryID; $obj['detail'][$key]['SupplierPrice'] = $obj['SupplierPrice']; } $item_detail = array_merge($item_detail, $obj['detail']); } # INSERT into table purchase order detail # foreach ($item_detail as $key => $obj) { $total = floatval($obj['SupplierPrice']) * floatval($obj['RequestQty']); $sql_detail = "INSERT INTO purchase_order_detail ( PurchaseOrderDetailPurchaseOrderID, PurchaseOrderDetailPurchaseSummaryID, PurchaseOrderDetailPurchaseRequestID, PurchaseOrderDetailPurchaseRequestDetailID, PurchaseOrderDetailPurchaseRequestFlagID, PurchaseOrderDetailItemID, PurchaseOrderDetailItemUnitID, PurchaseOrderDetailRequestQty, PurchaseOrderDetailQty, PurchaseOrderDetailPrice, PurchaseOrderDetailTotal, PurchaseOrderDetailUserID, PurchaseOrderDetailCreatedUserID, PurchaseOrderDetailCreated ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())"; $que_detail = $this->db->query($sql_detail, [ $PurchaseOrderID, $obj['PurchaseSummaryID'], $obj['PurchaseRequestID'], $obj['PurchaseRequestDetailID'], $obj['PurchaseRequestFlagID'], $obj['M_ItemID'], $obj['ItemUnitID'], $obj['OriginalQty'], $obj['RequestQty'], $obj['SupplierPrice'], $total, $user['M_UserID'], $user['M_UserID'] ]); if (!$que_detail) { $this->db->trans_rollback(); $this->sys_error_db("[Error] insert intp purchase order detail"); exit; } /* purchase request update flag */ $sql_flag = "UPDATE purchase_request_flag SET PurchaseRequestFlagQtyProses = ? WHERE PurchaseRequestFlagID = ?"; $que_flag = $this->db->query($sql_flag, [ $obj['RequestQty'], $obj['PurchaseRequestFlagID'] ]); if (!$que_flag) { $this->db->trans_rollback(); $this->sys_error_db("[Error] update purchase request flag"); exit; } } # INSERT into table t_kontrak_jasa # $sql_contract = "INSERT INTO t_kontrak_jasa ( T_KontrakJasaPurchaseOrderID, T_KontrakJasaM_BranchCode, T_KontrakJasaJenisKontrak, T_KontrakJasaStartDate, T_KontrakJasaEndDate, T_KontrakJasaJumlahPI ) VALUES(?,?,?,?,?,?)"; $que_contract = $this->db->query($sql_contract, [ $PurchaseOrderID, $para['branchcode'], $para['typekontrak'], $para['kontrakstart'], $para['kontrakend'], $para['PIOutQty'] ]); if (!$que_contract) { $this->db->trans_rollback(); $this->sys_error_db("[Error] insert into table kontrak jasa"); exit; } $this->insertLog( $PurchaseOrderID, 'CREATE', $para, '', [], $user['M_UserID'], 'create purchae order jasa' ); $this->db->trans_commit(); $this->sys_ok("[Success] success save po jasa"); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function editPOjasa() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $this->db->trans_begin(); $para = $this->sys_input; $user = $this->sys_user; # check tipe diskon dan pajak # $taxtype = 'R'; $taxpercent = 0; if ($para['typepajak'] == 'percent') { $taxtype = 'P'; $taxpercent = floatval($para['valuepajak']); } $discpercent = 0; if ($para['typediskon'] == 'percent') { $discpercent = floatval($para['valuediskon']); } # get data summary # $summary_subtotal = floatval($para['summary']['subtotal']); $summary_diskon = floatval($para['summary']['diskon']); $summary_pajak = floatval($para['summary']['pajak']); $summary_total = floatval($para['summary']['total']); # update po service header # $sql_po = "UPDATE purchase_order SET PurchaseOrderDate = ?, PurchaseOrderRefNumber = ?, PurchaseOrderSupplierID = ?, PurchaseOrderS_RegionalID = ?, PurchaseOrderTaxPpnType = ?, PurchaseOrderTaxPercentPpn = ?, PurchaseOrderDiscountPercent = ?, PurchaseOrderDiscountAmount = ?, PurchaseOrderNote = ?, PurchaseOrderSubTotal = ?, PurchaseOrderTaxAmountPpn = ?, PurchaseOrderGrandTotal = ?, PurchaseOrderLastUpdated = NOW() WHERE PurchaseOrderID = ? AND PurchaseOrderIsActive = 'Y'"; $que_po = $this->db->query($sql_po, [ $para['podate'], $para['reference'],$para['supplierID'], $user['S_RegionalID'], $taxtype, $taxpercent, $discpercent, $summary_diskon, $para['catatan'], $summary_subtotal, $summary_pajak, $summary_total, $para['PurchaseOrderID'] ]); if (!$que_po) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update header purchase order"); exit; } # update t kontrak jasa # $sql_kontrak = "UPDATE t_kontrak_jasa SET T_KontrakJasaM_BranchCode = ?, T_KontrakJasaJenisKontrak = ?, T_KontrakJasaStartDate = ?, T_KontrakJasaEndDate = ?, T_KontrakJasaJumlahPI = ? WHERE T_KontrakJasaID = ? AND T_KontrakJasaIsActive = 'Y'"; $que_kontrak = $this->db->query($sql_kontrak, [ $para['branchcode'], $para['typekontrak'], $para['kontrakstart'], $para['kontrakend'], $para['PIOutQty'], $para['T_KontrakJasaID'] ]); if (!$que_kontrak) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update t kontrak jasa"); exit; } # update status old po summary isActive to 'N' # $sql_active = "UPDATE purchase_order_summary SET PurchaseOrderSummaryIsActive = 'N' WHERE PurchaseOrderSummaryPurchaseOrderID = ? AND PurchaseOrderSummaryIsActive = 'Y'"; $que_active = $this->db->query($sql_active, [$para['PurchaseOrderID']]); if (!$que_active) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update status po summary to N"); exit; } # update po summary # $summary_detail = $para['detail']; $item_detail = []; foreach ($summary_detail as $key => $obj) { $discpercent = 0; $discabsolut = 0; if ($obj['DiskonType'] == 'P') { $discpercent = $obj['DiskonAmount']; } else { $discabsolut = $obj['DiskonAmount']; } $sql_summary = "INSERT INTO purchase_order_summary ( PurchaseOrderSummaryPurchaseOrderID, PurchaseOrderSummaryItemID, PurchaseOrderSummaryItemUnitID, PurchaseOrderSummaryQty, PurchaseOrderSummaryPrice, PurchaseOrderSummaryTotal, PurchaseOrderSummaryDiscountRupiah, PurchaseOrderSummaryDiscountPercent, PurchaseOrderSummaryDiscountAmount, PurchaseOrderSummaryDiscountType, PurchaseOrderSummaryCreatedUserID, PurchaseOrderSummaryCreated ) VALUES (?,?,?,?,?,?,?,?,?,?,?,NOW())"; $que_summary = $this->db->query($sql_summary, [ $para['PurchaseOrderID'], $obj['M_ItemID'], $obj['ItemUnitID'], $obj['RequestQty'], $obj['SupplierPrice'], $obj['TempTotal'], $discabsolut, $discpercent, $obj['DiskonAmount'], $obj['DiskonType'], $user['M_UserID'] ]); if (!$que_summary) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update data purchase order summary"); exit; } $PurchaseSummaryID = $this->db->insert_id(); foreach ($obj['detail'] as $key => $value) { $obj['detail'][$key]['PurchaseSummaryID'] = $PurchaseSummaryID; } $item_detail = array_merge($item_detail, $obj['detail']); } # update status po detail isActive tp 'N' # $sql_active = "UPDATE purchase_order_detail SET PurchaseOrderDetailIsActive = 'N' WHERE PurchaseOrderDetailPurchaseOrderID = ? AND PurchaseOrderDetailIsActive = 'Y'"; $que_active = $this->db->query($sql_active, [$para['PurchaseOrderID']]); if (!$que_active) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update status po detail to N"); exit; } # update po detail # foreach ($item_detail as $key => $obj) { $total = floatval($obj['SupplierPrice']) * floatval($obj['RequestQty']); $sql_detail = "INSERT INTO purchase_order_detail ( PurchaseOrderDetailPurchaseOrderID, PurchaseOrderDetailPurchaseSummaryID, PurchaseOrderDetailPurchaseRequestID, PurchaseOrderDetailPurchaseRequestDetailID, PurchaseOrderDetailPurchaseRequestFlagID, PurchaseOrderDetailItemID, PurchaseOrderDetailItemUnitID, PurchaseOrderDetailRequestQty, PurchaseOrderDetailQty, PurchaseOrderDetailPrice, PurchaseOrderDetailTotal, PurchaseOrderDetailUserID, PurchaseOrderDetailCreatedUserID, PurchaseOrderDetailCreated ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())"; $que_detail = $this->db->query($sql_detail, [ $para['PurchaseOrderID'], $obj['PurchaseSummaryID'], $obj['PurchaseRequestID'], $obj['PurchaseRequestDetailID'], $obj['PurchaseRequestFlagID'], $obj['M_ItemID'], $obj['ItemUnitID'], $obj['OriginalQty'], $obj['RequestQty'], $obj['SupplierPrice'], $total, $user['M_UserID'], $user['M_UserID'] ]); if (!$que_detail) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed re-insert purchase order detail"); exit; } $sql_flag = "UPDATE purchase_request_flag SET PurchaseRequestFlagQtyProses = ? WHERE PurchaseRequestFlagID = ?"; $que_flag = $this->db->query($sql_flag, [ $obj['RequestQty'], $obj['PurchaseRequestFlagID'] ]); if (!$que_flag) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update qty proses flag"); exit; } } $this->insertLog( $para['PurchaseOrderID'], 'UPDATE', $para, '', [], $user['M_UserID'], 'edit purchae order jasa' ); $this->db->trans_commit(); $this->sys_ok("[success] update purchase order jasa"); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function deletePOjasa() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $this->db->trans_begin(); $para = $this->sys_input; $user = $this->sys_user; $sql_detail = "SELECT PurchaseOrderDetailPurchaseRequestFlagID, PurchaseOrderDetailQty FROM purchase_order_detail WHERE PurchaseOrderDetailPurchaseOrderID = ? AND PurchaseOrderDetailIsActive = 'Y'"; $que_detail = $this->db->query($sql_detail, [$para['poID']]); if (!$que_detail) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed current data purchase order detail jasa"); exit; } $jasa_detail = $que_detail->result_array(); /* reduce qty process in purchase order flag */ foreach ($jasa_detail as $key => $obj) { $sql_updateflag = "UPDATE purchase_request_flag SET PurchaseRequestFlagQtyProses = PurchaseRequestFlagQtyProses - ? WHERE PurchaseRequestFlagID = ?"; $que_updateflag = $this->db->query($sql_updateflag, [ $obj['PurchaseOrderDetailQty'], $obj['PurchaseOrderDetailPurchaseRequestFlagID'] ]); if (!$que_updateflag) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed to update qty po jasa"); exit; } } /* soft delete purchase order detail */ $sql_deldetail = "UPDATE purchase_order_detail SET PurchaseOrderDetailIsActive = 'N', PurchaseOrderDetailDeleted = NOW(), PurchaseOrderDetailDeletedUserID = ? WHERE PurchaseOrderDetailPurchaseOrderID = ?"; $que_deldetail = $this->db->query($sql_deldetail, [ $user['M_UserID'], $para['poID'] ]); if (!$que_deldetail) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed soft delete data purchase order detail"); exit; } /* soft delete purchase order summary */ $sql_delsummary = "UPDATE purchase_order_summary SET PurchaseOrderSummaryIsActive = 'N', PurchaseOrderSummaryDeleted = NOW(), PurchaseOrderSummaryDeletedUserID = ? WHERE PurchaseOrderSummaryPurchaseOrderID = ?"; $que_delsummary = $this->db->query($sql_delsummary, [ $user['M_UserID'], $para['poID'] ]); if (!$que_delsummary) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed soft delete data purchase order summary"); exit; } /* soft delete t kontrak jasa */ $sql_deljasa = "UPDATE t_kontrak_jasa SET T_KontrakJasaIsActive = 'N', T_KontrakJasaDeleted = NOW() WHERE T_KontrakJasaID = ? AND T_KontrakJasaPurchaseOrderID = ?"; $que_deljasa = $this->db->query($sql_deljasa, [ $para['tjasaID'], $para['poID'] ]); if (!$que_deljasa) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed soft delete data t kontrak jasa"); exit; } /* soft delete purchae order */ $sql_delprder = "UPDATE purchase_order SET PurchaseOrderIsActive = 'N', PurchaseOrderDeleted = NOW(), PurchaseOrderDeletedUserID = ? WHERE PurchaseOrderID = ?"; $que_delprder = $this->db->query($sql_delprder, [ $user['M_UserID'], $para['poID'] ]); if (!$que_delprder) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed soft delete data purchase order"); exit; } $desc = "delete purchase order jasa dengan nomor {$para['ponumber']}"; $this->insertLog($para['poID'], 'DELETE', $para, '', [], $user['M_UserID'], $desc); $this->db->trans_commit(); $this->sys_ok("[Success] {$desc}"); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function uploadAttachment() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $this->db->trans_begin(); $para = $this->sys_input; $user = $this->sys_user; $basepath = "/home/one/project/accone/one-media/order-jasa/"; $year = date("Y"); $targetpath = $basepath . $year . "/"; if (!is_dir($targetpath)) { mkdir($targetpath, 0755, true); } $config['upload_path'] = $targetpath; $config['allowed_types'] = 'jpg|jpeg|png'; $config['max_size'] = '10000'; $count = count($_FILES['files']['name']); $this->load->library('upload', $config); for ($i=0; $i < $count; $i++) { if (!empty($_FILES['files']['name'][$i])) { $_FILES['file']['name'] = $_FILES['files']['name'][$i]; $_FILES['file']['type'] = $_FILES['files']['type'][$i]; $_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i]; $_FILES['file']['error'] = $_FILES['files']['error'][$i]; $_FILES['file']['size'] = $_FILES['files']['size'][$i]; $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); $new_filename = "PO" . date("YmdHis") . "_" . $para['ponumber'] . "." . $ext; $config['file_name'] = $new_filename; $this->upload->initialize($config); if ($this->upload->do_upload('file')) { $upload_data = $this->upload->data(); $filename = $upload_data['file_name']; $sql_insert = "INSERT INTO t_jasa_attachment ( T_JasaAttachmentT_KontrakJasaID, T_JasaAttachmentPurchaseOrderID, T_JasaAttachmentName, T_JasaAttachmentType, T_JasaAttachmentCreated ) VALUES (?,?,?,?,NOW())"; $que_insert = $this->db->query($sql_insert, [ $para['tjasaID'], $para['poID'], $filename, 'order' ]); if (!$que_insert) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed insert attachment table t jasa attachment"); exit; } } else { $error = $this->upload->display_errors(); $this->db->trans_rollback(); $this->sys_error("[Error] " . $error); } } } $this->db->trans_commit(); $this->sys_ok("[Success] upload attachment order jasa"); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } public function updateApprovalPO() { try { if (!$this->isLogin) { $this->sys_error("invalid token"); exit; } $this->db->trans_begin(); $para = $this->sys_input; $user = $this->sys_user; $approvelevel = $para['approvelevel']; /* request purchase order */ if ($approvelevel == '0') { $sql = "UPDATE purchase_order SET PurchaseOrderStatus = 'Pending', PurchaseOrderLastUpdated = NOW() WHERE PurchaseOrderID = ? AND PurchaseOrderIsActive = 'Y'"; $que = $this->db->query($sql, [$para['poID']]); if (!$que) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update table purchase order request"); exit; } } /* verifikasi oleh manager */ if ($approvelevel == '1') { $sql = "UPDATE purchase_order SET PurchaseOrderApprovedManagerUserID = ?, PurchaseOrderLastUpdated = NOW() WHERE PurchaseOrderID = ? AND PurchaseOrderIsActive = 'Y'"; $que = $this->db->query($sql, [$user['M_UserID'], $para['poID']]); if (!$que) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update table purchase order verif"); exit; } } /* approval oleh kepala regional */ if ($approvelevel == '2') { $sql = "UPDATE purchase_order SET PurchaseOrderStatus = 'Approved', PurchaseOrderLastUpdated = NOW(), PurchaseOrderApprovedUserID = ? WHERE PurchaseOrderID = ? AND PurchaseOrderIsActive = 'Y'"; $que = $this->db->query($sql, [$user['M_UserID'], $para['poID']]); if (!$que) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update table purchase order approve"); exit; } $sql_cont = "UPDATE t_kontrak_jasa SET T_KontrakJasaStatus = 'active', T_KontrakJasaLastUpdated = NOW() WHERE T_KontrakJasaID = ?"; $que_cont = $this->db->query($sql_cont, [$para['kontrakid']]); if (!$que_cont) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed update table t kontrak jasa"); exit; } } $this->db->trans_commit(); $this->sys_ok("[Success] success update status PO Jasa"); } catch (Exception $exc) { $msg = $exc->getMessage(); $this->sys_error($msg); } } private function insertLog($poID, $type, $prm, $dataBefore, $dataAfter, $userID, $desc = '') { $sql = "INSERT INTO acc_one_log.purchase_order_log ( PurchaseOrderLogPurchaseOrderID, PurchaseOrderLogType, PurchaseOrderLogPrm, PurchaseOrderLogJSONBefore, PurchaseOrderLogJSONAfter, PurchaseOrderLogCreated, PurchaseOrderLogUserID, PurchaseOrderLogTypeDesc ) VALUES (?,?,?,?,?,NOW(),?,?)"; $que = $this->db->query($sql, [ $poID, $type, json_encode($prm), json_encode($dataBefore), json_encode($dataAfter), $userID, $desc ]); if (!$que) { $this->db->trans_rollback(); $this->sys_error_db("[Error] failed insert into table log PO"); exit; } } }