add api file po asset, api receive item inventaris add insert into table stock_inventaris
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
class PurchaseOrderAset extends MY_Controller {
|
class PurchaseOrderAset extends MY_Controller
|
||||||
|
{
|
||||||
var $db;
|
var $db;
|
||||||
public function index() {
|
public function index()
|
||||||
|
{
|
||||||
echo "Purchase Order Aset API";
|
echo "Purchase Order Aset API";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12,40 +14,45 @@ class PurchaseOrderAset extends MY_Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
## QUERY ##
|
## QUERY ##
|
||||||
public function getListSupplier() {
|
public function getListSupplier()
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
if (!$this->isLogin) {
|
if (!$this->isLogin) {
|
||||||
$this->sys_error("invalid token");
|
throw new Exception('Invalid token');
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT
|
$sql = "SELECT
|
||||||
SupplierID,
|
SupplierID,
|
||||||
SupplierName
|
SupplierName
|
||||||
FROM supplier
|
FROM supplier
|
||||||
WHERE SupplierIsActive = 'Y'";
|
WHERE SupplierIsActive = 'Y'";
|
||||||
$que = $this->db->query($sql, []);
|
$que = $this->db->query($sql, []);
|
||||||
if (!$que) {
|
if (!$que) {
|
||||||
$this->sys_error_db("[Error] get data supplier");
|
throw new Exception('failed to query list supplier', 1);
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $que->result_array();
|
$data = $que->result_array();
|
||||||
$this->sys_ok($data);
|
$this->sys_ok($data);
|
||||||
} catch (Exception $exc) {
|
} catch (Exception $exc) {
|
||||||
$this->sys_error($exc->getMessage());
|
$msg = '[Error] ' . $exc->getMessage();
|
||||||
|
$code = $exc->getCode();
|
||||||
|
if ($code == 0) {
|
||||||
|
$this->sys_error($msg);
|
||||||
|
} else {
|
||||||
|
$this->sys_error_db($msg);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getListCabang() {
|
public function getListCabang()
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
if (!$this->isLogin) {
|
if (!$this->isLogin) {
|
||||||
$this->sys_error("invalid token");
|
throw new Exception('Invalid token');
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $this->sys_user;
|
$user = $this->sys_user;
|
||||||
|
|
||||||
$sql = "SELECT
|
$sql = "SELECT
|
||||||
M_BranchID,
|
M_BranchID,
|
||||||
M_BranchCode,
|
M_BranchCode,
|
||||||
@@ -55,22 +62,28 @@ class PurchaseOrderAset extends MY_Controller {
|
|||||||
AND M_BranchS_RegionalID = ?";
|
AND M_BranchS_RegionalID = ?";
|
||||||
$que = $this->db->query($sql, [$user['S_RegionalID']]);
|
$que = $this->db->query($sql, [$user['S_RegionalID']]);
|
||||||
if (!$que) {
|
if (!$que) {
|
||||||
$this->sys_error_db("[Error] failed get list cabang");
|
throw new Exception('failed to query list cabang', 1);
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $que->result_array();
|
$data = $que->result_array();
|
||||||
|
|
||||||
$this->sys_ok($data);
|
$this->sys_ok($data);
|
||||||
} catch (Exception $exc) {
|
} catch (Exception $exc) {
|
||||||
$this->sys_error($exc->getMessage());
|
$msg = '[Error] ' . $exc->getMessage();
|
||||||
|
$code = $exc->getCode();
|
||||||
|
if ($code == 0) {
|
||||||
|
$this->sys_error($msg);
|
||||||
|
} else {
|
||||||
|
$this->sys_error_db($msg);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function searchRequestAset() {
|
public function searchRequestAset()
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
if (!$this->isLogin) {
|
if (!$this->isLogin) {
|
||||||
$this->sys_error("invalid token");
|
throw new Exception('Invalid token');
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$para = $this->sys_input;
|
$para = $this->sys_input;
|
||||||
@@ -87,67 +100,70 @@ class PurchaseOrderAset extends MY_Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT
|
$sql = "SELECT
|
||||||
PurchaseRequestID,
|
PurchaseRequestID,
|
||||||
PurchaseRequestNumber,
|
PurchaseRequestNumber,
|
||||||
PurchaseRequestDetailID,
|
PurchaseRequestDetailID,
|
||||||
PurchaseRequestFlagID,
|
PurchaseRequestFlagID,
|
||||||
PurchaseRequestFlagM_BranchCode AS BranchCode,
|
PurchaseRequestFlagM_BranchCode AS BranchCode,
|
||||||
PurchaseRequestItemCategoryID AS ItemCategoryID,
|
PurchaseRequestItemCategoryID AS ItemCategoryID,
|
||||||
PurchaseRequestFlagQtyRest - PurchaseRequestFlagQtyProses AS UnprocessFlagQty,
|
PurchaseRequestFlagQtyRest - PurchaseRequestFlagQtyProses AS UnprocessFlagQty,
|
||||||
PurchaseRequestDetailQty AS RequestQty,
|
PurchaseRequestDetailQty AS RequestQty,
|
||||||
PurchaseRequestDetailQty AS OriginalQty,
|
PurchaseRequestDetailQty AS OriginalQty,
|
||||||
M_BranchName,
|
M_BranchName,
|
||||||
M_ItemID,
|
M_ItemID,
|
||||||
M_ItemCode,
|
M_ItemCode,
|
||||||
M_ItemDesc,
|
M_ItemDesc,
|
||||||
ItemUnitID,
|
ItemUnitID,
|
||||||
ItemUnitName,
|
ItemUnitName,
|
||||||
SupplierPricePrice as SupplierPrice
|
SupplierPricePrice as SupplierPrice
|
||||||
FROM purchase_request
|
FROM purchase_request
|
||||||
JOIN purchase_request_detail ON PurchaseRequestDetailPurchaseRequestID = PurchaseRequestID
|
JOIN purchase_request_detail ON PurchaseRequestDetailPurchaseRequestID = PurchaseRequestID
|
||||||
AND PurchaseRequestDetailIsActive = 'Y'
|
AND PurchaseRequestDetailIsActive = 'Y'
|
||||||
AND PurchaseRequestM_BranchCode = ?
|
AND PurchaseRequestM_BranchCode = ?
|
||||||
AND PurchaseRequestItemCategoryID = '3' -- id category item asset
|
AND PurchaseRequestItemCategoryID = '3' -- id category item asset
|
||||||
AND PurchaseRequestNumber LIKE ?
|
AND PurchaseRequestNumber LIKE ?
|
||||||
JOIN purchase_request_flag ON PurchaseRequestFlagPurchaseRequestDetailID = PurchaseRequestDetailID
|
JOIN purchase_request_flag ON PurchaseRequestFlagPurchaseRequestDetailID = PurchaseRequestDetailID
|
||||||
AND PurchaseRequestFlagStatus = 'PO'
|
AND PurchaseRequestFlagStatus = 'PO'
|
||||||
AND PurchaseRequestFlagIsActive = 'Y'
|
AND PurchaseRequestFlagIsActive = 'Y'
|
||||||
JOIN m_item ON M_ItemID = PurchaseRequestDetailM_ItemID
|
JOIN m_item ON M_ItemID = PurchaseRequestDetailM_ItemID
|
||||||
JOIN itemunit ON ItemUnitID = PurchaseRequestDetailItemUnitID
|
JOIN itemunit ON ItemUnitID = PurchaseRequestDetailItemUnitID
|
||||||
JOIN supplier_price ON SupplierPriceSupplierID = ?
|
JOIN supplier_price ON SupplierPriceSupplierID = ?
|
||||||
AND SupplierPriceM_ItemID = M_ItemID
|
AND SupplierPriceM_ItemID = M_ItemID
|
||||||
AND SupplierPriceItemUnitID = ItemUnitID
|
AND SupplierPriceItemUnitID = ItemUnitID
|
||||||
AND SupplierPriceIsActive = 'Y'
|
AND SupplierPriceIsActive = 'Y'
|
||||||
JOIN m_branch ON M_BranchCode = PurchaseRequestFlagM_BranchCode
|
JOIN m_branch ON M_BranchCode = PurchaseRequestFlagM_BranchCode
|
||||||
AND M_BranchIsActive = 'Y'
|
AND M_BranchIsActive = 'Y'
|
||||||
WHERE NOT EXISTS (
|
WHERE NOT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM purchase_order_detail
|
FROM purchase_order_detail
|
||||||
JOIN purchase_order ON PurchaseOrderDetailPurchaseOrderID = PurchaseOrderID
|
JOIN purchase_order ON PurchaseOrderDetailPurchaseOrderID = PurchaseOrderID
|
||||||
AND PurchaseOrderStatus = 'Approved'
|
AND PurchaseOrderStatus = 'Approved'
|
||||||
AND PurchaseOrderIsActive = 'Y'
|
AND PurchaseOrderIsActive = 'Y'
|
||||||
AND PurchaseOrderDetailIsActive = 'Y'
|
AND PurchaseOrderDetailIsActive = 'Y'
|
||||||
WHERE PurchaseOrderDetailPurchaseRequestDetailID = PurchaseRequestDetailID
|
WHERE PurchaseOrderDetailPurchaseRequestDetailID = PurchaseRequestDetailID
|
||||||
)";
|
)";
|
||||||
|
|
||||||
$sql_data = $sql . " LIMIT ? OFFSET ? ";
|
$sql_data = $sql . " LIMIT ? OFFSET ? ";
|
||||||
$que_data = $this->db->query($sql_data, [
|
$que_data = $this->db->query($sql_data, [
|
||||||
$para['branchcode'], $keyword, $para['supplierID'],
|
$para['branchcode'],
|
||||||
$limit, $offset
|
$keyword,
|
||||||
|
$para['supplierID'],
|
||||||
|
$limit,
|
||||||
|
$offset
|
||||||
]);
|
]);
|
||||||
if (!$que_data) {
|
if (!$que_data) {
|
||||||
$this->sys_error_db("[Error] get daftar request data");
|
throw new Exception('failed to query data request order aset', 1);
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
$data = $que_data->result_array();
|
$data = $que_data->result_array();
|
||||||
|
|
||||||
$sql_total = "SELECT COUNT(*) AS total FROM ($sql) AS x";
|
$sql_total = "SELECT COUNT(*) AS total FROM ($sql) AS x";
|
||||||
$que_total = $this->db->query($sql_total, [
|
$que_total = $this->db->query($sql_total, [
|
||||||
$para['branchcode'], $keyword, $para['supplierID']
|
$para['branchcode'],
|
||||||
|
$keyword,
|
||||||
|
$para['supplierID']
|
||||||
]);
|
]);
|
||||||
if (!$que_total) {
|
if (!$que_total) {
|
||||||
$this->sys_error_db("[Error] get total request aset");
|
throw new Exception('failed to query total request order aset', 1);
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
$total = $que_total->row_array()['total'];
|
$total = $que_total->row_array()['total'];
|
||||||
|
|
||||||
@@ -158,29 +174,64 @@ class PurchaseOrderAset extends MY_Controller {
|
|||||||
|
|
||||||
$this->sys_ok($out);
|
$this->sys_ok($out);
|
||||||
} catch (Exception $exc) {
|
} catch (Exception $exc) {
|
||||||
$this->sys_error($exc->getMessage());
|
$msg = '[Error] ' . $exc->getMessage();
|
||||||
|
$code = $exc->getCode();
|
||||||
|
if ($code == 0) {
|
||||||
|
$this->sys_error($msg);
|
||||||
|
} else {
|
||||||
|
$this->sys_error_db($msg);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserApproveLevel() {
|
public function getUserApproveLevel()
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
if (!$this->isLogin) {
|
if (!$this->isLogin) {
|
||||||
$this->sys_error("invalid token");
|
throw new Exception('Invalid token');
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $this->sys_user;
|
$user = $this->sys_user;
|
||||||
$sql = "SELECT M_UserM_ApproveLevelID FROM m_user
|
$sql = "SELECT M_UserM_ApproveLevelID
|
||||||
WHERE M_UserIsActive = 'Y' AND M_UserID = ? ";
|
FROM m_user
|
||||||
|
WHERE M_UserIsActive = 'Y'
|
||||||
|
AND M_UserID = ? ";
|
||||||
$que = $this->db->query($sql, [$user['M_UserID']]);
|
$que = $this->db->query($sql, [$user['M_UserID']]);
|
||||||
if (!$que) {
|
if (!$que) {
|
||||||
$this->sys_error_db("[Error] failed get approval level user");
|
throw new Exception('failed to query approval level', 1);
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
$data = $que->row_array();
|
$data = $que->row_array();
|
||||||
|
|
||||||
$this->sys_ok($data);
|
$this->sys_ok($data);
|
||||||
} catch (Exception $exc) {
|
} catch (Exception $exc) {
|
||||||
$this->sys_error($exc->getMessage());
|
$msg = '[Error] ' . $exc->getMessage();
|
||||||
|
$code = $exc->getCode();
|
||||||
|
if ($code == 0) {
|
||||||
|
$this->sys_error($msg);
|
||||||
|
} else {
|
||||||
|
$this->sys_error_db($msg);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
## MUTATIONS ##
|
||||||
|
public function insertPurchaseOrderAsset()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if (!$this->isLogin) {
|
||||||
|
throw new Exception('Invalid token');
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$msg = '[Error] ' . $e->getMessage();
|
||||||
|
$code = $e->getCode();
|
||||||
|
if ($code == 0) {
|
||||||
|
$this->sys_error($msg);
|
||||||
|
} else {
|
||||||
|
$this->sys_error_db($msg);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1668,9 +1668,9 @@ class ReceiveItemPoInventaris extends MY_Controller
|
|||||||
foreach ($data_detail_ro as $key => $detail) {
|
foreach ($data_detail_ro as $key => $detail) {
|
||||||
# UPDATE PO Summary #
|
# UPDATE PO Summary #
|
||||||
$sql_posummary = "UPDATE purchase_order_summary SET
|
$sql_posummary = "UPDATE purchase_order_summary SET
|
||||||
PurchaseOrderSummaryQtyReceived = PurchaseOrderSummaryQtyReceived + ?
|
PurchaseOrderSummaryQtyReceived = PurchaseOrderSummaryQtyReceived + ?
|
||||||
WHERE PurchaseOrderSummaryIsActive = 'Y'
|
WHERE PurchaseOrderSummaryIsActive = 'Y'
|
||||||
AND PurchaseOrderSummaryID = ?";
|
AND PurchaseOrderSummaryID = ?";
|
||||||
$que_posummary = $this->db->query($sql_posummary, [
|
$que_posummary = $this->db->query($sql_posummary, [
|
||||||
intval($detail['ReceiveOrderPoDetailQty']),
|
intval($detail['ReceiveOrderPoDetailQty']),
|
||||||
$detail['ReceiveOrderPoDetailPurchaseOrderSummaryID']
|
$detail['ReceiveOrderPoDetailPurchaseOrderSummaryID']
|
||||||
@@ -1946,18 +1946,18 @@ class ReceiveItemPoInventaris extends MY_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// insert stockid barcode barang
|
// insert stockid barcode barang
|
||||||
$sql_update_barcode = "UPDATE t_barcode_barang SET
|
// $sql_update_barcode = "UPDATE t_barcode_barang SET
|
||||||
T_BarcodeBarangStockID = ?
|
// T_BarcodeBarangStockID = ?
|
||||||
WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
|
// WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
|
||||||
$qry_update_barcode = $this->db->query($sql_update_barcode, [
|
// $qry_update_barcode = $this->db->query($sql_update_barcode, [
|
||||||
$stock_ID,
|
// $stock_ID,
|
||||||
$detail['ReceiveOrderPoDetailID']
|
// $detail['ReceiveOrderPoDetailID']
|
||||||
]);
|
// ]);
|
||||||
if (!$qry_update_barcode) {
|
// if (!$qry_update_barcode) {
|
||||||
$this->db->trans_rollback();
|
// $this->db->trans_rollback();
|
||||||
$this->sys_error_db("[Error] update barcode stockID", $this->db);
|
// $this->sys_error_db("[Error] update barcode stockID", $this->db);
|
||||||
exit;
|
// exit;
|
||||||
}
|
// }
|
||||||
} else {
|
} else {
|
||||||
$sql_insert_stock = "INSERT INTO stock (
|
$sql_insert_stock = "INSERT INTO stock (
|
||||||
StockWarehouseAlmariID,
|
StockWarehouseAlmariID,
|
||||||
@@ -1990,18 +1990,18 @@ class ReceiveItemPoInventaris extends MY_Controller
|
|||||||
$stock_qty_end = intval($batch['qty']);
|
$stock_qty_end = intval($batch['qty']);
|
||||||
|
|
||||||
// insert stockid barcode barang
|
// insert stockid barcode barang
|
||||||
$sql_update_barcode = "UPDATE t_barcode_barang SET
|
// $sql_update_barcode = "UPDATE t_barcode_barang SET
|
||||||
T_BarcodeBarangStockID = ?
|
// T_BarcodeBarangStockID = ?
|
||||||
WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
|
// WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
|
||||||
$qry_update_barcode = $this->db->query($sql_update_barcode, [
|
// $qry_update_barcode = $this->db->query($sql_update_barcode, [
|
||||||
$stockID,
|
// $stockID,
|
||||||
$detail['ReceiveOrderPoDetailID']
|
// $detail['ReceiveOrderPoDetailID']
|
||||||
]);
|
// ]);
|
||||||
if (!$qry_update_barcode) {
|
// if (!$qry_update_barcode) {
|
||||||
$this->db->trans_rollback();
|
// $this->db->trans_rollback();
|
||||||
$this->sys_error_db("[Error] update barcode stockID", $this->db);
|
// $this->sys_error_db("[Error] update barcode stockID", $this->db);
|
||||||
exit;
|
// exit;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// insert stock card
|
// insert stock card
|
||||||
@@ -2095,14 +2095,14 @@ class ReceiveItemPoInventaris extends MY_Controller
|
|||||||
// insert jurnal tx for GRNI
|
// insert jurnal tx for GRNI
|
||||||
$total_grni = round($total_debet - ($total_discount_item + $total_discount_po), 2) + $ship_cost;
|
$total_grni = round($total_debet - ($total_discount_item + $total_discount_po), 2) + $ship_cost;
|
||||||
$sql_grni = "INSERT INTO jurnal_tx (
|
$sql_grni = "INSERT INTO jurnal_tx (
|
||||||
jurnalTxJurnalID,
|
jurnalTxJurnalID,
|
||||||
jurnalTxCoaID,
|
jurnalTxCoaID,
|
||||||
jurnalTxDescription,
|
jurnalTxDescription,
|
||||||
jurnalTxDebit,
|
jurnalTxDebit,
|
||||||
jurnalTxCredit,
|
jurnalTxCredit,
|
||||||
jurnalTxM_UserID
|
jurnalTxM_UserID
|
||||||
) SELECT ?, coaID, coaDescription, 0, ?, ?
|
) SELECT ?, coaID, coaDescription, 0, ?, ?
|
||||||
FROM coa WHERE coaAccountNo = '2110100030' LIMIT 1";
|
FROM coa WHERE coaAccountNo = '2110100030' LIMIT 1";
|
||||||
$que_grni = $this->db->query($sql_grni, [$jurnal_ID, $total_grni, $user['M_UserID']]);
|
$que_grni = $this->db->query($sql_grni, [$jurnal_ID, $total_grni, $user['M_UserID']]);
|
||||||
if (!$que_grni) {
|
if (!$que_grni) {
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
@@ -2112,13 +2112,13 @@ class ReceiveItemPoInventaris extends MY_Controller
|
|||||||
$grni_jurnal_id = $this->db->insert_id();
|
$grni_jurnal_id = $this->db->insert_id();
|
||||||
|
|
||||||
$sql_addon_grni = "INSERT INTO jurnal_addon (
|
$sql_addon_grni = "INSERT INTO jurnal_addon (
|
||||||
jurnalAddOnJurnalID,
|
jurnalAddOnJurnalID,
|
||||||
jurnalAddOnJurnalTxID,
|
jurnalAddOnJurnalTxID,
|
||||||
jurnalAddOnCode,
|
jurnalAddOnCode,
|
||||||
jurnalAddOnValue,
|
jurnalAddOnValue,
|
||||||
jurnalAddOnCreated,
|
jurnalAddOnCreated,
|
||||||
jurnalAddOnCreatedUserID
|
jurnalAddOnCreatedUserID
|
||||||
) VALUES (?,?,'RONUMB',?,NOW(),?)";
|
) VALUES (?,?,'RONUMB',?,NOW(),?)";
|
||||||
$que_addon_grni = $this->db->query($sql_addon_grni, [
|
$que_addon_grni = $this->db->query($sql_addon_grni, [
|
||||||
$jurnal_ID,
|
$jurnal_ID,
|
||||||
$grni_jurnal_id,
|
$grni_jurnal_id,
|
||||||
@@ -2736,6 +2736,16 @@ class ReceiveItemPoInventaris extends MY_Controller
|
|||||||
|
|
||||||
$barcodeID = $this->db->insert_id();
|
$barcodeID = $this->db->insert_id();
|
||||||
|
|
||||||
|
# insert stock inventaris #
|
||||||
|
$sql_stockinventaris = "INSERT INTO stock_inventaris (
|
||||||
|
StockInventoryStockID,
|
||||||
|
StockInventoryRuanganID,
|
||||||
|
StockInventoryBarcode,
|
||||||
|
StockInventoryCabangID,
|
||||||
|
StockInventoryCreatedUserID
|
||||||
|
) VALUES (?,?,?,?,?)";
|
||||||
|
$que_stockinventaris = $this->db->query($sql_stockinventaris, []);
|
||||||
|
|
||||||
# insert each inventory handover detail #
|
# insert each inventory handover detail #
|
||||||
$sql_insert_handover_detail = "INSERT INTO asset_handover_detail(
|
$sql_insert_handover_detail = "INSERT INTO asset_handover_detail(
|
||||||
AssetHandoverDetailAssetHandoverID,
|
AssetHandoverDetailAssetHandoverID,
|
||||||
|
|||||||
Reference in New Issue
Block a user