1024 lines
36 KiB
PHP
1024 lines
36 KiB
PHP
<?php
|
|
|
|
class PurchaseRequestPo extends MY_Controller
|
|
{
|
|
var $db;
|
|
|
|
public function index()
|
|
{
|
|
echo "Purchase Request/Requester API";
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
function getVendor()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$payload = $this->sys_input;
|
|
$userId = $this->sys_user["M_UserID"];
|
|
|
|
$search = '%%';
|
|
if (isset($payload['search'])) {
|
|
$search = trim($payload["search"]);
|
|
if ($search != "") {
|
|
$search = '%' . $search . '%';
|
|
} else {
|
|
$search = '%%';
|
|
}
|
|
}
|
|
|
|
$sql = "SELECT SupplierID,
|
|
SupplierCode,
|
|
SupplierName
|
|
FROM supplier
|
|
WHERE SupplierIsActive = 'Y'
|
|
AND SupplierName LIKE '{$search}'
|
|
ORDER BY SupplierID ASC ";
|
|
$qry = $this->db->query($sql, []);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select supplier", $this->db);;
|
|
exit;
|
|
}
|
|
|
|
$rows = $qry->result_array();
|
|
|
|
if ($rows) {
|
|
array_push($rows, ["SupplierID" => "0", "SupplierCode" => "All", "SupplierName" => "All"]);
|
|
}
|
|
|
|
$result = array(
|
|
"records" => $rows,
|
|
"sql" => $this->db->last_query()
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function getVendorForm()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$payload = $this->sys_input;
|
|
$userId = $this->sys_user["M_UserID"];
|
|
|
|
$sql = "SELECT SupplierID,
|
|
SupplierCode,
|
|
SupplierName
|
|
FROM supplier
|
|
WHERE SupplierIsActive = 'Y'
|
|
ORDER BY SupplierID ASC ";
|
|
$qry = $this->db->query($sql, []);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select supplier", $this->db);;
|
|
exit;
|
|
}
|
|
|
|
$rows = $qry->result_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 getItemType()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$payload = $this->sys_input;
|
|
$userId = $this->sys_user["M_UserID"];
|
|
|
|
$search = '%%';
|
|
if (isset($payload['search'])) {
|
|
$search = trim($payload["search"]);
|
|
if ($search != "") {
|
|
$search = '%' . $search . '%';
|
|
} else {
|
|
$search = '%%';
|
|
}
|
|
}
|
|
|
|
$sql = "SELECT ItemTypeID,
|
|
ItemTypeName
|
|
FROM item_type
|
|
WHERE ItemTypeIsActive = 'Y'
|
|
AND ItemTypeName LIKE '{$search}'
|
|
ORDER BY ItemTypeID ASC";
|
|
$qry = $this->db->query($sql, []);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select supplier", $this->db);;
|
|
exit;
|
|
}
|
|
|
|
$rows = $qry->result_array();
|
|
|
|
if ($rows) {
|
|
array_push($rows, ["ItemTypeID" => "0", "ItemTypeName" => "All"]);
|
|
}
|
|
|
|
$result = array(
|
|
"records" => $rows,
|
|
"sql" => $this->db->last_query()
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function getItemTypeForm()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$payload = $this->sys_input;
|
|
$userId = $this->sys_user["M_UserID"];
|
|
|
|
$sql = "SELECT ItemTypeID,
|
|
ItemTypeName
|
|
FROM item_type
|
|
WHERE ItemTypeIsActive = 'Y'
|
|
ORDER BY ItemTypeID ASC";
|
|
$qry = $this->db->query($sql, []);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select supplier", $this->db);;
|
|
exit;
|
|
}
|
|
|
|
$rows = $qry->result_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 search()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$payload = $this->sys_input;
|
|
$userId = $this->sys_user["M_UserID"];
|
|
|
|
$startDate = $payload["startDate"];
|
|
$endDate = $payload["endDate"];
|
|
$supplierId = $payload["supplierId"];
|
|
$typeId = $payload["typeId"];
|
|
$search = "";
|
|
if (isset($payload['search'])) {
|
|
$search = trim($payload["search"]);
|
|
if ($search != "") {
|
|
$search = '%' . $payload['search'] . '%';
|
|
} else {
|
|
$search = '%%';
|
|
}
|
|
}
|
|
|
|
$filterSuplier = "";
|
|
$filterType = "";
|
|
if (intval($supplierId) > 0) {
|
|
$filterSuplier .= " AND SupplierID = {$supplierId}";
|
|
}
|
|
if (intval($typeId) > 0) {
|
|
$filterType .= " AND ItemTypeID = {$typeId}";
|
|
}
|
|
|
|
$sql = "SELECT purchase_request.*,
|
|
SupplierID,
|
|
SupplierCode,
|
|
SupplierName,
|
|
ItemTypeID,
|
|
ItemTypeName,
|
|
S_RegionalID,
|
|
S_RegionalName,
|
|
M_BranchID,
|
|
M_BranchCode,
|
|
M_BranchName
|
|
FROM purchase_request
|
|
JOIN supplier ON PurchaseRequestSupplierID = SupplierID AND SupplierIsActive = 'Y'
|
|
JOIN item_type ON PurchaseRequestItemTypeID = ItemTypeID AND ItemTypeIsActive = 'Y'
|
|
JOIN s_regional ON PurchaseRequestS_RegionalID = S_RegionalID AND S_RegionalIsActive = 'Y'
|
|
LEFT JOIN m_branch ON PurchaseRequestM_BranchCode = M_BranchCode AND M_BranchIsActive = 'Y'
|
|
WHERE PurchaseRequestIsActive = 'Y'
|
|
AND (PurchaseRequestDate BETWEEN '{$startDate} 00:00:00' AND '{$endDate} 23:59:59')
|
|
AND (PurchaseRequestNumber LIKE '{$search}')
|
|
$filterSuplier $filterType
|
|
ORDER BY PurchaseRequestNumber DESC";
|
|
|
|
$sqlTotal = "SELECT count(*) as total FROM ($sql) as x";
|
|
$qryTotal = $this->db->query($sqlTotal);
|
|
|
|
$number_offset = 0;
|
|
$number_limit = 10;
|
|
|
|
if ($payload["current_page"] > 0) {
|
|
$number_offset = ($payload["current_page"] - 1) * $number_limit;
|
|
}
|
|
|
|
$totalCount = 0;
|
|
$totalPage = 0;
|
|
if ($qryTotal) {
|
|
$totalCount = $qryTotal->result_array()[0]["total"];
|
|
$totalPage = ceil($totalCount / $number_limit);
|
|
} else {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select purcahse request count error", $this->db);;
|
|
exit;
|
|
}
|
|
|
|
$sql_select = $sql . " LIMIT $number_limit OFFSET $number_offset";
|
|
$qry = $this->db->query($sql_select);
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
} else {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select purcahse request error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$result = array(
|
|
"totalPage" => $totalPage,
|
|
"totalFilter" => $totalCount,
|
|
"records" => $rows
|
|
);
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function getRegional()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
}
|
|
|
|
$sql = "SELECT S_RegionalID,
|
|
S_RegionalName
|
|
FROM s_regional
|
|
WHERE S_RegionalIsActive = 'Y'
|
|
ORDER BY S_RegionalName ASC";
|
|
$qry = $this->db->query($sql, []);
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
} else {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select regional", $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 getBranch()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
}
|
|
$payload = $this->sys_input;
|
|
|
|
$regionalId = $payload["regionalId"];
|
|
$query = "SELECT DISTINCT
|
|
M_BranchCode,
|
|
M_BranchName
|
|
FROM m_branch
|
|
WHERE M_BranchIsActive = 'Y'
|
|
AND M_BranchS_RegionalID = ?
|
|
ORDER BY M_BranchName ASC";
|
|
$exec = $this->db->query($query, [$regionalId]);
|
|
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 searchItem()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
}
|
|
$payload = $this->sys_input;
|
|
|
|
$search = "";
|
|
if (isset($payload["search"])) {
|
|
$search = trim($payload["search"]);
|
|
if ($search != "") {
|
|
$search = "%" . $payload["search"] . "%";
|
|
} else {
|
|
$search = "%%";
|
|
}
|
|
}
|
|
|
|
$number_limit = 10;
|
|
$sql = "SELECT
|
|
M_ItemID,
|
|
M_ItemCode,
|
|
IF(M_ItemDesc = '', '-', M_ItemDesc) AS M_ItemDesc
|
|
FROM m_item
|
|
WHERE (M_ItemCode LIKE ? OR M_ItemDesc LIKE ?)
|
|
ORDER BY M_ItemDesc ASC
|
|
LIMIT ?";
|
|
$qry = $this->db->query($sql, array($search, $search, $number_limit));
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
} else {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select item error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$result = array(
|
|
"records" => $rows,
|
|
"total_filter" => sizeof($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;
|
|
|
|
$queryCount = "SELECT count(*) as total
|
|
FROM purchase_request_detail
|
|
JOIN m_item ON PurchaseRequestDetailM_ItemID = M_ItemID
|
|
LEFT JOIN itemunit ON PurchaseRequestDetailItemUnitID = ItemUnitID
|
|
WHERE PurchaseRequestDetailIsActive = 'Y'
|
|
AND PurchaseRequestDetailPurchaseRequestID = {$payload['POID']}";
|
|
$exec = $this->db->query($queryCount, []);
|
|
|
|
$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;
|
|
}
|
|
|
|
$query = "SELECT purchase_request_detail.*,
|
|
M_ItemID, M_ItemCode, M_ItemDesc,
|
|
ItemUnitID, ItemUnitName,
|
|
ROW_NUMBER() OVER(ORDER BY PurchaseRequestDetailID) RowNumber
|
|
FROM purchase_request_detail
|
|
JOIN m_item ON PurchaseRequestDetailM_ItemID = M_ItemID
|
|
LEFT JOIN itemunit ON PurchaseRequestDetailItemUnitID = ItemUnitID
|
|
WHERE PurchaseRequestDetailIsActive = 'Y'
|
|
AND PurchaseRequestDetailPurchaseRequestID = {$payload['POID']}
|
|
ORDER BY PurchaseRequestDetailStatus ASC,
|
|
PurchaseRequestDetailID ASC";
|
|
$exec = $this->db->query($query, []);
|
|
|
|
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,
|
|
"sql" => $this->db->last_query()
|
|
);
|
|
|
|
$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");
|
|
}
|
|
|
|
$this->db->trans_begin();
|
|
|
|
$payload = $this->sys_input;
|
|
$userId = $this->sys_user["M_UserID"];
|
|
|
|
$pdSql = "SELECT `fn_numbering`('PR') AS PR";
|
|
$exec = $this->db->query($pdSql, []);
|
|
$pd = "";
|
|
$dateNow = date('Y-m-d');
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("purchase request insert error", $this->db);
|
|
exit;
|
|
} else {
|
|
$pd = $exec->result_array()[0]["PR"];
|
|
}
|
|
|
|
$sql = "INSERT INTO purchase_request(
|
|
PurchaseRequestDate,
|
|
PurchaseRequestNumber,
|
|
PurchaseRequestRefNumber,
|
|
PurchaseRequestSupplierID,
|
|
PurchaseRequestS_RegionalID,
|
|
PurchaseRequestM_BranchCode,
|
|
PurchaseRequestNote,
|
|
PurchaseRequestStatus,
|
|
PurchaseRequestItemTypeID,
|
|
PurchaseRequestRequestedBy,
|
|
PurchaseRequestIsActive,
|
|
PurchaseRequestUserID,
|
|
PurchaseRequestCreated
|
|
) VALUES ('{$payload['PODate']}', '{$pd}', '{$payload['PONoReferensi']}', '{$payload['POVendor']}', '{$payload['PORegional']}', '{$payload['POBranch']}', '{$payload['PODescription']}', 'Draft', '{$payload['POItemType']}', {$userId}, 'Y', {$userId}, NOW())";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("purchase request insert error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$newInsert = "SELECT * FROM purchase_request WHERE PurchaseRequestNumber = '{$pd}' AND PurchaseRequestIsActive = 'Y'";
|
|
$records = $this->db->query($newInsert, [])->result_array();
|
|
|
|
$result = array("total" => 1, "records" => $records);
|
|
$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");
|
|
}
|
|
|
|
$this->db->trans_begin();
|
|
|
|
$payload = $this->sys_input;
|
|
$userId = $this->sys_user["M_UserID"];
|
|
|
|
$sql = "UPDATE purchase_request SET
|
|
PurchaseRequestDate = '{$payload['PODate']}',
|
|
PurchaseRequestRefNumber = '{$payload['PONoReferensi']}',
|
|
PurchaseRequestSupplierID = '{$payload['POVendor']}',
|
|
PurchaseRequestM_BranchCode = '{$payload['POBranch']}',
|
|
PurchaseRequestNote = '{$payload['PODescription']}',
|
|
PurchaseRequestItemTypeID = '{$payload['POItemType']}',
|
|
PurchaseRequestUserID = {$userId},
|
|
PurchaseRequestLastUpdated = NOW()
|
|
WHERE PurchaseRequestID = {$payload['POID']}";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("purchase request update error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$newUpdate = "SELECT * FROM purchase_request WHERE PurchaseRequestID = {$payload['POID']} AND PurchaseRequestIsActive = 'Y'";
|
|
$records = $this->db->query($newUpdate, [])->result_array();
|
|
|
|
$result = array("total" => 1, "records" => $records);
|
|
$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"];
|
|
|
|
$sql = "UPDATE purchase_request SET
|
|
PurchaseRequestLastUpdated = NOW(),
|
|
PurchaseRequestUserID = {$userId},
|
|
PurchaseRequestIsActive = 'N'
|
|
WHERE PurchaseRequestID = {$payload['POID']}";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("purchase request delete error", $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']);
|
|
|
|
$query = "SELECT COUNT(*) as exist
|
|
FROM purchase_request_detail
|
|
WHERE PurchaseRequestDetailIsActive = 'Y'
|
|
AND PurchaseRequestDetailM_ItemID = '{$payload['POItem']}'
|
|
AND PurchaseRequestDetailPurchaseRequestID = {$payload['POID']}";
|
|
$exist = $this->db->query($query, []);
|
|
if ($exist) {
|
|
$row = $exist->row()->exist;
|
|
} else {
|
|
$this->sys_error_db("exist error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
if ($row == 0) {
|
|
$sql = "INSERT INTO purchase_request_detail(
|
|
PurchaseRequestDetailPurchaseRequestID,
|
|
PurchaseRequestDetailM_ItemID,
|
|
PurchaseRequestDetailItemUnitID,
|
|
PurchaseRequestDetailQty,
|
|
PurchaseRequestDetailPrice,
|
|
PurchaseRequestDetailStatus,
|
|
PurchaseRequestDetailIsCito,
|
|
PurchaseRequestDetailIsActive,
|
|
PurchaseRequestDetailUserID,
|
|
PurchaseRequestDetailCreated
|
|
) VALUES ({$payload['POID']}, {$payload['POItem']}, {$payload['POItemUnit']}, {$payload['POQty']}, {$payload['POPrice']}, 'Draft', '{$payload['POIsCito']}', 'Y', {$userId}, NOW())";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("request insert error", $this->db);
|
|
exit;
|
|
} else {
|
|
$sqlTotalPriceQty = "SELECT SUM(PurchaseRequestDetailPrice * PurchaseRequestDetailQty) as Total
|
|
FROM purchase_request_detail
|
|
WHERE PurchaseRequestDetailPurchaseRequestID = {$payload['POID']}
|
|
AND PurchaseRequestDetailIsActive = 'Y'";
|
|
$execTotal = $this->db->query($sqlTotalPriceQty, []);
|
|
|
|
if (!$execTotal) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("calculate total price error", $this->db);
|
|
exit;
|
|
}
|
|
$total = 0;
|
|
|
|
$total = $execTotal->row()->Total;
|
|
|
|
$sql = "UPDATE purchase_request SET
|
|
PurchaseRequestTotal = {$total},
|
|
PurchaseRequestLastUpdated = NOW(),
|
|
PurchaseRequestUserID = {$userId}
|
|
WHERE PurchaseRequestID = {$payload['POID']}
|
|
AND PurchaseRequestIsActive = 'Y'";
|
|
$exec = $this->db->query($sql, []);
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$result = array("total" => 1, "records" => array("xId" => 0));
|
|
$this->sys_ok($result);
|
|
} else {
|
|
$errors = array();
|
|
$select = "SELECT M_ItemDesc FROM m_item WHERE M_ItemID = '{$payload['POItem']}'";
|
|
$qry = $this->db->query($select, []);
|
|
if ($qry) {
|
|
$rowdata = $qry->row()->M_ItemDesc;
|
|
} else {
|
|
$this->sys_error_db("select nat item error", $this->db);
|
|
exit;
|
|
}
|
|
if ($row != 0) {
|
|
array_push($errors, array('msg' => 'Data dengan item ' . $rowdata . ' 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"]);
|
|
|
|
|
|
$sql = "UPDATE purchase_request_detail SET
|
|
PurchaseRequestDetailM_ItemID = {$payload["POItem"]},
|
|
PurchaseRequestDetailItemUnitID = {$payload["POItemUnit"]},
|
|
PurchaseRequestDetailQty = {$payload["POQty"]},
|
|
PurchaseRequestDetailPrice = {$payload["POPrice"]},
|
|
PurchaseRequestDetailIsCito = '{$payload['POIsCito']}',
|
|
PurchaseRequestDetailLastUpdated = NOW(),
|
|
PurchaseRequestDetailUserID = {$userId}
|
|
WHERE PurchaseRequestDetailID = {$payload["PODID"]}";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("request update error", $this->db);
|
|
exit;
|
|
} else {
|
|
$sqlTotalPrice = "SELECT SUM(PurchaseRequestDetailPrice) AS Total
|
|
FROM purchase_request_detail
|
|
WHERE PurchaseRequestDetailPurchaseRequestID = {$payload["POID"]}
|
|
AND PurchaseRequestDetailIsActive = 'Y'";
|
|
$exec = $this->db->query($sqlTotalPrice, []);
|
|
$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"];
|
|
}
|
|
|
|
$sql = "UPDATE purchase_request SET
|
|
PurchaseRequestTotal = {$total},
|
|
PurchaseRequestLastUpdated = NOW(),
|
|
PurchaseRequestUserID = {$userId}
|
|
WHERE PurchaseRequestID = {$payload["POID"]}
|
|
AND PurchaseRequestIsActive = 'Y'";
|
|
$exec = $this->db->query($sql, []);
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$result = array("total" => 1, "records" => array("xId" => $payload["PODID"]));
|
|
$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"];
|
|
|
|
$sql = "UPDATE purchase_request_detail SET
|
|
PurchaseRequestDetailLastUpdated = NOW(),
|
|
PurchaseRequestDetailUserID = {$userId},
|
|
PurchaseRequestDetailIsActive = 'N'
|
|
WHERE PurchaseRequestDetailID = {$payload["PODID"]}";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("request delete error", $this->db);
|
|
exit;
|
|
} else {
|
|
$sqlTotalPrice = "SELECT SUM(PurchaseRequestDetailPrice) AS Total
|
|
FROM purchase_request_detail
|
|
WHERE PurchaseRequestDetailPurchaseRequestID = {$payload["POID"]}
|
|
AND PurchaseRequestDetailIsActive = 'Y'";
|
|
$exec = $this->db->query($sqlTotalPrice, []);
|
|
$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;
|
|
}
|
|
|
|
$sql = "UPDATE purchase_request SET
|
|
PurchaseRequestTotal = {$total},
|
|
PurchaseRequestLastUpdated = NOW(),
|
|
PurchaseRequestUserID = {$userId}
|
|
WHERE PurchaseRequestID = {$payload["POID"]}
|
|
AND PurchaseRequestIsActive = 'Y'";
|
|
$exec = $this->db->query($sql, []);
|
|
}
|
|
|
|
$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"];
|
|
|
|
$sqlDetail = "UPDATE purchase_request_detail SET
|
|
PurchaseRequestDetailLastUpdated = NOW(),
|
|
PurchaseRequestDetailStatus = 'Pending',
|
|
PurchaseRequestDetailUserID = {$userId}
|
|
WHERE PurchaseRequestDetailPurchaseRequestID = {$payload["POID"]}
|
|
AND PurchaseRequestDetailIsActive = 'Y'
|
|
AND PurchaseRequestDetailStatus = 'Draft'";
|
|
$exec = $this->db->query($sqlDetail, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("order purchase request error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$sql = "UPDATE purchase_request SET
|
|
PurchaseRequestStatus = 'Pending',
|
|
PurchaseRequestLastUpdated = NOW(),
|
|
PurchaseRequestUserID = {$userId}
|
|
WHERE PurchaseRequestID = {$payload["POID"]}
|
|
AND PurchaseRequestIsActive = 'Y'";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
if (!$exec) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("order purchase request error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$sql = "SELECT *,
|
|
ROW_NUMBER() OVER(ORDER BY PurchaseRequestNumber) RowNumber
|
|
FROM purchase_request
|
|
WHERE PurchaseRequestIsActive = 'Y'
|
|
AND PurchaseRequestUserID = {$userId}
|
|
AND PurchaseRequestID = {$payload["POID"]}";
|
|
$exec = $this->db->query($sql, []);
|
|
|
|
$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 getUnit()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$search = isset($prm["search"]) ? $prm["search"] : "";
|
|
$itemID = $prm["itemID"];
|
|
|
|
$sql = "SELECT
|
|
ItemUnitID,
|
|
ItemUnitCode,
|
|
ItemUnitName,
|
|
ItemUnitCreated,
|
|
ItemUnitLastUpdated,
|
|
ItemUnitIsActive,
|
|
ItemUnitUserID,
|
|
ItemUnitMapM_ItemID,
|
|
ItemUnitMapIsPurchase,
|
|
ItemUnitMapIsReport,
|
|
ItemUnitMapIsBase
|
|
FROM itemunit
|
|
JOIN itemunitmap ON ItemUnitMapItemUnitID = ItemUnitID AND ItemUnitMapIsActive ='Y'
|
|
AND ItemUnitMapM_ItemID = {$itemID}
|
|
WHERE ItemUnitIsActive = 'Y'
|
|
AND ItemUnitName LIKE '%{$search}%'
|
|
ORDER BY ItemUnitName ASC";
|
|
|
|
$query = $this->db->query($sql);
|
|
|
|
if (!$query) {
|
|
$this->sys_error_db("item unit list", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$rows = $query->result_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 getPrice()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$itemID = $prm["itemID"];
|
|
$itemUnitID = $prm["itemUnitID"];
|
|
|
|
if (!$itemID || !$itemUnitID) {
|
|
$this->sys_error("Parameter itemID dan itemUnitID diperlukan.", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$sql = "SELECT
|
|
iu.ItemUnitID,
|
|
iu.ItemUnitCode,
|
|
iu.ItemUnitName,
|
|
iu.ItemUnitCreated,
|
|
iu.ItemUnitLastUpdated,
|
|
iu.ItemUnitIsActive,
|
|
iu.ItemUnitUserID,
|
|
ium.ItemUnitMapM_ItemID,
|
|
ium.ItemUnitMapIsPurchase,
|
|
ium.ItemUnitMapIsReport,
|
|
ium.ItemUnitMapIsBase,
|
|
sp.MaxPrice AS SupplierPricePrice
|
|
FROM itemunit iu
|
|
JOIN itemunitmap ium
|
|
ON ium.ItemUnitMapItemUnitID = iu.ItemUnitID
|
|
AND ium.ItemUnitMapIsActive = 'Y'
|
|
AND ium.ItemUnitMapIsPurchase = 'Y'
|
|
JOIN m_item mi
|
|
ON ium.ItemUnitMapM_ItemID = mi.M_ItemID
|
|
AND mi.M_ItemIsActive = 'Y'
|
|
JOIN (
|
|
SELECT
|
|
SupplierPriceM_ItemID,
|
|
SupplierPriceItemUnitID,
|
|
MAX(SupplierPricePrice) AS MaxPrice
|
|
FROM supplier_price
|
|
WHERE SupplierPriceIsActive = 'Y'
|
|
GROUP BY SupplierPriceM_ItemID, SupplierPriceItemUnitID
|
|
) sp
|
|
ON sp.SupplierPriceItemUnitID = iu.ItemUnitID
|
|
AND sp.SupplierPriceM_ItemID = mi.M_ItemID
|
|
WHERE iu.ItemUnitIsActive = 'Y'
|
|
AND mi.M_ItemID = {$itemID}
|
|
AND iu.ItemUnitID = {$itemUnitID}
|
|
";
|
|
|
|
$query = $this->db->query($sql);
|
|
|
|
if (!$query) {
|
|
$this->sys_error_db("price error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$priceMax = $query->row()->SupplierPricePrice;
|
|
|
|
$result = array(
|
|
"price" => $priceMax,
|
|
"sql" => $this->db->last_query()
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
}
|