1438 lines
53 KiB
PHP
1438 lines
53 KiB
PHP
<?php
|
|
|
|
class SuratJalan extends MY_Controller
|
|
{
|
|
var $db;
|
|
public function index()
|
|
{
|
|
echo "Surat Jalan API";
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
public function LookupEkspedisi()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
$type = $para['isInternal'];
|
|
$name = "%";
|
|
if ($para['expdName'] != "") {
|
|
$name = $para['expdName'] . "%";
|
|
}
|
|
|
|
$sqlexp = "SELECT
|
|
ExpeditionID,
|
|
ExpeditionName,
|
|
ExpeditionIsInternal
|
|
FROM expedition
|
|
WHERE ExpeditionIsActive = 'Y'
|
|
AND ExpeditionIsInternal = ?
|
|
AND ExpeditionName LIKE ?";
|
|
$qryexp = $this->db->query($sqlexp, [$type, $name]);
|
|
if (!$qryexp) {
|
|
$this->sys_error_db("error get listing expedition");
|
|
exit;
|
|
}
|
|
|
|
$result = array(
|
|
"records" => $qryexp->result_array(),
|
|
"total" => sizeof($qryexp->result_array())
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function LookupEkspedisiStaff()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
$expID = $para['expID'];
|
|
$name = "%";
|
|
if ($para['staffName'] != "") {
|
|
$name = $para['staffName'] . "%";
|
|
}
|
|
|
|
$sqlexp = "SELECT
|
|
ExpeditionStaffID,
|
|
ExpeditionStaffName,
|
|
ExpeditionStaffMobile
|
|
FROM expeditionstaff
|
|
WHERE ExpeditionStaffIsActive = 'Y'
|
|
AND ExpeditionStaffExpeditionID = ?
|
|
AND ExpeditionStaffName LIKE ?";
|
|
$qryexp = $this->db->query($sqlexp, [$expID, $name]);
|
|
if (!$qryexp) {
|
|
$this->sys_error_db("error get listing expedition staff");
|
|
exit;
|
|
}
|
|
|
|
$result = array(
|
|
"records" => $qryexp->result_array(),
|
|
"total" => sizeof($qryexp->result_array())
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function CreateSuratJalanFromTF()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$userID = $this->sys_user["M_UserID"];
|
|
$para = $this->sys_input;
|
|
|
|
$this->db->trans_begin();
|
|
$sqlnum = "SELECT `fn_numbering`('SJ') as SJNumber";
|
|
$qrynum = $this->db->query($sqlnum, []);
|
|
$SJNumber = $qrynum->row()->SJNumber;
|
|
|
|
$sqlSJ = "INSERT INTO suratjalan (
|
|
SuratJalanNumber,
|
|
SuratJalanDate,
|
|
SuratJalanNote,
|
|
SuratJalanT_GoodsTransferID,
|
|
SuratJalanT_GoodsTransferNum,
|
|
SuratJalanUserID
|
|
) VALUES (?,?,?,?,?,?)";
|
|
$qrySJ = $this->db->query($sqlSJ, [
|
|
$SJNumber,
|
|
$para['GoodsTfDate'],
|
|
$para['GoodsTfNotes'],
|
|
$para['GoodsTfID'],
|
|
$para['GoodsTfNum'],
|
|
$userID
|
|
]);
|
|
if (!$qrySJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("failed to insert data table surat jalan");
|
|
exit;
|
|
}
|
|
|
|
$SJalanID = $this->db->insert_id();
|
|
foreach ($para['detail'] as $key => $detail) {
|
|
$sqlSJD = "INSERT INTO suratjalan_detail (
|
|
SuratJalanDetailSuratJalanID,
|
|
SuratJalanDetailPurchaseRequestFlagID,
|
|
SuratJalanDetailT_GoodsTransferDetailID,
|
|
SuratJalanDetailM_ItemID,
|
|
SuratJalanDetailQty,
|
|
SuratJalanDetailItemUnitID,
|
|
SuratJalanDetailUserID
|
|
) VALUES (?,?,?,?,?,?,?)";
|
|
$qrySJD = $this->db->query($sqlSJD, [
|
|
$SJalanID,
|
|
$detail['PurchaseRequestFlagID'],
|
|
$detail['TGoodsTFDetailID'],
|
|
$detail['PurchaseRequestDetailM_ItemID'],
|
|
$detail['PurchaseRequestFlagQtyRest'],
|
|
$detail['PurchaseRequestDetailItemUnitID'],
|
|
$userID
|
|
]);
|
|
if (!$qrySJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("failed to insert data table surat jalan detail");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("success create surat jalan");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function KonfirmSuratJalan()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$user = $this->sys_user;
|
|
$para = $this->sys_input;
|
|
$SJalanID = $para['SJalanID'];
|
|
$TGoodID = $para['TGoodID'];
|
|
$Detail = $para['detail'];
|
|
|
|
$this->db->trans_begin();
|
|
$sqlSJ = "UPDATE suratjalan
|
|
SET SuratJalanStatus = 'Process'
|
|
WHERE SuratJalanID = ?
|
|
AND SuratJalanIsActive = 'Y'";
|
|
$qrySJ = $this->db->query($sqlSJ, [$SJalanID]);
|
|
if (!$qrySJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update status surat jalan -> konfirmasi");
|
|
exit;
|
|
}
|
|
|
|
$sqlTF = "UPDATE t_goods_transfer
|
|
SET T_GoodsTransferStatus = 'Process'
|
|
WHERE T_GoodsTransferID = ?
|
|
AND T_GoodsTransferIsActive = 'Y'";
|
|
$qryTF = $this->db->query($sqlTF, [$TGoodID]);
|
|
if (!$qryTF) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update rollback TF request status");
|
|
exit;
|
|
}
|
|
|
|
// move stock from warehouse to transit
|
|
foreach ($Detail as $key => $value) {
|
|
$ItemID = $value['SuratJalanDetailM_ItemID'];
|
|
$QtyTF = $value['SuratJalanDetailQty'];
|
|
|
|
$whstock = "SELECT
|
|
WarehouseID,
|
|
WarehouseName,
|
|
WarehouseIsTransit,
|
|
stock.*
|
|
FROM stock
|
|
JOIN warehouse ON StockWarehouseID = WarehouseID
|
|
AND WarehouseIsActive = 'Y'
|
|
WHERE StockItemID = ?
|
|
AND WarehouseS_RegionalID = ?
|
|
AND WarehouseM_BranchID = ?
|
|
AND WarehouseIsActive = 'Y'";
|
|
$whstqry = $this->db->query($whstock, [
|
|
$ItemID,
|
|
$user['S_RegionalID'],
|
|
$user['M_BranchID']
|
|
]);
|
|
if (!$whstqry) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get warehouse id dan stock qty");
|
|
exit;
|
|
}
|
|
$listWH = $whstqry->result_array();
|
|
|
|
$WHtransit = array_filter($listWH, function ($list) {
|
|
return $list['WarehouseIsTransit'] === 'Y';
|
|
});
|
|
$WHtransit = array_values($WHtransit);
|
|
if (empty($WHtransit)) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error("[Error] warehouse transit not found");
|
|
exit;
|
|
}
|
|
|
|
$WHstock = array_filter($listWH, function ($list) use ($QtyTF) {
|
|
return $list['WarehouseIsTransit'] === 'N' && intval($list['StockQty']) >= intval($QtyTF);
|
|
});
|
|
$WHstock = array_values($WHstock);
|
|
if (empty($WHstock)) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error("[Error] stock item warehouse not found or sufficient");
|
|
exit;
|
|
}
|
|
$WHstock[0]['StockQty'] = intval($WHstock[0]['StockQty']) - intval($QtyTF);
|
|
$WHtransit[0]['StockQty'] = intval($WHtransit[0]['StockQty']) + intval($QtyTF);
|
|
$newarr = [$WHstock[0], $WHtransit[0]];
|
|
|
|
foreach ($newarr as $key => $val) {
|
|
$updsto = "UPDATE stock
|
|
SET StockQty = ?
|
|
WHERE StockID = ?
|
|
AND StockWarehouseID = ?";
|
|
$qrysto = $this->db->query($updsto, [
|
|
$val['StockQty'],
|
|
$val['StockID'],
|
|
$val['WarehouseID']
|
|
]);
|
|
if (!$qrysto) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update stock qty to wh transit");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// insert into stocklog
|
|
$slog = "INSERT INTO stocklog (
|
|
StockLogWarehouseID,
|
|
StockLogDateTime,
|
|
StockLogItemID,
|
|
StockLogItemUnitID,
|
|
StockLogStockNumber,
|
|
StockLogBatchNo,
|
|
StockLogED,
|
|
StockLogReffID,
|
|
StockLogStatus,
|
|
StockLogQty,
|
|
StockLogUserID
|
|
) VALUES (?,NOW(),?,?,?,?,?,?,?,?,?)";
|
|
$qlog = $this->db->query($slog, [
|
|
$WHstock[0]['WarehouseID'],
|
|
$WHstock[0]['StockItemID'],
|
|
$WHstock[0]['StockItemUnitID'],
|
|
$WHstock[0]['StockStockNumber'],
|
|
$WHstock[0]['StockBatchNo'],
|
|
$WHstock[0]['StockED'],
|
|
$value['SuratJalanDetailT_GoodsTransferDetailID'],
|
|
"WTT",
|
|
$QtyTF,
|
|
$user['M_UserID'],
|
|
]);
|
|
if (!$qlog) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert stocklog");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
$sql_json = "SELECT suratjalan.*, '' as details
|
|
FROM suratjalan
|
|
WHERE SuratJalanID = ?";
|
|
$qry_json = $this->db->query($sql_json, [$para['SJalanID']]);
|
|
if (!$qry_json) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select json tf error");
|
|
exit;
|
|
}
|
|
$row_json = $qry_json->row_array();
|
|
|
|
$descActivity = "Konfirmasi surat jalan {$row_json['SuratJalanNumber']}, status {$row_json['SuratJalanStatus']}";
|
|
|
|
$sql_json_detail = "SELECT suratjalan_detail.*
|
|
FROM suratjalan_detail
|
|
WHERE SuratJalanDetailSuratJalanID = ?";
|
|
$qry_json_detail = $this->db->query($sql_json_detail, [$para['SJalanID']]);
|
|
if ($qry_json_detail) {
|
|
$row_json["details"] = $qry_json_detail->result_array();
|
|
} else {
|
|
$this->sys_error_db("select detail tf error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$data_json = $row_json;
|
|
|
|
$this->insertUserActivty($para['SJalanID'], 'CONFIRM', $this->sys_user["M_UserID"], $descActivity, json_encode($data_json));
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("[Success] konfirmasi surat jalan");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function KonfirmasiSuratJalan() {
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$user = $this->sys_user;
|
|
$para = $this->sys_input;
|
|
$SJalanID = $para['SJalanID'];
|
|
$TGoodID = $para['TGoodID'];
|
|
$Detail = $para['detail'];
|
|
|
|
$this->db->trans_begin();
|
|
$sqlsj = "UPDATE suratjalan SET SuratJalanStatus = 'Process' WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
|
|
$quesj = $this->db->query($sqlsj, [$SJalanID]);
|
|
if (!$quesj) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update status surat jalan -> process");
|
|
exit;
|
|
}
|
|
|
|
$sqltf = "UPDATE t_goods_transfer SET T_GoodsTransferStatus = 'Process' WHERE T_GoodsTransferID = ? AND T_GoodsTransferIsActive = 'Y'";
|
|
$quetf = $this->db->query($sqltf, [$TGoodID]);
|
|
if (!$quetf) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update rollback TF request status");
|
|
exit;
|
|
}
|
|
|
|
foreach ($Detail as $key => $value) {
|
|
$itemID = $value['SuratJalanDetailM_ItemID'];
|
|
$quantityTF = intval($value['SuratJalanDetailQty']);
|
|
$branchID = $value['M_BranchID'];
|
|
$regionalID = $value['PurchaseRequestFlagS_RegionalID'];
|
|
|
|
// get stock item from other warehouse except the requester
|
|
$sqlstock = "SELECT
|
|
WarehouseID,
|
|
WarehouseName,
|
|
WarehouseIsTransit,
|
|
stock.*
|
|
FROM warehouse
|
|
JOIN stock ON StockWarehouseID = WarehouseID
|
|
AND StockItemID = ?
|
|
WHERE WarehouseIsActive = 'Y'
|
|
AND WarehouseIsTransit = 'N'
|
|
AND WarehouseS_RegionalID = ?
|
|
AND WarehouseM_BranchID != ?";
|
|
$questock = $this->db->query($sqlstock, [$itemID, $regionalID, $branchID]);
|
|
if (!$questock) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get stock from other warehouse");
|
|
exit;
|
|
}
|
|
$stockWH = $questock->result_array();
|
|
|
|
$sisaTF = $quantityTF;
|
|
foreach ($stockWH as $key => $wh) {
|
|
$stock = intval($wh['StockQty']);
|
|
if ($stock >= $sisaTF && $sisaTF != 0) {
|
|
$sisaTF = $stock - $sisaTF;
|
|
} else if ($sisaTF != 0) {
|
|
$sisaTF = $sisaTF - $stock;
|
|
}
|
|
|
|
// update stock
|
|
$sqlupstock = "UPDATE stock SET ";
|
|
}
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("[Success] konfirmasi surat jalan");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function UpdateSuratJalan()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
|
|
$mustFields = ['EkspeID', 'EkspeStaffID', 'EkspeStaffHP', 'SJStatus', 'SJalanID'];
|
|
$missFields = [];
|
|
foreach ($mustFields as $field) {
|
|
if (empty($para[$field])) {
|
|
$missFields[] = $field;
|
|
}
|
|
}
|
|
if (!empty($missFields)) {
|
|
$this->sys_error("Missing fields: " . implode(", ", $missFields));
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_begin();
|
|
$sqlSJ = "UPDATE suratjalan
|
|
SET SuratJalanNote = ?,
|
|
SuratJalanEkspedisiID = ?,
|
|
SuratJalanEkspedisiStaffID = ?,
|
|
SuratJalanEkspedisiStaffContact = ?,
|
|
SuratJalanStatus = ?
|
|
WHERE SuratJalanID = ?
|
|
AND SuratJalanIsActive = 'Y'";
|
|
$qrySJ = $this->db->query($sqlSJ, [
|
|
$para['SJNote'],
|
|
$para['EkspeID'],
|
|
$para['EkspeStaffID'],
|
|
$para['EkspeStaffHP'],
|
|
$para['SJStatus'],
|
|
$para['SJalanID']
|
|
]);
|
|
if (!$qrySJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error update surat jalan");
|
|
exit;
|
|
}
|
|
|
|
$sql_json = "SELECT suratjalan.*, '' as details
|
|
FROM suratjalan
|
|
WHERE SuratJalanID = ?";
|
|
$qry_json = $this->db->query($sql_json, [$para['SJalanID']]);
|
|
if (!$qry_json) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select json tf error");
|
|
exit;
|
|
}
|
|
$row_json = $qry_json->row_array();
|
|
|
|
$descActivity = "Update surat jalan {$row_json['SuratJalanNumber']}, status {$para['SJStatus']}";
|
|
|
|
$sql_json_detail = "SELECT suratjalan_detail.*
|
|
FROM suratjalan_detail
|
|
WHERE SuratJalanDetailSuratJalanID = ?";
|
|
$qry_json_detail = $this->db->query($sql_json_detail, [$para['SJalanID']]);
|
|
if ($qry_json_detail) {
|
|
$row_json["details"] = $qry_json_detail->result_array();
|
|
} else {
|
|
$this->sys_error_db("select detail tf error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$data_json = $row_json;
|
|
|
|
$this->insertUserActivty($para['SJalanID'], 'UPDATE', $this->sys_user["M_UserID"], $descActivity, json_encode($data_json));
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("success update surat jalan");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function DeleteSuratJalan()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
|
|
$this->db->trans_begin();
|
|
|
|
// update status data tabel suratjalan
|
|
$sqlSJ = "UPDATE suratjalan
|
|
SET SuratJalanIsActive = 'N'
|
|
WHERE SuratJalanID = ?
|
|
AND SuratJalanIsActive = 'Y'";
|
|
$qrySJ = $this->db->query($sqlSJ, [$para['SJalanID']]);
|
|
if (!$qrySJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error delete data surat jalan");
|
|
exit;
|
|
}
|
|
|
|
//
|
|
$sqlcurr = "SELECT
|
|
SuratJalanDetailID,
|
|
SuratJalanDetailQty as qtySJ,
|
|
PurchaseRequestFlagQtyRest as tfRest,
|
|
PurchaseRequestFlagQtyProses tfProses,
|
|
PurchaseRequestFlagID
|
|
FROM suratjalan_detail
|
|
JOIN purchase_request_flag ON PurchaseRequestFlagID = SuratJalanDetailPurchaseRequestFlagID
|
|
WHERE SuratJalanDetailSuratJalanID = ?
|
|
AND SuratJalanDetailIsActive = 'Y'";
|
|
$qrycurr = $this->db->query($sqlcurr, [$para['SJalanID']]);
|
|
if (!$qrycurr) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error get current data detail");
|
|
exit;
|
|
}
|
|
$currdetail = $qrycurr->result_array();
|
|
|
|
foreach ($currdetail as $key => $value) {
|
|
$currqty = intval($value['qtySJ']);
|
|
$restqty = intval($value['tfRest']);
|
|
$prosqty = intval($value['tfProses']);
|
|
|
|
$newRes = $restqty - $currqty;
|
|
$newPrs = $prosqty - $currqty;
|
|
|
|
$sqlflag = "UPDATE purchase_request_flag
|
|
SET PurchaseRequestFlagQtyRest = ?,
|
|
PurchaseRequestFlagQtyProses = ?
|
|
WHERE PurchaseRequestFlagID = ?
|
|
AND PurchaseRequestFlagIsActive = 'Y'";
|
|
$qryflag = $this->db->query($sqlflag, [$newRes, $newPrs, $value['PurchaseRequestFlagID']]);
|
|
if (!$qryflag) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error reverse qty proses dan rest flag");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
$sqlSJD = "UPDATE suratjalan_detail
|
|
SET SuratJalanDetailIsActive = 'N'
|
|
WHERE SuratJalanDetailSuratJalanID = ?
|
|
AND SuratJalanDetailIsActive = 'Y'";
|
|
$qrySJD = $this->db->query($sqlSJD, [$para['SJalanID']]);
|
|
if (!$qrySJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error delete data surat jalan detail");
|
|
exit;
|
|
}
|
|
|
|
$sqlTF = "UPDATE t_goods_transfer
|
|
SET T_GoodsTransferStatus = 'Draft'
|
|
WHERE T_GoodsTransferID = ?
|
|
AND T_GoodsTransferIsActive = 'Y'";
|
|
$qryTF = $this->db->query($sqlTF, [$para['TGoodID']]);
|
|
if (!$qryTF) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error update rollback TF request status");
|
|
exit;
|
|
}
|
|
|
|
$sql_json = "SELECT suratjalan.*, '' as details
|
|
FROM suratjalan
|
|
WHERE SuratJalanID = ?";
|
|
$qry_json = $this->db->query($sql_json, [$para['SJalanID']]);
|
|
if (!$qry_json) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select json tf error");
|
|
exit;
|
|
}
|
|
$row_json = $qry_json->row_array();
|
|
|
|
$descActivity = "Hapus surat jalan {$row_json['SuratJalanNumber']}";
|
|
|
|
$sql_json_detail = "SELECT suratjalan_detail.*
|
|
FROM suratjalan_detail
|
|
WHERE SuratJalanDetailSuratJalanID = ?";
|
|
$qry_json_detail = $this->db->query($sql_json_detail, [$para['SJalanID']]);
|
|
if ($qry_json_detail) {
|
|
$row_json["details"] = $qry_json_detail->result_array();
|
|
} else {
|
|
$this->sys_error_db("select detail tf error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$data_json = $row_json;
|
|
|
|
$this->insertUserActivty($para['SJalanID'], 'DELETE', $this->sys_user["M_UserID"], $descActivity, json_encode($data_json));
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("success batalkan surat jalan");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function GetTFDataDetail()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
$sjID = $para['SuratJalanID'];
|
|
$page = $para['page'];
|
|
|
|
$sqlSJ = "SELECT
|
|
SuratJalanID,
|
|
SuratJalanNumber,
|
|
SuratJalanDate,
|
|
SuratJalanNote,
|
|
SuratJalanStatus,
|
|
ExpeditionName,
|
|
ExpeditionIsInternal,
|
|
COALESCE(ExpeditionID, 0) as ExpeditionID,
|
|
ExpeditionName,
|
|
COALESCE(ExpeditionStaffID, 0) as ExpeditionStaffID,
|
|
ExpeditionStaffName,
|
|
ExpeditionStaffMobile
|
|
FROM suratjalan
|
|
LEFT JOIN expedition ON ExpeditionID = SuratJalanEkspedisiID
|
|
AND ExpeditionIsActive = 'Y'
|
|
LEFT JOIN expeditionstaff ON ExpeditionStaffID = SuratJalanEkspedisiStaffID
|
|
AND ExpeditionStaffIsActive = 'Y'
|
|
WHERE SuratJalanIsActive = 'Y'
|
|
AND SuratJalanID = ?";
|
|
$qrySJ = $this->db->query($sqlSJ, [$sjID]);
|
|
if (!$qrySJ) {
|
|
$this->sys_error_db("error get surat jalan");
|
|
exit;
|
|
}
|
|
$suratj = $qrySJ->result_array()[0];
|
|
|
|
$sjdtot = "SELECT COUNT(*) as total
|
|
FROM suratjalan_detail
|
|
JOIN m_item ON M_ItemID = SuratJalanDetailM_ItemID
|
|
AND M_ItemIsActive = 'Y'
|
|
LEFT JOIN itemunit ON ItemUnitID = SuratJalanDetailItemUnitID
|
|
AND ItemUnitIsActive = 'Y'
|
|
WHERE SuratJalanDetailIsActive = 'Y'
|
|
AND SuratJalanDetailSuratJalanID = ?";
|
|
$qrytot = $this->db->query($sjdtot, [$sjID]);
|
|
if (!$qrytot) {
|
|
$this->sys_error_db("error get detail surat jaalan");
|
|
exit;
|
|
}
|
|
$detailtotal = $qrytot->result_array()[0]['total'];
|
|
|
|
$pg = 0;
|
|
$limit = 5;
|
|
if (!$page > 0) {
|
|
$pg = ($page - 1) * $limit;
|
|
}
|
|
|
|
$sqlSJD = "SELECT
|
|
SuratJalanDetailID,
|
|
SuratJalanDetailT_GoodsTransferDetailID,
|
|
SuratJalanDetailM_ItemID,
|
|
SuratJalanDetailQty,
|
|
SuratJalanDetailItemUnitID,
|
|
M_ItemCode,
|
|
M_ItemDesc,
|
|
ItemUnitCode,
|
|
ItemUnitName,
|
|
PurchaseRequestFlagS_RegionalID,
|
|
M_BranchID
|
|
FROM suratjalan_detail
|
|
JOIN purchase_request_flag ON SuratJalanDetailPurchaseRequestFlagID = PurchaseRequestFlagID
|
|
AND PurchaseRequestFlagIsActive = 'Y'
|
|
JOIN m_branch ON M_BranchCode = PurchaseRequestFlagM_BranchCode
|
|
AND M_BranchIsActive = 'Y'
|
|
JOIN m_item ON M_ItemID = SuratJalanDetailM_ItemID
|
|
AND M_ItemIsActive = 'Y'
|
|
LEFT JOIN itemunit ON ItemUnitID = SuratJalanDetailItemUnitID
|
|
AND ItemUnitIsActive = 'Y'
|
|
WHERE SuratJalanDetailIsActive = 'Y'
|
|
AND SuratJalanDetailSuratJalanID = ?
|
|
LIMIT ? OFFSET ?";
|
|
$qrySJD = $this->db->query($sqlSJD, [$sjID, $limit, $pg]);
|
|
if (!$qrySJD) {
|
|
$this->sys_error_db("error get detail surat jaalan");
|
|
exit;
|
|
}
|
|
$suratj['detail'] = $qrySJD->result_array();
|
|
$suratj['detailtotal'] = $detailtotal;
|
|
|
|
$result = array(
|
|
"records" => $suratj,
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function ListingSuratJalan()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
$stardate = $para['startdate'];
|
|
$enddate = $para['enddate'];
|
|
$branchcode = $para['branchcode'];
|
|
$status = $para['status'];
|
|
$keyword = $para['search'];
|
|
$currpage = $para['currpage'];
|
|
|
|
$page = 0;
|
|
$limit = 10;
|
|
if ($currpage > 0) {
|
|
$page = ($currpage - 1) * $limit;
|
|
}
|
|
|
|
$keyw = "%";
|
|
if ($keyword != "") {
|
|
$keyw = $keyword . "%";
|
|
}
|
|
|
|
$sqtot = "SELECT COUNT(*) as total
|
|
FROM suratjalan
|
|
JOIN t_goods_transfer ON T_GoodsTransferID = SuratJalanT_GoodsTransferID
|
|
AND T_GoodsTransferIsActive = 'Y'
|
|
JOIN m_branch ON M_BranchCode = T_GoodsTransferToM_BranchCode
|
|
AND M_BranchIsActive = 'Y'
|
|
LEFT JOIN expeditionstaff ON ExpeditionStaffID = SuratJalanEkspedisiStaffID
|
|
AND ExpeditionStaffIsActive = 'Y'
|
|
WHERE SuratJalanIsActive = 'Y'
|
|
AND SuratJalanDate >= DATE(?)
|
|
AND SuratJalanDate <= DATE(?)
|
|
AND (? = 'ALL' OR T_GoodsTransferToM_BranchCode = ? )
|
|
AND (? = 'All' OR SuratJalanStatus = ? )
|
|
AND SuratJalanNumber LIKE ?";
|
|
$qryto = $this->db->query($sqtot, [
|
|
$stardate,
|
|
$enddate,
|
|
$branchcode,
|
|
$branchcode,
|
|
$status,
|
|
$status,
|
|
$keyw
|
|
]);
|
|
if (!$qryto) {
|
|
$this->sys_error_db("error get listing data surat jalan");
|
|
exit;
|
|
}
|
|
$total = $qryto->result_array()[0]['total'];
|
|
|
|
$sqlSJ = "SELECT
|
|
SuratJalanID,
|
|
SuratJalanNumber,
|
|
SuratJalanDate,
|
|
M_BranchCode,
|
|
M_BranchName,
|
|
SuratJalanEkspedisiID,
|
|
SuratJalanEkspedisiStaffID,
|
|
ExpeditionStaffName,
|
|
SuratJalanStatus,
|
|
SuratJalanT_GoodsTransferID
|
|
FROM suratjalan
|
|
JOIN t_goods_transfer ON T_GoodsTransferID = SuratJalanT_GoodsTransferID
|
|
AND T_GoodsTransferIsActive = 'Y'
|
|
JOIN m_branch ON M_BranchCode = T_GoodsTransferToM_BranchCode
|
|
AND M_BranchIsActive = 'Y'
|
|
LEFT JOIN expeditionstaff ON ExpeditionStaffID = SuratJalanEkspedisiStaffID
|
|
AND ExpeditionStaffIsActive = 'Y'
|
|
WHERE SuratJalanIsActive = 'Y'
|
|
AND SuratJalanDate >= DATE(?)
|
|
AND SuratJalanDate <= DATE(?)
|
|
AND (? = 'ALL' OR T_GoodsTransferToM_BranchCode = ? )
|
|
AND (? = 'ALL' OR SuratJalanStatus = ? )
|
|
AND SuratJalanNumber LIKE ?
|
|
ORDER BY SuratJalanDate DESC
|
|
LIMIT ? OFFSET ?";
|
|
$qrySJ = $this->db->query($sqlSJ, [
|
|
$stardate,
|
|
$enddate,
|
|
$branchcode,
|
|
$branchcode,
|
|
$status,
|
|
$status,
|
|
$keyw,
|
|
$limit,
|
|
$page
|
|
]);
|
|
if (!$qrySJ) {
|
|
$this->sys_error_db("error get listing data surat jalan");
|
|
exit;
|
|
}
|
|
$list = $qrySJ->result_array();
|
|
|
|
$result = array(
|
|
"records" => $list,
|
|
"total" => $total
|
|
);
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function ListingBranch()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$regID = $prm["S_RegionalID"];
|
|
|
|
$sql = "SELECT M_BranchID, M_BranchCode, M_BranchName
|
|
FROM m_branch
|
|
WHERE M_BranchIsActive = 'Y'
|
|
AND M_BranchS_RegionalID = ?";
|
|
$qry = $this->db->query($sql, [$regID]);
|
|
if (!$qry) {
|
|
$this->sys_error_db("Failed to get Branches from RegionalID: {$regID}", $this->db);
|
|
exit;
|
|
}
|
|
$rst = $qry->result_array();
|
|
|
|
$this->sys_ok(["records" => $rst]);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function GenerateJurnal()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$user = $this->sys_user;
|
|
$para = $this->sys_input;
|
|
$BranchCode = $para['M_BranchCode'];
|
|
$SJDate = $para['SuratJalanDate'];
|
|
$SJalanID = $para['SuratJalanID'];
|
|
|
|
// check periode & get periodeID
|
|
$sqlper = "SELECT
|
|
periodeID
|
|
FROM periode
|
|
WHERE ? BETWEEN periodeStartDate AND periodeEndDate";
|
|
$qryper = $this->db->query($sqlper, [$SJDate]);
|
|
if (!$qryper) {
|
|
$this->sys_error_db("error get periode");
|
|
exit;
|
|
}
|
|
$periodeID = $qryper->result_array()[0]['periodeID'];
|
|
if (!$periodeID) {
|
|
$this->sys_error("Periode waktu untuk surat jalan tidak tersedia");
|
|
exit;
|
|
}
|
|
$this->db->trans_begin();
|
|
|
|
// generate jurnal number
|
|
$sqlnum = "SELECT `fn_numbering`('J') as JNumber";
|
|
$qrynum = $this->db->query($sqlnum, []);
|
|
$JNumber = $qrynum->row()->JNumber;
|
|
|
|
$sqltype = "SELECT JurnalTypeID as Jtype FROM jurnal_type WHERE JurnalTypeCode = ?";
|
|
$qrytype = $this->db->query($sqltype, ['AUTOSENDGOODR']);
|
|
if (!$qrytype) {
|
|
$this->sys_error("[Error] get id jurnal type");
|
|
exit;
|
|
}
|
|
$Jtype = $qrytype->row()->Jtype;
|
|
|
|
// insert into jurnal db
|
|
$jurnalTitle = "Auto Jurnal Transfer Barang ke Cabang " . $BranchCode . " Tanggal " . $SJDate;
|
|
$jurnalDesc = "Auto Jurnal Transfer Barang ke Cabang " . $BranchCode . " Tanggal " . $SJDate;
|
|
|
|
$sqljur = "INSERT INTO jurnal (
|
|
jurnalM_BranchCompanyID,
|
|
JurnalS_RegionalID,
|
|
jurnalM_BranchCode,
|
|
jurnalperiodeID,
|
|
jurnalNo,
|
|
jurnalTitle,
|
|
jurnalDescription,
|
|
jurnalDate,
|
|
jurnalJurnalTypeID
|
|
) VALUES (?,?,?,?,?,?,?,?,?)";
|
|
$qryjur = $this->db->query($sqljur, [
|
|
$user['M_BranchCompanyID'],
|
|
$user['S_RegionalID'],
|
|
'',
|
|
$periodeID,
|
|
$JNumber,
|
|
$jurnalTitle,
|
|
$jurnalDesc,
|
|
$SJDate,
|
|
$Jtype
|
|
]);
|
|
if (!$qryjur) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error insert data to table jurnal");
|
|
exit;
|
|
}
|
|
$JurnalID = $this->db->insert_id();
|
|
|
|
// insert jurnal_tx db
|
|
$sqlitm = "SELECT DISTINCT
|
|
SuratJalanDetailID,
|
|
SuratJalanDetailM_ItemID as itemID,
|
|
SuratJalanDetailQty,
|
|
StockWarehouseID,
|
|
M_ItemDesc,
|
|
StockItemPrice as price,
|
|
MapNatSub_PersediaanCoaID as coaID,
|
|
MapNatSub_PersediaanCoaDescription as descc
|
|
FROM suratjalan_detail
|
|
JOIN stock ON StockItemID = SuratJalanDetailM_ItemID
|
|
AND SuratJalanDetailIsActive = 'Y'
|
|
JOIN warehouse ON WarehouseID = StockWarehouseID
|
|
AND WarehouseIsActive = 'Y'
|
|
AND WarehouseIsTransit = 'N'
|
|
JOIN m_item ON M_ItemID = SuratJalanDetailM_ItemID
|
|
JOIN map_nat_subgroup ON M_ItemNat_SubGroupID = MapNatSub_NatSubGroupID
|
|
AND MapNatSub_IsActive = 'Y'
|
|
AND M_ItemIsActive = 'Y'
|
|
WHERE SuratJalanDetailIsActive = 'Y'
|
|
AND SuratJalanDetailSuratJalanID = ?
|
|
AND WarehouseS_RegionalID = ?";
|
|
$qryitm = $this->db->query($sqlitm, [$SJalanID, $user['S_RegionalID']]);
|
|
if (!$qryitm) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] errog get item data transfer");
|
|
exit;
|
|
}
|
|
$item = $qryitm->result_array();
|
|
|
|
$total = 0;
|
|
foreach ($item as $key => $val) {
|
|
$harga = intval($val['SuratJalanDetailQty']) * intval($val['price']);
|
|
$total = $total + $harga;
|
|
}
|
|
|
|
$sqljtx = "INSERT INTO jurnal_tx (
|
|
jurnalTxJurnalID,
|
|
jurnalTxCoaID,
|
|
jurnalTxDescription,
|
|
jurnalTxDebit,
|
|
jurnalTxCredit
|
|
) VALUES (?,?,?,?,?)";
|
|
$qrydbt = $this->db->query($sqljtx, [
|
|
$JurnalID,
|
|
382,
|
|
"STOCK DALAM PERJALANAN",
|
|
$total,
|
|
0
|
|
]);
|
|
if (!$qrydbt) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error insert data debit jurnal tx");
|
|
exit;
|
|
}
|
|
$jurnalTxID = $this->db->insert_id();
|
|
|
|
foreach ($item as $key => $value) {
|
|
$jtxDesc = $value['descc'] . " - " . $value['M_ItemDesc'];
|
|
$harga = intval($value['SuratJalanDetailQty']) * intval($value['price']);
|
|
|
|
$qryjtx = $this->db->query($sqljtx, [
|
|
$JurnalID,
|
|
$value['coaID'],
|
|
$jtxDesc,
|
|
0,
|
|
$harga
|
|
]);
|
|
if (!$qryjtx) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error insert data credit jurnal tx");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// insert jutnal addon
|
|
$sqladdon = "INSERT INTO jurnal_addon (
|
|
jurnalAddOnJurnalID,
|
|
jurnalAddOnJurnalTxID,
|
|
jurnalAddOnCode,
|
|
jurnalAddOnValue,
|
|
jurnalAddOnCreated
|
|
) VALUES (?,?,?,?,NOW())";
|
|
$qryaddon = $this->db->query($sqladdon, [
|
|
$JurnalID,
|
|
$jurnalTxID,
|
|
'SENDGOODRDST',
|
|
$BranchCode
|
|
]);
|
|
if (!$qryaddon) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("error insert data to table jurnal addon");
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("success generate jurnal: {$JNumber}");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function CheckPeriode()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
$date = $para['date'];
|
|
|
|
$sql = "SELECT
|
|
periodeID
|
|
FROM periode
|
|
WHERE ? BETWEEN periodeStartDate AND periodeEndDate";
|
|
$qry = $this->db->query($sql, [$date]);
|
|
if (!$qry) {
|
|
$this->sys_error_db("error get periode");
|
|
exit;
|
|
}
|
|
$periodeID = $qry->result_array()[0]['periodeID'];
|
|
if (!$periodeID) {
|
|
$this->sys_error("Periode waktu jurnal belum tersedia");
|
|
exit;
|
|
}
|
|
|
|
$this->sys_ok("OK");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
|
|
// NOT USED (FOR DEVELOPMENT ONLY) //s
|
|
|
|
public function MoveToWarehouseTransit()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$user = $this->sys_user;
|
|
$para = $this->sys_input;
|
|
$itemID = $para['itemID'];
|
|
$qtyTF = $para['qtyTF'];
|
|
|
|
$whstock = "SELECT
|
|
WarehouseID,
|
|
WarehouseName,
|
|
StockID,
|
|
StockQty,
|
|
WarehouseIsTransit
|
|
FROM stock
|
|
JOIN warehouse ON StockWarehouseID = WarehouseID
|
|
AND WarehouseIsActive = 'Y'
|
|
WHERE StockItemID = ?
|
|
AND WarehouseS_RegionalID = ?
|
|
AND WarehouseM_BranchID = ?
|
|
AND WarehouseIsActive = 'Y'";
|
|
$whstqry = $this->db->query($whstock, [
|
|
$itemID,
|
|
$user['S_RegionalID'],
|
|
$user['M_BranchID']
|
|
]);
|
|
if (!$whstqry) {
|
|
$this->db->sys_error_db("[Error] get warehouse id dan stock qty");
|
|
exit;
|
|
}
|
|
$listWH = $whstqry->result_array();
|
|
|
|
$WHtransit = array_filter($listWH, function ($list) {
|
|
return $list->WarehouseIsTransit === 'Y';
|
|
});
|
|
if (empty($WHtransit)) {
|
|
$this->db->sys_error_db("[Error] warehouse transit not found");
|
|
exit;
|
|
}
|
|
|
|
$WHstock = array_filter($listWH, function ($list) use ($qtyTF) {
|
|
return $list->WarehouseIsTransit === 'N' && $list->StockQty >= intval($qtyTF);
|
|
});
|
|
if (empty($WHstock)) {
|
|
$this->db->sys_error_db("[Error] stock item warehouse not found or sufficient");
|
|
exit;
|
|
}
|
|
|
|
$WHstock[0]['StockQty'] = intval($WHstock[0]['StockQty']) - intval($qtyTF);
|
|
$WHtransit[0]['StockQty'] = intval($WHtransit[0]['StockQty']) + intval($qtyTF);
|
|
$newarr = [$WHstock[0], $WHtransit[0]];
|
|
|
|
$this->db->trans_begin();
|
|
foreach ($newarr as $key => $value) {
|
|
$updsto = "UPDATE stock
|
|
SET StockQty = ?
|
|
WHERE StockItemID = ?
|
|
AND StockWarehouseID = ?";
|
|
$qrysto = $this->db->query($updsto, [
|
|
$value['StockQty'],
|
|
$value['StockID'],
|
|
$value['WarehouseID']
|
|
]);
|
|
if (!$qrysto) {
|
|
$this->db->trans_rollback();
|
|
$this->db->sys_error_db("[Error] update stock qty to wh transit");
|
|
exit;
|
|
}
|
|
}
|
|
$this->db->trans_commit();
|
|
|
|
$this->sys_ok('success');
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function CreateWarehouseTransit()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$getreg = "SELECT * FROM s_regional WHERE S_RegionalIsActive = 'Y'";
|
|
$qryreg = $this->db->query($getreg, []);
|
|
if (!$qryreg) {
|
|
$this->db->sys_error_db("[Error] get listing regional");
|
|
exit;
|
|
}
|
|
$regional = $qryreg->result_array();
|
|
|
|
$this->db->trans_begin();
|
|
$whid = 1000;
|
|
foreach ($regional as $key => $value) {
|
|
$code = "WH0" . $whid;
|
|
$name = "Gudang Transit Regional " . $value['S_RegionalName'];
|
|
$sqlins = "INSERT INTO warehouse (
|
|
WarehouseID,
|
|
WarehouseCode,
|
|
WarehouseName,
|
|
WarehouseType,
|
|
WarehouseS_RegionalID,
|
|
WarehouseM_BranchID,
|
|
WarehouseIsTransit,
|
|
WarehouseUserID
|
|
) vALUES (?,?,?,?,?,?,?,?)";
|
|
$qryins = $this->db->query($sqlins, [
|
|
$whid,
|
|
$code,
|
|
$name,
|
|
'R',
|
|
$value['S_RegionalID'],
|
|
0,
|
|
'Y',
|
|
0
|
|
]);
|
|
if (!$qryins) {
|
|
$this->db->trans_rollback();
|
|
$this->db->sys_error_db("[Error] create a warehouse transit");
|
|
exit;
|
|
}
|
|
|
|
$whid = $whid + 1;
|
|
}
|
|
$this->db->trans_commit();
|
|
|
|
$this->sys_ok("success");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function CreateWarehouseTransitCabang()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$getcab = "SELECT
|
|
M_BranchID,
|
|
M_BranchName,
|
|
M_BranchS_RegionalID
|
|
FROM m_branch
|
|
WHERE M_BranchIsActive = 'Y'";
|
|
$qrycab = $this->db->query($getcab, []);
|
|
if (!$qrycab) {
|
|
$this->db->sys_error_db("[Error] get listing cabang");
|
|
exit;
|
|
}
|
|
$cabang = $qrycab->result_array();
|
|
|
|
$this->db->trans_begin();
|
|
$whid = 1021;
|
|
foreach ($cabang as $key => $value) {
|
|
$code = "WH0" . $whid;
|
|
$name = "Gudang Transit Cabang " . $value['M_BranchName'];
|
|
$sqlins = "INSERT INTO warehouse (
|
|
WarehouseID,
|
|
WarehouseCode,
|
|
WarehouseName,
|
|
WarehouseType,
|
|
WarehouseS_RegionalID,
|
|
WarehouseM_BranchID,
|
|
WarehouseIsTransit,
|
|
WarehouseUserID
|
|
) vALUES (?,?,?,?,?,?,?,?)";
|
|
$qryins = $this->db->query($sqlins, [
|
|
$whid,
|
|
$code,
|
|
$name,
|
|
'B',
|
|
$value['M_BranchS_RegionalID'],
|
|
$value['M_BranchID'],
|
|
'Y',
|
|
0
|
|
]);
|
|
if (!$qryins) {
|
|
$this->db->trans_rollback();
|
|
$this->db->sys_error_db("[Error] create a warehouse transit");
|
|
exit;
|
|
}
|
|
|
|
$whid = $whid + 1;
|
|
}
|
|
$this->db->trans_commit();
|
|
|
|
$this->sys_ok("success");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function CreateSuratJalan()
|
|
{
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$userID = $this->sys_user["M_UserID"];
|
|
$para = $this->sys_input;
|
|
|
|
$mustFields = ["SJDate", "TransferID", "TransferNum", "EkspedID", "EkspedStaffID", "EkspedStaffHP"];
|
|
$missFields = [];
|
|
foreach ($mustFields as $field) {
|
|
if (empty($para[$field])) {
|
|
$missFields[] = $field;
|
|
}
|
|
}
|
|
if (!empty($missFields)) {
|
|
$this->sys_error("Missing fields: " . implode(", ", $missFields));
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_begin();
|
|
$sqlnum = "SELECT `fn_numbering`('SJ') as SJNumber";
|
|
$qrynum = $this->db->query($sqlnum, []);
|
|
$SJNumber = $qrynum->row()->SJNumber;
|
|
|
|
$sqlSJ = "INSERT INTO suratjalan (
|
|
SuratJalanNumber,
|
|
SuratJalanDate,
|
|
SuratJalanNote,
|
|
SuratJalanT_GoodsTransferID,
|
|
SuratJalanT_GoodsTransferNum,
|
|
SuratJalanEkspedisiID,
|
|
SuratJalanEkspedisiStaffID,
|
|
SuratJalanEkspedisiStaffContact,
|
|
SuratJalanUserID
|
|
) VALUES (?,?,?,?,?,?,?,?,?)";
|
|
$qrySJ = $this->db->query($sqlSJ, [
|
|
$SJNumber,
|
|
$para['SJDate'],
|
|
$para['SJNote'],
|
|
$para['TransferID'],
|
|
$para['TransferNum'],
|
|
$para['EkspedID'],
|
|
$para['EkspedStaffID'],
|
|
$para['EkspedStaffHP'],
|
|
$userID
|
|
]);
|
|
if (!$qrySJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("failed to insert data table surat jalan");
|
|
exit;
|
|
}
|
|
|
|
$SJalanID = $this->db->insert_id();
|
|
foreach ($para['SJDetail'] as $key => $detail) {
|
|
$sqlSJD = "INSERT INTO suratjalan_detail (
|
|
SuratJalanDetailSuratJalanID,
|
|
SuratJalanDetailM_ItemID,
|
|
SuratJalanDetailQty,
|
|
SuratJalanDetailItemUnitID,
|
|
SuratJalanDetailUserID
|
|
) VALUES (?,?,?,?,?)";
|
|
$qrySJD = $this->db->query($sqlSJD, [
|
|
$SJalanID,
|
|
$detail['itemID'],
|
|
$detail['itemQty'],
|
|
$detail['itemUnitID'],
|
|
$userID
|
|
]);
|
|
if (!$qrySJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("failed to insert data table surat jalan detail");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
$sql_json = "SELECT suratjalan.*, '' as details
|
|
FROM suratjalan
|
|
WHERE SuratJalanID = ?";
|
|
$qry_json = $this->db->query($sql_json, [$para['SJalanID']]);
|
|
if (!$qry_json) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("select json tf error");
|
|
exit;
|
|
}
|
|
$row_json = $qry_json->row_array();
|
|
|
|
$descActivity = "Surat jalan dengan number {$SJNumber} telah dibuat";
|
|
|
|
$sql_json_detail = "SELECT suratjalan_detail.*
|
|
FROM suratjalan_detail
|
|
WHERE SuratJalanDetailSuratJalanID = ?";
|
|
$qry_json_detail = $this->db->query($sql_json_detail, [$para['SJalanID']]);
|
|
if ($qry_json_detail) {
|
|
$row_json["details"] = $qry_json_detail->result_array();
|
|
} else {
|
|
$this->sys_error_db("select detail tf error", $this->db);
|
|
exit;
|
|
}
|
|
|
|
$data_json = $row_json;
|
|
|
|
$this->insertUserActivty($para['SJalanID'], 'NEW', $this->sys_user["M_UserID"], $descActivity, json_encode($data_json));
|
|
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("success create surat jalan");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function insertUserActivty($id, $type, $userID, $desc = '', $data = '')
|
|
{
|
|
$sql = "INSERT INTO user_activity (
|
|
UserActivityCode,
|
|
UserActivityStatus,
|
|
UserActivityDescription,
|
|
UserActivityRefID,
|
|
UserActivityData,
|
|
UserActivityUserID,
|
|
UserActivityCreated
|
|
) VALUES (
|
|
?, ?, ?, ?, ?, ?, NOW()
|
|
)";
|
|
|
|
// Eksekusi query dengan parameter yang diberikan
|
|
$exec = $this->db->query($sql, [
|
|
'SJ',
|
|
$type,
|
|
$desc,
|
|
$id,
|
|
$data,
|
|
$userID
|
|
]);
|
|
|
|
// Jika query gagal, lempar error
|
|
if (!$exec) {
|
|
$this->sys_error_db("Error inserting user activity", $this->db);
|
|
$this->db->trans_rollback();
|
|
exit;
|
|
}
|
|
}
|
|
}
|