1007 lines
40 KiB
PHP
1007 lines
40 KiB
PHP
<?php
|
|
class ReceiveMutasi extends MY_Controller
|
|
{
|
|
var $db;
|
|
public function index()
|
|
{
|
|
echo "Receive 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 MutasiHandoverStatus = '{$status}'";
|
|
}
|
|
|
|
$sql = "SELECT DISTINCT MutasiHandoverID,
|
|
MutasiHandoverMutasiRequestID,
|
|
MutasiHandoverNumber,
|
|
DATE_FORMAT(MutasiHandoverDate, '%Y-%m-%d') as MutasiHandoverDate,
|
|
DATE_FORMAT(MutasiHandoverReceiveDate, '%Y-%m-%d') as MutasiHandoverReceiveDate,
|
|
M_UserUsername,
|
|
MutasiHandoverReceiveUserID,
|
|
MutasiHandoverFromBranchID,
|
|
MutasiHandoverToBranchID,
|
|
MutasiHandoverStatus,
|
|
MutasiHandoverNote,
|
|
MutasiHandoverIsActive,
|
|
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,
|
|
WarehouseID,
|
|
CASE
|
|
WHEN WarehouseType = 'B' THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', b.M_BranchName)
|
|
ELSE ''
|
|
END WarehouseName,
|
|
M_RuanganID,
|
|
M_RuanganName
|
|
FROM mutasi_handover
|
|
JOIN item_category ON MutasiHandoverItemCategoryID = itemCategoryID
|
|
AND itemCategoryIsActive = 'Y'
|
|
JOIN m_branch a ON MutasiHandoverFromBranchID = a.M_BranchID
|
|
AND a.M_BranchIsActive = 'Y'
|
|
JOIN m_branch b ON MutasiHandoverToBranchID = b.M_BranchID
|
|
AND b.M_BranchIsActive = 'Y'
|
|
LEFT JOIN m_user ON MutasiHandoverReceiveUserID = M_UserID
|
|
LEFT JOIN warehouse ON MutasiHandoverReceiveWarehouseID = WarehouseID
|
|
AND WarehouseIsActive = 'Y'
|
|
LEFT JOIN m_ruangan ON MutasiHandoverReceiveM_RuanganID = M_RuanganID
|
|
AND M_RuanganIsActive = 'Y'
|
|
WHERE MutasiHandoverIsActive = 'Y'
|
|
$status_rm
|
|
AND (MutasiHandoverNumber LIKE ?)
|
|
AND DATE(MutasiHandoverDate) BETWEEN DATE(?) AND DATE(?)
|
|
ORDER BY MutasiHandoverID 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 handover", $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"] . '%';
|
|
$branchid = $prm['branch_id'];
|
|
|
|
$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'], $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 getItemDetail()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$mutasiHandoverID = $prm['mutasiHandoverID'];
|
|
|
|
$sql = "SELECT MutasiHandoverDetailID,
|
|
MutasiHandoverDetailMutasiHandoverID,
|
|
MutasiRequestNumber,
|
|
M_ItemID,
|
|
M_ItemCode,
|
|
M_ItemDesc,
|
|
ItemUnitID,
|
|
ItemUnitCode,
|
|
ItemUnitName,
|
|
WarehouseID,
|
|
WarehouseName,
|
|
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,
|
|
MutasiHandoverDetailQty as qty_mutasi
|
|
FROM mutasi_handover_detail
|
|
JOIN mutasi_handover ON MutasiHandoverDetailMutasiHandoverID = MutasiHandoverID
|
|
JOIN mutasi_request ON MutasiHandoverMutasiRequestID = MutasiRequestID
|
|
JOIN m_item ON MutasiHandoverDetailM_ItemID = M_ItemID
|
|
JOIN itemunit ON MutasiHandoverDetailItemUnitID = ItemUnitID
|
|
JOIN stock s ON MutasiHandoverDetailStockID_From = 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 = MutasiHandoverDetailReceiveOrderPoID
|
|
-- 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 = MutasiHandoverDetailReceiveOrderPoID
|
|
WHERE MutasiHandoverDetailIsActive = 'Y'
|
|
AND MutasiHandoverDetailMutasiHandoverID = ?
|
|
GROUP BY
|
|
MutasiHandoverDetailID,
|
|
s.StockID,
|
|
bc.barcode_total
|
|
ORDER BY
|
|
MutasiHandoverDetailID";
|
|
$qry = $this->db->query($sql, [$mutasiHandoverID]);
|
|
if (!$qry) {
|
|
$this->sys_error_db("[Error] get item detail", $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 getWarehouse()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$branchid = $prm['branch_id'];
|
|
$user = $this->sys_user;
|
|
$whtype = ($user['M_UserLocationFlag'] == 'R') ? 'R' : 'B';
|
|
|
|
$sql = "SELECT
|
|
WarehouseID,
|
|
WarehouseCode,
|
|
CASE
|
|
WHEN WarehouseType = 'B' THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', M_BranchName)
|
|
WHEN WarehouseType = 'R' THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', S_RegionalName)
|
|
ELSE ''
|
|
END WarehouseName,
|
|
WarehouseType,
|
|
WarehouseIsDefault,
|
|
WarehouseS_RegionalID,
|
|
WarehouseM_BranchID,
|
|
S_RegionalID,
|
|
S_RegionalName
|
|
FROM warehouse
|
|
JOIN s_regional ON WarehouseS_RegionalID = S_RegionalID AND S_RegionalIsActive = 'Y'
|
|
LEFT JOIN m_branch ON WarehouseM_BranchID = M_BranchID AND M_BranchIsActive = 'Y'
|
|
WHERE WarehouseS_RegionalID = ?
|
|
AND WarehouseIsActive = 'Y' AND WarehouseIsTransit = 'N'
|
|
AND WarehouseType = ? AND WarehouseM_BranchID = ?
|
|
ORDER BY WarehouseName ASC";
|
|
$que = $this->db->query($sql, [
|
|
$user['S_RegionalID'],
|
|
$whtype,
|
|
$branchid
|
|
]);
|
|
if (!$que) {
|
|
$this->sys_error_db("[Error] get list warehouse");
|
|
exit;
|
|
}
|
|
$data = $que->result_array();
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function getRuangan()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$payload = $this->sys_input;
|
|
$branchid = $payload['branch_id'];
|
|
$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, [$branchid, $search]);
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("[Error] query listing ruangan");;
|
|
exit;
|
|
}
|
|
|
|
$data = $qry->result_array();
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function receive()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_begin();
|
|
$prm = $this->sys_input;
|
|
$user = $this->sys_user;
|
|
|
|
$mutasi_handover_id = $prm['mutasi_handover_id'];
|
|
$warehouse_id = $prm['warehouse_id'];
|
|
$ruangan_id = $prm['ruangan_id'];
|
|
|
|
$sql_mutasi_handover = "SELECT MutasiHandoverID,
|
|
MutasiHandoverMutasiRequestID,
|
|
MutasiHandoverNumber,
|
|
MutasiHandoverDate,
|
|
MutasiHandoverReceiveDate,
|
|
MutasiHandoverReceiveUserID,
|
|
MutasiHandoverItemCategoryID,
|
|
MutasiHandoverFromBranchID,
|
|
MutasiHandoverToBranchID
|
|
FROM mutasi_handover
|
|
WHERE MutasiHandoverIsActive = 'Y'
|
|
AND MutasiHandoverID = ?";
|
|
$qry_mutasi_handover = $this->db->query($sql_mutasi_handover, [$mutasi_handover_id]);
|
|
if (!$qry_mutasi_handover) {
|
|
$this->sys_error_db("[Error] get mutasi handover", $this->db);
|
|
exit;
|
|
}
|
|
$data_mh = $qry_mutasi_handover->row_array();
|
|
if ($data_mh['MutasiHandoverStatus'] == 'Received') {
|
|
$this->sys_error("Mutasi sudah pernah diterima", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$sql_detail_mh = "SELECT MutasiHandoverDetailID,
|
|
MutasiHandoverDetailMutasiHandoverID,
|
|
MutasiHandoverDetailMutasiRequestDetailID,
|
|
MutasiHandoverDetailReceiveOrderPoID,
|
|
MutasiHandoverDetailM_ItemID,
|
|
MutasiHandoverDetailItemUnitID,
|
|
MutasiHandoverDetailStockID_From,
|
|
MutasiHandoverDetailStockID_To,
|
|
MutasiHandoverDetailQty,
|
|
MutasiHandoverDetailBookValue
|
|
FROM mutasi_handover_detail
|
|
WHERE MutasiHandoverDetailIsActive = 'Y'
|
|
AND MutasiHandoverDetailMutasiHandoverID = ?";
|
|
$qry_detail_mh = $this->db->query($sql_detail_mh, [$mutasi_handover_id]);
|
|
if (!$qry_detail_mh) {
|
|
$this->sys_error_db("[Error] get mutasi handover detail", $this->db);
|
|
exit;
|
|
}
|
|
$data_detail_mh = $qry_detail_mh->result_array();
|
|
|
|
# Update mutasi handover
|
|
$sql_update_mh = "UPDATE mutasi_handover SET
|
|
MutasiHandoverReceiveDate = NOW(),
|
|
MutasiHandoverReceiveUserID = ?,
|
|
MutasiHandoverReceiveWarehouseID = ?,
|
|
MutasiHandoverReceiveM_RuanganID = ?,
|
|
MutasiHandoverStatus = 'Received',
|
|
MutasiHandoverLastUpdated = NOW(),
|
|
MutasiHandoverUserID = ?
|
|
WHERE MutasiHandoverID = ?";
|
|
$qry_update_mh = $this->db->query($sql_update_mh, [
|
|
$user['M_UserID'],
|
|
$warehouse_id,
|
|
$ruangan_id,
|
|
$user['M_UserID'],
|
|
$mutasi_handover_id
|
|
]);
|
|
if (!$qry_update_mh) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Update mutasi handover gagal", $this->db);
|
|
exit;
|
|
}
|
|
|
|
foreach ($data_detail_mh as $detail) {
|
|
# Kurangi stock asal
|
|
$sql_upd_stock = "UPDATE stock SET
|
|
StockQty = StockQty - ?,
|
|
StockLastUpdated = NOW(),
|
|
StockUserID = ?
|
|
WHERE StockID = ?";
|
|
$qry_upd_stock = $this->db->query($sql_upd_stock, [
|
|
intval($detail['MutasiHandoverDetailQty']),
|
|
$user['M_UserID'],
|
|
$detail['MutasiHandoverDetailStockID_From'],
|
|
]);
|
|
if (!$qry_upd_stock) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Update stock asal gagal", $this->db);
|
|
exit;
|
|
}
|
|
|
|
# ambil harga dari stock asal
|
|
$sql_cek_price = "SELECT StockItemPrice
|
|
FROM stock
|
|
WHERE StockID = ?";
|
|
$qry_cek_price = $this->db->query($sql_cek_price, [
|
|
$detail['MutasiHandoverDetailStockID_From']
|
|
]);
|
|
if (!$qry_cek_price) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Cek harga stock asal gagal", $this->db);
|
|
exit;
|
|
}
|
|
$stock_price_asal = $qry_cek_price->row_array();
|
|
|
|
# Cari atau buat stock tujuan
|
|
$sql_cek_stock = "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 = ?";
|
|
$qry_cek_stock = $this->db->query($sql_cek_stock, [
|
|
$detail['MutasiHandoverDetailM_ItemID'],
|
|
$detail['MutasiHandoverDetailItemUnitID'],
|
|
$warehouse_id,
|
|
$data_mh['MutasiHandoverItemCategoryID']
|
|
]);
|
|
if (!$qry_cek_stock) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Cek stock tujuan gagal", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$stock_data = $qry_cek_stock->row_array();
|
|
$stock_ID = $stock_data['StockID'];
|
|
$stock_qty_ori = intval($stock_data['StockQty']);
|
|
$stock_qty_price = doubleval($stock_data['StockItemPrice']);
|
|
$stock_qty_end = 0;
|
|
|
|
if (!empty($stock_data)) {
|
|
// calculate stock qty
|
|
$stock_qty_end = $stock_qty_ori + intval($detail['MutasiHandoverDetailQty']);
|
|
|
|
$sql_update_stock = "UPDATE stock SET
|
|
StockItemPrice = ?,
|
|
StockQty = ?,
|
|
StockLastUpdated = NOW(),
|
|
StockUserID = ?
|
|
WHERE StockID = ?";
|
|
$que_update_stock = $this->db->query($sql_update_stock, [
|
|
$stock_qty_price,
|
|
$stock_qty_end,
|
|
$user['M_UserID'],
|
|
$stock_ID
|
|
]);
|
|
if (!$que_update_stock) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert update stock", $this->db);
|
|
exit;
|
|
}
|
|
} else {
|
|
// insert stock baru
|
|
$sql_insert_stock = "INSERT INTO stock (
|
|
StockWarehouseAlmariID,
|
|
StockWarehouseRackID,
|
|
StockWarehouseID,
|
|
StockStockNumber,
|
|
StockItemID,
|
|
StockItemUnitID,
|
|
StockItemPrice,
|
|
StockQty,
|
|
StockLastUpdated,
|
|
StockUserID
|
|
) VALUES (0,0,?,fn_numbering('SN'),?,?,?,?,NOW(),?)";
|
|
$que_insert_stock = $this->db->query($sql_insert_stock, [
|
|
$warehouse_id,
|
|
$detail['MutasiHandoverDetailM_ItemID'],
|
|
$detail['MutasiHandoverDetailItemUnitID'],
|
|
$stock_price_asal['StockItemPrice'],
|
|
$detail['MutasiHandoverDetailQty'],
|
|
$user['M_UserID']
|
|
]);
|
|
if (!$que_insert_stock) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert new stock");
|
|
exit;
|
|
}
|
|
|
|
$stock_ID = $this->db->insert_id();
|
|
$stock_qty_end = intval($detail['MutasiHandoverDetailQty']);
|
|
}
|
|
|
|
# update mutasi_handover_detail stockID_To
|
|
$sql_upd_stock_id_mh = "UPDATE mutasi_handover_detail SET
|
|
MutasiHandoverDetailStockID_To = ?,
|
|
MutasiHandoverDetailLastUpdated = NOW(),
|
|
MutasiHandoverDetailUserID = ?
|
|
WHERE MutasiHandoverDetailID = ?";
|
|
$qry_upd_stock_id_mh = $this->db->query($sql_upd_stock_id_mh, [
|
|
$stock_ID,
|
|
$user['M_UserID'],
|
|
$detail['MutasiHandoverDetailID']
|
|
]);
|
|
if (!$qry_upd_stock_id_mh) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Update stockID_To mutasi handover detail gagal", $this->db);
|
|
exit;
|
|
}
|
|
|
|
# insert stock card
|
|
$sql_stock_card = "INSERT INTO stockcard (
|
|
StockCardWarehouseID,
|
|
StockCardDatetime,
|
|
StockCardItemID,
|
|
StockCardItemUnitID,
|
|
StockCardReffID,
|
|
StockCardStatus,
|
|
StockCardBefore,
|
|
StockCardIn,
|
|
StockCardOut,
|
|
StockCardAfter,
|
|
StockCardUserID
|
|
) VALUES (?, NOW(), ?, ?, ?, 'MRB', ?, ?, 0, ?, ?)";
|
|
$que_stock_card = $this->db->query($sql_stock_card, [
|
|
$warehouse_id,
|
|
$detail['MutasiHandoverDetailM_ItemID'],
|
|
$detail['MutasiHandoverDetailItemUnitID'],
|
|
$stock_ID,
|
|
$stock_qty_ori,
|
|
$detail['MutasiHandoverDetailQty'],
|
|
$stock_qty_end,
|
|
$user['M_UserID']
|
|
]);
|
|
if (!$que_stock_card) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert stock card");
|
|
exit;
|
|
}
|
|
|
|
# get barcode untuk nonaktifkan barcode lama #
|
|
$sql_get_barcode = "SELECT MutasiStockLockID,
|
|
MutasiStockLockT_BarcodeBarangID,
|
|
MutasiStockLockQtyLocked,
|
|
MutasiStockLockType
|
|
FROM mutasi_stock_lock
|
|
WHERE MutasiStockLockStatus = 'ACTIVE'
|
|
AND MutasiStockLockIsActive = 'Y'
|
|
AND MutasiStockLockMutasiRequestID = ?
|
|
AND MutasiStockLockStockID = ?
|
|
AND MutasiStockLockM_BranchID = ?";
|
|
$qry_get_barcode = $this->db->query($sql_get_barcode, [
|
|
$data_mh['MutasiHandoverMutasiRequestID'],
|
|
$detail['MutasiHandoverDetailStockID_From'],
|
|
$data_mh['MutasiHandoverFromBranchID']
|
|
]);
|
|
if (!$qry_get_barcode) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Get stock barcode gagal", $this->db);
|
|
exit;
|
|
}
|
|
$barcodes = $qry_get_barcode->result_array();
|
|
|
|
# cek qty detail vs barcode, qty tidak boleh lebih besar dari barcode
|
|
if (count($barcodes) < intval($detail['MutasiHandoverDetailQty'])) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error("Jumlah barcode tidak mencukupi untuk mutasi");
|
|
exit;
|
|
}
|
|
|
|
# Nonaktifkan barcode lama
|
|
foreach ($barcodes as $bc) {
|
|
$sql_upd_barcode = "UPDATE t_barcode_barang SET
|
|
T_BarcodeBarangIsActive = 'N',
|
|
T_BarcodeBarangUserID = ?,
|
|
T_BarcodeBarangLastUpdated = NOW()
|
|
WHERE T_BarcodeBarangID = ?";
|
|
$qry_upd_barcode = $this->db->query($sql_upd_barcode, [
|
|
$user['M_UserID'],
|
|
$bc['MutasiStockLockT_BarcodeBarangID']
|
|
]);
|
|
if (!$qry_upd_barcode) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Update barcode lama gagal", $this->db);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
# Generate barcode baru
|
|
if (count($barcodes) > 0) {
|
|
for ($i = 0; $i < count($barcodes); $i++) {
|
|
# generate nomor barcode #
|
|
$noBarcode = $this->generateNoBarcode($user, $ruangan_id, 'BNP', $detail['MutasiHandoverDetailM_ItemID']);
|
|
|
|
# INSERT INTO t_barcode_barang #
|
|
$sqlInsertBarcode = "INSERT INTO t_barcode_barang(
|
|
T_BarcodeBarangStockID,
|
|
T_BarcodeBarangReceiveOrderPoID,
|
|
T_BarcodeBarangReceiveOrderPoDetailID,
|
|
T_BarcodeBarangRefID,
|
|
T_BarcodeBarangRefType,
|
|
T_BarcodeBarangM_ItemID,
|
|
T_BarcodeBarangItemUnitID,
|
|
T_BarcodeBarangNumber,
|
|
T_BarcodeBarangM_RuanganID,
|
|
T_BarcodeBarangM_BranchID,
|
|
T_BarcodeBarangIsActive,
|
|
T_BarcodeBarangUserID,
|
|
T_BarcodeBarangCreated) VALUES(?,0,0,?,'MUTASI',?,?,?,?,?,'Y',?,NOW())";
|
|
$qryInsertBarcode = $this->db->query($sqlInsertBarcode, array(
|
|
$stock_ID,
|
|
$mutasi_handover_id,
|
|
$detail['MutasiHandoverDetailM_ItemID'],
|
|
$detail['MutasiHandoverDetailItemUnitID'],
|
|
$noBarcode,
|
|
$ruangan_id,
|
|
$data_mh['MutasiHandoverToBranchID'],
|
|
$user['M_UserID']
|
|
));
|
|
if (!$qryInsertBarcode) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert data barcode item");
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
# CONSUMED LOCK STOCK
|
|
$sql_consumed_lock = "UPDATE mutasi_stock_lock SET
|
|
MutasiStockLockStatus = 'CONSUMED',
|
|
MutasiStockLockLastUpdated = NOW(),
|
|
MutasiStockLockUserID = ?
|
|
WHERE MutasiStockLockMutasiRequestDetailID = ?
|
|
AND MutasiStockLockStatus = 'ACTIVE'
|
|
AND MutasiStockLockType = 'INV'
|
|
AND MutasiStockLockIsActive = 'Y'";
|
|
$qry_consumed_lock = $this->db->query($sql_consumed_lock, [
|
|
$user['M_UserID'],
|
|
$detail['MutasiHandoverDetailMutasiRequestDetailID']
|
|
]);
|
|
if (!$qry_consumed_lock) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Update lock stock gagal", $this->db);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// UPDATE STATUS
|
|
$sql_upd_handover = "UPDATE mutasi_handover
|
|
SET MutasiHandoverStatus = 'Received',
|
|
MutasiHandoverReceiveDate = NOW(),
|
|
MutasiHandoverReceiveUserID = ?,
|
|
MutasiHandoverReceiveWarehouseID = ?,
|
|
MutasiHandoverReceiveM_RuanganID = ?
|
|
WHERE MutasiHandoverID = ?";
|
|
$qry_upd_handover = $this->db->query($sql_upd_handover, [
|
|
$user['M_UserID'],
|
|
$warehouse_id,
|
|
$ruangan_id,
|
|
$data_mh['MutasiHandoverID']
|
|
]);
|
|
if (!$qry_upd_handover) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Update status mutasi handover gagal", $this->db);
|
|
exit;
|
|
}
|
|
|
|
// LOG MUTASI HANDOVER
|
|
$sql_get_header = "SELECT * FROM mutasi_handover WHERE MutasiHandoverID = ?";
|
|
$qry_get_header = $this->db->query($sql_get_header, [$data_mh['MutasiHandoverID']]);
|
|
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, [$data_mh['MutasiHandoverID']]);
|
|
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', "Received data mutasi handover ID : {$header_handover['MutasiHandoverID']}", 'RECEIVED', $header_handover['MutasiHandoverID'], $header_handover, $user['M_UserID']);
|
|
|
|
# get data before
|
|
$dataMrBefore = $this->getDataMutasiRequest($data_mh['MutasiHandoverMutasiRequestID']);
|
|
|
|
$sql_upd_request = "UPDATE mutasi_request
|
|
SET MutasiRequestStatus = 'Received',
|
|
MutasiRequestLastUpdated = NOW(),
|
|
MutasiRequestUserID = ?
|
|
WHERE MutasiRequestID = ?";
|
|
$qry_upd_request = $this->db->query($sql_upd_request, [
|
|
$user['M_UserID'],
|
|
$data_mh['MutasiHandoverMutasiRequestID']
|
|
]);
|
|
if (!$qry_upd_request) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("Update status mutasi request gagal", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$dataMrAfter = $this->getDataMutasiRequest($data_mh['MutasiHandoverMutasiRequestID']);
|
|
$this->insertLogMutasiRequest($data_mh['MutasiHandoverMutasiRequestID'], 'RECEIVED', $dataMrBefore, $dataMrAfter, $user['M_UserID'], "Received data mutasi request by user ID : {$user['M_UserID']}");
|
|
$this->insertUserActivity('MR', "Received data mutasi request by user ID : {$user['M_UserID']}", 'RECEIVED', $data_mh['MutasiHandoverMutasiRequestID'], '', $user['M_UserID']);
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("Mutasi berhasil diterima");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function getBarcodes()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_begin();
|
|
$param = $this->sys_input;
|
|
$user = $this->sys_user;
|
|
$mutasi_handover_id = $param['mutasi_handover_id'];
|
|
|
|
$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
|
|
LEFT JOIN m_ruangan ON M_RuanganID = T_BarcodeBarangM_RuanganID
|
|
WHERE T_BarcodeBarangRefID = ?
|
|
AND T_BarcodeBarangIsActive = 'Y'
|
|
ORDER BY T_BarcodeBarangID";
|
|
$que = $this->db->query($sql, [$mutasi_handover_id]);
|
|
if (!$que) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get barcodes");
|
|
exit;
|
|
}
|
|
|
|
$barcodes = $que->result_array();
|
|
if ($barcodes) {
|
|
foreach ($barcodes as $k => $v) {
|
|
if ($v['chex'] == 'N')
|
|
$barcodes[$k]['chex'] = false;
|
|
else
|
|
$barcodes[$k]['chex'] = true;
|
|
}
|
|
}
|
|
$this->db->trans_commit();
|
|
$this->sys_ok($barcodes);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
|
|
// ------------------------------------------------- PRIVATE FUNCTION ----------------------------------------------- //
|
|
private function generateNoBarcode($user, $lokasiID, $typeBarcode, $itemid)
|
|
{
|
|
$branchid = ($user['loginLevel'] == 'branch') ? $user['M_BranchID'] : 0;
|
|
|
|
if ($user['loginlevel'] == 'regional') {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error('Tidak bisa generare No Barcode, anda login sebagai regional');
|
|
exit;
|
|
}
|
|
|
|
// -- numtype = tipe numbering
|
|
// -- itemid = id item inventaris/asset
|
|
// -- branchid = id cabang
|
|
// -- ruanganid = id ruangan di cabang
|
|
|
|
$sqlnum = "SELECT `fn_num_nonpersediaan`(?, ?, ?, ?) AS numpd;";
|
|
$quenum = $this->db->query($sqlnum, [$typeBarcode, $itemid, $branchid, $lokasiID]);
|
|
|
|
if (!$quenum) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] generate number Barcode");
|
|
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 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;
|
|
}
|
|
}
|
|
}
|