diff --git a/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php b/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php index d07233a..8489a24 100644 --- a/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php +++ b/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php @@ -2,11 +2,11 @@ class ReceiveItemPOAsset extends MY_Controller { - var $db; + public function index() { - echo "Receive Item PO Asset API"; + echo 'Receive Item PO Asset API'; } public function __construct() @@ -14,7 +14,7 @@ class ReceiveItemPOAsset extends MY_Controller parent::__construct(); } - ## QUERY ## + // # QUERY ## public function getListSupplier() { try { @@ -42,7 +42,7 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } @@ -77,7 +77,7 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } @@ -102,7 +102,7 @@ class ReceiveItemPOAsset extends MY_Controller AND WarehouseIsTransit = 'N'"; $que = $this->db->query($sql, [ $user['S_RegionalID'], - $para['M_BranchID'] + $para['M_BranchID'], ]); if (!$que) { throw new Exception('failed to query gudang', 1); @@ -118,7 +118,47 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); + } + } + + public function getRuangan() + { + try { + if (!$this->isLogin) { + throw new Exception('invalid token'); + } + + $payload = $this->sys_input; + $user = $this->sys_user; + $search = $payload['search'] . '%'; + + $sql = "SELECT M_RuanganID, + M_RuanganM_BranchID, + M_RuanganName, + M_RuanganCode + FROM m_ruangan + WHERE M_RuanganIsActive = 'Y' + AND M_RuanganM_BranchID = ? + AND M_RuanganName LIKE ? + ORDER BY M_RuanganName ASC"; + $qry = $this->db->query($sql, [$user['M_BranchID'], $search]); + + if (!$qry) { + throw new Exception('query listing ruangan', 1); + } + + $data = $qry->result_array(); + $this->sys_ok($data); + } catch (Exception $exc) { + $msg = '[Error] ' . $exc->getMessage(); + $code = $exc->getCode(); + if ($code == 1) { + $this->sys_error_db($msg); + } else { + $this->sys_error($msg); + } + exit(); } } @@ -126,8 +166,8 @@ class ReceiveItemPOAsset extends MY_Controller { try { if (!$this->isLogin) { - $this->sys_error("Invalid token"); - exit; + $this->sys_error('Invalid token'); + exit(); } $user = $this->sys_user; @@ -162,8 +202,8 @@ class ReceiveItemPOAsset extends MY_Controller } if (!$que) { - $this->sys_error_db("[Error] get staff"); - exit; + $this->sys_error_db('[Error] get staff'); + exit(); } $data = $que->result_array(); $this->sys_ok($data); @@ -183,9 +223,9 @@ class ReceiveItemPOAsset extends MY_Controller $para = $this->sys_input; $user = $this->sys_user; - $keyword = "%"; + $keyword = '%'; if ($para['search'] != '') { - $keyword .= $para['search'] . "%"; + $keyword .= $para['search'] . '%'; } $sql_data = "SELECT @@ -218,7 +258,7 @@ class ReceiveItemPOAsset extends MY_Controller $user['S_RegionalID'], $para['gudangID'], $keyword, - $keyword + $keyword, ]); if (!$que_data) { throw new Exception('failed to query data purchase order', 1); @@ -247,7 +287,7 @@ class ReceiveItemPOAsset extends MY_Controller WHERE PurchaseOrderDetailPurchaseOrderID = ? AND PurchaseOrderDetailIsActive = 'Y'"; $que_detail = $this->db->query($sql_detail, [ - $obj['PurchaseOrderID'] + $obj['PurchaseOrderID'], ]); if (!$que_detail) { throw new Exception('failed to query detail po asset', 1); @@ -266,7 +306,7 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } @@ -280,9 +320,9 @@ class ReceiveItemPOAsset extends MY_Controller $para = $this->sys_input; $user = $this->sys_user; - $keyword = "%"; + $keyword = '%'; if ($para['search'] != '') { - $keyword .= $para['search'] . "%"; + $keyword .= $para['search'] . '%'; } $offset = 0; @@ -291,9 +331,9 @@ class ReceiveItemPOAsset extends MY_Controller $offset = ($para['currpage'] - 1) * $limit; } - $confirmed = "X"; + $confirmed = 'X'; if ($para['status'] === 'Confirmed') { - $confirmed = "Y"; + $confirmed = 'Y'; } if ($para['status'] === 'Unconfirmed') { $confirmed = 'N'; @@ -333,7 +373,7 @@ class ReceiveItemPOAsset extends MY_Controller WHERE ReceiveOrderPoIsActive = 'Y' ORDER BY ReceiveOrderPoID DESC"; - $sql_data = $sql_base . " LIMIT ? OFFSET ? "; + $sql_data = $sql_base . ' LIMIT ? OFFSET ? '; $que_data = $this->db->query($sql_data, [ $para['startdate'], $para['enddate'], @@ -342,7 +382,7 @@ class ReceiveItemPOAsset extends MY_Controller $keyword, $user['M_BranchCode'], $limit, - $offset + $offset, ]); if (!$que_data) { throw new Exception('failed to get data receive order', 1); @@ -356,7 +396,7 @@ class ReceiveItemPOAsset extends MY_Controller $confirmed, $confirmed, $keyword, - $user['M_BranchCode'] + $user['M_BranchCode'], ]); if (!$que_total) { throw new Exception('failed to get total data receive order', 1); @@ -364,8 +404,8 @@ class ReceiveItemPOAsset extends MY_Controller $total = $que_total->row_array()['total']; $output = [ - "records" => $data, - "total" => $total + 'records' => $data, + 'total' => $total, ]; $this->sys_ok($output); @@ -377,7 +417,7 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } @@ -385,8 +425,8 @@ class ReceiveItemPOAsset extends MY_Controller { try { if (!$this->isLogin) { - $this->sys_error("invalid token"); - exit; + $this->sys_error('invalid token'); + exit(); } $para = $this->sys_input; @@ -401,8 +441,8 @@ class ReceiveItemPOAsset extends MY_Controller AND ReceiveOrderPoDocumentType = 'aset'"; $que = $this->db->query($sql, [$para['roID']]); if (!$que) { - $this->sys_error_db("[Error] failed get data attachment"); - exit; + $this->sys_error_db('[Error] failed get data attachment'); + exit(); } $data = $que->result_array(); @@ -417,8 +457,8 @@ class ReceiveItemPOAsset extends MY_Controller { try { if (!$this->isLogin) { - $this->sys_error("invalid token"); - exit; + $this->sys_error('invalid token'); + exit(); } $para = $this->sys_input; @@ -442,8 +482,8 @@ class ReceiveItemPOAsset extends MY_Controller AND ReceiveOrderPoIsActive = 'Y'"; $que_header = $this->db->query($sql_header, [$para['roid']]); if (!$que_header) { - $this->sys_error_db("[Error] failed get header data RO"); - exit; + $this->sys_error_db('[Error] failed get header data RO'); + exit(); } $header = $que_header->row_array(); @@ -471,8 +511,8 @@ class ReceiveItemPOAsset extends MY_Controller AND ReceiveOrderPoDetailIsActive = 'Y'"; $que_detail = $this->db->query($sql_detail, [$para['roid']]); if (!$que_detail) { - $this->sys_error_db("[Error] failed to get detail data ro"); - exit; + $this->sys_error_db('[Error] failed to get detail data ro'); + exit(); } $detail = $que_detail->result_array(); @@ -505,26 +545,135 @@ class ReceiveItemPOAsset extends MY_Controller WHERE ReceiveOrderPoInspeksiReceiveOrderPoDetailID = ? AND ReceiveOrderPoInspeksiIsActive = 'Y'"; $que_inspeksi = $this->db->query($sql_inspeksi, [ - $obj['ReceiveOrderPoDetailID'] + $obj['ReceiveOrderPoDetailID'], ]); if (!$que_inspeksi) { - $this->sys_error_db("[Error] failed to get data inspeksi ro"); - exit; + $this->sys_error_db('[Error] failed to get data inspeksi ro'); + exit(); } $detail[$key]['inspeksi'] = $que_inspeksi->row_array(); } $this->sys_ok([ - "header" => $header, - "detail" => $detail + 'header' => $header, + 'detail' => $detail, ]); } catch (Exception $exc) { $this->sys_error($exc->getMessage()); } } - ## MUTATION ## + public function getAssetBelumSerahTerima() + { + try { + if (!$this->isLogin) { + throw new Exception('invalid token'); + } + $para = $this->sys_input; + + $sql = "SELECT + rod.ReceiveOrderPoDetailID, + rod.ReceiveOrderPoItemID, + rod.ReceiveOrderPoItemUnitID, + mi.M_ItemDesc, + rod.ReceiveOrderPoDetailQty AS originalQty, + COALESCE(ahd_count.InsertedQty, 0) AS serahQty, + rod.ReceiveOrderPoDetailQty - COALESCE(ahd_count.InsertedQty, 0) AS sisaQty, + CASE + WHEN COALESCE(ahd_count.InsertedQty, 0) = rod.ReceiveOrderPoDetailQty THEN 'Y' + ELSE 'N' + END AS isHandoverDone + FROM receive_order_po_detail rod + JOIN m_item mi ON mi.M_ItemID = rod.ReceiveOrderPoItemID + LEFT JOIN ( + SELECT + AssetHandoverDetailReceiveOrderPoDetailID, + COUNT(*) AS InsertedQty + FROM asset_handover_detail ahd + JOIN asset_handover ah ON ahd.AssetHandoverDetailAssetHandoverID = ah.AssetHandoverID + AND ah.AssetHandoverIsActive = 'Y' + WHERE ahd.AssetHandoverDetailIsActive = 'Y' + AND ah.AssetHandoverReceiveOrderPoID = ? + GROUP BY AssetHandoverDetailReceiveOrderPoDetailID + ) ahd_count ON ahd_count.AssetHandoverDetailReceiveOrderPoDetailID = rod.ReceiveOrderPoDetailID + WHERE rod.ReceiveOrderPoDetailReceiveOrderPoID = ? + AND rod.ReceiveOrderPoDetailIsActive = 'Y'"; + $que = $this->db->query($sql, [$para['ROID'], $para['ROID']]); + if (!$que) { + throw new Exception('listing asset belum yg diserah terima', 1); + } + $data = $que->result_array(); + $this->sys_ok($data); + } catch (Exception $e) { + $message = $e->getMessage(); + $code = $e->getCode(); + if ($code == 1) { + $this->sys_error_db('[Error] ' . $message); + } else { + $this->sys_error('[Error] ' . $message); + } + exit(); + } + } + + public function getBarcodes() + { + try { + if (!$this->isLogin) { + throw new Exception('invalid token'); + } + + $param = $this->sys_input; + + $sql = "SELECT + T_BarcodeBarangID as id, + T_BarcodeBarangNumber, + M_ItemDesc, + M_BranchName, + M_RuanganName, + 'N' as chex + FROM t_barcode_barang + JOIN m_item + ON M_ItemID = T_BarcodeBarangM_ItemID + JOIN m_branch + ON M_BranchID = T_BarcodeBarangM_BranchID + JOIN m_ruangan + ON M_RuanganID = T_BarcodeBarangM_RuanganID + WHERE T_BarcodeBarangReceiveOrderPoID = ? + AND T_BarcodeBarangIsActive = 'Y' + ORDER BY T_BarcodeBarangID"; + $que = $this->db->query($sql, [$param['ROID']]); + if (!$que) { + throw new Exception('failed query barcode item', 1); + } + + $data = $que->result_array(); + if ($data) { + foreach ($data as $key => $value) { + if ($value['chex'] == 'N') { + $data[$key]['chex'] = false; + } else { + $data[$key]['chex'] = true; + } + } + } + + $this->sys_ok($data); + } catch (Exception $e) { + $this->db->trans_rollback(); + $msg = '[Error] ' . $e->getMessage(); + $code = $e->getCode(); + if ($code == 1) { + $this->sys_error_db($msg); + } else { + $this->sys_error($msg); + } + exit(); + } + } + + // # MUTATION ## public function generatePOItemReceive() { try { @@ -536,7 +685,7 @@ class ReceiveItemPOAsset extends MY_Controller $para = $this->sys_input; $user = $this->sys_user; - $sql_po = "SELECT * FROM purchase_order WHERE PurchaseOrderID = ?"; + $sql_po = 'SELECT * FROM purchase_order WHERE PurchaseOrderID = ?'; $que_po = $this->db->query($sql_po, [$para['poID']]); if (!$que_po) { $this->db->trans_rollback(); @@ -581,7 +730,7 @@ class ReceiveItemPOAsset extends MY_Controller $data_detailpo = $que_detailpo->result_array(); foreach ($data_detailpo as $key => $ele) { - $sql_itemrec = "INSERT INTO po_item_receive ( + $sql_itemrec = 'INSERT INTO po_item_receive ( PoItemReceivePurchaseOrderID, PoItemReceivePurchaseOrderSummaryID, PoItemReceivePurchaseOrderDetailID, @@ -593,7 +742,7 @@ class ReceiveItemPOAsset extends MY_Controller PoItemReceiveCreated, PoItemReceiveCreatedUserID, PoItemReceivePrice - ) VALUES (?,?,?,?,?,?,?,0,NOW(),?,?)"; + ) VALUES (?,?,?,?,?,?,?,0,NOW(),?,?)'; $que_itemrec = $this->db->query($sql_itemrec, [ $para['poID'], $ele['orderSummaryID'], @@ -603,7 +752,7 @@ class ReceiveItemPOAsset extends MY_Controller $ele['itemUnitID'], $ele['qty'], $user['M_UserID'], - $ele['price'] + $ele['price'], ]); if (!$que_itemrec) { $this->db->trans_rollback(); @@ -612,7 +761,7 @@ class ReceiveItemPOAsset extends MY_Controller } $this->db->trans_commit(); - $this->sys_ok("[success] generate data po item receive"); + $this->sys_ok('[success] generate data po item receive'); } catch (Exception $e) { $msg = '[Error] ' . $e->getMessage(); $code = $e->getCode(); @@ -621,51 +770,10 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } - private function generateNoLogistik($user, $typeLogistik): string - { - $areaid = ($user['loginLevel'] == 'regional') ? $user['S_RegionalID'] : $user['M_BranchID']; - $areatype = ($user['loginLevel'] == 'regional') ? 'R' : 'B'; - - $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"); - exit; - } - - $usrdivisiID = $queusrdivisi->row_array()['M_UserDivisionDivisionID']; - if (!isset($usrdivisiID)) { - $this->db->trans_rollback(); - $this->sys_error_db("[Error] user divisi id null"); - exit; - } - - $sqlnum = "SELECT `fn_penomoran`(?, ?, ?, ?, ?, ?) AS numpd;"; - $quenum = $this->db->query($sqlnum, [$typeLogistik, $usrdivisiID, $areatype, $areaid, 'SM', 'Y']); - if (!$quenum) { - $this->db->trans_rollback(); - $this->sys_error_db("[Error] generate number PI"); - exit; - } - - $numPL = $quenum->row_array()['numpd']; - if (!isset($numPL)) { - $this->db->trans_rollback(); - $this->sys_error_db("[Error] number PI null"); - exit; - } - - return $numPL; - } - public function createReceiveOrder() { try { @@ -677,11 +785,11 @@ class ReceiveItemPOAsset extends MY_Controller $param = $this->sys_input; $user = $this->sys_user; - # generate nomor purchase invoice # + // generate nomor purchase invoice # $numGR = $this->generateNoLogistik($user, 'GR'); - # insert table ro # - $sqlInsRO = "INSERT INTO receive_order_po ( + // insert table ro # + $sqlInsRO = 'INSERT INTO receive_order_po ( ReceiveOrderPoNumber, ReceiveOrderPoSupplierID, ReceiveOrderPoIDate, @@ -695,7 +803,7 @@ class ReceiveItemPOAsset extends MY_Controller ReceiveOrderPoDONumber, ReceiveOrderPoTypePurchase, ReceiveOrderPoCreatedUserID - ) VALUE (?,?,?,?,?,?,?,?,?,?,?,?,?)"; + ) VALUE (?,?,?,?,?,?,?,?,?,?,?,?,?)'; $queInsRO = $this->db->query($sqlInsRO, [ $numGR, $param['supplier'], @@ -709,7 +817,7 @@ class ReceiveItemPOAsset extends MY_Controller $param['reference'], $param['reference'], 'aset', - $user['M_UserID'] + $user['M_UserID'], ]); if (!$queInsRO) { $this->db->trans_rollback(); @@ -717,16 +825,16 @@ class ReceiveItemPOAsset extends MY_Controller } $roID = $this->db->insert_id(); - # inset to table ro detail # + // inset to table ro detail # foreach ($param['detail'] as $key => $obj) { - $sqlRcvdItem = "SELECT * FROM po_item_receive WHERE PoItemReceiveID = ?"; + $sqlRcvdItem = 'SELECT * FROM po_item_receive WHERE PoItemReceiveID = ?'; $queRcvdItem = $this->db->query($sqlRcvdItem, [$obj['PoItemReceiveID']]); if (!$queRcvdItem) { $this->db->trans_rollback(); throw new Exception('failed query po item receive', 1); } $cekReceived = $queRcvdItem->row_array(); - # cek item received # + // cek item received # if ($cekReceived['PoItemReceiveIsActive'] == 'N') { $this->db->trans_rollback(); throw new Exception('failed to check po item receive is active'); @@ -739,11 +847,11 @@ class ReceiveItemPOAsset extends MY_Controller if (intval($obj['qty']) > intval($cekReceived['PoItemReceiveQty'])) { $this->db->trans_rollback(); throw new Exception( - "jumlah item {$obj['M_ItemDesc']} yang tesedia sudah berubah, silakan pilih ulang item" + "jumlah item {$obj['M_ItemDesc']} yang tesedia sudah berubah, silakan pilih ulang item", ); } - $sql_insde = "INSERT INTO receive_order_po_detail ( + $sql_insde = 'INSERT INTO receive_order_po_detail ( ReceiveOrderPoDetailReceiveOrderPoID, ReceiveOrderPoDetailPurchaseOrderID, ReceiveOrderPoDetailPurchaseOrderSummaryID, @@ -755,7 +863,7 @@ class ReceiveItemPOAsset extends MY_Controller ReceiveOrderPoItemID, ReceiveOrderPoItemUnitID, ReceiveOrderPoDetailCreatedUserID - ) VALUES (?,?,?,?,?,?,?,?,?,?,?)"; + ) VALUES (?,?,?,?,?,?,?,?,?,?,?)'; $que_insde = $this->db->query($sql_insde, [ $roID, $obj['PurchaseOrderID'], @@ -764,10 +872,10 @@ class ReceiveItemPOAsset extends MY_Controller $obj['PoItemReceiveID'], $obj['qty'], $obj['price'], - (doubleval($obj['price']) * intval($obj['qty'])), + doubleval($obj['price']) * intval($obj['qty']), $obj['M_ItemID'], $obj['ItemUnitID'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_insde) { $this->db->trans_rollback(); @@ -776,7 +884,7 @@ class ReceiveItemPOAsset extends MY_Controller $ROdetailID = $this->db->insert_id(); $inspeksi = $obj['inspeksi']; - $sql_inspeksi = "INSERT INTO receive_order_po_inspeksi ( + $sql_inspeksi = 'INSERT INTO receive_order_po_inspeksi ( ReceiveOrderPoInspeksiReceiveOrderPoDetailID, ReceiveOrderPoInspeksiQtyPesan, ReceiveOrderPoInspeksiQtyActual, @@ -791,7 +899,7 @@ class ReceiveItemPOAsset extends MY_Controller ReceiveOrderPoInspeksiStaffPenerimaID, ReceiveOrderPoInspeksiPengirim, ReceiveOrderPoInspeksiUserID - ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)'; $que_inspeksi = $this->db->query($sql_inspeksi, [ $ROdetailID, $inspeksi['qty_po'], @@ -806,7 +914,7 @@ class ReceiveItemPOAsset extends MY_Controller $inspeksi['catatan'], $inspeksi['pemeriksa'], $inspeksi['pengirim'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_inspeksi) { $this->db->trans_rollback(); @@ -815,7 +923,7 @@ class ReceiveItemPOAsset extends MY_Controller } $this->db->trans_commit(); - $this->sys_ok("[Success] create receive order asset"); + $this->sys_ok('[Success] create receive order asset'); } catch (Exception $e) { $msg = '[Error] ' . $e->getMessage(); $code = $e->getCode(); @@ -824,7 +932,7 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } @@ -848,7 +956,7 @@ class ReceiveItemPOAsset extends MY_Controller $roID = $param['ReceiveOrderPoID']; - # update receive order header # + // update receive order header # $sqlHeader = "UPDATE receive_order_po SET ReceiveOrderPoNumber = ?, ReceiveOrderPoSupplierID = ?, @@ -875,13 +983,13 @@ class ReceiveItemPOAsset extends MY_Controller $param['catatan'], $param['reference'], $param['reference'], - $roID + $roID, ]); if (!$queHeader) { throw new Exception('failed to update table receive order po', 1); } - # soft delete the existing receive order details # + // soft delete the existing receive order details # $sqlDetailInactive = "UPDATE receive_order_po_detail SET ReceiveOrderPoDetailIsActive = 'N', ReceiveOrderPoDetailDeletedUserID = ?, @@ -890,13 +998,13 @@ class ReceiveItemPOAsset extends MY_Controller AND ReceiveOrderPoDetailIsActive = 'Y'"; $queDetailInactive = $this->db->query($sqlDetailInactive, [ $user['M_UserID'], - $roID + $roID, ]); if (!$queDetailInactive) { throw new Exception('failed to soft delete receive order po detail', 1); } - # soft delete the inspections belonging to the existing details # + // soft delete the inspections belonging to the existing details # $sqlInspeksiInactive = "UPDATE receive_order_po_inspeksi JOIN receive_order_po_detail ON ReceiveOrderPoDetailID = ReceiveOrderPoInspeksiReceiveOrderPoDetailID @@ -907,19 +1015,19 @@ class ReceiveItemPOAsset extends MY_Controller AND ReceiveOrderPoInspeksiIsActive = 'Y'"; $queInspeksiInactive = $this->db->query($sqlInspeksiInactive, [ $user['M_UserID'], - $roID + $roID, ]); if (!$queInspeksiInactive) { throw new Exception('failed to soft delete receive order po inspeksi', 1); } - # re-insert receive order details and their inspection forms # + // re-insert receive order details and their inspection forms # foreach ($param['detail'] as $obj) { if (!isset($obj['inspeksi']) || !is_array($obj['inspeksi'])) { throw new Exception("inspection data is required for item {$obj['M_ItemDesc']}"); } - $sqlDetail = "INSERT INTO receive_order_po_detail ( + $sqlDetail = 'INSERT INTO receive_order_po_detail ( ReceiveOrderPoDetailReceiveOrderPoID, ReceiveOrderPoDetailPurchaseOrderID, ReceiveOrderPoDetailPurchaseOrderSummaryID, @@ -931,7 +1039,7 @@ class ReceiveItemPOAsset extends MY_Controller ReceiveOrderPoItemID, ReceiveOrderPoItemUnitID, ReceiveOrderPoDetailCreatedUserID - ) VALUES (?,?,?,?,?,?,?,?,?,?,?)"; + ) VALUES (?,?,?,?,?,?,?,?,?,?,?)'; $queDetail = $this->db->query($sqlDetail, [ $roID, $obj['PurchaseOrderID'], @@ -940,10 +1048,10 @@ class ReceiveItemPOAsset extends MY_Controller $obj['PoItemReceiveID'], $obj['qty'], $obj['price'], - (doubleval($obj['price']) * intval($obj['qty'])), + doubleval($obj['price']) * intval($obj['qty']), $obj['M_ItemID'], $obj['ItemUnitID'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$queDetail) { throw new Exception('failed to insert table receive order po detail', 1); @@ -951,7 +1059,7 @@ class ReceiveItemPOAsset extends MY_Controller $roDetailID = $this->db->insert_id(); $inspeksi = $obj['inspeksi']; - $sqlInspeksi = "INSERT INTO receive_order_po_inspeksi ( + $sqlInspeksi = 'INSERT INTO receive_order_po_inspeksi ( ReceiveOrderPoInspeksiReceiveOrderPoDetailID, ReceiveOrderPoInspeksiQtyPesan, ReceiveOrderPoInspeksiQtyActual, @@ -966,7 +1074,7 @@ class ReceiveItemPOAsset extends MY_Controller ReceiveOrderPoInspeksiStaffPenerimaID, ReceiveOrderPoInspeksiPengirim, ReceiveOrderPoInspeksiUserID - ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)'; $queInspeksi = $this->db->query($sqlInspeksi, [ $roDetailID, $inspeksi['qty_po'], @@ -981,7 +1089,7 @@ class ReceiveItemPOAsset extends MY_Controller $inspeksi['catatan'], $inspeksi['pemeriksa'], $inspeksi['pengirim'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$queInspeksi) { throw new Exception('failed to insert table receive order po inspeksi', 1); @@ -998,7 +1106,7 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } @@ -1015,7 +1123,7 @@ class ReceiveItemPOAsset extends MY_Controller $roID = $para['roid']; - # soft delete table receive order po # + // soft delete table receive order po # $sql_del = "UPDATE receive_order_po SET ReceiveOrderPoIsActive = 'N', ReceiveOrderPoDeleted = NOW(), @@ -1023,7 +1131,7 @@ class ReceiveItemPOAsset extends MY_Controller WHERE ReceiveOrderPoID = ?"; $que_del = $this->db->query($sql_del, [ $user['M_UserID'], - $roID + $roID, ]); if (!$que_del) { $this->db->trans_rollback(); @@ -1037,7 +1145,7 @@ class ReceiveItemPOAsset extends MY_Controller WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?"; $que_deldet = $this->db->query($sql_deldet, [ $user['M_UserID'], - $roID + $roID, ]); if (!$que_deldet) { $this->db->trans_rollback(); @@ -1054,7 +1162,7 @@ class ReceiveItemPOAsset extends MY_Controller WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?"; $que_inspek = $this->db->query($sql_inspek, [ $user['M_UserID'], - $roID + $roID, ]); if (!$que_inspek) { $this->db->trans_rollback(); @@ -1069,7 +1177,7 @@ class ReceiveItemPOAsset extends MY_Controller AND ReceiveOrderPoDocumentType = 'aset'"; $que_attachment = $this->db->query($sql_attachment, [ $user['M_UserID'], - $roID + $roID, ]); if (!$que_attachment) { $this->db->trans_rollback(); @@ -1077,7 +1185,7 @@ class ReceiveItemPOAsset extends MY_Controller } $this->db->trans_commit(); - $this->sys_ok("[success] delete receive order"); + $this->sys_ok('[success] delete receive order'); } catch (Exception $e) { $msg = '[Error] ' . $e->getMessage(); $code = $e->getCode(); @@ -1086,7 +1194,7 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); } } @@ -1103,13 +1211,13 @@ class ReceiveItemPOAsset extends MY_Controller $roID = $para['roid']; - # DATA ORDER # - $sql_dataro = "SELECT + // DATA ORDER # + $sql_dataro = 'SELECT receive_order_po.*, SupplierName FROM receive_order_po JOIN supplier ON ReceiveOrderPoSupplierID = SupplierID - WHERE ReceiveOrderPoID = ?"; + WHERE ReceiveOrderPoID = ?'; $que_dataro = $this->db->query($sql_dataro, [$roID]); if (!$que_dataro) { $this->db->trans_rollback(); @@ -1145,7 +1253,7 @@ class ReceiveItemPOAsset extends MY_Controller } $detail_ro = $que_detailro->result_array(); - # UPDATE STATUS RO # + // UPDATE STATUS RO # $sql_updatero = "UPDATE receive_order_po SET ReceiveOrderPoConfirmed = 'Y', ReceiveOrderPoConfirmedDate = NOW(), @@ -1157,7 +1265,7 @@ class ReceiveItemPOAsset extends MY_Controller throw new Exception('failed to update status confirmed ro', 1); } - # PREPARE DATA FOR JURNAL # + // PREPARE DATA FOR JURNAL # $sql_nojurnal = "SELECT `fn_numbering`('J') AS numbering"; $que_nojurnal = $this->db->query($sql_nojurnal, []); if (!$que_nojurnal) { @@ -1192,13 +1300,13 @@ class ReceiveItemPOAsset extends MY_Controller } $typejurnal = $que_typejurnal->row_array()['JurnalTypeID']; - # INSERT JURNAL HEADER # + // INSERT JURNAL HEADER # $title = "Jurnal Pemakaian Jasa RO {$data_ro['ReceiveOrderPoNumber']} "; - $title .= "pada tanggal {$data_ro['ReceiveOrderPoIDate']}"; + $title .= "pada tanggal {$data_ro['ReceiveOrderPoIDate']}"; $desc = "Referensi dari PO {$data_ro['ReceiveOrderPoRefNumber']} "; $desc .= "dari supplier {$data_ro['SupplierName']}"; - $sql_headerjurnal = "INSERT INTO jurnal ( + $sql_headerjurnal = 'INSERT INTO jurnal ( jurnalM_BranchCompanyID, JurnalS_RegionalID, jurnalM_BranchCode, @@ -1209,7 +1317,7 @@ class ReceiveItemPOAsset extends MY_Controller jurnalDate, jurnalJurnalTypeID, jurnalM_UserID - ) VALUES (?,?,?,?,?,?,?,NOW(),?,?)"; + ) VALUES (?,?,?,?,?,?,?,NOW(),?,?)'; $que_headerjurnal = $this->db->query($sql_headerjurnal, [ $user['M_BranchCompanyID'], $user['S_RegionalID'], @@ -1219,7 +1327,7 @@ class ReceiveItemPOAsset extends MY_Controller $title, $desc, $typejurnal, - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_headerjurnal) { $this->db->trans_rollback(); @@ -1227,13 +1335,13 @@ class ReceiveItemPOAsset extends MY_Controller } $jurnalID = $this->db->insert_id(); - # INSERT JURNAL TX # + // INSERT JURNAL TX # $total_debet = 0.00; $total_diskonitem = 0.00; $total_diskonpo = 0.00; foreach ($detail_ro as $key => $elem) { - $sql_itemdata = "SELECT * FROM m_item WHERE M_ItemID = ?"; + $sql_itemdata = 'SELECT * FROM m_item WHERE M_ItemID = ?'; $que_itemdata = $this->db->query($sql_itemdata, [$elem['ReceiveOrderPoItemID']]); if (!$que_itemdata) { $this->db->trans_rollback(); @@ -1249,11 +1357,11 @@ class ReceiveItemPOAsset extends MY_Controller throw new Exception($desc, 1); } - $sql_coaitem = "SELECT + $sql_coaitem = 'SELECT Fa_ClassCoaID, Fa_ClassCoaDesc FROM fa_class - WHERE Fa_ClassID = ?"; + WHERE Fa_ClassID = ?'; $que_coaitem = $this->db->query($sql_coaitem, $itemdata['M_ItemFa_ClassID']); if (!$que_coaitem) { $this->db->trans_rollback(); @@ -1270,21 +1378,21 @@ class ReceiveItemPOAsset extends MY_Controller $total_debet = round($total_debet + $debet, 2); /* INSERT table jurnal tx item */ - $sql_jurnaltx = "INSERT INTO jurnal_tx ( + $sql_jurnaltx = 'INSERT INTO jurnal_tx ( jurnalTxJurnalID, jurnalTxCoaID, jurnalTxDescription, jurnalTxDebit, jurnalTxCredit, jurnalTxM_UserID - ) VALUES (?,?,?,?,?,?)"; + ) VALUES (?,?,?,?,?,?)'; $que_jurnaltx = $this->db->query($sql_jurnaltx, [ $jurnalID, $coa_asset['Fa_ClassCoaID'], $coa_asset['Fa_ClassCoaDesc'], $debet, 0, - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_jurnaltx) { $this->db->trans_rollback(); @@ -1307,7 +1415,7 @@ class ReceiveItemPOAsset extends MY_Controller $jurnalTXID, $elem['PurchaseOrderNumber'], $elem['ReceiveOrderPoItemID'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_jurnaladdon) { $this->db->trans_rollback(); @@ -1331,7 +1439,7 @@ class ReceiveItemPOAsset extends MY_Controller $que_qtypo = $this->db->query($sql_qtypo, [$roID]); if (!$que_qtypo) { $this->db->trans_rollback(); - throw new Exception("[Error] get detail qty & price po", 1); + throw new Exception('[Error] get detail qty & price po', 1); } $data_po = $que_qtypo->row_array(); /* kalkulasi diskon per item */ @@ -1341,20 +1449,24 @@ class ReceiveItemPOAsset extends MY_Controller /* kalkulasi diskon prorata PO per item */ $diskon_po = doubleval($elem['DiscPORupiah']); if (doubleval($elem['DiscPOPercent']) != 0.00) { - $diskon_po = doubleval($data_po['totalAllPricePO']) * doubleval($elem['DiscPOPercent']) / 100; + $diskon_po = (doubleval($data_po['totalAllPricePO']) * doubleval($elem['DiscPOPercent'])) / 100; } - $diskon_proratapo = $diskon_po * (doubleval($elem['TotalAllPO'])) / doubleval($data_po['totalAllPricePO']); - $diskon_prorata_item = round((intval($elem['ReceiveOrderPoDetailQty']) / intval($elem['QtyAllPO'])) * $diskon_proratapo, 2); + $diskon_proratapo = + ($diskon_po * doubleval($elem['TotalAllPO'])) / doubleval($data_po['totalAllPricePO']); + $diskon_prorata_item = round( + (intval($elem['ReceiveOrderPoDetailQty']) / intval($elem['QtyAllPO'])) * $diskon_proratapo, + 2, + ); $total_diskonpo = round($total_diskonpo + $diskon_prorata_item, 2); $input_diskon = [$diskon, $diskon_prorata_item]; /* get account diskon */ - $sql_coadiskon = "SELECT * FROM coa WHERE coaAccountNo = ? LIMIT 1"; + $sql_coadiskon = 'SELECT * FROM coa WHERE coaAccountNo = ? LIMIT 1'; $que_coadiskon = $this->db->query($sql_coadiskon, ['2190100001']); if (!$que_coadiskon) { $this->db->trans_rollback(); - throw new Exception("[Error] failed get account diskon", 1); + throw new Exception('[Error] failed get account diskon', 1); } $coa_diskon = $que_coadiskon->row_array(); foreach ($input_diskon as $idx => $val) { @@ -1367,11 +1479,11 @@ class ReceiveItemPOAsset extends MY_Controller $coa_diskon['coaDescription'], 0, $val, - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_jurnaltx) { $this->db->trans_rollback(); - throw new Exception("[Error] failed insert jurnal tx diskon", 1); + throw new Exception('[Error] failed insert jurnal tx diskon', 1); } $jurnalTXID_diskon = $this->db->insert_id(); @@ -1380,45 +1492,44 @@ class ReceiveItemPOAsset extends MY_Controller $jurnalTXID_diskon, $elem['PurchaseOrderNumber'], $elem['ReceiveOrderPoItemID'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_jurnaladdon) { $this->db->trans_rollback(); - throw new Exception("[Error] failed insert jurnal addon diskon", 1); + throw new Exception('[Error] failed insert jurnal addon diskon', 1); } } /* save diskon prorata item */ - $sql_saveprorate = "UPDATE receive_order_po_detail SET + $sql_saveprorate = 'UPDATE receive_order_po_detail SET ReceiveOrderPoDetailDiskonPoProrata = ? - WHERE ReceiveOrderPoDetailID = ?"; + WHERE ReceiveOrderPoDetailID = ?'; $que_saveprorate = $this->db->query($sql_saveprorate, [ $diskon_prorata_item, - $elem['ReceiveOrderPoDetailID'] + $elem['ReceiveOrderPoDetailID'], ]); if (!$que_saveprorate) { $this->db->trans_rollback(); - throw new Exception("[Error] save diskon prorate", 1); + throw new Exception('[Error] save diskon prorate', 1); } - /* handling table stock */ - $sql_cekstock = "SELECT * + $sql_cekstock = 'SELECT * FROM stock s JOIN m_item i ON s.StockItemID = i.M_ItemID WHERE s.StockItemID = ? AND s.StockItemUnitID = ? AND s.StockWarehouseID = ? - AND i.M_ItemItem_CategoryID = ?"; + AND i.M_ItemItem_CategoryID = ?'; $que_cekstock = $this->db->query($sql_cekstock, [ $elem['ReceiveOrderPoItemID'], $elem['ReceiveOrderPoItemUnitID'], $data_ro['ReceiveOrderPoWarehouseID'], - $elem['M_ItemItem_CategoryID'] + $elem['M_ItemItem_CategoryID'], ]); if (!$que_cekstock) { $this->db->trans_rollback(); - throw new Exception("[Error] failed to check item exist in stock", 1); + throw new Exception('[Error] failed to check item exist in stock', 1); } $stock_exist = $que_cekstock->row_array(); @@ -1429,24 +1540,26 @@ class ReceiveItemPOAsset extends MY_Controller if (!empty($stock_exist)) { $stock_qty_end = $stock_qty_ori + intval($elem['ReceiveOrderPoDetailQty']); - $all_price = ($stock_qty_ori * $stock_price) + (intval($elem['ReceiveOrderPoDetailQty']) * doubleval($elem['ReceiveOrderPoDetailPrice'])); + $all_price = + ($stock_qty_ori * $stock_price) + + (intval($elem['ReceiveOrderPoDetailQty']) * doubleval($elem['ReceiveOrderPoDetailPrice'])); $avg_price = round($all_price / $stock_qty_end, 2); - $sql_update_stock = "UPDATE stock SET + $sql_update_stock = 'UPDATE stock SET StockItemPrice = ?, StockQty = ?, StockLastUpdated = NOW(), StockUserID = ? - WHERE StockID = ?"; + WHERE StockID = ?'; $que_update_stock = $this->db->query($sql_update_stock, [ $avg_price, $stock_qty_end, $user['M_UserID'], - $stock_ID + $stock_ID, ]); if (!$que_update_stock) { $this->db->trans_rollback(); - throw new Exception("[Error] failed to update stock", 1); + throw new Exception('[Error] failed to update stock', 1); } } else { $sql_insert_stock = "INSERT INTO stock ( @@ -1467,11 +1580,11 @@ class ReceiveItemPOAsset extends MY_Controller $elem['ReceiveOrderPoItemUnitID'], $elem['ReceiveOrderPoDetailPrice'], $elem['ReceiveOrderPoDetailQty'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_insert_stock) { $this->db->trans_rollback(); - throw new Exception("[Error] failed to insert stock", 1); + throw new Exception('[Error] failed to insert stock', 1); } $stock_ID = $this->db->insert_id(); @@ -1501,19 +1614,19 @@ class ReceiveItemPOAsset extends MY_Controller $stock_qty_ori, $elem['ReceiveOrderPoDetailQty'], $stock_qty_end, - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_stock_card) { $this->db->trans_rollback(); - throw new Exception("[Error] failed to insert stock card", 1); + throw new Exception('[Error] failed to insert stock card', 1); } /* insert stock log */ - $sql_stock = "SELECT * FROM stock WHERE StockID = ?"; + $sql_stock = 'SELECT * FROM stock WHERE StockID = ?'; $que_stock = $this->db->query($sql_stock, [$stock_ID]); if (!$que_stock) { $this->db->trans_rollback(); - throw new Exception("[Error] failed to cek latest stock", 1); + throw new Exception('[Error] failed to cek latest stock', 1); } $stock_latest = $que_stock->row_array(); @@ -1535,11 +1648,11 @@ class ReceiveItemPOAsset extends MY_Controller $stock_latest['StockStockNumber'], $stock_ID, $elem['ReceiveOrderPoDetailQty'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_stock_log) { $this->db->trans_rollback(); - throw new Exception("[Error] failed insert stock log", 1); + throw new Exception('[Error] failed insert stock log', 1); } } @@ -1558,7 +1671,7 @@ class ReceiveItemPOAsset extends MY_Controller $que_tx_ship = $this->db->query($sql_tx_ship, [$jurnalID, $ship_cost, $user['M_UserID']]); if (!$que_tx_ship) { $this->db->trans_rollback(); - throw new Exception("[Error] failed insert jurnal shipping", 1); + throw new Exception('[Error] failed insert jurnal shipping', 1); } $sql_rec_ship = "INSERT INTO receive_order_po_shipping ( @@ -1587,11 +1700,11 @@ class ReceiveItemPOAsset extends MY_Controller $que_rec_ship = $this->db->query($sql_rec_ship, []); if (!$que_rec_ship) { $this->db->trans_rollback(); - throw new Exception("[Error] failed insert table shipping", 1); + throw new Exception('[Error] failed insert table shipping', 1); } } - # INSERT jurnal tx for GRNI # + // INSERT jurnal tx for GRNI # $total_grni = round($total_debet - ($total_diskonitem + $total_diskonpo), 2) + $ship_cost; $sql_grni = "INSERT INTO jurnal_tx ( jurnalTxJurnalID, @@ -1605,7 +1718,7 @@ class ReceiveItemPOAsset extends MY_Controller $que_grni = $this->db->query($sql_grni, [ $jurnalID, $total_grni, - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_grni) { $this->db->trans_rollback(); @@ -1625,7 +1738,7 @@ class ReceiveItemPOAsset extends MY_Controller $jurnalID, $jurnalTXID_GRNI, $data_ro['ReceiveOrderPoNumber'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_addon_grni) { $this->db->trans_rollback(); @@ -1636,7 +1749,7 @@ class ReceiveItemPOAsset extends MY_Controller $this->generatePurchaseInvoice($user, $roID, $total_grni, $total_diskonpo); $this->db->trans_commit(); - $this->sys_ok("[Success] order received"); + $this->sys_ok('[Success] order received'); } catch (Exception $e) { $msg = '[Error] ' . $e->getMessage(); $code = $e->getCode(); @@ -1645,7 +1758,319 @@ class ReceiveItemPOAsset extends MY_Controller } else { $this->sys_error($msg); } - exit; + exit(); + } + } + + public function uploadAttachment() + { + try { + if (!$this->isLogin) { + throw new Exception('invalid token'); + } + + $this->db->trans_begin(); + $para = $this->sys_input; + $user = $this->sys_user; + + $basepath = '/home/one/project/accone/one-media/order-asset/'; + $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['ronumber'] . '.' . $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 receive_order_po_document ( + ReceiveOrderPoDocumentReceiveOrderPoID, + ReceiveOrderPoDocumentDate, + ReceiveOrderPoDocumentFile, + ReceiveOrderPoDocumentType, + ReceiveOrderPoDocumentIsActive, + ReceiveOrderPoDocumentCreated, + ReceiveOrderPoDocumentUserID + ) VALUES (?, NOW(), ?, ?, 'Y', NOW(), ?)"; + $que_insert = $this->db->query($sql_insert, [ + $para['roID'], + $filename, + 'aset', + $user['M_UserID'], + ]); + if (!$que_insert) { + $this->db->trans_rollback(); + throw new Exception('failed to insert data to table ro document', 1); + } + + $sql_contract = 'UPDATE purchase_order_asset_contract SET + PurchaseOrderAssetContractReceiveOrderPoID = ? + WHERE PurchaseOrderAssetContractID = ?'; + $que_contract = $this->db->query($sql_contract, [ + $para['roID'], + $para['contractID'], + ]); + if (!$que_contract) { + $this->db->trans_rollback(); + throw new Exception('failed insert roID to po asset contract', 1); + } + } else { + $error = $this->upload->display_errors(); + $this->db->trans_rollback(); + throw new Exception($error); + } + } + } + + $this->db->trans_commit(); + $this->sys_ok('[Success] upload attachment order asset'); + } catch (Exception $e) { + $msg = '[Error] ' . $e->getMessage(); + $code = $e->getCode(); + if ($code == 1) { + $this->sys_error_db($msg); + } else { + $this->sys_error($msg); + } + exit(); + } + } + + public function saveHandover() + { + try { + if (!$this->isLogin) { + throw new Exception('invalid token'); + } + + $this->db->trans_begin(); + $param = $this->sys_input; + $user = $this->sys_user; + + // Ambil data PurchaseRequestID # + $sql_get_prid = 'SELECT DISTINCT + pod.PurchaseOrderDetailPurchaseRequestID AS PurchaseRequestID + FROM receive_order_po_detail ropd + JOIN purchase_order_detail pod ON pod.PurchaseOrderDetailID = ropd.ReceiveOrderPoDetailPurchaseOrderDetailID + WHERE ropd.ReceiveOrderPoDetailReceiveOrderPoID = ? + AND pod.PurchaseOrderDetailPurchaseRequestID IS NOT NULL'; + $que_get_prid = $this->db->query($sql_get_prid, [$param['receiveOrderPoID']]); + if (!$que_get_prid) { + throw new Exception('query purchase request id from RO', 1); + } + $data_prid = $que_get_prid->row_array(); + + // insert handover # + $sql_insert_handover = "INSERT INTO asset_handover( + AssetHandoverPurchaseRequestID, + AssetHandoverReceiveOrderPoID, + AssetHandoverDate, + AssetHandoverM_RuanganID, + AssetHandoverToUserID, + AssetHandoverIsActive, + AssetHandoverCreated, + AssetHandoverUserID + ) VALUES(?,?,NOW(),?,?,'Y',NOW(),?)"; + $qry_insert_handover = $this->db->query($sql_insert_handover, [ + $data_prid['PurchaseRequestID'], + $param['receiveOrderPoID'], + $param['ruanganID'], + $param['staffID'], + $user['M_UserID'], + ]); + if (!$qry_insert_handover) { + throw new Exception('failed insert into table asset handover', 1); + } + $handoverID = $this->db->insert_id(); + + foreach ($param['item'] as $key => $item) { + $qty_invnt = intval($item['serahQty']); + for ($i = 0; $i < $qty_invnt; $i++) { + /* generate barcode number each asset item */ + $noBarcode = $this->generateNoBarcode( + $user, + $param['ruanganID'], + 'BNP', + $item['ReceiveOrderPoItemID'], + ); + $sql_insert_barcode = "INSERT INTO t_barcode_barang( + T_BarcodeBarangReceiveOrderPoID, + T_BarcodeBarangReceiveOrderPoDetailID, + T_BarcodeBarangRefType, + T_BarcodeBarangM_ItemID, + T_BarcodeBarangItemUnitID, + T_BarcodeBarangNumber, + T_BarcodeBarangM_RuanganID, + T_BarcodeBarangM_BranchID, + T_BarcodeBarangIsActive, + T_BarcodeBarangUserID, + T_BarcodeBarangCreated + ) VALUES(?,?,'PO',?,?,?,?,?,'Y',?,NOW())"; + $que_insert_barcode = $this->db->query($sql_insert_barcode, [ + $param['receiveOrderPoID'], + $item['ReceiveOrderPoDetailID'], + $item['ReceiveOrderPoItemID'], + $item['ReceiveOrderPoItemUnitID'], + $noBarcode, + $param['ruanganID'], + $user['M_BranchID'], + $user['M_UserID'], + ]); + if (!$que_insert_barcode) { + throw new Exception('failed insert into t barcode barang', 1); + } + $barcodeID = $this->db->insert_id(); + + // check if item already in stock # + $sql_cekstock = "SELECT StockID + FROM stock + JOIN warehouse ON WarehouseID = StockWarehouseID + AND WarehouseIsActive = 'Y' + WHERE WarehouseM_BranchID = ? + AND StockItemID = ? + AND StockItemUnitID = ?"; + $que_cekstock = $this->db->query($sql_cekstock, [ + $user['M_BranchID'], + $item['ReceiveOrderPoItemID'], + $item['ReceiveOrderPoItemUnitID'], + ]); + if (!$que_cekstock) { + throw new Exception('failed check stock exist/not', 1); + } + $stockID = $que_cekstock->row_array()['StockID']; + + /* insert into table stock asset */ + $sql_stockasset = 'INSERT INTO stock_asset ( + StockAssetStockID, + StockAssetRuanganID, + StockAssetBarcode, + StockAssetCabangID, + StockAssetCreatedUserID + ) VALUES (?,?,?,?,?)'; + $que_stockasset = $this->db->query($sql_stockasset, [ + $stockID, + $param['ruanganID'], + $noBarcode, + $user['M_BranchID'], + $user['M_UserID'], + ]); + if (!$que_stockasset) { + throw new Exception('failed insert into stock asset', 1); + } + + /* insert each asset handover detail */ + $sql_insert_handover_detail = "INSERT INTO asset_handover_detail( + AssetHandoverDetailAssetHandoverID, + AssetHandoverDetailReceiveOrderPoDetailID, + AssetHandoverDetailT_BarcodeBarangID, + AssetHandoverDetailM_ItemID, + AssetHandoverDetailIsActive, + AssetHandoverDetailCreated, + AssetHandoverDetailUserID + ) VALUES(?,?,?,?,'Y',NOW(),?)"; + $que_insert_handover_detail = $this->db->query($sql_insert_handover_detail, [ + $handoverID, + $item['ReceiveOrderPoDetailID'], + $barcodeID, + $item['ReceiveOrderPoItemID'], + $user['M_UserID'], + ]); + if (!$que_insert_handover_detail) { + throw new Exception('failed insert asset handover detail', 1); + } + } + } + + /* check if all received asset are all handed over */ + $sql_cek_allhanded = "SELECT + rod.ReceiveOrderPoDetailID, + CASE + WHEN COALESCE(ahd_count.InsertedQty, 0) = rod.ReceiveOrderPoDetailQty THEN 'Y' + ELSE 'N' + END AS isHandoverDone + FROM receive_order_po_detail rod + JOIN m_item mi ON mi.M_ItemID = rod.ReceiveOrderPoItemID + LEFT JOIN ( + SELECT + AssetHandoverDetailReceiveOrderPoDetailID, + COUNT(*) AS InsertedQty + FROM asset_handover_detail ahd + JOIN asset_handover ah + ON ahd.AssetHandoverDetailAssetHandoverID = ah.AssetHandoverID + AND ah.AssetHandoverIsActive = 'Y' + WHERE ahd.AssetHandoverDetailIsActive = 'Y' + AND ah.AssetHandoverReceiveOrderPoID = ? + GROUP BY AssetHandoverDetailReceiveOrderPoDetailID + ) ahd_count + ON ahd_count.AssetHandoverDetailReceiveOrderPoDetailID = rod.ReceiveOrderPoDetailID + WHERE rod.ReceiveOrderPoDetailReceiveOrderPoID = ? + AND rod.ReceiveOrderPoDetailIsActive = 'Y'"; + $que_cek_allhanded = $this->db->query($sql_cek_allhanded, [ + $param['receiveOrderPoID'], + $param['receiveOrderPoID'], + ]); + if (!$que_cek_allhanded) { + throw new Exception('failed cek data are all handed over', 1); + } + $cek_allhanded = $que_cek_allhanded->result_array(); + + $isAllHanded = count($cek_allhanded) > 0; + foreach ($cek_allhanded as $key => $value) { + if ($value['isHandoverDone'] != 'Y') { + $isAllHanded = false; + break; + } + } + + /* update status handover di receive order po */ + if ($isAllHanded) { + $sql_update_ro = "UPDATE receive_order_po SET + ReceiveOrderPoIsHandover = 'Y', + ReceiveOrderPoLastUpdated = NOW(), + ReceiveOrderPoLastUpdatedUserID = ? + WHERE ReceiveOrderPoID = ?"; + $que_update_ro = $this->db->query($sql_update_ro, [ + $user['M_UserID'], + $param['receiveOrderPoID'], + ]); + if (!$que_update_ro) { + throw new Exception('failed update status are all handed over di RO', 1); + } + } + + $this->db->trans_commit(); + $this->sys_ok('[Success] Berhasil menyimpan data serah terima barang'); + } catch (Exception $e) { + $this->db->trans_rollback(); + $msg = '[Error] ' . $e->getMessage(); + $code = $e->getCode(); + if ($code == 1) { + $this->sys_error_db($msg); + } else { + $this->sys_error($msg); + } + exit(); } } @@ -1653,7 +2078,7 @@ class ReceiveItemPOAsset extends MY_Controller { $num_pi = $this->generateNoLogistik($user, 'PI'); - # prepare data # + // prepare data # $sql_dataro = "SELECT DISTINCT receive_order_po.* , PurchaseOrderID, @@ -1695,20 +2120,20 @@ class ReceiveItemPOAsset extends MY_Controller } $detail_ro = $que_detailro->result_array(); - # INSERT header supplier invoice # + // INSERT header supplier invoice # $due_date = new DateTime($data_ro['ReceiveOrderPoIDate']); $due_date->add(new DateInterval('P7D')); $due_date = $due_date->format('Y-m-d'); - $subtotal = round(($grni + $diskonPO), 2); + $subtotal = round($grni + $diskonPO, 2); - $donumber = "-"; + $donumber = '-'; if ($data_ro['ReceiveOrderPoDONumber'] != '') { $donumber = $data_ro['ReceiveOrderPoDONumber']; } - $addedtax = round(($grni + $data_ro['tax_amount']), 2); - $grandtotal = round(($addedtax - $data_ro['downpayment_amount']), 2); + $addedtax = round($grni + $data_ro['tax_amount'], 2); + $grandtotal = round($addedtax - $data_ro['downpayment_amount'], 2); $sql_insert_pi = "INSERT INTO supplier_invoice ( SupplierInvoiceNumber, SupplierInvoiceReceiveOrderPoID, @@ -1746,7 +2171,7 @@ class ReceiveItemPOAsset extends MY_Controller $grandtotal, $data_ro['ReceiveOrderPoNote'], $user['M_UserID'], - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_insert_pi) { $this->db->trans_rollback(); @@ -1754,8 +2179,8 @@ class ReceiveItemPOAsset extends MY_Controller } $Pinvoice_ID = $this->db->insert_id(); - # INSERT supplier invoice detail # - $sql_ins_itemPI = "INSERT INTO supplier_invoice_detail ( + // INSERT supplier invoice detail # + $sql_ins_itemPI = 'INSERT INTO supplier_invoice_detail ( SupplierInvoiceDetailSupplierInvoiceID, SupplierInvoiceDetailPurchaseOrderID, SupplierInvoiceDetailPurchaseOrderSummaryID, @@ -1774,7 +2199,7 @@ class ReceiveItemPOAsset extends MY_Controller SupplierInvoiceDetailTotal, SupplierInvoiceDetailUnpaid, SupplierInvoiceDetailCreatedUserID - ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'; foreach ($detail_ro as $key => $elem) { $itemprice = doubleval($elem['ReceiveOrderPoDetailPrice']) - doubleval($elem['DiscountPerItem']); $totalprice = round($itemprice * intval($elem['ReceiveOrderPoDetailQty']), 2); @@ -1797,7 +2222,7 @@ class ReceiveItemPOAsset extends MY_Controller $elem['DiscountPerItem'], $totalprice, $totalprice, - $user['M_UserID'] + $user['M_UserID'], ]); if (!$que_ins_itemPI) { $this->db->trans_rollback(); @@ -1806,99 +2231,150 @@ class ReceiveItemPOAsset extends MY_Controller } } - public function uploadAttachment() + private function generateNoLogistik($user, $typeLogistik): string { - try { - if (!$this->isLogin) { - throw new Exception('invalid token'); - } + $areaid = $user['loginLevel'] == 'regional' ? $user['S_RegionalID'] : $user['M_BranchID']; + $areatype = $user['loginLevel'] == 'regional' ? 'R' : 'B'; + $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'); + exit(); + } - $this->db->trans_begin(); - $para = $this->sys_input; - $user = $this->sys_user; + $usrdivisiID = $queusrdivisi->row_array()['M_UserDivisionDivisionID']; + if (!isset($usrdivisiID)) { + $this->db->trans_rollback(); + $this->sys_error_db('[Error] user divisi id null'); + exit(); + } - $basepath = "/home/one/project/accone/one-media/order-asset/"; - $year = date("Y"); - $targetpath = $basepath . $year . "/"; + $sqlnum = 'SELECT `fn_penomoran`(?, ?, ?, ?, ?, ?) AS numpd;'; + $quenum = $this->db->query($sqlnum, [$typeLogistik, $usrdivisiID, $areatype, $areaid, 'SM', 'Y']); + if (!$quenum) { + $this->db->trans_rollback(); + $this->sys_error_db('[Error] generate number PI'); + exit(); + } - if (!is_dir($targetpath)) { - mkdir($targetpath, 0755, true); - } + $numPL = $quenum->row_array()['numpd']; + if (!isset($numPL)) { + $this->db->trans_rollback(); + $this->sys_error_db('[Error] number PI null'); + exit(); + } - $config['upload_path'] = $targetpath; - $config['allowed_types'] = 'jpg|jpeg|png'; - $config['max_size'] = '10000'; - $count = count($_FILES['files']['name']); - $this->load->library('upload', $config); + return $numPL; + } - 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]; + private function generateNoBarcode($user, $lokasiID, $typeBarcode, $itemid) + { + $branchid = $user['loginLevel'] == 'branch' ? $user['M_BranchID'] : 0; - $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); - $new_filename = "PO" . date("YmdHis") . "_" . $para['ronumber'] . "." . $ext; - $config['file_name'] = $new_filename; - $this->upload->initialize($config); + if ($user['loginlevel'] == 'regional') { + $this->db->trans_rollback(); + $this->sys_error('Tidak bisa generare No Barcode, anda login sebagai regional'); + exit(); + } - if ($this->upload->do_upload('file')) { - $upload_data = $this->upload->data(); - $filename = $upload_data['file_name']; + // -- numtype = tipe numbering + // -- itemid = id item inventaris/asset + // -- branchid = id cabang + // -- ruanganid = id ruangan di cabang - $sql_insert = "INSERT INTO receive_order_po_document ( - ReceiveOrderPoDocumentReceiveOrderPoID, - ReceiveOrderPoDocumentDate, - ReceiveOrderPoDocumentFile, - ReceiveOrderPoDocumentType, - ReceiveOrderPoDocumentIsActive, - ReceiveOrderPoDocumentCreated, - ReceiveOrderPoDocumentUserID - ) VALUES (?, NOW(), ?, ?, 'Y', NOW(), ?)"; - $que_insert = $this->db->query($sql_insert, [ - $para['roID'], - $filename, - 'aset', - $user['M_UserID'] - ]); - if (!$que_insert) { - $this->db->trans_rollback(); - throw new Exception('failed to insert data to table ro document', 1); - } + $sqlnum = 'SELECT `fn_num_nonpersediaan`(?, ?, ?, ?) AS numpd;'; + $quenum = $this->db->query($sqlnum, [$typeBarcode, $itemid, $branchid, $lokasiID]); - $sql_contract = "UPDATE purchase_order_asset_contract SET - PurchaseOrderAssetContractReceiveOrderPoID = ? - WHERE PurchaseOrderAssetContractID = ?"; - $que_contract = $this->db->query($sql_contract, [ - $para['roID'], - $para['contractID'] - ]); - if (!$que_contract) { - $this->db->trans_rollback(); - throw new Exception('failed insert roID to po asset contract', 1); - } - } else { - $error = $this->upload->display_errors(); - $this->db->trans_rollback(); - throw new Exception($error); - } - } - } + if (!$quenum) { + $this->db->trans_rollback(); + $this->sys_error_db('[Error] generate number Barcode'); + exit(); + } - $this->db->trans_commit(); - $this->sys_ok("[Success] upload attachment order asset"); - } catch (Exception $e) { - $msg = '[Error] ' . $e->getMessage(); - $code = $e->getCode(); - if ($code == 1) { - $this->sys_error_db($msg); - } else { - $this->sys_error($msg); - } - exit; + $numPL = $quenum->row_array()['numpd']; + if (!isset($numPL)) { + $this->db->trans_rollback(); + $this->sys_error_db('[Error] number Barcode null'); + exit(); + } + + return $numPL; + } + + private function insertUserActivty($id, $typePL, $status, $userID, $desc = '') + { + $sql = 'INSERT INTO user_activity ( + UserActivityCode, + UserActivityStatus, + UserActivityDescription, + UserActivityRefID, + UserActivityUserID, + UserActivityCreated + ) VALUES (?, ?, ?, ?, ?, NOW())'; + $que = $this->db->query($sql, [$typePL, $status, $desc, $id, $userID]); + if (!$que) { + $this->sys_error_db('[Error] inserting user activity'); + $this->db->trans_rollback(); + exit(); + } + } + + private function insertLogReceiveOrderPO($id, $type, $dataBefore, $dataAfter, $userID, $desc = '') + { + $sql = 'INSERT INTO acc_one_log.receive_order_po_log ( + ReceiveOrderPoLogReceiveOrderPoID, + ReceiveOrderPoLogType, + ReceiveOrderPoLogDesc, + ReceiveOrderPoLogJsonBefore, + ReceiveOrderPoLogJsonAfter, + ReceiveOrderPoLogUserID, + ReceiveOrderPoLogCreated + ) VALUES (?, ?, ?, ?, ?, ?, NOW())'; + $que = $this->db->query($sql, [ + $id, + $type, + $desc, + !empty($dataBefore) ? json_encode($dataBefore) : '', + !empty($dataAfter) ? json_encode($dataAfter) : '', + $userID, + ]); + if (!$que) { + $this->db->trans_rollback(); + $this->sys_error_db('[Error] inserting log into insert LogReceiveOrderPo'); + exit(); + } + } + + private function insertLogPoItemReceive($id, $type, $roID, $dataBefore, $dataAfter, $userID, $desc = '') + { + $sql = 'INSERT INTO acc_one_log.po_item_receive_log ( + PoItemReceiveLogPoItemReceiveID, + PoItemReceiveLogReceiveOrderPoID, + PoItemReceiveLogType, + PoItemReceiveLogDesc, + PoItemReceiveLogJsonBefore, + PoItemReceiveLogJsonAfter, + PoItemReceiveLogUserID, + PoItemReceiveLogCreated + ) VALUES (?, ?, ?, ?, ?, ?, ?, NOW())'; + $que = $this->db->query($sql, [ + $id, + $roID, + $type, + $desc, + !empty($dataBefore) ? json_encode($dataBefore) : '', + !empty($dataAfter) ? json_encode($dataAfter) : '', + $userID, + ]); + if (!$que) { + $this->sys_error_db('[Error] inserting log po item receive'); + $this->db->trans_rollback(); + exit(); } } } diff --git a/application/controllers/mockup/receive-item-po/ReceiveItemPoInventaris.php b/application/controllers/mockup/receive-item-po/ReceiveItemPoInventaris.php index 18df7ba..b1b7157 100644 --- a/application/controllers/mockup/receive-item-po/ReceiveItemPoInventaris.php +++ b/application/controllers/mockup/receive-item-po/ReceiveItemPoInventaris.php @@ -73,7 +73,7 @@ class ReceiveItemPoInventaris extends MY_Controller $qry = $this->db->query($sql, [$user['M_BranchID'], $search]); if (!$qry) { - $this->sys_error_db("[Error] query listing ruangan");; + $this->sys_error_db("[Error] query listing ruangan"); exit; }