add progress

This commit is contained in:
2026-06-03 17:10:49 +07:00
parent dc4e16329f
commit 86d147945b
2 changed files with 322 additions and 333 deletions

View File

@@ -39,14 +39,14 @@ class PurchaseRequestNonPersediaan extends MY_Controller
$params[] = $status;
$params[] = '%' . $search . '%';
$sql = "SELECT M_UserLocationS_RegionalID as S_RegionalID,
$sql = "SELECT
M_UserLocationS_RegionalID as S_RegionalID,
IFNULL(M_BranchCode, '') as M_BranchCode,
IFNULL(M_BranchName, '') as M_BranchName
FROM m_userlocation
LEFT JOIN m_branch ON M_BranchID = M_UserLocationM_BranchID
WHERE
M_UserLocationIsActive = 'Y' AND
M_UserLocationM_UserID = ?";
WHERE M_UserLocationIsActive = 'Y'
AND M_UserLocationM_UserID = ?";
$exec = $this->db->query($sql, [$userId]);
if (!$exec) {
$this->sys_error_db("select user location", $this->db);
@@ -74,12 +74,11 @@ class PurchaseRequestNonPersediaan extends MY_Controller
$sql = "SELECT COUNT(*) as total
FROM purchase_request
JOIN s_regional ON S_RegionalID = PurchaseRequestS_RegionalID
WHERE
PurchaseRequestIsActive = 'Y' AND
PurchaseRequestItemCategoryID <> '1' AND
( PurchaseRequestDate BETWEEN ? AND ? ) AND
( PurchaseRequestStatus = ? OR ? = '' ) AND
( PurchaseRequestNumber LIKE ?)
WHERE PurchaseRequestIsActive = 'Y'
AND PurchaseRequestItemCategoryID <> '1'
AND ( PurchaseRequestDate BETWEEN ? AND ? )
AND ( PurchaseRequestStatus = ? OR ? = '' )
AND ( PurchaseRequestNumber LIKE ?)
$filterBranch
$filterRegional";
@@ -96,7 +95,8 @@ class PurchaseRequestNonPersediaan extends MY_Controller
$params[] = $offset;
$params[] = $pageSize;
$sql = "SELECT DISTINCT PurchaseRequestID as prId,
$sql = "SELECT DISTINCT
PurchaseRequestID as prId,
PurchaseRequestNumber as prNumber,
PurchaseRequestDate as prDate,
PurchaseRequestStatus as prStatus,
@@ -125,15 +125,13 @@ class PurchaseRequestNonPersediaan extends MY_Controller
JOIN m_user requestedBy ON requestedBy.M_UserID = PurchaseRequestRequestedBy
LEFT JOIN m_user approvedBy ON approvedBy.M_UserID = PurchaseRequestApprovedBy
LEFT JOIN m_branch ON M_BranchCode = PurchaseRequestM_BranchCode
LEFT JOIN asset_handover ah
ON ah.AssetHandoverPurchaseRequestID = PurchaseRequestID
LEFT JOIN asset_handover ah ON ah.AssetHandoverPurchaseRequestID = PurchaseRequestID
AND ah.AssetHandoverIsActive = 'Y'
WHERE
PurchaseRequestIsActive = 'Y' AND
PurchaseRequestItemCategoryID <> '1' AND
( PurchaseRequestDate BETWEEN ? AND ? ) AND
( PurchaseRequestStatus = ? OR ? = '' ) AND
( PurchaseRequestNumber LIKE ? )
WHERE PurchaseRequestIsActive = 'Y'
AND PurchaseRequestItemCategoryID <> '1'
AND ( PurchaseRequestDate BETWEEN ? AND ? )
AND ( PurchaseRequestStatus = ? OR ? = '' )
AND ( PurchaseRequestNumber LIKE ? )
$filterBranch
$filterRegional
ORDER BY PurchaseRequestID DESC
@@ -144,16 +142,14 @@ class PurchaseRequestNonPersediaan extends MY_Controller
$this->sys_error_db("select purchase request", $this->db);
exit;
}
//echo $this->db->last_query();
//exit;
$rows = $exec->result_array();
$query = $this->db->last_query();
$result = array(
"total" => $totalPage,
"totalFilter" => $totalCount,
"records" => $rows
"records" => $rows,
"db" => $query
);
$this->sys_ok($result);

View File

@@ -85,6 +85,63 @@ class ReceiveItemPoInventaris extends MY_Controller
}
}
function getInventarisBelumSerah()
{
try {
if (!$this->isLogin) {
throw new Exception('invalid token');
}
$para = $this->sys_input;
$sql = "SELECT
rod.ReceiveOrderPoDetailID,
rod.ReceiveOrderPoItemID,
rod.ReceiveOrderPoItemUnitID,
pod.PurchaseOrderDetailPurchaseRequestID AS PurchaseRequestID,
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 purchase_order_detail pod ON pod.PurchaseOrderDetailID = rod.ReceiveOrderPoDetailPurchaseOrderDetailID
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 inventory 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;
}
}
function getPurchaseOrder()
{
try {
@@ -241,15 +298,13 @@ class ReceiveItemPoInventaris extends MY_Controller
PoItemReceiveQty as originalQty,
PoItemReceiveQtyReceived as receivedQty,
0 as qty,
PoItemReceiveQty - PurchaseOrderSummaryQtyReceived AS qtyRest,
PoItemReceiveQty - PoItemReceiveQtyReceived AS qtyRest,
PoItemReceivePrice,
'N' as alreadySave
FROM po_item_receive
JOIN purchase_order ON PoItemReceivePurchaseOrderID = PurchaseOrderID
AND PurchaseOrderIsActive = 'Y'
AND PoItemReceiveIsActive = 'Y'
-- AND (PoItemReceiveQty - PoItemReceiveQtyReceived) > 0
JOIN purchase_order_summary ON PurchaseOrderSummaryID = PoItemReceivePurchaseOrderSummaryID
JOIN warehouse ON PoItemReceiveWarehouseID = WarehouseID
AND WarehouseIsActive = 'Y'
JOIN m_item ON PoItemReceiveItemID = M_ItemID
@@ -487,9 +542,6 @@ class ReceiveItemPoInventaris extends MY_Controller
THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', S_RegionalName)
ELSE ''
END WarehouseName,
M_RuanganID,
M_RuanganName,
M_RuanganCode,
ReceiveOrderPoConfirmed,
DATE_FORMAT(ReceiveOrderPoConfirmedDate, '%d-%m-%Y %H:%i') AS ReceiveOrderPoConfirmedDate,
M_UserUsername AS ReceiveOrderPoConfirmedUserName
@@ -501,7 +553,6 @@ class ReceiveItemPoInventaris extends MY_Controller
LEFT JOIN m_branch ON WarehouseM_BranchID = M_BranchID
AND M_BranchIsActive = 'Y'
LEFT JOIN m_user ON ReceiveOrderPoConfirmedUserID = M_UserID
LEFT JOIN m_ruangan ON M_RuanganM_BranchID = M_BranchID
WHERE ReceiveOrderPoIsActive = 'Y'
AND (ReceiveOrderPoNumber LIKE ? OR ReceiveOrderPoDONumber LIKE ?)
AND ReceiveOrderPoIDate BETWEEN DATE(?) AND DATE(?)
@@ -511,7 +562,7 @@ class ReceiveItemPoInventaris extends MY_Controller
SELECT DISTINCT ReceiveOrderPoDetailReceiveOrderPoID
FROM receive_order_po_detail
JOIN purchase_order ON ReceiveOrderPoDetailPurchaseOrderID = PurchaseOrderID
WHERE PurchaseOrderItemCategoryID IN (1, 4)
WHERE PurchaseOrderItemCategoryID IN (1,3,4)
AND ReceiveOrderPoDetailIsActive = 'Y'
)
ORDER BY ReceiveOrderPoID DESC";
@@ -542,7 +593,8 @@ class ReceiveItemPoInventaris extends MY_Controller
$records = $quedata->result_array();
foreach ($records as $key => $value) {
$sql = "SELECT ReceiveOrderPoDocumentID,
$sql = "SELECT
ReceiveOrderPoDocumentID,
ReceiveOrderPoDocumentDate,
ReceiveOrderPoDocumentFile
FROM receive_order_po_document
@@ -635,20 +687,15 @@ class ReceiveItemPoInventaris extends MY_Controller
u.M_UserID,
u.M_UserUsername
FROM receive_order_po ro
JOIN receive_order_po_detail rod
ON rod.ReceiveOrderPoDetailReceiveOrderPoID = ro.ReceiveOrderPoID
JOIN receive_order_po_detail rod ON rod.ReceiveOrderPoDetailReceiveOrderPoID = ro.ReceiveOrderPoID
AND rod.ReceiveOrderPoDetailIsActive = 'Y'
JOIN purchase_order_detail pod
ON pod.PurchaseOrderDetailID = rod.ReceiveOrderPoDetailPurchaseOrderDetailID
JOIN purchase_order_detail pod ON pod.PurchaseOrderDetailID = rod.ReceiveOrderPoDetailPurchaseOrderDetailID
AND pod.PurchaseOrderDetailIsActive = 'Y'
JOIN purchase_request pr
ON pr.PurchaseRequestID = pod.PurchaseOrderDetailPurchaseRequestID
JOIN purchase_request pr ON pr.PurchaseRequestID = pod.PurchaseOrderDetailPurchaseRequestID
AND pr.PurchaseRequestIsActive = 'Y'
JOIN m_user u
ON u.M_UserID = pr.PurchaseRequestRequestedBy
JOIN m_user u ON u.M_UserID = pr.PurchaseRequestRequestedBy
AND u.M_UserIsActive = 'Y'
WHERE
ro.ReceiveOrderPoID = ?
WHERE ro.ReceiveOrderPoID = ?
AND ro.ReceiveOrderPoIsActive = 'Y'";
$que = $this->db->query($sql, [$param['ROID']]);
} else {
@@ -928,43 +975,6 @@ class ReceiveItemPoInventaris extends MY_Controller
$RODetailID = $this->db->insert_id();
// if (intval($obj['qty']) > 0) {
// $qty = intval($obj['qty']);
// for ($i = 0; $i < $qty; $i++) {
// # generate nomor barcode #
// $noBarcode = $this->generateNoBarcode($user, $param['lokasiID'], 'BNP', $obj['M_ItemID']);
// # INSERT INTO t_barcode_barang #
// $sqlInsertBarcode = "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())";
// $qryInsertBarcode = $this->db->query($sqlInsertBarcode, array(
// $roID,
// $RODetailID,
// $obj['M_ItemID'],
// $obj['ItemUnitID'],
// $noBarcode,
// $param['lokasiID'],
// $user['M_BranchID'],
// $user['M_UserID']
// ));
// if (!$qryInsertBarcode) {
// $this->db->trans_rollback();
// $this->sys_error_db("[Error] insert data barcode item");
// exit;
// }
// }
// }
# INSERT INTO receive_order_po_inspeksi #
$inspeksi = $obj['inspeksi_item'];
$sqlInspeksi = "INSERT INTO receive_order_po_inspeksi (
@@ -1227,51 +1237,6 @@ class ReceiveItemPoInventaris extends MY_Controller
exit;
}
if (intval($obj['qty']) > 0) {
$qty = intval($obj['qty']);
for ($i = 0; $i < $qty; $i++) {
# INSERT INTO t_barcode_barang #
$barcode_item = $obj['barcode_item'];
foreach ($barcode_item as $key => $barcode) {
# generate nomor barcode #
$noBarcode = $this->generateNoBarcode($user, $param['lokasiID'], 'BNP', $obj['M_ItemID']);
$sqlInsertBarcode = "UPDATE t_barcode_barang SET
T_BarcodeBarangReceiveOrderPoID = ?,
T_BarcodeBarangReceiveOrderPoDetailID = ?,
T_BarcodeBarangRefType = 'PO',
T_BarcodeBarangM_ItemID = ?,
T_BarcodeBarangItemUnitID = ?,
T_BarcodeBarangNumber = ?,
T_BarcodeBarangM_RuanganID = ?,
T_BarcodeBarangM_BranchID = ?,
T_BarcodeBarangIsActive = 'Y',
T_BarcodeBarangUserID = ?,
T_BarcodeBarangLastUpdated = NOW()
WHERE T_BarcodeBarangID = ?";
$qryInsertBarcode = $this->db->query($sqlInsertBarcode, array(
$param['ReceiveOrderID'],
$obj['ReceiveOrderPoDetailID'],
$obj['M_ItemID'],
$obj['ItemUnitID'],
$noBarcode,
$param['lokasiID'],
$user['M_BranchID'],
$user['M_UserID'],
$barcode['T_BarcodeBarangID']
));
if (!$qryInsertBarcode) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update data barcode item", $this->db);
exit;
}
}
}
}
# update form inspeksi item #
$inspeksi = $obj['inspeksi_item'];
$sql_inspeksi = "UPDATE receive_order_po_inspeksi SET
@@ -1408,43 +1373,6 @@ class ReceiveItemPoInventaris extends MY_Controller
}
$ro_detail_ID = $this->db->insert_id();
if (intval($obj['qty']) > 0) {
$qty = intval($obj['qty']);
for ($i = 0; $i < $qty; $i++) {
# generate nomor barcode #
$noBarcode = $this->generateNoBarcode($user, $param['lokasiID'], 'BNP', $obj['M_ItemID']);
# INSERT INTO t_barcode_barang #
$sqlInsertBarcode = "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())";
$qryInsertBarcode = $this->db->query($sqlInsertBarcode, array(
$param['ReceiveOrderID'],
$ro_detail_ID,
$obj['M_ItemID'],
$obj['ItemUnitID'],
$noBarcode,
$param['lokasiID'],
$user['M_BranchID'],
$user['M_UserID']
));
if (!$qryInsertBarcode) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert data barcode item");
exit;
}
}
}
# INSERT form inspeksi item #
$inspekitem = $obj['inspeksi_item'];
$sql_insert_inspeksi = " INSERT INTO receive_order_po_inspeksi (
@@ -2736,8 +2664,7 @@ class ReceiveItemPoInventaris extends MY_Controller
$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
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']]);
@@ -2748,6 +2675,7 @@ class ReceiveItemPoInventaris extends MY_Controller
}
$data_prid = $que_get_prid->row_array();
foreach ($param['item'] as $key => $item) {
# insert handover #
$sql_insert_handover = "INSERT INTO asset_handover(
AssetHandoverPurchaseRequestID,
@@ -2757,9 +2685,10 @@ class ReceiveItemPoInventaris extends MY_Controller
AssetHandoverToUserID,
AssetHandoverIsActive,
AssetHandoverCreated,
AssetHandoverUserID) VALUES(?,?,NOW(),?,?,'Y',NOW(),?)";
AssetHandoverUserID
) VALUES(?,?,NOW(),?,?,'Y',NOW(),?)";
$qry_insert_handover = $this->db->query($sql_insert_handover, [
$data_prid['PurchaseRequestID'],
$item['PurchaseRequestID'],
$param['receiveOrderPoID'],
$param['ruanganID'],
$param['staffID'],
@@ -2770,41 +2699,59 @@ class ReceiveItemPoInventaris extends MY_Controller
$this->sys_error_db("[Error] insert asset handover");
exit;
}
$handoverID = $this->db->insert_id();
# ambil data barcode #
$sql_get_barcode = "SELECT
ropd.ReceiveOrderPoDetailID,
ropd.ReceiveOrderPoItemID AS M_ItemID,
bb.T_BarcodeBarangID
FROM receive_order_po_detail ropd
JOIN t_barcode_barang bb
ON bb.T_BarcodeBarangReceiveOrderPoDetailID = ropd.ReceiveOrderPoDetailID
AND bb.T_BarcodeBarangIsActive = 'Y'
WHERE ropd.ReceiveOrderPoDetailReceiveOrderPoID = ?";
$que_get_barcode = $this->db->query($sql_get_barcode, [$param['receiveOrderPoID']]);
if (!$que_get_barcode) {
$qty_invnt = intval($item['serahQty']);
for ($i = 0; $i < $qty_invnt; $i++) {
# generate barcode number each inventory 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) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] get barcode barang from RO Detail");
$this->sys_error_db("[Error] insert no barcode invetaris");
exit;
}
$barcodes = $que_get_barcode->result_array();
$barcodeID = $this->db->insert_id();
# insert handover detail #
foreach ($barcodes as $key => $value) {
# insert each inventory handover detail #
$sql_insert_handover_detail = "INSERT INTO asset_handover_detail(
AssetHandoverDetailAssetHandoverID,
AssetHandoverDetailReceiveOrderPoDetailID,
AssetHandoverDetailT_BarcodeBarangID,
AssetHandoverDetailM_ItemID,
AssetHandoverDetailIsActive,
AssetHandoverDetailCreated,
AssetHandoverDetailUserID) VALUES(?,?,?,'Y',NOW(),?)";
AssetHandoverDetailUserID
) VALUES(?,?,?,?,'Y',NOW(),?)";
$que_insert_handover_detail = $this->db->query($sql_insert_handover_detail, [
$handoverID,
$value['T_BarcodeBarangID'],
$value['M_ItemID'],
$item['ReceiveOrderPoDetailID'],
$barcodeID,
$item['ReceiveOrderPoItemID'],
$user['M_UserID']
]);
if (!$que_insert_handover_detail) {
@@ -2813,8 +2760,53 @@ class ReceiveItemPoInventaris extends MY_Controller
exit;
}
}
}
# check if all received inventaris 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) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] cek data all handed over");
exit;
}
$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(),
@@ -2829,6 +2821,7 @@ class ReceiveItemPoInventaris extends MY_Controller
$this->sys_error_db("[Error] update status handover di RO");
exit;
}
}
$this->db->trans_commit();
$this->sys_ok("[Success] Berhasil menyimpan data serah terima barang");