isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$payload = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
// $currentPage = isset($payload["currentPage"]) ? $payload["currentPage"] : 1;
$pageSize = isset($payload["pageSize"]) ? $payload["pageSize"] : 10;
// $offset = ($currentPage - 1) * $pageSize;
$startDate = isset($payload["startDate"]) ? $payload["startDate"] : "";
$endDate = isset($payload["endDate"]) ? $payload["endDate"] : "";
$status = isset($payload["status"]) ? $payload["status"] : "";
$search = isset($payload["search"]) ? $payload["search"] : "";
$approveLevelID = $this->sys_user['M_UserM_ApproveLevelID'];
$flag = $payload['flag'];
if ($approveLevelID == '1') {
if ($flag == 'G') {
$sqlRIO = " AND RequestItemOutVerifiedUserID = 0";
}
} else if ($approveLevelID == '2') {
if ($flag == 'G') {
$sqlRIO = " AND RequestItemOutVerifiedUserID != 0";
}
}
$totalCount = 0;
$totalPage = 1;
$number_offset = 0;
$number_limit = 10;
if ($payload["currentPage"] > 0) {
$number_offset = ($payload["currentPage"] - 1) * $number_limit;
}
$sql = "SELECT COUNT(*) as total
FROM request_item_out
JOIN s_regional ON S_RegionalID = RequestItemOutS_RegionalID
WHERE
RequestItemOutIsActive = 'Y' AND
( RequestItemOutDate BETWEEN ? AND ? ) AND
( RequestItemOutStatus = ? OR ? = '' ) AND
( RequestItemOutNumber LIKE ?)
$sqlRIO
ORDER BY RequestItemOutNumber DESC";
$exec = $this->db->query($sql, [$startDate, $endDate, $status, $status, '%' . $search . '%']);
if ($exec) {
$totalCount = $exec->result_array()[0]["total"];
$totalPage = ceil($totalCount / $pageSize);
} else {
$this->sys_error_db("count request item out", $this->db);
exit;
}
$sql = "SELECT DISTINCT RequestItemOutID as rioId,
RequestItemOutNumber as rioNumber,
RequestItemOutWarehouseID as rioWarehouseId,
RequestItemOutDate as rioDate,
RequestItemOutStatus as rioStatus,
RequestItemOutS_RegionalID as rioRegionalId,
S_RegionalName as rioRegionalName,
RequestItemOutM_BranchCode as rioBranchCode,
M_BranchName as rioBranchName,
RequestItemOutNote as rioNote,
RequestItemOutDivisionID as rioDivisionId,
IFNULL(S_RegionalID, '') as S_RegionalID,
IFNULL(S_RegionalName, '') as S_RegionalName,
IFNULL(M_BranchCode, '') as M_BranchCode,
IFNULL(M_BranchName, '') as M_BranchName,
RequestItemOutVerifiedUserID,
RequestItemOutVerifiedDate,
RequestItemOutApprovedUserID,
RequestItemOutApprovedDate
FROM request_item_out
JOIN s_regional ON S_RegionalID = RequestItemOutS_RegionalID
LEFT JOIN m_branch ON M_BranchCode = RequestItemOutM_BranchCode
WHERE
RequestItemOutIsActive = 'Y' AND
( RequestItemOutDate BETWEEN ? AND ? ) AND
( RequestItemOutStatus = ? OR ? = '' ) AND
( RequestItemOutNumber LIKE ?)
$sqlRIO
ORDER BY RequestItemOutNumber DESC
LIMIT ? OFFSET ?";
$exec = $this->db->query($sql, [$startDate, $endDate, $status, $status, '%' . $search . '%', $number_limit, $number_offset]);
if (!$exec) {
$this->sys_error_db("select request item out", $this->db);
exit;
}
$rows = $exec->result_array();
$result = array(
"total" => $totalPage,
"totalFilter" => $totalCount,
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function searchDetail()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$payload = $this->sys_input;
// Menggunakan parameter query
$queryCount = "SELECT count(*) as total
FROM purchase_request_direct_detail
WHERE PurchaseRequestDirectDetailIsActive = 'Y'
AND PurchaseRequestDirectDetailPurchaseRequestDirectID = ?";
$exec = $this->db->query($queryCount, [$payload['PRID']]);
$totalCount = 0;
if ($exec) {
$totalCount = $exec->result_array()[0]["total"];
} else {
$this->db->trans_rollback();
$this->sys_error_db("select purchase request detail", $this->db);;
exit;
}
// Menggunakan parameter query
$query = "SELECT *,
ROW_NUMBER() OVER(ORDER BY PurchaseRequestDirectDetailID) RowNumber
FROM purchase_request_direct_detail
WHERE PurchaseRequestDirectDetailIsActive = 'Y'
AND PurchaseRequestDirectDetailPurchaseRequestDirectID = ?
ORDER BY PurchaseRequestDirectDetailStatus ASC,
PurchaseRequestDirectDetailID ASC";
$exec = $this->db->query($query, [$payload['PRID']]);
if ($exec) {
$rows = $exec->result_array();
} else {
$this->db->trans_rollback();
$this->sys_error_db("select purchase request detail", $this->db);
exit;
}
$result = array(
"totalFilter" => $totalCount,
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getBranch()
{
try {
$query = "SELECT DISTINCT
M_BranchCode,
M_BranchName
FROM m_branch
WHERE M_BranchIsActive = 'Y'
ORDER BY M_BranchName ASC";
$exec = $this->db->query($query, []);
if ($exec) {
$rows = $exec->result_array();
} else {
$this->db->trans_rollback();
$this->sys_error_db("select branch", $this->db);
exit;
}
$result = array(
"records" => $rows,
"sql" => $this->db->last_query()
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getRegionalBranchByUser()
{
try {
$userId = $this->sys_user["M_UserID"];
$query = "SELECT DISTINCT
M_BranchCode,
M_BranchName
FROM m_branch
WHERE M_BranchIsActive = 'Y'
ORDER BY M_BranchName ASC";
$exec = $this->db->query($query, []);
if ($exec) {
$rows = $exec->result_array();
} else {
$this->db->trans_rollback();
$this->sys_error_db("select branch", $this->db);
exit;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function deleteRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
}
$this->db->trans_begin();
$payload = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
$rioID = isset($prm["RIOID"]) ? $prm["RIOID"] : "";
// Menggunakan parameter query untuk delete
$sql = "UPDATE request_item_out SET
RequestItemOutLastUpdated = NOW(),
RequestItemOutUserID = ?,
RequestItemOutIsActive = 'N'
WHERE RequestItemOutID = ?";
$deleteParams = [$userId, $rioID];
$exec = $this->db->query($sql, $deleteParams);
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("request delete error", $this->db);
exit;
}
$sql_detail = "UPDATE request_item_out_detail SET
RequestItemOutDetailIsActive = 'N',
RequestItemOutDetailLastUpdated = NOW(),
RequestItemOutDetailUserID = ?
WHERE RequestItemOutDetailRequestItemOutID = ?";
$deleteDetailParams = [$userId, $rioID];
$execDetail = $this->db->query($sql_detail, $deleteDetailParams);
if (!$execDetail) {
$this->db->trans_rollback();
$this->sys_error_db("request dwtail delete error", $this->db);
exit;
}
// insert log
$sql_json = "SELECT request_item_out.*, '' as detail
FROM request_item_out
WHERE RequestItemOutIsActive = 'N'
AND RequestItemOutID = ?";
$qry_json = $this->db->query($sql_json, [$rioID]);
if (!$qry_json) {
$this->db->trans_rollback();
$this->sys_error_db("select json rio");
exit;
}
$row_json = $qry_json->row_array();
$userdesc = "Request item out dengan kode " . $row_json['RequestItemOutNumber'] . " telah di hapus";
$sql_json_detail = "SELECT request_item_out_detail.*
FROM request_item_out_detail
WHERE RequestItemOutDetailIsActive = 'N'
AND RequestItemOutDetailRequestItemOutID = ?";
$qry_json_detail = $this->db->query($sql_json_detail, [$rioID]);
if ($qry_json_detail) {
$row_json["detail"] = $qry_json_detail->result_array();
} else {
$this->sys_error_db("select detail rio", $this->db);
exit;
}
$data_json = $row_json;
$sql_log = "INSERT INTO user_activity(
UserActivityCode,
UserActivityStatus,
UserActivityDescription,
UserActivityRefID,
UserActivityData,
UserActivityUserID,
UserActivityCreated
) VALUES('RIO','DELETE',?,?,?,?,NOW())";
$qry_log = $this->db->query($sql_log, [
$userdesc,
$rioID,
json_encode($data_json),
$userId
]);
if (!$qry_log) {
$this->db->trans_rollback();
$this->sys_error_db("insert log", $this->db);
exit;
}
$this->db->trans_commit();
$result = array("total" => 1, "records" => array("xId" => 0));
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function saveDetail()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
}
$this->db->trans_begin();
$payload = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
$PRDTotalPrice = intval($payload['PRDAmountRequest']) * intval($payload['PRDEstimationPrice']);
// Gunakan parameter untuk query existensi
$query = "SELECT COUNT(*) as exist
FROM purchase_request_direct_detail
WHERE PurchaseRequestDirectDetailIsActive = 'Y'
AND PurchaseRequestDirectDescription = ?
AND PurchaseRequestDirectDetailPurchaseRequestDirectID = ?";
$existParams = [$payload['PRDDescriptionDetail'], $payload['PRID']];
$exist = $this->db->query($query, $existParams);
if ($exist) {
$row = $exist->row()->exist;
} else {
$this->sys_error_db("exist error", $this->db);
exit;
}
if ($row == 0) {
// Gunakan parameter untuk query insert
$sql = "INSERT INTO purchase_request_direct_detail(
PurchaseRequestDirectDetailPurchaseRequestDirectID,
PurchaseRequestDirectDescription,
PurchaseRequestDirectDetailAmountRequest,
PurchaseRequestDirectDetailAmount,
PurchaseRequestDirectDetailEstimationPrice,
PurchaseRequestDirectDetailTotalEstimationPrice,
PurchaseRequestDirectDetailTotalRealitationPrice,
PurchaseRequestDirectDetailStatus,
PurchaseRequestDirectDetailIsActive,
PurchaseRequestDirectDetailCreated,
PurchaseRequestDirectDetailLastUpdated,
PurchaseRequestDirectDetailDeleted,
PurchaseRequestDirectDetailCreatedUserID,
PurchaseRequestDirectDetailLastUpdatedUserID,
PurchaseRequestDirectDetailDeletedUserID
) VALUES (?, ?, ?, NULL, ?, ?, NULL, 'Pending', 'Y', NOW(), NULL, NULL, ?, NULL, NULL)";
$insertParams = [
$payload['PRID'],
$payload['PRDDescriptionDetail'],
$payload['PRDAmountRequest'],
$payload['PRDEstimationPrice'],
$PRDTotalPrice,
$userId
];
$exec = $this->db->query($sql, $insertParams);
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("request insert error", $this->db);
exit;
} else {
// Gunakan parameter untuk query total harga
$sqlTotalPrice = "SELECT SUM(PurchaseRequestDirectDetailTotalEstimationPrice) AS Total
FROM purchase_request_direct_detail
WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = ?
AND PurchaseRequestDirectDetailIsActive = 'Y'";
$totalPriceParams = [$payload['PRID']];
$exec = $this->db->query($sqlTotalPrice, $totalPriceParams);
$total = 0;
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("order purchase request error", $this->db);
exit;
} else {
$total = $exec->result_array()[0]["Total"];
}
// Gunakan parameter untuk query update
$sql = "UPDATE purchase_request_direct SET
PurchaseRequestDirectTotalEstimation = ?,
PurchaseRequestLastUpdated = NOW(),
PurchaseRequestLastUpdatedUserID = ?
WHERE PurchaseRequestDirectID = ?
AND PurchaseRequestDirectIsActive = 'Y'";
$updateParams = [$total, $userId, $payload['PRID']];
$exec = $this->db->query($sql, $updateParams);
}
$this->db->trans_commit();
$result = array("total" => 1, "records" => array("xId" => 0));
$this->sys_ok($result);
} else {
$errors = array();
if ($row != 0) {
array_push($errors, array('msg' => 'Data sudah ada'));
}
$result = array("total" => -1, "errors" => $errors, "records" => array('status' => 'ERROR'));
$this->sys_ok($result);
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function updateDetail()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
}
$this->db->trans_begin();
$payload = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
$PRDTotalPrice = intval($payload["PRDAmountRequest"]) * intval($payload["PRDEstimationPrice"]);
// Gunakan parameter untuk query update
$sql = "UPDATE purchase_request_direct_detail SET
PurchaseRequestDirectDescription = ?,
PurchaseRequestDirectDetailAmountRequest = ?,
PurchaseRequestDirectDetailEstimationPrice = ?,
PurchaseRequestDirectDetailTotalEstimationPrice = ?,
PurchaseRequestDirectDetailLastUpdated = NOW(),
PurchaseRequestDirectDetailLastUpdatedUserID = ?
WHERE PurchaseRequestDirectDetailID = ?";
$updateParams = [
$payload["PRDDescriptionDetail"],
$payload["PRDAmountRequest"],
$payload["PRDEstimationPrice"],
$PRDTotalPrice,
$userId,
$payload["PRDID"]
];
$exec = $this->db->query($sql, $updateParams);
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("request update error", $this->db);
exit;
} else {
// Gunakan parameter untuk query total harga
$sqlTotalPrice = "SELECT SUM(PurchaseRequestDirectDetailTotalEstimationPrice) AS Total
FROM purchase_request_direct_detail
WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = ?
AND PurchaseRequestDirectDetailIsActive = 'Y'";
$totalPriceParams = [$payload["PRID"]];
$exec = $this->db->query($sqlTotalPrice, $totalPriceParams);
$total = 0;
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("order purchase request error", $this->db);
exit;
} else {
$total = $exec->result_array()[0]["Total"];
}
// Gunakan parameter untuk query update total
$sql = "UPDATE purchase_request_direct SET
PurchaseRequestDirectTotalEstimation = ?,
PurchaseRequestLastUpdated = NOW(),
PurchaseRequestLastUpdatedUserID = ?
WHERE PurchaseRequestDirectID = ?
AND PurchaseRequestDirectIsActive = 'Y'";
$updateTotalParams = [$total, $userId, $payload["PRID"]];
$exec = $this->db->query($sql, $updateTotalParams);
}
$this->db->trans_commit();
$result = array("total" => 1, "records" => array("xId" => $payload["PRDID"]));
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function deleteDetail()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
}
$this->db->trans_begin();
$payload = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
// Gunakan parameter untuk query delete
$sql = "UPDATE purchase_request_direct_detail SET
PurchaseRequestDirectDetailDeleted = NOW(),
PurchaseRequestDirectDetailDeletedUserID = ?,
PurchaseRequestDirectDetailIsActive = 'N'
WHERE PurchaseRequestDirectDetailID = ?";
$deleteParams = [$userId, $payload["PRDID"]];
$exec = $this->db->query($sql, $deleteParams);
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("request delete error", $this->db);
exit;
} else {
// Gunakan parameter untuk query total harga
$sqlTotalPrice = "SELECT SUM(PurchaseRequestDirectDetailTotalEstimationPrice) AS Total
FROM purchase_request_direct_detail
WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = ?
AND PurchaseRequestDirectDetailIsActive = 'Y'";
$totalPriceParams = [$payload["PRID"]];
$exec = $this->db->query($sqlTotalPrice, $totalPriceParams);
$total = 0;
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("order purchase request error", $this->db);
exit;
} else {
$total = $exec->result_array()[0]["Total"] ?? 0;
}
// Gunakan parameter untuk query update total
$sql = "UPDATE purchase_request_direct SET
PurchaseRequestDirectTotalEstimation = ?,
PurchaseRequestLastUpdated = NOW(),
PurchaseRequestLastUpdatedUserID = ?
WHERE PurchaseRequestDirectID = ?
AND PurchaseRequestDirectIsActive = 'Y'";
$updateTotalParams = [$total, $userId, $payload["PRID"]];
$exec = $this->db->query($sql, $updateTotalParams);
}
$this->db->trans_commit();
$result = array("total" => 1, "records" => array("xId" => 0));
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function orderRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
}
$this->db->trans_begin();
$payload = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
// Gunakan parameter untuk query update detail
$sqlDetail = "UPDATE purchase_request_direct_detail SET
PurchaseRequestDirectDetailLastUpdated = NOW(),
PurchaseRequestDirectDetailLastUpdatedUserID = ?
WHERE PurchaseRequestDirectDetailPurchaseRequestDirectID = ?
AND PurchaseRequestDirectDetailIsActive = 'Y'
AND PurchaseRequestDirectDetailStatus = 'Pending'";
$detailParams = [$userId, $payload["PRID"]];
$exec = $this->db->query($sqlDetail, $detailParams);
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("order purchase request error", $this->db);
exit;
}
// Gunakan parameter untuk query update status
$sql = "UPDATE purchase_request_direct SET
PurchaseRequestDirectStatus = 'Pending',
PurchaseRequestLastUpdated = NOW(),
PurchaseRequestLastUpdatedUserID = ?
WHERE PurchaseRequestDirectID = ?
AND PurchaseRequestDirectIsActive = 'Y'";
$updateParams = [$userId, $payload["PRID"]];
$exec = $this->db->query($sql, $updateParams);
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("order purchase request error", $this->db);
exit;
}
$this->db->trans_commit();
// Gunakan parameter untuk query select
$sql = "SELECT *,
ROW_NUMBER() OVER(ORDER BY PurchaseRequestDirectNumber) RowNumber
FROM purchase_request_direct
WHERE PurchaseRequestDirectIsActive = 'Y'
AND PurchaseRequestCreatedUserID = ?
AND PurchaseRequestDirectID = ?";
$selectParams = [$userId, $payload["PRID"]];
$exec = $this->db->query($sql, $selectParams);
$row = [];
if (!$exec) {
$this->db->trans_rollback();
$this->sys_error_db("order purchase request error", $this->db);
exit;
} else {
$row = $exec->result_array();
}
$result = array("total" => 1, "records" => $row);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getDivisionByUser()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
// $userId = $this->sys_user["M_UserID"];
$prm = $this->sys_input;
$userId = $prm["userId"];
$rows = [];
$query = "SELECT DISTINCT
DivisionID,
DivisionCode,
DivisionName
FROM division
WHERE DivisionIsActive = 'Y'
ORDER BY DivisionName ASC";
$exec = $this->db->query($query);
if ($exec) {
$rows = $exec->result_array();
} else {
$this->db->trans_rollback();
$this->sys_error_db("select division", $this->db);
exit;
}
if ($prm["act"] == "edit") {
$sql = "SELECT DISTINCT
DivisionID,
DivisionCode,
DivisionName
FROM division
JOIN m_userdivision ON M_UserDivisionDivisionID = DivisionID
WHERE DivisionIsActive = 'Y'
AND DivisionID = ?
ORDER BY M_UserDivisionID DESC
LIMIT 1";
$exec = $this->db->query($sql, [$prm["DivisionID"]]);
if ($exec) {
$row = $exec->result_array();
} else {
$this->sys_error_db("select division", $this->db);
exit;
}
} else {
$sql = "SELECT DISTINCT
DivisionID,
DivisionCode,
DivisionName
FROM division
JOIN m_userdivision ON M_UserDivisionDivisionID = DivisionID AND M_UserDivisionM_UserID = ?
WHERE DivisionIsActive = 'Y'
ORDER BY M_UserDivisionID DESC
LIMIT 1";
$exec = $this->db->query($sql, [$userId]);
if ($exec) {
$row = $exec->result_array();
} else {
$this->sys_error_db("select division by user", $this->db);
exit;
}
}
$result = array(
"records" => $rows,
"selected" => $row
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getItemGroupSubGroup()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$division = isset($prm["division"]) ? $prm["division"] : "";
$rows = [];
$rows[] = array("Nat_GroupID" => "", "Nat_GroupCode" => "", "Nat_GroupName" => "Semua Grup", "subGroups" => [
array("Nat_SubGroupID" => "", "Nat_SubGroupCode" => "", "Nat_SubGroupName" => "Semua Sub Grup")
]);
$sql = "SELECT DISTINCT
Nat_GroupID,
Nat_GroupCode,
Nat_GroupName,
'' as subGroups
FROM nat_group
JOIN m_item ON M_ItemNat_GroupID = Nat_GroupID AND M_ItemIsActive = 'Y'
JOIN m_itemdivision ON M_ItemDivisionM_ItemID = M_ItemID AND M_ItemDivisionIsActive = 'Y' AND (M_ItemDivisionDivisionID = ? OR ? = '')
WHERE Nat_GroupIsActive = 'Y'
ORDER BY Nat_GroupID ASC";
$query = $this->db->query($sql, [$division, $division]);
if (!$query) {
$this->sys_error_db("item group list", $this->db);
exit;
}
$rst = $query->result_array();
foreach ($rst as $key => $row) {
$row["subGroups"] = array(
array("Nat_SubGroupID" => "", "Nat_SubGroupCode" => "", "Nat_SubGroupName" => "Semua Sub Grup")
);
if ($row["Nat_GroupID"] != "") {
$sqlSubGroup = "SELECT DISTINCT
Nat_SubGroupID,
Nat_SubGroupCode,
Nat_SubGroupName
FROM nat_subgroup
WHERE Nat_SubGroupIsActive = 'Y'
AND Nat_SubGroupNat_GroupID = ?
ORDER BY Nat_SubGroupID ASC";
$querySubGroup = $this->db->query($sqlSubGroup, [$row["Nat_GroupID"]]);
if (!$querySubGroup) {
$this->sys_error_db("item sub group list", $this->db);
exit;
}
$subGroups = $querySubGroup->result_array();
foreach ($subGroups as $keySubGroup => $subGroup) {
$row["subGroups"][] = $subGroup;
}
}
$rows[] = $row;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getItems()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = isset($prm["search"]) ? $prm["search"] : "";
$division = isset($prm["division"]) ? $prm["division"] : "";
$itemGroup = isset($prm["itemGroup"]) ? $prm["itemGroup"] : "";
$itemSubGroup = isset($prm["itemSubGroup"]) ? $prm["itemSubGroup"] : "";
$unitPurchase = isset($prm["unitPurchase"]) ? $prm["unitPurchase"] : "purchase";
$currentPage = isset($prm["currentPage"]) ? $prm["currentPage"] : 1;
$warehouseID = isset($prm["warehouseID"]) ? $prm["warehouseID"] : 0;
$params = [];
// Menambahkan parameter untuk unitPurchase
$params[] = $unitPurchase;
$params[] = $unitPurchase;
$filterDivision = "";
if ($division != "") {
$filterDivision = "JOIN m_itemdivision ON M_ItemDivisionM_ItemID = M_ItemID AND M_ItemDivisionIsActive = 'Y' AND (M_ItemDivisionDivisionID = ? OR ? = '')";
$params[] = $division;
$params[] = $division;
}
$filterItemGroup = "";
if ($itemGroup != "") {
$filterItemGroup = "JOIN nat_group ON M_ItemNat_GroupID = Nat_GroupID AND Nat_GroupIsActive = 'Y' AND (Nat_GroupID = ? OR ? = '')";
$params[] = $itemGroup;
$params[] = $itemGroup;
}
$filterItemSubGroup = "";
if ($itemSubGroup != "") {
$filterItemSubGroup = "JOIN nat_subgroup ON M_ItemNat_SubGroupID = Nat_SubGroupID AND Nat_SubGroupIsActive = 'Y' AND (Nat_SubGroupID = ? OR ? = '')";
$params[] = $itemSubGroup;
$params[] = $itemSubGroup;
}
$params[] = '%' . $search . '%';
$limit = 10;
$offset = ($currentPage - 1) * $limit;
$sql = "SELECT COUNT(*) as total FROM (
SELECT
DISTINCT M_ItemID
FROM m_item
JOIN itemunitmap ON ItemUnitMapM_ItemID = M_ItemID AND
((ItemUnitMapIsPurchase = 'Y' AND ? = 'purchase') OR
(ItemUnitMapIsBase = 'Y' AND ? = 'base')) AND
ItemUnitMapIsActive = 'Y'
JOIN itemunit ON ItemUnitID = ItemUnitMapItemUnitID AND
ItemUnitIsActive = 'Y'
$filterDivision
$filterItemGroup
$filterItemSubGroup
WHERE M_ItemIsActive = 'Y' AND
M_ItemItem_CategoryID = '1'
AND M_ItemDesc LIKE ?
) as item";
$query = $this->db->query($sql, $params);
if (!$query) {
$this->sys_error_db("item list", $this->db);
exit;
}
$row = $query->row_array();
$total = ceil($row["total"] / $limit);
$params[] = $limit;
$params[] = $offset;
$sql = "SELECT
DISTINCT M_ItemID as itemId,
M_ItemCode as itemCode,
M_ItemDesc as itemDesc,
0 as qty,
ItemUnitID as unitId,
ItemUnitCode as unitCode,
ItemUnitName as unitName,
0 as detailId,
'draft' as status,
0 as stockDivisi,
0 as stockWarehouse
FROM m_item
JOIN itemunitmap ON ItemUnitMapM_ItemID = M_ItemID AND
((ItemUnitMapIsPurchase = 'Y' AND ? = 'purchase') OR
(ItemUnitMapIsBase = 'Y' AND ? = 'base')) AND
ItemUnitMapIsActive = 'Y'
JOIN itemunit ON ItemUnitID = ItemUnitMapItemUnitID AND
ItemUnitIsActive = 'Y'
$filterDivision
$filterItemGroup
$filterItemSubGroup
WHERE M_ItemIsActive = 'Y' AND
M_ItemItem_CategoryID = '1'
AND M_ItemDesc LIKE ?
ORDER BY M_ItemDesc ASC
LIMIT ? OFFSET ?";
// Parameter akhir yang digunakan untuk query
$searchParam = $params;
$query = $this->db->query($sql, $searchParam);
if (!$query) {
$this->sys_error_db("item list", $this->db);
//$this->sys_error($this->db->error());
exit;
}
// echo $this->db->last_query();
// exit;
$rows = $query->result_array();
if (count($rows) > 0) {
foreach ($rows as $key => $row) {
$rows[$key]["isSelected"] = $row["isSelected"] == "Y" ? true : false;
$sqldivisi = "SELECT StockID,
StockItemPrice,
StockBatchNo,
StockWarehouseID,
StockItemID,
SUM(StockQty) as stockDivisi
FROM stock
JOIN m_item ON StockItemID = M_ItemID
AND M_ItemIsActive = 'Y'
JOIN m_itemdivision ON M_ItemID = M_ItemDivisionM_ItemID AND M_ItemDivisionIsActive = 'Y'
AND M_ItemDivisionDivisionID = ?
WHERE StockItemID = ?
AND StockItemUnitID = ?";
$qrydivisi = $this->db->query($sqldivisi, [
$division,
$row['itemId'],
$row['unitId']
]);
if (!$qrydivisi) {
$this->sys_error_db("get stock divisi error", $this->db);
exit;
}
$rowstokdivisi = $qrydivisi->row_array();
$rows[$key]["stockDivisi"] = $rowstokdivisi["stockDivisi"];
$sqlwarehouse = "SELECT StockID,
StockItemPrice,
StockBatchNo,
StockWarehouseID,
StockItemID,
SUM(StockQty) as stockWarehouse
FROM stock
WHERE StockItemID = ?
AND StockItemUnitID = ?
AND StockWarehouseID = ?";
$qrywarehouse = $this->db->query($sqlwarehouse, [
$row['itemId'],
$row['unitId'],
$warehouseID
]);
if (!$qrywarehouse) {
$this->sys_error_db("get stock gudang error", $this->db);
exit;
}
$rowstokwarehouse = $qrywarehouse->row_array();
$rows[$key]["stockWarehouse"] = $rowstokwarehouse["stockWarehouse"];
}
}
$result = array(
"records" => $rows,
"total" => $total
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getUnit()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = isset($prm["search"]) ? $prm["search"] : "";
// Menggunakan parameter query untuk pencarian unit
$sql = "SELECT
ItemUnitID,
ItemUnitCode,
ItemUnitName,
ItemUnitCreated,
ItemUnitLastUpdated,
ItemUnitIsActive,
ItemUnitUserID
FROM itemunit
WHERE ItemUnitIsActive = 'Y'
AND ItemUnitName LIKE ?
ORDER BY ItemUnitName ASC";
$searchParam = ['%' . $search . '%'];
$query = $this->db->query($sql, $searchParam);
if (!$query) {
$this->sys_error_db("item unit list", $this->db);
exit;
}
$rows = $query->result_array();
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getSelectedItem()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$prId = isset($prm["prId"]) ? $prm["prId"] : "";
if ($prId == "") {
$this->sys_error("Invalid PR ID");
exit;
}
$sql = "SELECT PurchaseRequestDetailID as detailId,
PurchaseRequestDetailM_ItemID as itemId,
M_ItemCode as itemCode,
M_ItemDesc as itemDesc,
PurchaseRequestDetailItemUnitID as unitId,
ItemUnitCode as unitCode,
ItemUnitName as unitName,
PurchaseRequestDetailQty as qty,
PurchaseRequestDetailStatus as status,
PurchaseRequestDetailNote as note
FROM purchase_request_detail
JOIN m_item ON M_ItemID = PurchaseRequestDetailM_ItemID AND M_ItemIsActive = 'Y'
JOIN itemunit ON ItemUnitID = PurchaseRequestDetailItemUnitID AND ItemUnitIsActive = 'Y'
WHERE
PurchaseRequestDetailPurchaseRequestID = ? AND
PurchaseRequestDetailIsActive = 'Y'";
$query = $this->db->query($sql, [$prId]);
if (!$query) {
$this->sys_error_db("item list", $this->db);
exit;
}
$rows = $query->result_array();
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getUnitByItemId()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$itemId = isset($prm["itemId"]) ? $prm["itemId"] : "";
if ($itemId == "") {
$this->sys_error("Invalid Item ID");
exit;
}
$sql = "SELECT
DISTINCT ItemUnitID as unitId,
ItemUnitCode as unitCode,
ItemUnitName as unitName
FROM itemunitmap
JOIN itemunit ON ItemUnitID = ItemUnitMapItemUnitID AND ItemUnitIsActive = 'Y'
WHERE ItemUnitMapM_ItemID = ?
AND ItemUnitMapIsActive = 'Y'";
$query = $this->db->query($sql, [$itemId]);
if (!$query) {
$this->sys_error_db("item unit list", $this->db);
exit;
}
$rows = $query->result_array();
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function saveRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userId = $this->sys_user["M_UserID"];
$prm = $this->sys_input;
$itemCategory = isset($prm["itemcategory"]) ? $prm["itemcategory"] : "1";
$rioDateUse = isset($prm["RIODateUse"]) ? $prm["RIODateUse"] : "";
$rioDateUse = date("Y-m-d", strtotime($rioDateUse));
if ($rioDateUse == "" || $rioDateUse == null) {
$this->sys_error("Invalid Date Use");
exit;
}
$rioRegional = isset($prm["RIORegional"]) ? $prm["RIORegional"] : "";
if ($rioRegional == "" || $rioRegional == null) {
$this->sys_error("Invalid Regional");
exit;
}
$rioBranch = isset($prm["RIOBranch"]) ? $prm["RIOBranch"] : "";
if ($rioBranch == "" || $rioBranch == null) {
$this->sys_error("Invalid Branch");
exit;
}
$rioWarehouse = isset($prm["RIOWarehouse"]) ? $prm["RIOWarehouse"] : "";
if ($rioWarehouse == "" || $rioWarehouse == null) {
$this->sys_error("Warehouse masih kosong");
exit;
}
$rioDivision = isset($prm["RIODivision"]) ? $prm["RIODivision"] : "";
if ($rioDivision == "" || $rioDivision == null) {
$this->sys_error("Division masih kosong");
exit;
}
$rioDescription = isset($prm["RIODescription"]) ? $prm["RIODescription"] : "";
$items = isset($prm["items"]) ? $prm["items"] : [];
if (count($items) == 0) {
$this->sys_error("PR Items cannot be empty");
exit;
}
$this->db->trans_begin();
$sql = "INSERT INTO request_item_out (
RequestItemOutNumber,
RequestItemOutDate,
RequestItemOutWarehouseID,
RequestItemOutS_RegionalID,
RequestItemOutM_BranchCode,
RequestItemOutNote,
RequestItemOutDivisionID,
RequestItemOutStatus,
RequestItemOutCreated,
RequestItemOutUserID)
VALUES (fn_numbering('RIO'), ?, ?, ?, ?, ?, ?, 'Draft', ?, ?)";
$query = $this->db->query($sql, [
$rioDateUse,
$rioWarehouse,
$rioRegional,
$rioBranch,
$rioDescription,
$rioDivision,
date("Y-m-d H:i:s"),
$userId
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("request item out", $this->db);
exit;
}
$rioId = $this->db->insert_id();
foreach ($items as $key => $item) {
$sql = "INSERT INTO request_item_out_detail (
RequestItemOutDetailRequestItemOutID,
RequestItemOutDetailM_ItemID,
RequestItemOutDetailItemUnitID,
RequestItemOutDetailQty,
RequestItemOutDetailStatus,
RequestItemOutDetailCreated,
RequestItemOutDetailUserID)
VALUES (?, ?, ?, ?, 'Draft', ?, ?)";
$query = $this->db->query($sql, [
$rioId,
$item["itemId"],
$item["unitId"],
intval($item["qty"]),
date("Y-m-d H:i:s"),
$userId
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("request detail item out", $this->db);
exit;
}
}
// insert log
$id = $rioId;
$sql_json = "SELECT request_item_out.*, '' as detail
FROM request_item_out
WHERE RequestItemOutIsActive = 'Y'
AND RequestItemOutID = ?";
$qry_json = $this->db->query($sql_json, [$id]);
if (!$qry_json) {
$this->db->trans_rollback();
$this->sys_error_db("select json rio");
exit;
}
$row_json = $qry_json->row_array();
$userdesc = "Request Item out dengan kode " . $row_json['RequestItemOutNumber'] . " telah dibuat";
$sql_json_detail = "SELECT request_item_out_detail.*
FROM request_item_out_detail
WHERE RequestItemOutDetailIsActive = 'Y'
AND RequestItemOutDetailRequestItemOutID = ?";
$qry_json_detail = $this->db->query($sql_json_detail, [$id]);
if ($qry_json_detail) {
$row_json["detail"] = $qry_json_detail->result_array();
} else {
$this->sys_error_db("select detail rio", $this->db);
exit;
}
$data_json = $row_json;
$sql_log = "INSERT INTO user_activity(
UserActivityCode,
UserActivityStatus,
UserActivityDescription,
UserActivityRefID,
UserActivityData,
UserActivityUserID,
UserActivityCreated
) VALUES('RIO','Draft',?,?,?,?,NOW())";
$qry_log = $this->db->query($sql_log, [
$userdesc,
$id,
json_encode($data_json),
$userId
]);
if (!$qry_log) {
$this->db->trans_rollback();
$this->sys_error_db("insert log", $this->db);
exit;
}
$this->db->trans_commit();
$this->sys_ok("Request item out created successfully");
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getDetailRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userId = $this->sys_user["M_UserID"];
$prm = $this->sys_input;
$warehouseID = isset($prm["warehouseID"]) ? $prm["warehouseID"] : 0;
$division = isset($prm["division"]) ? $prm["division"] : "";
$requestId = isset($prm["requestId"]) ? $prm["requestId"] : "";
if ($requestId == "" || $requestId == null) {
$this->sys_error("Invalid Request ID");
exit;
}
$sql = "SELECT
RequestItemOutDetailID as detailId,
RequestItemOutDetailM_ItemID as itemId,
M_ItemCode as itemCode,
M_ItemDesc as itemDesc,
RequestItemOutDetailItemUnitID as unitId,
ItemUnitCode as unitCode,
ItemUnitName as unitName,
RequestItemOutDetailQty as qty,
RequestItemOutDetailStatus as status,
0 as stockDivisi,
0 as stockWarehouse
FROM request_item_out_detail
JOIN m_item ON M_ItemID = RequestItemOutDetailM_ItemID AND M_ItemIsActive = 'Y'
JOIN itemunit ON ItemUnitID = RequestItemOutDetailItemUnitID AND ItemUnitIsActive = 'Y'
WHERE RequestItemOutDetailRequestItemOutID = ? AND RequestItemOutDetailIsActive = 'Y'";
$query = $this->db->query($sql, [$requestId]);
if (!$query) {
$this->sys_error_db("request item out detail", $this->db);
exit;
}
$rows = $query->result_array();
if (count($rows) > 0) {
foreach ($rows as $key => $row) {
$sqldivisi = "SELECT StockID,
StockItemPrice,
StockBatchNo,
StockWarehouseID,
StockItemID,
SUM(StockQty) as stockDivisi
FROM stock
JOIN m_item ON StockItemID = M_ItemID
AND M_ItemIsActive = 'Y'
JOIN m_itemdivision ON M_ItemID = M_ItemDivisionM_ItemID AND M_ItemDivisionIsActive = 'Y'
AND M_ItemDivisionDivisionID = ?
WHERE StockItemID = ?
AND StockItemUnitID = ?";
$qrydivisi = $this->db->query($sqldivisi, [
$division,
$row['itemId'],
$row['unitId']
]);
if (!$qrydivisi) {
$this->sys_error_db("get stock divisi error", $this->db);
exit;
}
$rowstokdivisi = $qrydivisi->row_array();
$rows[$key]["stockDivisi"] = $rowstokdivisi["stockDivisi"];
$sqlwarehouse = "SELECT StockID,
StockItemPrice,
StockBatchNo,
StockWarehouseID,
StockItemID,
SUM(StockQty) as stockWarehouse
FROM stock
WHERE StockItemID = ?
AND StockItemUnitID = ?
AND StockWarehouseID = ?";
$qrywarehouse = $this->db->query($sqlwarehouse, [
$row['itemId'],
$row['unitId'],
$warehouseID
]);
if (!$qrywarehouse) {
$this->sys_error_db("get stock gudang error", $this->db);
exit;
}
$rowstokwarehouse = $qrywarehouse->row_array();
$rows[$key]["stockWarehouse"] = $rowstokwarehouse["stockWarehouse"];
}
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function updateRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userId = $this->sys_user["M_UserID"];
$prm = $this->sys_input;
$rioId = isset($prm["RIOID"]) ? $prm["RIOID"] : "";
$itemCategory = isset($prm["itemcategory"]) ? $prm["itemcategory"] : "1";
$rioDateUse = isset($prm["RIODateUse"]) ? $prm["RIODateUse"] : "";
$rioDateUse = date("Y-m-d", strtotime($rioDateUse));
$dateRequest = date("Y-m-d");
if ($rioDateUse == "" || $rioDateUse == null) {
$this->sys_error("Invalid Date Use");
exit;
}
$rioRegional = isset($prm["RIORegional"]) ? $prm["RIORegional"] : "";
if ($rioRegional == "" || $rioRegional == null) {
$this->sys_error("Invalid Regional");
exit;
}
$rioBranch = isset($prm["RIOBranch"]) ? $prm["RIOBranch"] : "";
if ($rioBranch == "" || $rioBranch == null) {
$this->sys_error("Invalid Branch");
exit;
}
$rioWarehouse = isset($prm["RIOWarehouse"]) ? $prm["RIOWarehouse"] : "";
if ($rioWarehouse == "" || $rioWarehouse == null) {
$this->sys_error("Warehouse masih kosong");
exit;
}
$rioDivision = isset($prm["RIODivision"]) ? $prm["RIODivision"] : "";
if ($rioDivision == "" || $rioDivision == null) {
$this->sys_error("Division masih kosong");
exit;
}
$rioDescription = isset($prm["RIODescription"]) ? $prm["RIODescription"] : "";
$items = isset($prm["items"]) ? $prm["items"] : [];
if (count($items) == 0) {
$this->sys_error("PR Items cannot be empty");
exit;
}
$this->db->trans_begin();
$status = '';
$statusdetail = '';
if ($prm["act"] == "sendrequest") {
$status = ", RequestItemOutStatus = 'Send Request'";
$statusdetail = ", RequestItemOutDetailStatus = 'Send Request'";
}
$sql = "UPDATE request_item_out SET
RequestItemOutDate = ?,
RequestItemOutWarehouseID = ?,
RequestItemOutS_RegionalID = ?,
RequestItemOutM_BranchCode = ?,
RequestItemOutNote = ?,
RequestItemOutDivisionID = ?,
RequestItemOutLastUpdated = ?,
RequestItemOutUserID = ?
$status
WHERE RequestItemOutID = ?";
$params = [
$rioDateUse,
$rioWarehouse,
$rioRegional,
$rioBranch,
$rioDescription,
$rioDivision,
date("Y-m-d H:i:s"),
$userId,
$rioId
];
$query = $this->db->query($sql, $params);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("request item out update", $this->db);
exit;
}
$prId = $this->db->insert_id();
foreach ($items as $key => $item) {
if ($item["detailId"] == 0 || $item["detailId"] == "0") {
$sql = "INSERT INTO request_item_out_detail (
RequestItemOutDetailRequestItemOutID,
RequestItemOutDetailM_ItemID,
RequestItemOutDetailItemUnitID,
RequestItemOutDetailQty,
RequestItemOutDetailStatus,
RequestItemOutDetailCreated,
RequestItemOutDetailUserID)
VALUES (?, ?, ?, ?, 'Draft', ?, ?)";
$query = $this->db->query($sql, [
$rioId,
$item["itemId"],
$item["unitId"],
$item["qty"],
date("Y-m-d H:i:s"),
$userId
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("request detail item out", $this->db);
exit;
}
} else {
$sql = "UPDATE request_item_out_detail
SET
RequestItemOutDetailM_ItemID = ?,
RequestItemOutDetailItemUnitID = ?,
RequestItemOutDetailQty = ?,
RequestItemOutDetailLastUpdated = ?,
RequestItemOutDetailUserID = ?
$statusdetail
WHERE RequestItemOutDetailID = ?";
$query = $this->db->query($sql, [
$item["itemId"],
$item["unitId"],
$item["qty"],
date("Y-m-d H:i:s"),
$userId,
$item["detailId"]
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("request item out detail update", $this->db);
exit;
}
}
}
// insert log
$sql_json = "SELECT request_item_out.*, '' as detail
FROM request_item_out
WHERE RequestItemOutIsActive = 'Y'
AND RequestItemOutID = ?";
$qry_json = $this->db->query($sql_json, [$rioId]);
if (!$qry_json) {
$this->db->trans_rollback();
$this->sys_error_db("select json rio");
exit;
}
$row_json = $qry_json->row_array();
$sql_json_detail = "SELECT request_item_out_detail.*
FROM request_item_out_detail
WHERE RequestItemOutDetailIsActive = 'Y'
AND RequestItemOutDetailRequestItemOutID = ?";
$qry_json_detail = $this->db->query($sql_json_detail, [$rioId]);
if ($qry_json_detail) {
$row_json["detail"] = $qry_json_detail->result_array();
} else {
$this->sys_error_db("select detail rio", $this->db);
exit;
}
$data_json = $row_json;
if ($prm["act"] == "sendrequest") {
$userdesc = "Request Item out dengan kode " . $row_json['RequestItemOutNumber'] . " mengirimkan permintaan request";
$sql_log = "INSERT INTO user_activity(
UserActivityCode,
UserActivityStatus,
UserActivityDescription,
UserActivityRefID,
UserActivityData,
UserActivityUserID,
UserActivityCreated
) VALUES('RIO','Send Request',?,?,?,?,NOW())";
$qry_log = $this->db->query($sql_log, [
$userdesc,
$rioId,
json_encode($data_json),
$userId
]);
if (!$qry_log) {
$this->db->trans_rollback();
$this->sys_error_db("insert log sendrequest", $this->db);
exit;
}
} else {
$userdesc = "Request Item out dengan kode " . $row_json['RequestItemOutNumber'] . " telah diedit";
$sql_log = "INSERT INTO user_activity(
UserActivityCode,
UserActivityStatus,
UserActivityDescription,
UserActivityRefID,
UserActivityData,
UserActivityUserID,
UserActivityCreated
) VALUES('RIO','UPDATE',?,?,?,?,NOW())";
$qry_log = $this->db->query($sql_log, [
$userdesc,
$rioId,
json_encode($data_json),
$userId
]);
if (!$qry_log) {
$this->db->trans_rollback();
$this->sys_error_db("insert log update", $this->db);
exit;
}
}
if ($prm["act"] == "sendrequest") {
// tambahan fungsi notif ke approver
$this->saveNotification($userId, $dateRequest, $row_json['RequestItemOutNumber'], $rioId, $rioBranch, $rioDivision);
}
$this->db->trans_commit();
if ($prm["act"] == "sendrequest") {
$this->sys_ok("Send request successfully");
} else {
$this->sys_ok("Request item out updated successfully");
}
} 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;
$userId = $this->sys_user["M_UserID"];
$regionalId = $prm["regionalId"];
$branchCode = $prm["branchCode"];
$filterBranch = "";
if (!$branchCode == "") {
$filterBranch .= " AND M_BranchCode = '{$branchCode}'";
}
if (!$branchCode == "") {
$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,
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 WarehouseIsActive = 'Y'
AND WarehouseIsTransit = 'N'
AND WarehouseType = 'B'
AND WarehouseS_RegionalID = ?
$filterBranch
ORDER BY WarehouseID ASC
";
$qry = $this->db->query($sql, [$regionalId]);
} else {
$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,
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 WarehouseIsActive = 'Y'
AND WarehouseIsTransit = 'N'
AND WarehouseType = 'R'
AND WarehouseS_RegionalID = ?
ORDER BY WarehouseID ASC
";
$qry = $this->db->query($sql, [$regionalId]);
}
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("get warehouse", $this->db);
exit;
}
$rows = $qry->row_array();
$result = array(
"records" => $rows,
"sql" => $this->db->last_query()
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getlevel()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
}
$payload = $this->sys_input;
$user = $this->sys_user;
$regionalID = $user['S_RegionalID'];
$branchCode = $user['M_BranchCode'];
$loginType = $user['M_UserLocationFlag'];
$userID = $user['M_UserID'];
$sql = "SELECT m_approve_level.* FROM m_user
JOIN m_approve_level
ON M_UserM_ApproveLevelID = M_ApproveLevelID
WHERE M_UserID = ?";
$qry = $this->db->query($sql, [$userID]);
if (!$qry) {
$this->sys_error_db("Error cek approval level");
exit;
}
$approvalLevel = $qry->result_array();
if (count($approvalLevel) == 0) {
$result = array(
'total' => 0,
'records' => []
);
$this->sys_ok($result);
exit;
} else {
$result = array(
"total" => 1,
"records" => $approvalLevel,
"sql" => $this->db->last_query()
);
$this->sys_ok($result);
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getDivisionUser()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
}
$payload = $this->sys_input;
$user = $this->sys_user;
$regionalID = $user['S_RegionalID'];
$branchCode = $user['M_BranchCode'];
$loginType = $user['M_UserLocationFlag'];
$userID = $user['M_UserID'];
$sql = "SELECT M_UserDivisionID,
M_UserDivisionM_UserID,
M_UserDivisionDivisionID,
M_UserUsername,
DivisionName
FROM m_user
JOIN m_userdivision ON M_UserID = M_UserDivisionM_UserID
AND M_UserDivisionIsActive = 'Y'
JOIN division ON M_UserDivisionDivisionID = DivisionID
AND DivisionIsActive = 'Y'
WHERE M_UserIsActive = 'Y'
AND M_UserDivisionM_UserID = ?";
$qry = $this->db->query($sql, [$userID]);
if (!$qry) {
$this->sys_error_db("Error cek approval level");
exit;
}
$approvalDivision = $qry->result_array();
if (count($approvalDivision) == 0) {
$result = array(
'total' => 0,
'records' => []
);
$this->sys_ok($result);
exit;
} else {
$result = array(
"total" => 1,
"records" => $approvalDivision,
"sql" => $this->db->last_query()
);
$this->sys_ok($result);
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function approveRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
if ($prm["categoryApprove"] == 'K') {
$sql = "UPDATE request_item_out SET
RequestItemOutStatus = 'Process',
RequestItemOutApprovedDate = NOW(),
RequestItemOutApprovedUserID = ?,
RequestItemOutLastUpdated = NOW()
WHERE RequestItemOutID = ?";
$qry = $this->db->query($sql, [
$userId,
$prm["RIOID"]
]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Approve request item out kacab error", $this->db);
exit;
}
$sqlDetail = "UPDATE request_item_out_detail SET
RequestItemOutDetailStatus = 'Process',
RequestItemOutDetailLastUpdated = NOW(),
RequestItemOutDetailUserID = ?
WHERE RequestItemOutDetailRequestItemOutID = ?";
$qryDetail = $this->db->query($sqlDetail, [
$userId,
$prm["RIOID"]
]);
if (!$qryDetail) {
$this->db->trans_rollback();
$this->sys_error_db("update request item out detail error", $this->db);
exit;
}
} else if ($prm["categoryApprove"] == "M") {
$sql = "UPDATE request_item_out SET
RequestItemOutVerifiedDate = NOW(),
RequestItemOutVerifiedUserID = ?,
RequestItemOutLastUpdated = NOW()
WHERE RequestItemOutID = ?";
$qry = $this->db->query($sql, [
$userId,
$prm["RIOID"]
]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Approve request item out manager error", $this->db);
exit;
}
}
// insert log
$sql_json = "SELECT request_item_out.*, '' as detail
FROM request_item_out
WHERE RequestItemOutIsActive = 'Y'
AND RequestItemOutID = ?";
$qry_json = $this->db->query($sql_json, [$prm["RIOID"]]);
if (!$qry_json) {
$this->db->trans_rollback();
$this->sys_error_db("select json rio error");
exit;
}
$row_json = $qry_json->row_array();
$userdesc = "Request Item out dengan kode " . $row_json['RequestItemOutNumber'] . " telah di approve";
$sql_json_detail = "SELECT request_item_out_detail.*
FROM request_item_out_detail
WHERE RequestItemOutDetailIsActive = 'Y'
AND RequestItemOutDetailRequestItemOutID = ?";
$qry_json_detail = $this->db->query($sql_json_detail, [$prm["RIOID"]]);
if ($qry_json_detail) {
$row_json["detail"] = $qry_json_detail->result_array();
} else {
$this->sys_error_db("select detail rio error", $this->db);
exit;
}
$data_json = $row_json;
$sql_log = "INSERT INTO user_activity(
UserActivityCode,
UserActivityStatus,
UserActivityDescription,
UserActivityRefID,
UserActivityData,
UserActivityUserID,
UserActivityCreated
) VALUES('RIO','Process',?,?,?,?,NOW())";
$qry_log = $this->db->query($sql_log, [
$userdesc,
$prm["RIOID"],
json_encode($data_json),
$userId
]);
if (!$qry_log) {
$this->db->trans_rollback();
$this->sys_error_db("insert user activity error", $this->db);
exit;
}
$this->readNotif($userId, $prm["RIOID"]);
$this->db->trans_commit();
$result = array(
"total" => 1
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function rejectRequest()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$this->db->trans_begin();
$prm = $this->sys_input;
$userId = $this->sys_user["M_UserID"];
$sql = "UPDATE request_item_out SET
RequestItemOutStatus = 'Rejected',
RequestItemOutUserID = ?,
RequestItemOutLastUpdated = NOW()
WHERE RequestItemOutID = ?";
$qry = $this->db->query($sql, [
$userId,
$prm["RIOID"]
]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("update request item out error", $this->db);
exit;
}
$sqlDetail = "UPDATE request_item_out_detail SET
RequestItemOutDetailStatus = 'Rejected',
RequestItemOutDetailLastUpdated = NOW(),
RequestItemOutDetailUserID = ?
WHERE RequestItemOutDetailRequestItemOutID = ?";
$qryDetail = $this->db->query($sqlDetail, [
$userId,
$prm["RIOID"]
]);
if (!$qryDetail) {
$this->db->trans_rollback();
$this->sys_error_db("update request item out detail error", $this->db);
exit;
}
// insert log
$sql_json = "SELECT request_item_out.*, '' as detail
FROM request_item_out
WHERE RequestItemOutIsActive = 'Y'
AND RequestItemOutID = ?";
$qry_json = $this->db->query($sql_json, [$prm["RIOID"]]);
if (!$qry_json) {
$this->db->trans_rollback();
$this->sys_error_db("select json rio error");
exit;
}
$row_json = $qry_json->row_array();
$userdesc = "Request Item out dengan kode " . $row_json['RequestItemOutNumber'] . " telah di reject";
$sql_json_detail = "SELECT request_item_out_detail.*
FROM request_item_out_detail
WHERE RequestItemOutDetailIsActive = 'Y'
AND RequestItemOutDetailRequestItemOutID = ?";
$qry_json_detail = $this->db->query($sql_json_detail, [$prm["RIOID"]]);
if ($qry_json_detail) {
$row_json["detail"] = $qry_json_detail->result_array();
} else {
$this->sys_error_db("select detail rio error", $this->db);
exit;
}
$data_json = $row_json;
$sql_log = "INSERT INTO user_activity(
UserActivityCode,
UserActivityStatus,
UserActivityDescription,
UserActivityRefID,
UserActivityData,
UserActivityUserID,
UserActivityCreated
) VALUES('RIO','Process',?,?,?,?,NOW())";
$qry_log = $this->db->query($sql_log, [
$userdesc,
$prm["RIOID"],
json_encode($data_json),
$userId
]);
if (!$qry_log) {
$this->db->trans_rollback();
$this->sys_error_db("insert user activity error", $this->db);
exit;
}
$this->db->trans_commit();
$result = array(
"total" => 1
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
// read notification
function readNotif($userId, $refID)
{
$this->db->trans_begin();
// cari user penerima notifikasi
$sql_get = "SELECT RequestItemOutID,
M_UserID,
M_UserUsername,
NotificationID,
NotificationDetailID,
NotificationDetailStatus,
NotificationDetailM_UserID,
NotificationDetailM_ApproveLevelID
FROM notification
JOIN request_item_out ON NotificationRefID = RequestItemOutID
AND RequestItemOutIsActive = 'Y'
JOIN notification_detail ON NotificationID = NotificationDetailNotificationID
JOIN m_user ON NotificationUserID = M_UserID
WHERE RequestItemOutID = ?
AND NotificationDetailStatus = 'unread'";
$qry = $this->db->query($sql_get, [$refID]);
if (!$qry) {
$this->sys_error_db("select user notification error", $this->db);
exit;
}
$rowsuser = $qry->result_array();
foreach ($rowsuser as $user) {
$sql = "UPDATE notification_detail SET
NotificationDetailStatus = 'read',
NotificationDetailLastUpdated = NOW(),
NotificationDetailUserID = ?
WHERE NotificationDetailNotificationID = ?";
$qry = $this->db->query($sql, [$userId, $user["NotificationID"]]);
if (!$qry) {
$this->sys_error_db("update notification error", $this->db);
exit;
}
}
$this->db->trans_commit();
}
// notifications
function saveNotification($userId, $dateRequest, $number, $refID, $branchId, $divisionId)
{
try {
$this->db->trans_begin();
$xdate = date('d-m-Y');
$sql_user = "SELECT M_UserID, M_UserUsername
FROM m_user
WHERE M_UserIsActive = 'Y'
AND M_UserID = ?";
$qry_user = $this->db->query($sql_user, [$userId]);
if ($qry_user) {
$username = $qry_user->row_array();
} else {
$this->sys_error_db("select user error", $this->db);
exit;
}
$description = "Request Pengeluaran Barang pada tanggal " . $xdate . " oleh " . $username['M_UserUsername'] . " dengan nomor " . $number . "";
$sql_menu = "SELECT S_MenuID,
S_MenuName,
S_MenuUrl,
S_MenuLevel
FROM s_menu
WHERE S_MenuID = 68";
$qry_menu = $this->db->query($sql_menu, []);
if ($qry_menu) {
$rowurl = $qry_menu->row_array();
} else {
$this->sys_error_db("select menu error", $this->db);
exit;
}
$url = $rowurl['S_MenuUrl'] . "?flag=N&status=SendRequest&startdate=" . $dateRequest . "&search=" . $number;
// cari user penerima notifikasi
$sql_receive_user = "SELECT * FROM m_user
JOIN m_branch ON M_UserM_BranchID = M_BranchID
AND M_BranchIsActive = 'Y'
AND M_BranchCode = ?
JOIN m_userdivision ON M_UserID = M_UserDivisionM_UserID
AND M_UserDivisionDivisionID != ?
AND M_UserDivisionIsActive = 'Y'
WHERE M_UserIsActive = 'Y'
AND M_UserM_ApproveLevelID IN (2)
UNION
SELECT * FROM m_user
JOIN m_branch ON M_UserM_BranchID = M_BranchID
AND M_BranchIsActive = 'Y'
AND M_BranchCode = ?
JOIN m_userdivision ON M_UserID = M_UserDivisionM_UserID
AND M_UserDivisionDivisionID = ?
AND M_UserDivisionIsActive = 'Y'
WHERE M_UserIsActive = 'Y'
AND M_UserM_ApproveLevelID IN (1)";
$qry_receive_user = $this->db->query($sql_receive_user, [$branchId, $divisionId, $branchId, $divisionId]);
if ($qry_receive_user) {
$rowsuser = $qry_receive_user->result_array();
} else {
$this->sys_error_db("select receive user error", $this->db);
exit;
}
$sql = "INSERT INTO notification(
NotificationRefID,
NotificationType,
NotificationDescription,
NotificationUrl,
NotificationUserID,
NotificationCreated) VALUES(?,?,?,?,?,NOW())";
$qry = $this->db->query($sql, [
$refID,
'Pengeluaran Barang',
$description,
$url,
$userId
]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("insert notification error", $this->db);
exit;
}
$lastid = $this->db->insert_id();
// insert ke detail notification
foreach ($rowsuser as $row) {
$sql_detail = "INSERT INTO notification_detail(
NotificationDetailNotificationID,
NotificationDetailM_UserID,
NotificationDetailM_ApproveLevelID,
NotificationDetailStatus,
NotificationDetailCreated,
NotificationDetailUserID) VALUES(?,?,?,?,NOW(),?)";
$qry_detail = $this->db->query($sql_detail, [
$lastid,
$row['M_UserID'], // user penerima notifikasi
$row['M_UserM_ApproveLevelID'],
'unread',
$userId
]);
if (!$qry_detail) {
$this->db->trans_rollback();
$this->sys_error_db("insert notification detail error", $this->db);
exit;
}
}
$this->db->trans_commit();
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
}