Files
be-accone/application/controllers/mockup/mutasi/HandoverMutasi.php

1580 lines
64 KiB
PHP

<?php
class HandoverMutasi extends MY_Controller
{
var $db;
public function index()
{
echo "Handover Mutasi API";
}
public function __construct()
{
parent::__construct();
}
function search()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$prm = $this->sys_input;
$user = $this->sys_user;
$start_date = $prm['start_date'];
$end_date = $prm['end_date'];
$search = '%' . $prm['search'] . '%';
$page = 0;
$limit = 15;
if ($prm['current_page'] > 0) {
$page = ($prm['current_page'] - 1) * $limit;
}
$status = $prm['status'];
$status_rm = "";
if ($status != "") {
$status_rm .= " AND MutasiRequestStatus = '{$status}'";
}
$sql = "SELECT DISTINCT MutasiRequestID,
MutasiRequestDate,
MutasiRequestNumber,
MutasiRequestTotalValue,
MutasiRequestStatus,
MutasiRequestNote,
MutasiRequestIsVerif,
MutasiRequestVerifUserID,
MutasiRequestVerifDate,
MutasiRequestIsApproved,
MutasiRequestApprovedUserID,
MutasiRequestApprovedDate,
itemCategoryID,
itemCategoryName,
a.M_BranchID as branch_asal_id,
a.M_BranchCode as branch_asal_code,
a.M_BranchName as branch_asal_name,
b.M_BranchID as branch_tujuan_id,
b.M_BranchCode as branch_tujuan_code,
b.M_BranchName as branch_tujuan_name
FROM mutasi_request
JOIN item_category ON MutasiRequestItemCategoryID = itemCategoryID
AND itemCategoryIsActive = 'Y'
JOIN m_branch a ON MutasiRequestFromBranchID = a.M_BranchID
AND a.M_BranchIsActive = 'Y'
JOIN m_branch b ON MutasiRequestToBranchID = b.M_BranchID
AND b.M_BranchIsActive = 'Y'
WHERE MutasiRequestIsActive = 'Y'
$status_rm
AND (MutasiRequestNumber LIKE ?)
AND MutasiRequestDate BETWEEN DATE(?) AND DATE(?)
ORDER BY MutasiRequestID DESC";
$sqltotal = "SELECT COUNT(*) as total FROM ($sql) as x";
$qrytotal = $this->db->query($sqltotal, [$search, $start_date, $end_date]);
if (!$qrytotal) {
$this->sys_error_db("['Error'] get total data mutasi", $this->db);
exit;
}
$total = $qrytotal->row_array()['total'];
$sqldata = $sql . " LIMIT ? OFFSET ?";
$qrydata = $this->db->query($sqldata, [
$search,
$start_date,
$end_date,
$limit,
$page
]);
if (!$qrydata) {
$this->sys_error_db("[Error] get list data mutasi", $this->db);
exit;
}
$rows = $qrydata->result_array();
$result = array(
"total_page" => ceil($total / $limit),
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getCategory()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$prm = $this->sys_input;
$search = '%' . $prm["search"] . '%';
$sql = "SELECT itemCategoryID,
itemCategoryName
FROM item_category
WHERE itemCategoryIsActive = 'Y'
AND itemCategoryName LIKE ?
AND itemCategoryID IN (2,3)
ORDER BY itemCategoryName ASC";
$qry = $this->db->query($sql, [$search]);
if (!$qry) {
$this->sys_error_db("[Error] Query getCategory");
return;
}
$rows = $qry->result_array();
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getBranchAsal()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$prm = $this->sys_input;
$user = $this->sys_user;
$sql = "SELECT M_BranchID,
M_BranchCode,
M_BranchName
FROM m_branch
WHERE M_BranchIsActive = 'Y'
AND M_BranchS_RegionalID = ?";
$qry = $this->db->query($sql, [$user['S_RegionalID']]);
if (!$qry) {
$this->sys_error_db("[Error] Query getBranchAsal");
return;
}
$rows = $qry->result_array();
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getBranchTujuan()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$prm = $this->sys_input;
$user = $this->sys_user;
$search = '%' . $prm["search"] . '%';
$sql = "SELECT M_BranchID,
M_BranchCode,
M_BranchName
FROM m_branch
WHERE M_BranchIsActive = 'Y'
AND M_BranchS_RegionalID = ?
AND M_BranchID <> ?
AND M_BranchName LIKE ?
ORDER BY M_BranchName ASC";
$qry = $this->db->query($sql, [$user['S_RegionalID'], $user['M_BranchID'], $search]);
if (!$qry) {
$this->sys_error_db("[Error] Query getBranchTujuan");
return;
}
$rows = $qry->result_array();
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getReceiveOrderPo()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$prm = $this->sys_input;
$itemCategoryID = $prm["itemCategoryID"];
$branchAsalCode = $prm["branchAsalCode"];
$search = '%' . $prm["search"] . '%';
$sql = "SELECT DISTINCT ReceiveOrderPoID,
ReceiveOrderPoNumber,
ReceiveOrderPoIDate,
ReceiveOrderPoWarehouseID,
ReceiveOrderPoM_BranchCode
FROM receive_order_po
JOIN t_barcode_barang ON T_BarcodeBarangReceiveOrderPoID = ReceiveOrderPoID
AND T_BarcodeBarangIsActive = 'Y'
AND T_BarcodeBarangStockID <> 0
JOIN m_item ON T_BarcodeBarangM_ItemID = M_ItemID
AND M_ItemIsActive = 'Y'
AND M_ItemItem_CategoryID = ?
WHERE ReceiveOrderPoIsActive = 'Y'
AND ReceiveOrderPoM_BranchCode = ?
AND ReceiveOrderPoIsHandover = 'Y'
AND ReceiveOrderPoConfirmed = 'Y'
AND (ReceiveOrderPoNumber LIKE ?)
GROUP BY ReceiveOrderPoID";
$qry = $this->db->query($sql, [$itemCategoryID, $branchAsalCode, $search]);
if (!$qry) {
$this->sys_error_db("[Error] Query getReceiveOrderPo");
return;
}
$rows = $qry->result_array();
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getItemReceive()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$prm = $this->sys_input;
$search = '%' . $prm["search"] . '%';
$warhouseID = $prm["warhouseID"];
$branchAsalCode = $prm["branchAsalCode"];
$receiveOrderPoID = $prm["receiveOrderPoID"];
$totalCount = 0;
$totalPage = 0;
$number_offset = 0;
$number_limit = 15;
if ($prm["current_page"] > 0) {
$number_offset = ($prm["current_page"] - 1) * $number_limit;
}
$sql_branch = "SELECT M_BranchID,
M_BranchCode
FROM m_branch
WHERE M_BranchIsActive = 'Y'
AND M_BranchCode = ?";
$qry_branch = $this->db->query($sql_branch, [$branchAsalCode]);
if (!$qry_branch) {
$this->sys_error_db("[Error] Query getItem - branch");
return;
}
$row_branch = $qry_branch->result_array()[0];
$sql = "SELECT
ro.ReceiveOrderPoID,
ro.ReceiveOrderPoNumber,
i.M_ItemID,
i.M_ItemCode,
i.M_ItemDesc,
iu.ItemUnitID,
iu.ItemUnitCode,
iu.ItemUnitName,
s.StockID,
s.StockQty AS stock_total,
COUNT(b.T_BarcodeBarangID) AS barcode_total,
IFNULL(l.qty_locked, 0) AS qty_locked,
(s.StockQty - IFNULL(l.qty_locked, 0)) AS qty_available,
w.WarehouseID,
0 AS qty_mutasi
FROM t_barcode_barang b
JOIN receive_order_po ro ON b.T_BarcodeBarangReceiveOrderPoID = ro.ReceiveOrderPoID
AND ro.ReceiveOrderPoIsActive = 'Y'
AND ro.ReceiveOrderPoID = ?
JOIN stock s ON s.StockID = b.T_BarcodeBarangStockID
JOIN warehouse w ON s.StockWarehouseID = w.WarehouseID
AND w.WarehouseIsActive = 'Y'
AND w.WarehouseM_BranchID = ?
JOIN m_item i ON i.M_ItemID = b.T_BarcodeBarangM_ItemID
JOIN itemunit iu ON b.T_BarcodeBarangItemUnitID = iu.ItemUnitID
LEFT JOIN (
SELECT
MutasiStockLockStockID,
SUM(MutasiStockLockQtyLocked) AS qty_locked
FROM mutasi_stock_lock
WHERE MutasiStockLockIsActive = 'Y'
AND MutasiStockLockStatus = 'ACTIVE'
AND MutasiStockLockType = 'INV'
GROUP BY MutasiStockLockStockID
) l ON l.MutasiStockLockStockID = s.StockID
WHERE
s.StockWarehouseID = ?
AND b.T_BarcodeBarangIsActive = 'Y'
AND b.T_BarcodeBarangStockID <> 0
AND (i.M_ItemCode LIKE ? OR i.M_ItemDesc LIKE ?)
GROUP BY
ro.ReceiveOrderPoID,
s.StockID,
i.M_ItemID
ORDER BY ro.ReceiveOrderPoID DESC";
$sqltotal = "SELECT COUNT(*) as total FROM ($sql) as x";
$qrytotal = $this->db->query($sqltotal, [$receiveOrderPoID, $row_branch['M_BranchID'], $warhouseID, $search, $search]);
if ($qrytotal) {
$totalCount = $qrytotal->result_array()[0]['total'];
$totalPage = ceil($totalCount / $number_limit);
} else {
$this->sys_error_db("[Error] Query getItem - total", $this->db);
exit;
}
$sql_list = $sql . " LIMIT ? OFFSET ?";
$qry = $this->db->query($sql_list, [$receiveOrderPoID, $row_branch['M_BranchID'], $warhouseID, $search, $search, $number_limit, $number_offset]);
// echo $this->db->last_query();
// exit;
if (!$qry) {
$this->sys_error_db("[Error] Query getItem");
return;
}
$rows = $qry->result_array();
$result = array(
"total_page" => $totalPage,
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function saveMutasi()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$user = $this->sys_user;
# VALIDASI HEADER #
if (intval($prm["branch_asal_id"]) == intval($prm["branch_tujuan_id"])) {
$this->sys_error("Branch Asal dan Branch Tujuan tidak boleh sama");
exit;
}
if (count($prm["list_mutasi"]) == 0) {
$this->sys_error("Tidak ada item untuk dimutasi");
exit;
}
# CEK JENIS #
$isInventaris = (intval($prm["category_id"]) === 2);
$isAsset = (intval($prm["category_id"]) === 3);
if ($isAsset && count($prm["list_mutasi"]) > 1) {
$this->sys_error("Mutasi asset hanya boleh 1 item");
exit;
}
# HITUNG NILAI #
$totalValue = 0;
foreach ($prm["list_mutasi"] as $item) {
if ($isInventaris) {
if (intval($item['qty_mutasi']) <= 0 || intval($item['qty_mutasi']) > intval($item['qty_available'])) {
$this->sys_error('QTY mutasi melebihi item yang tersedia');
exit;
}
$detailItems[] = [
'receive_order_po_id' => $item['ReceiveOrderPoID'],
'receive_order_po_number' => $item['ReceiveOrderPoNumber'],
'item_id' => $item['M_ItemID'],
'itemunit_id' => $item['ItemUnitID'],
'stock_id' => $item['StockID'],
'warehouse_id' => $item['WarehouseID'],
'barcode_id' => 0,
'qty' => $item['qty_mutasi'],
'book_value' => 1,
'lock_type' => 'INV'
];
$totalValue = 1;
} else {
// ASSET
if (intval($item['qty_mutasi']) != 1) {
$this->sys_error("Qty asset harus 1");
exit;
}
// $asset = getAssetByItemID($item['M_ItemID']);
// $itemBookValue = $asset->BookValue;
// $totalValue = $itemBookValue;
// $detailItems[] = [
// 'item_id' => $item['M_ItemID'],
// 'itemunit_id' => $item['ItemUnitID'],
// 'stock_id' => $item['StockID'],
// 'warehouse_id' => $item['WarehouseID'],
// 'barcode_id' => $item['T_BarcodeBarangID'],
// 'qty' => 1,
// 'book_value' => 1, // nanti diganti nilai buku
// 'lock_type' => 'AST'
// ];
// $totalValue = 1; // atau nilai buku asset
}
}
# INSERT HEADER #
$sql_header = "INSERT INTO mutasi_request(
MutasiRequestDate,
MutasiRequestNumber,
MutasiRequestItemCategoryID,
MutasiRequestFromBranchID,
MutasiRequestToBranchID,
MutasiRequestTotalValue,
MutasiRequestNote,
MutasiRequestStatus,
MutasiRequestIsActive,
MutasiRequestCreated,
MutasiRequestUserID) VALUES(?,fn_numbering('RM'),?,?,?,?,?,'Draft','Y',NOW(),?)";
$qry_header = $this->db->query($sql_header, [
$prm['mutasi_date'],
$prm['category_id'],
$prm['branch_asal_id'],
$prm['branch_tujuan_id'],
$totalValue,
$prm['note'],
$user['M_UserID']
]);
if (!$qry_header) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into table mutasi request", $this->db);
exit;
}
$mrID = $this->db->insert_id();
# INSERT DETAIL #
foreach ($detailItems as $d) {
$sql_detail = "INSERT INTO mutasi_request_detail(
MutasiRequestDetailMutasiRequestID,
MutasiRequestDetailReceiveOrderPoID,
MutasiRequestDetailReceiveOrderPoNumber,
MutasiRequestDetailStockID,
MutasiRequestDetailM_ItemID,
MutasiRequestDetailItemUnitID,
MutasiRequestDetailQty,
MutasiRequestDetailBookValue,
MutasiRequestDetailIsActive,
MutasiRequestDetailCreated,
MutasiRequestDetailUserID
) VALUES(?,?,?,?,?,?,?,?,'Y',NOW(),?)";
$qry_detail = $this->db->query($sql_detail, [
$mrID,
$d['receive_order_po_id'],
$d['receive_order_po_number'],
$d['stock_id'],
$d['item_id'],
$d['itemunit_id'],
$d['qty'],
$d['book_value'],
$user['M_UserID']
]);
if (!$qry_detail) {
$this->db->trans_rollback();
$this->sys_error_db("['Error'] insert into table mutasi request detail", $this->db);
exit;
}
// ambil detail_id
$detail_id = $this->db->insert_id();
# VALIDASI STOCK #
if ($d['lock_type'] === 'INV') {
$sqlCheck = "SELECT
s.StockQty -
COALESCE((
SELECT SUM(l.MutasiStockLockQtyLocked)
FROM mutasi_stock_lock l
WHERE l.MutasiStockLockStockID = s.StockID
AND l.MutasiStockLockIsActive = 'Y'
AND l.MutasiStockLockStatus = 'ACTIVE'
),0) AS qty_available
FROM stock s
WHERE s.StockID = ?
FOR UPDATE";
$row = $this->db->query($sqlCheck, [$d['stock_id']])->row();
if (!$row || $row->qty_available < $d['qty']) {
$this->db->trans_rollback();
$this->sys_error("Stock tidak mencukupi (sudah di-lock)");
exit;
}
} else if ($d['lock_type'] === 'AST') {
if (empty($d['barcode_id'])) {
$this->db->trans_rollback();
$this->sys_error("Asset wajib memiliki barcode");
exit;
}
}
// INSERT STOCK LOCK
$sqlLock = "INSERT INTO mutasi_stock_lock(
MutasiStockLockMutasiRequestID,
MutasiStockLockMutasiRequestDetailID,
MutasiStockLockM_ItemID,
MutasiStockLockStockID,
MutasiStockLockT_BarcodeBarangID,
MutasiStockLockM_BranchID,
MutasiStockLockWarehouseID,
MutasiStockLockQtyLocked,
MutasiStockLockType,
MutasiStockLockStatus,
MutasiStockLockIsActive,
MutasiStockLockCreated,
MutasiStockLockUserID
) VALUES(?,?,?,?,?,?,?,?,?,'ACTIVE','Y',NOW(),?)";
$qryLock = $this->db->query($sqlLock, [
$mrID,
$detail_id,
$d['item_id'],
$d['stock_id'],
$d['barcode_id'],
$prm['branch_asal_id'],
$d['warehouse_id'],
$d['qty'],
$d['lock_type'],
$user['M_UserID']
]);
if (!$qryLock) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert table stock lock", $this->db);
exit;
}
}
$this->db->trans_commit();
$this->sys_ok("Request mutasi created successfully");
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getItemMutasiUpdate()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$prm = $this->sys_input;
$mutasiRequestID = $prm['mutasiRequestID'];
$sql = "SELECT
MutasiRequestDetailID,
MutasiRequestDetailMutasiRequestID,
MutasiRequestDetailReceiveOrderPoID AS ReceiveOrderPoID,
MutasiRequestDetailReceiveOrderPoNumber AS ReceiveOrderPoNumber,
M_ItemID,
M_ItemCode,
M_ItemDesc,
ItemUnitID,
ItemUnitCode,
ItemUnitName,
w.WarehouseID,
s.StockID,
s.StockQty AS stock_total,
IFNULL(bc.barcode_total, 0) AS barcode_total,
COUNT(DISTINCT lk.MutasiStockLockT_BarcodeBarangID) AS qty_locked,
IFNULL(bc.barcode_total, 0) - COUNT(DISTINCT lk.MutasiStockLockT_BarcodeBarangID) AS qty_available,
MutasiRequestDetailQty AS qty_mutasi
FROM mutasi_request_detail
JOIN mutasi_request
ON MutasiRequestDetailMutasiRequestID = MutasiRequestID
JOIN m_item
ON MutasiRequestDetailM_ItemID = M_ItemID
JOIN itemunit
ON MutasiRequestDetailItemUnitID = ItemUnitID
JOIN stock s
ON MutasiRequestDetailStockID = s.StockID
JOIN warehouse w
ON s.StockWarehouseID = w.WarehouseID
AND w.WarehouseIsActive = 'Y'
-- total barcode per stock + PO
LEFT JOIN (
SELECT
b.T_BarcodeBarangStockID,
b.T_BarcodeBarangReceiveOrderPoID,
COUNT(*) AS barcode_total
FROM t_barcode_barang b
WHERE b.T_BarcodeBarangIsActive = 'Y'
GROUP BY
b.T_BarcodeBarangStockID,
b.T_BarcodeBarangReceiveOrderPoID
) bc
ON bc.T_BarcodeBarangStockID = s.StockID
AND bc.T_BarcodeBarangReceiveOrderPoID = MutasiRequestDetailReceiveOrderPoID
-- barcode yang sedang di-lock
LEFT JOIN (
SELECT
l.MutasiStockLockT_BarcodeBarangID,
b.T_BarcodeBarangStockID,
b.T_BarcodeBarangReceiveOrderPoID
FROM mutasi_stock_lock l
JOIN t_barcode_barang b
ON b.T_BarcodeBarangID = l.MutasiStockLockT_BarcodeBarangID
WHERE
l.MutasiStockLockIsActive = 'Y'
AND l.MutasiStockLockStatus = 'ACTIVE'
AND l.MutasiStockLockType = 'INV'
) lk
ON lk.T_BarcodeBarangStockID = s.StockID
AND lk.T_BarcodeBarangReceiveOrderPoID = MutasiRequestDetailReceiveOrderPoID
WHERE
MutasiRequestDetailIsActive = 'Y'
AND MutasiRequestDetailMutasiRequestID = ?
GROUP BY
MutasiRequestDetailID,
s.StockID,
bc.barcode_total
ORDER BY
MutasiRequestDetailID";
$qry = $this->db->query($sql, [$mutasiRequestID]);
if (!$qry) {
$this->sys_error_db("[Error] get item update", $this->db);
exit;
}
$data = $qry->result_array();
$result = array(
"records" => $data
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function saveEditMutasi()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$user = $this->sys_user;
# VALIDASI HEADER #
if (intval($prm["branch_asal_id"]) == intval($prm["branch_tujuan_id"])) {
$this->sys_error("Branch Asal dan Branch Tujuan tidak boleh sama");
exit;
}
if (count($prm["list_mutasi"]) == 0) {
$this->sys_error("Tidak ada item untuk dimutasi");
exit;
}
# CEK JENIS #
$isInventaris = (intval($prm["category_id"]) === 2);
$isAsset = (intval($prm["category_id"]) === 3);
if ($isAsset && count($prm["list_mutasi"]) > 1) {
$this->sys_error("Mutasi asset hanya boleh 1 item");
exit;
}
# HITUNG NILAI #
$totalValue = 0;
foreach ($prm["list_mutasi"] as $item) {
if ($isInventaris) {
if (intval($item['qty_mutasi']) <= 0 || intval($item['qty_mutasi']) > intval($item['qty_available'])) {
$this->sys_error('QTY mutasi melebihi item yang tersedia');
exit;
}
$detailItems[] = [
'MutasiRequestDetailID' => $item['MutasiRequestDetailID'],
'MutasiRequestID' => $item['MutasiRequestDetailMutasiRequestID'],
'receive_order_po_id' => $item['ReceiveOrderPoID'],
'receive_order_po_number' => $item['ReceiveOrderPoNumber'],
'item_id' => $item['M_ItemID'],
'itemunit_id' => $item['ItemUnitID'],
'stock_id' => $item['StockID'],
'warehouse_id' => $item['WarehouseID'],
'barcode_id' => 0,
'qty' => $item['qty_mutasi'],
'book_value' => 1,
'lock_type' => 'INV'
];
$totalValue = 1;
} else {
// ASSET
if (intval($item['qty_mutasi']) != 1) {
$this->sys_error("Qty asset harus 1");
exit;
}
// $asset = getAssetByItemID($item['M_ItemID']);
// $itemBookValue = $asset->BookValue;
// $totalValue = $itemBookValue;
// $detailItems[] = [
// 'item_id' => $item['M_ItemID'],
// 'itemunit_id' => $item['ItemUnitID'],
// 'stock_id' => $item['StockID'],
// 'warehouse_id' => $item['WarehouseID'],
// 'barcode_id' => $item['T_BarcodeBarangID'],
// 'qty' => 1,
// 'book_value' => 1, // nanti diganti nilai buku
// 'lock_type' => 'AST'
// ];
// $totalValue = 1; // atau nilai buku asset
}
}
# UPDATE MUTASI #
$sql_mutasi = "UPDATE mutasi_request SET
MutasiRequestDate = ?,
MutasiRequestItemCategoryID = ?,
MutasiRequestFromBranchID = ?,
MutasiRequestToBranchID = ?,
MutasiRequestTotalValue = ?,
MutasiRequestNote = ?,
MutasiRequestLastUpdated = NOW(),
MutasiRequestUserID = ?
WHERE MutasiRequestID = ?";
$qry_mutasi = $this->db->query($sql_mutasi, [
$prm['mutasi_date'],
$prm['category_id'],
$prm['branch_asal_id'],
$prm['branch_tujuan_id'],
$totalValue,
$prm['note'],
$user['M_UserID'],
$prm['mutasi_request_id']
]);
if (!$qry_mutasi) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update mutasi request", $this->db);
exit;
}
# check jika detail sudah ada #
$sql_check_detail = "SELECT MutasiRequestDetailID,
MutasiRequestDetailMutasiRequestID
FROM mutasi_request_detail
WHERE MutasiRequestDetailMutasiRequestID = ?
AND MutasiRequestDetailIsActive = 'Y'";
$qry_check_detail = $this->db->query($sql_check_detail, [$prm['mutasi_request_id']]);
if (!$qry_check_detail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] get list check detail mutasi", $this->db);
exit;
}
$list_detail_check = $qry_check_detail->result_array();
$array_detailID = array_column($list_detail_check, 'MutasiRequestDetailID');
$input_detail = array_column($detailItems, 'MutasiRequestDetailID');
$update_detail = [];
$insert_detail = [];
$delete_detail = [];
foreach ($detailItems as $key => $value) {
if (empty($value['MutasiRequestDetailID'])) {
$insert_detail[] = $value;
continue;
}
if (in_array($value['MutasiRequestDetailID'], $array_detailID)) {
$update_detail[] = $value;
}
}
foreach ($list_detail_check as $key => $value) {
if (!in_array($value['MutasiRequestDetailID'], $input_detail)) {
$delete_detail[] = $value;
}
}
# UPDATE MUTASI DETAIL #
foreach ($update_detail as $k => $v) {
$sql_update_detail = "UPDATE mutasi_request_detail SET
MutasiRequestDetailMutasiRequestID = ?,
MutasiRequestDetailReceiveOrderPoID = ?,
MutasiRequestDetailReceiveOrderPoNumber = ?,
MutasiRequestDetailStockID = ?,
MutasiRequestDetailM_ItemID = ?,
MutasiRequestDetailItemUnitID = ?,
MutasiRequestDetailQty = ?,
MutasiRequestDetailBookValue = ?,
MutasiRequestDetailLastUpdated = NOW(),
MutasiRequestDetailUserID = ?
WHERE MutasiRequestDetailID = ?";
$qry_update_detail = $this->db->query($sql_update_detail, [
$v['MutasiRequestID'],
$v['receive_order_po_id'],
$v['receive_order_po_number'],
$v['stock_id'],
$v['item_id'],
$v['itemunit_id'],
$v['qty'],
$v['book_value'],
$user['M_UserID'],
$v['MutasiRequestDetailID']
]);
if (!$qry_update_detail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update mutasi request detail", $this->db);
exit;
}
# cek qty tersedia (inventaris)
if ($v['lock_type'] === 'INV') {
$sqlCheck = "SELECT
s.StockQty -
COALESCE((
SELECT SUM(l.MutasiStockLockQtyLocked)
FROM mutasi_stock_lock l
WHERE l.MutasiStockLockStockID = s.StockID
AND l.MutasiStockLockIsActive = 'Y'
AND l.MutasiStockLockStatus = 'ACTIVE'
),0) AS qty_available
FROM stock s
WHERE s.StockID = ?
FOR UPDATE";
$row = $this->db->query($sqlCheck, [$v['stock_id']])->row();
if (!$row || $row->qty_available < $v['qty']) {
$this->db->trans_rollback();
$this->sys_error("Stock tidak mencukupi (sudah di-lock)");
exit;
}
} else if ($v['lock_type'] === 'AST') {
if (empty($v['barcode_id'])) {
$this->db->trans_rollback();
$this->sys_error("Asset wajib memiliki barcode");
exit;
}
}
# update stock lock
$sql_update_stock_lock = "UPDATE mutasi_stock_lock SET
MutasiStockLockMutasiRequestID = ?,
MutasiStockLockMutasiRequestDetailID = ?,
MutasiStockLockM_ItemID = ?,
MutasiStockLockStockID = ?,
MutasiStockLockT_BarcodeBarangID = ?,
MutasiStockLockM_BranchID = ?,
MutasiStockLockWarehouseID = ?,
MutasiStockLockQtyLocked = ?,
MutasiStockLockType = ?,
MutasiStockLockLastUpdated = NOW(),
MutasiStockLockUserID = ?
WHERE MutasiStockLockMutasiRequestDetailID = ?";
$qry_update_stock_lock = $this->db->query($sql_update_stock_lock, [
$prm['mutasi_request_id'],
$v['MutasiRequestDetailID'],
$v['item_id'],
$v['stock_id'],
$v['barcode_id'],
$prm['branch_asal_id'],
$v['warehouse_id'],
$v['qty'],
$v['lock_type'],
$user['M_UserID'],
$v['MutasiRequestDetailID']
]);
if (!$qry_update_stock_lock) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update mutasi stock lock", $this->db);
exit;
}
}
# INSERT MUTASI DETAIL BARU #
foreach ($insert_detail as $k => $v) {
$sql_detail = "INSERT INTO mutasi_request_detail(
MutasiRequestDetailMutasiRequestID,
MutasiRequestDetailReceiveOrderPoID,
MutasiRequestDetailReceiveOrderPoNumber,
MutasiRequestDetailStockID,
MutasiRequestDetailM_ItemID,
MutasiRequestDetailItemUnitID,
MutasiRequestDetailQty,
MutasiRequestDetailBookValue,
MutasiRequestDetailIsActive,
MutasiRequestDetailCreated,
MutasiRequestDetailUserID
) VALUES(?,?,?,?,?,?,?,?,'Y',NOW(),?)";
$qry_detail = $this->db->query($sql_detail, [
$prm['mutasi_request_id'],
$v['receive_order_po_id'],
$v['receive_order_po_number'],
$v['stock_id'],
$v['item_id'],
$v['itemunit_id'],
$v['qty'],
$v['book_value'],
$user['M_UserID']
]);
if (!$qry_detail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] Re-insert table mutasi request detail", $this->db);
exit;
}
$detail_id = $this->db->insert_id();
# cek qty tersedia (inventaris)
if ($v['lock_type'] === 'INV') {
$sqlCheck = "SELECT
s.StockQty -
COALESCE((
SELECT SUM(l.MutasiStockLockQtyLocked)
FROM mutasi_stock_lock l
WHERE l.MutasiStockLockStockID = s.StockID
AND l.MutasiStockLockIsActive = 'Y'
AND l.MutasiStockLockStatus = 'ACTIVE'
),0) AS qty_available
FROM stock s
WHERE s.StockID = ?
FOR UPDATE";
$row = $this->db->query($sqlCheck, [$v['stock_id']])->row();
if (!$row || $row->qty_available < $v['qty']) {
$this->db->trans_rollback();
$this->sys_error("Stock tidak mencukupi (sudah di-lock)");
exit;
}
} else if ($v['lock_type'] === 'AST') {
if (empty($v['barcode_id'])) {
$this->db->trans_rollback();
$this->sys_error("Asset wajib memiliki barcode");
exit;
}
}
// INSERT LOCK
$sqlLock = "INSERT INTO mutasi_stock_lock(
MutasiStockLockMutasiRequestID,
MutasiStockLockMutasiRequestDetailID,
MutasiStockLockM_ItemID,
MutasiStockLockStockID,
MutasiStockLockT_BarcodeBarangID,
MutasiStockLockM_BranchID,
MutasiStockLockWarehouseID,
MutasiStockLockQtyLocked,
MutasiStockLockType,
MutasiStockLockStatus,
MutasiStockLockIsActive,
MutasiStockLockCreated,
MutasiStockLockUserID
) VALUES(?,?,?,?,?,?,?,?,?,'ACTIVE','Y',NOW(),?)";
$qryLock = $this->db->query($sqlLock, [
$prm['mutasi_request_id'],
$detail_id,
$v['item_id'],
$v['stock_id'],
$v['barcode_id'],
$prm['branch_asal_id'],
$v['warehouse_id'],
$v['qty'],
$v['lock_type'],
$user['M_UserID']
]);
if (!$qryLock) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] edit mutasi, insert table stock lock", $this->db);
exit;
}
}
# DELETE MUTASI DETAIL #
if (count($delete_detail) > 0) {
$delete_id = array_column($delete_detail, 'MutasiRequestDetailID');
$placeholders = implode(', ', array_fill(0, count($delete_id), '?'));
$delete_param = array_merge(array($user['M_UserID']), $delete_id);
$sql_delete_detail = "UPDATE mutasi_request_detail SET
MutasiRequestDetailIsActive = 'N',
MutasiRequestDetailLastUpdated = NOW(),
MutasiRequestDetailUserID = ?
WHERE MutasiRequestDetailID IN ($placeholders)";
$qry_delete_detail = $this->db->query($sql_delete_detail, $delete_param);
if (!$qry_delete_detail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] delete mutasi request detail", $this->db);
exit;
}
# delete mutasi stock lock
$sql_update_stock_lock = "UPDATE mutasi_stock_lock SET
MutasiStockLockStatus = 'INACTIVE',
MutasiStockLockIsActive = 'N',
MutasiStockLockLastUpdated = NOW(),
MutasiStockLockUserID = ?
WHERE MutasiStockLockMutasiRequestDetailID = ?";
$qry_update_stock_lock = $this->db->query($sql_update_stock_lock, $delete_param);
if (!$qry_update_stock_lock) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update mutasi stock lock", $this->db);
exit;
}
}
$this->db->trans_commit();
$this->sys_ok("Update mutasi successfully");
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function deleteMutasi()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$user = $this->sys_user;
$mutasiRequestID = $prm['mutasiRequestID'];
$sql_mutasi = "UPDATE mutasi_request SET
MutasiRequestIsActive = 'N',
MutasiRequestLastUpdated = NOW(),
MutasiRequestUserID = ?
WHERE MutasiRequestID = ?";
$qry_mutasi = $this->db->query($sql_mutasi, [
$user['M_UserID'],
$mutasiRequestID
]);
if (!$qry_mutasi) {
$this->db->trans_rollback();
$this->sys_error_db('[Error] delete mutasi request', $this->db);
exit;
}
$sql_mutasi_detail = "UPDATE mutasi_request_detail SET
MutasiRequestDetailIsActive = 'N',
MutasiRequestDetailLastUpdated = NOW(),
MutasiRequestDetailUserID = ?
WHERE MutasiRequestDetailMutasiRequestID = ?";
$qry_mutasi_detail = $this->db->query($sql_mutasi_detail, [
$user['M_UserID'],
$mutasiRequestID
]);
if (!$qry_mutasi_detail) {
$this->db->trans_rollback();
$this->sys_error_db('[Error] delete mutasi detail', $this->db);
exit;
}
$sql_stock_lock = "UPDATE mutasi_stock_lock SET
MutasiStockLockStatus = 'INACTIVE',
MutasiStockLockIsActive = 'N',
MutasiStockLockLastUpdated = NOW(),
MutasiStockLockUserID = ?
WHERE MutasiStockLockMutasiRequestID = ?";
$qry_stock_lock = $this->db->query($sql_stock_lock, [
$user['M_UserID'],
$mutasiRequestID
]);
if (!$qry_stock_lock) {
$this->db->trans_rollback();
$this->sys_error_db('[Error] mutasi stock lock', $this->db);
exit;
}
$this->db->trans_commit();
$this->sys_ok("Delete Request mutasi successfully");
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
// Approved
// ------------------------------
function getApproveLevel()
{
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userId = $this->sys_user["M_UserID"];
$sqlevel = "SELECT M_UserM_ApproveLevelID FROM m_user WHERE M_UserIsActive = 'Y' AND M_UserID = ? ";
$qulevel = $this->db->query($sqlevel, [$userId]);
if (!$qulevel) {
$this->sys_error_db("[Error] get approval level user");
exit;
}
$data = $qulevel->row_array();
$this->sys_ok($data);
}
function approveMutasiRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$user = $this->sys_user;
# get data before
$dataMrBefore = $this->getDataMutasiRequest($prm['mutasiRequestID']);
if (intval($prm['approvelevel'] == 1)) {
$sql = "UPDATE mutasi_request SET
MutasiRequestStatus = 'Verified',
MutasiRequestIsVerif = 'Y',
MutasiRequestVerifUserID = ?,
MutasiRequestVerifDate = NOW(),
MutasiRequestLastUpdated = NOW(),
MutasiRequestUserID = ?
WHERE MutasiRequestID = ?";
$qry = $this->db->query($sql, [$user['M_UserID'], $user['M_UserID'], $prm['mutasiRequestID']]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] verif by manager", $this->db);
exit;
}
$dataMrAfter = $this->getDataMutasiRequest($prm['mutasiRequestID']);
$this->insertLogMutasiRequest($prm['mutasiRequestID'], 'VERIFIED', $dataMrBefore, $dataMrAfter, $user['M_UserID'], "Verified data mutasi request by user ID : {$user['M_UserID']}");
$this->insertUserActivity('MR', "Verified data mutasi request by user ID : {$user['M_UserID']}", 'VERIFIED', $prm['mutasiRequestID'], '', $user['M_UserID']);
$this->db->trans_commit();
$this->sys_ok("Success Verified by manager");
} else if (intval($prm['approvelevel'] == 2)) {
$sql = "UPDATE mutasi_request SET
MutasiRequestStatus = 'Approved',
MutasiRequestIsApproved = 'Y',
MutasiRequestApprovedUserID = ?,
MutasiRequestApprovedDate = NOW(),
MutasiRequestLastUpdated = NOW(),
MutasiRequestUserID = ?
WHERE MutasiRequestID = ?";
$qry = $this->db->query($sql, [$user['M_UserID'], $user['M_UserID'], $prm['mutasiRequestID']]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] approve by kacab", $this->db);
exit;
}
$dataMrAfter = $this->getDataMutasiRequest($prm['mutasiRequestID']);
$this->insertLogMutasiRequest($prm['mutasiRequestID'], 'APPROVED', $dataMrBefore, $dataMrAfter, $user['M_UserID'], "Approved data mutasi request by user ID : {$user['M_UserID']}");
$this->insertUserActivity('MR', "Approved data mutasi request by user ID : {$user['M_UserID']}", 'APPROVED', $prm['mutasiRequestID'], '', $user['M_UserID']);
$this->db->trans_commit();
$this->sys_ok("Success Approved by kacab");
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function rejectMutasiRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$user = $this->sys_user;
$mrID = intval($prm["mutasiRequestID"]);
$note = $prm["reject_note"];
# get data before
$dataMrBefore = $this->getDataMutasiRequest($mrID);
# cek mutasi
$mutasi = $this->db->query("SELECT MutasiRequestStatus
FROM mutasi_request
WHERE MutasiRequestID = ?
AND MutasiRequestIsActive = 'Y'
FOR UPDATE
", [$mrID])->row();
if (!$mutasi) {
$this->db->trans_rollback();
$this->sys_error("Data mutasi tidak ditemukan", $this->db);
exit;
}
# validasi boleh reject atau tidak
if (!in_array($mutasi->MutasiRequestStatus, ['Draft', 'Verified', 'Approved'])) {
$this->db->trans_rollback();
$this->sys_error("Mutasi tidak dapat direject pada status ini");
exit;
}
#get username
$getUser = $this->db->query("SELECT M_UserID,
M_UserUsername
FROM m_user
WHERE M_UserIsActive = 'Y'
AND M_UserID = ?", [$user['M_UserID']])->row_array();
if (!$getUser) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] get username", $this->db);
exit;
}
# update status mutasi to rejected
$updMutasi = $this->db->query("UPDATE mutasi_request
SET
MutasiRequestStatus = 'Rejected',
MutasiRequestNote = CONCAT_WS(
'\n',
NULLIF(MutasiRequestNote, ''),
CONCAT('[REJECT] ', ?, ' by user ', ?)
),
MutasiRequestLastUpdated = NOW()
WHERE MutasiRequestID = ?
", [$note, $getUser['M_UserUsername'], $mrID]);
if (!$updMutasi) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update status mutasi", $this->db);
exit;
}
# Release stock lock active
$updLock = $this->db->query("UPDATE mutasi_stock_lock
SET
MutasiStockLockStatus = 'RELEASED',
MutasiStockLockLastUpdated = NOW()
WHERE MutasiStockLockMutasiRequestID = ?
AND MutasiStockLockStatus = 'ACTIVE'
AND MutasiStockLockIsActive = 'Y'
", [$mrID]);
if (!$updLock) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] release stock lock", $this->db);
exit;
}
$dataMrAfter = $this->getDataMutasiRequest($mrID);
$this->insertLogMutasiRequest($mrID, 'REJECTED', $dataMrBefore, $dataMrAfter, $user['M_UserID'], "Rejected data mutasi request by user ID : {$user['M_UserID']}");
$this->insertUserActivity('MR', "Rejected data mutasi request by user ID : {$user['M_UserID']}", 'REJECTED', $mrID, '', $user['M_UserID']);
$this->db->trans_commit();
$this->sys_ok("Mutasi berhasil direject");
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function sendHandoverMutasi()
{
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$user = $this->sys_user;
$header = $prm["header"];
$detail = $prm["detail"];
# VALIDASI STATUS REQUEST #
if ($header["MutasiRequestStatus"] !== "Approved") {
$this->sys_error("[Error] Mutasi belum di-approve");
exit;
}
# CEK SUDAH PERNAH SENT #
$sqlcek = "SELECT 1 FROM mutasi_handover
WHERE MutasiHandoverMutasiRequestID = ?
AND MutasiHandoverStatus = 'Sent'
AND MutasiHandoverIsActive = 'Y'";
$cek = $this->db->query($sqlcek, [$header["MutasiRequestID"]]);
if ($cek->num_rows() > 0) {
$this->sys_error("[Error] Mutasi sudah pernah di-handover");
exit;
}
# INSERT HANDOVER HEADER #
$sql = "INSERT INTO mutasi_handover(
MutasiHandoverMutasiRequestID,
MutasiHandoverNumber,
MutasiHandoverDate,
MutasiHandoverItemCategoryID,
MutasiHandoverFromBranchID,
MutasiHandoverToBranchID,
MutasiHandoverTotalValue,
MutasiHandoverStatus,
MutasiHandoverNote,
MutasiHandoverCreated,
MutasiHandoverUserID,
MutasiHandoverIsActive
) VALUES(?, fn_numbering('MH'), NOW(), ?, ?, ?, ?, 'Sent', ?, NOW(), ?, 'Y')";
$qry = $this->db->query($sql, [
$header["MutasiRequestID"],
$header["itemCategoryID"],
$header["branch_asal_id"],
$header["branch_tujuan_id"],
$header["MutasiRequestTotalValue"],
$header["MutasiRequestNote"],
$user["M_UserID"]
]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Insert handover header gagal", $this->db);
exit;
}
$handoverID = $this->db->insert_id();
# INSERT HANDOVER DETAIL #
foreach ($detail as $d) {
$sql_detail = "INSERT INTO mutasi_handover_detail(
MutasiHandoverDetailMutasiHandoverID,
MutasiHandoverDetailMutasiRequestDetailID,
MutasiHandoverDetailReceiveOrderPoID,
MutasiHandoverDetailM_ItemID,
MutasiHandoverDetailItemUnitID,
MutasiHandoverDetailStockID_From,
MutasiHandoverDetailQty,
MutasiHandoverDetailBookValue,
MutasiHandoverDetailCreated,
MutasiHandoverDetailUserID,
MutasiHandoverDetailIsActive
) VALUES(?,?,?,?,?,?,?,?,NOW(),?,'Y')";
$qry_detail = $this->db->query($sql_detail, [
$handoverID,
$d["MutasiRequestDetailID"],
$d["ReceiveOrderPoID"],
$d["M_ItemID"],
$d["ItemUnitID"],
$d["StockID"],
$d["qty_mutasi"],
1,
$user["M_UserID"]
]);
if (!$qry_detail) {
$this->db->trans_rollback();
$this->sys_error_db("Insert handover detail gagal", $this->db);
exit;
}
}
$sql_get_header = "SELECT * FROM mutasi_handover WHERE MutasiHandoverID = ?";
$qry_get_header = $this->db->query($sql_get_header, [$handoverID]);
if (!$qry_get_header) {
$this->db->trans_rollback();
$this->sys_error_db("Get header handover gagal", $this->db);
exit;
}
$header_handover = $qry_get_header->row_array();
$sql_get_detail = "SELECT * FROM mutasi_handover_detail WHERE MutasiHandoverDetailMutasiHandoverID = ? AND MutasiHandoverDetailIsActive = 'Y'";
$qry_get_detail = $this->db->query($sql_get_detail, [$handoverID]);
if (!$qry_get_detail) {
$this->db->trans_rollback();
$this->sys_error_db("Get detail handover gagal", $this->db);
exit;
}
$detail_handover = $qry_get_detail->result_array();
$header_handover['details'] = $detail_handover;
$this->insertUserActivity('MH', "Sent data mutasi handover ID : {$header_handover['MutasiHandoverID']}", 'SENT', $header_handover['MutasiHandoverID'], $header_handover, $user['M_UserID']);
# GET DATA BEFORE #
$dataMrBefore = $this->getDataMutasiRequest($header['MutasiRequestID']);
# UPDATE STATUS REQUEST → SENT #
$sqlupd = "UPDATE mutasi_request
SET MutasiRequestStatus = 'Sent',
MutasiRequestLastUpdated = NOW()
WHERE MutasiRequestID = ?";
$upd = $this->db->query($sqlupd, [$header["MutasiRequestID"]]);
if (!$upd) {
$this->db->trans_rollback();
$this->sys_error_db("Update status mutasi gagal", $this->db);
exit;
}
$dataMrAfter = $this->getDataMutasiRequest($header['MutasiRequestID']);
$this->insertLogMutasiRequest($header['MutasiRequestID'], 'SENT', $dataMrBefore, $dataMrAfter, $user['M_UserID'], "Sent data mutasi request ID : {$header['MutasiRequestID']}");
$this->insertUserActivity('MR', "Sent data mutasi request ID : {$header['MutasiRequestID']}", 'SENT', $header['MutasiRequestID'], '', $user['M_UserID']);
$this->db->trans_commit();
$this->sys_ok("Handover mutasi berhasil (Sent)");
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
// ----------------------------------------------------------------------------------
private function getDataMutasiRequest($id)
{
$sql = "SELECT * FROM mutasi_request WHERE MutasiRequestID = ?";
$qry = $this->db->query($sql, [$id]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] get mutasi request", $this->db);
exit;
}
$header = $qry->row_array();
$sqldetail = "SELECT * FROM mutasi_request_detail
WHERE MutasiRequestDetailMutasiRequestID = ? AND MutasiRequestDetailIsActive = 'Y'";
$qrydetail = $this->db->query($sqldetail, [$id]);
if (!$qrydetail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] get mutasi request detail", $this->db);
exit;
}
$detail = $qrydetail->result_array();
$header['details'] = $detail;
return $header;
}
//
private function insertUserActivity(
$code,
$user_desc = '',
$status,
$reff_id,
$data = '',
$userId
) {
$sql_log = "INSERT INTO user_activity(
UserActivityCode,
UserActivityStatus,
UserActivityDescription,
UserActivityRefID,
UserActivityData,
UserActivityUserID,
UserActivityCreated
) VALUES(?,?,?,?,?,?,NOW())";
$qry_log = $this->db->query($sql_log, [
$code,
$status,
$user_desc,
$reff_id,
!empty($data) ? json_encode($data) : '',
$userId
]);
if (!$qry_log) {
$this->db->trans_rollback();
$this->sys_error_db("insert log", $this->db);
exit;
}
}
private function insertLogMutasiRequest(
$id,
$type,
$dataBefore,
$dataAfter,
$userID,
$desc = ''
) {
$sql = "INSERT INTO acc_one_log.mutasi_request_log(
MutasiRequestLogMutasiRequestID,
MutasiRequestLogType,
MutasiRequestLogDesc,
MutasiRequestLogJsonBefore,
MutasiRequestLogJsonAfter,
MutasiRequestLogUserID,
MutasiRequestLogCreated
) VALUES(?,?,?,?,?,?,NOW())";
$qry = $this->db->query($sql, [
$id,
$type,
$desc,
!empty($dataBefore) ? json_encode($dataBefore) : '',
!empty($dataAfter) ? json_encode($dataAfter) : '',
$userID
]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert log mutasi request", $this->db);
exit;
}
}
}