1348 lines
54 KiB
PHP
1348 lines
54 KiB
PHP
<?php
|
|
|
|
class SuratJalan extends MY_Controller {
|
|
|
|
var $db;
|
|
public function index() {
|
|
echo "Surat Jalan API";
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
### QUERY ###
|
|
|
|
public function LookupTransferRequest() {
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
$TFnum = "%";
|
|
if ($para['TFnum'] != "") {
|
|
$TFnum = $para['TFnum'] . "%";
|
|
}
|
|
|
|
$tftype = "NP";
|
|
if ($para['type'] == 'Persediaan') {
|
|
$tftype = "P";
|
|
}
|
|
|
|
$sql = "SELECT
|
|
T_GoodsTransferID,
|
|
T_GoodsTransferNum,
|
|
T_GoodsTransferType,
|
|
T_GoodsTransferDate
|
|
FROM t_goods_transfer
|
|
WHERE T_GoodsTransferIsActive = 'Y'
|
|
AND T_GoodsTransferStatus = 'Approved'
|
|
AND T_GoodsTransferNum LIKE ?
|
|
AND T_GoodsTransferType = ?
|
|
AND NOT EXISTS (
|
|
SELECT 1
|
|
FROM suratjalan
|
|
WHERE SuratJalanIsActive = 'Y'
|
|
AND SuratJalanT_GoodsTransferID = T_GoodsTransferID
|
|
AND SuratJalanT_GoodsTransferNum = T_GoodsTransferNum
|
|
)
|
|
GROUP BY T_GoodsTransferID";
|
|
$que = $this->db->query($sql, [$TFnum, $tftype]);
|
|
if (!$que) {
|
|
$this->sys_error_db("[Error] get list TF request");
|
|
exit;
|
|
}
|
|
$data = $que->result_array();
|
|
$result = array(
|
|
"records" => $data,
|
|
"total" => sizeof($data)
|
|
);
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function LookupTransferRequestDetail() {
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
|
|
$sql = "SELECT
|
|
T_GoodsTransferDetailID AS TGDetailID,
|
|
T_GoodsTransferDetailM_ItemID AS M_ItemID,
|
|
M_ItemDesc,
|
|
T_GoodsTransferDetailItemUnitID AS ItemUnitID,
|
|
ItemUnitName,
|
|
T_GoodsTransferDetailQtyTF AS Quantity,
|
|
T_GoodsTransferDetailT_PurchaseRequestFlagID AS PRFlagID,
|
|
T_GoodsTransferDetailItemBatchNo,
|
|
T_GoodsTransferDetailItemBarNote
|
|
FROM t_goods_transfer_detail
|
|
JOIN m_item ON M_ItemID = T_GoodsTransferDetailM_ItemID
|
|
AND M_ItemIsActive = 'Y'
|
|
JOIN itemunit ON ItemUnitID = T_GoodsTransferDetailItemUnitID
|
|
AND ItemUnitIsActive = 'Y'
|
|
WHERE T_GoodsTransferDetailIsActive = 'Y'
|
|
AND T_GoodsTransferDetailIDT_GoodsTransferID = ?";
|
|
$que = $this->db->query($sql, [$para['TGoodID']]);
|
|
if (!$que) {
|
|
$this->sys_error_db("[Error] get data transfer request detail");
|
|
exit;
|
|
}
|
|
|
|
$data = $que->result_array();
|
|
$result = array(
|
|
"records" => $data,
|
|
"total" => sizeof($data)
|
|
);
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
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 LookupSuratJalanDetail() {
|
|
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,
|
|
ExpeditionID,
|
|
ExpeditionName,
|
|
ExpeditionStaffID,
|
|
ExpeditionStaffName,
|
|
ExpeditionStaffMobile,
|
|
T_GoodsTransferID,
|
|
T_GoodsTransferNum,
|
|
T_GoodsTransferDate,
|
|
T_GoodsTransferType
|
|
FROM suratjalan
|
|
JOIN t_goods_transfer ON T_GoodsTransferID = SuratJalanT_GoodsTransferID
|
|
AND T_GoodsTransferIsActive = 'Y'
|
|
JOIN expedition ON ExpeditionID = SuratJalanEkspedisiID
|
|
AND ExpeditionIsActive = 'Y'
|
|
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,
|
|
SuratJalanDetailPurchaseRequestFlagID AS PRFlagID,
|
|
SuratJalanDetailT_GoodsTransferDetailID AS TGDetailID,
|
|
SuratJalanDetailM_ItemID AS M_ItemID,
|
|
SuratJalanDetailQty AS Quantity,
|
|
SuratJalanDetailItemUnitID AS ItemUnitID,
|
|
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 LookupListSuratJalan() {
|
|
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 LookupListBranch() {
|
|
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);
|
|
}
|
|
}
|
|
|
|
### MUTATIONS ###
|
|
|
|
public function CreateSuratJalan() {
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$data = $this->sys_input;
|
|
$detail = $data['detail'];
|
|
$user = $this->sys_user;
|
|
|
|
$this->db->trans_begin();
|
|
|
|
## GENERATE SURAT JALAN NUMBER ##
|
|
// $sqlnum = "SELECT `fn_numbering`('SJ') as SJNumber";
|
|
// $qrynum = $this->db->query($sqlnum, []);
|
|
// $SJNumber = $qrynum->row()->SJNumber;
|
|
|
|
$areaid = $user['M_BranchID'];
|
|
$areatype = 'B';
|
|
if ($user['loginLevel'] == 'regional') {
|
|
$areaid = $user['S_RegionalID'];
|
|
$areatype = 'R';
|
|
}
|
|
|
|
$sqlusrdivisi = "SELECT M_UserDivisionDivisionID FROM m_userdivision
|
|
WHERE M_UserDivisionM_UserID = ? AND M_UserDivisionIsActive = 'Y'";
|
|
$queusrdivisi = $this->db->query($sqlusrdivisi, [$user['M_UserID']]);
|
|
if (!$queusrdivisi) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get user divisi", $this->db);
|
|
exit;
|
|
}
|
|
$userDivID = $queusrdivisi->row_array()['M_UserDivisionDivisionID'];
|
|
|
|
$sqlnum = "SELECT `fn_penomoran`(?, ?, ?, ?, ?, ?) AS numpd;";
|
|
$quenum = $this->db->query($sqlnum, ['SJ', $userDivID, $areatype, $areaid, 'SM', 'Y']);
|
|
if (!$quenum) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] generate number doc", $this->db);
|
|
exit;
|
|
}
|
|
$SJNumber = $quenum->row_array()['numpd'];
|
|
|
|
## INSERT INTO TABLE SURATJALAN ##
|
|
$sqlSJ = "INSERT INTO suratjalan (
|
|
SuratJalanNumber,
|
|
SuratJalanDate,
|
|
SuratJalanNote,
|
|
SuratJalanT_GoodsTransferID,
|
|
SuratJalanT_GoodsTransferNum,
|
|
SuratJalanEkspedisiID,
|
|
SuratJalanEkspedisiStaffID,
|
|
SuratJalanEkspedisiStaffContact,
|
|
SuratJalanStatus,
|
|
SuratJalanCreated,
|
|
SuratJalanUserID
|
|
) VALUES (?,?,?,?,?,?,?,?,?,NOW(),?)";
|
|
$queSJ = $this->db->query($sqlSJ, [
|
|
$SJNumber, $data['SJdate'], $data['SJnote'], $data['TGoodID'],
|
|
$data['TGoodNum'], $data['EkspedisiID'], $data['EkspedisiStaffID'],
|
|
$data['EkspedisiStaffHP'], $data['SJstatus'], $user['M_UserID']
|
|
]);
|
|
if (!$queSJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert into table surat jalan");
|
|
exit;
|
|
}
|
|
$SJID = $this->db->insert_id();
|
|
|
|
## INSERT INTO TABLE SURATJALAN_DETAIL ##
|
|
foreach ($detail as $key => $obj) {
|
|
$sqlSJD = "INSERT INTO suratjalan_detail (
|
|
SuratJalanDetailSuratJalanID,
|
|
SuratJalanDetailPurchaseRequestFlagID,
|
|
SuratJalanDetailT_GoodsTransferDetailID,
|
|
SuratJalanDetailM_ItemID,
|
|
SuratJalanDetailQty,
|
|
SuratJalanDetailItemUnitID,
|
|
SuratJalanDetailCreated,
|
|
SuratJalanDetailUserID
|
|
) VALUES (?,?,?,?,?,?,NOW(),?)";
|
|
$queSJD = $this->db->query($sqlSJD, [
|
|
$SJID, $obj['PRFlagID'], $obj['TGDetailID'],
|
|
$obj['ItemID'], $obj['Qty'], $obj['ItemUnitID'], $user['M_UserID']
|
|
]);
|
|
if (!$queSJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert into table suratjalan_detail");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
## GET LAST INSERTED DATA ##
|
|
$sqlgetSJ = "SELECT * FROM suratjalan WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
|
|
$quegetSJ = $this->db->query($sqlgetSJ, [$SJID]);
|
|
if (!$quegetSJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get last inserted data from table suratjalan");
|
|
exit;
|
|
}
|
|
$lastSJ = $quegetSJ->row_array();
|
|
|
|
$sqlgetSJD = "SELECT * FROM suratjalan_detail WHERE SuratJalanDetailSuratJalanID = ? AND SuratJalanDetailIsActive = 'Y'";
|
|
$quegetSJD = $this->db->query($sqlgetSJD, [$SJID]);
|
|
if (!$quegetSJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get last inserted data from table suratjalan_detail");
|
|
exit;
|
|
}
|
|
$lastSJD = $quegetSJD->result_array();
|
|
$lastSJ['detail'] = $lastSJD;
|
|
|
|
## UPDATE STOCK DAN KALKULASI STOCK ##
|
|
if (strtolower($data['SJstatus']) === 'process' && strtolower($data['TFtype']) === 'persediaan') {
|
|
$this->confirmSuratJalan($lastSJ, $lastSJD, $user);
|
|
$this->generateJurnal($lastSJ, $lastSJD, $data['TFtype'], $user);
|
|
}
|
|
|
|
if (strtolower($data['SJstatus']) === 'process' && strtolower($data['TFtype']) === 'non persediaan') {
|
|
$this->confirmSuratJalanNP($lastSJ, $lastSJD, $user);
|
|
$this->generateJurnal($lastSJ, $lastSJD, $data['TFtype'], $user);
|
|
}
|
|
|
|
## INSERT INTO LOG ACTIVITY ##
|
|
$msg = "Surat Jalan nomor: {$lastSJ['SuratJalanNumber']}, Tanggal: {$lastSJ['SuratJalanDate']}";
|
|
$this->insertUserActivty($SJID, "CREATE", $user['M_UserID'], $msg, json_encode($lastSJ));
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$result = array(
|
|
"total" => 1,
|
|
"msg" => $msg,
|
|
"records" => $lastSJ
|
|
);
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
public function UpdateSuratJalan() {
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$data = $this->sys_input;
|
|
$detail = $data['detail'];
|
|
$user = $this->sys_user;
|
|
|
|
$this->db->trans_begin();
|
|
|
|
$sqlSJ = "UPDATE suratjalan SET
|
|
SuratJalanDate = ?,
|
|
SuratJalanNote = ?,
|
|
SuratJalanT_GoodsTransferID = ?,
|
|
SuratJalanT_GoodsTransferNum = ?,
|
|
SuratJalanEkspedisiID = ?,
|
|
SuratJalanEkspedisiStaffID = ?,
|
|
SuratJalanEkspedisiStaffContact = ?,
|
|
SuratJalanStatus = ?,
|
|
SuratJalanLastUpdated = NOW()
|
|
WHERE SuratJalanID = ?";
|
|
$queSJ = $this->db->query($sqlSJ, [
|
|
$data['SJdate'], $data['SJnote'], $data['TGoodID'],
|
|
$data['TGoodNum'], $data['EkspedisiID'], $data['EkspedisiStaffID'],
|
|
$data['EkspedisiStaffHP'], $data['SJstatus'], $data['SJID']
|
|
]);
|
|
if (!$queSJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update table suratjalan");
|
|
exit;
|
|
}
|
|
|
|
$sqlN = "UPDATE suratjalan_detail SET
|
|
SuratJalanDetailIsActive = 'N',
|
|
SuratJalanDetailLastUpdated = NOW()
|
|
WHERE SuratJalanDetailSuratJalanID = ?
|
|
AND SuratJalanDetailIsActive = 'Y'";
|
|
$queN = $this->db->query($sqlN, [$data['SJID']]);
|
|
if (!$queN) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update suratjalan_detail to N");
|
|
exit;
|
|
}
|
|
|
|
foreach ($detail as $key => $obj) {
|
|
$sqlSJD = "INSERT INTO suratjalan_detail (
|
|
SuratJalanDetailSuratJalanID,
|
|
SuratJalanDetailPurchaseRequestFlagID,
|
|
SuratJalanDetailT_GoodsTransferDetailID,
|
|
SuratJalanDetailM_ItemID,
|
|
SuratJalanDetailQty,
|
|
SuratJalanDetailItemUnitID,
|
|
SuratJalanDetailCreated,
|
|
SuratJalanDetailUserID
|
|
) VALUES (?,?,?,?,?,?,NOW(),?)";
|
|
$queSJD = $this->db->query($sqlSJD, [
|
|
$data['SJID'], $obj['PRFlagID'], $obj['TGDetailID'],
|
|
$obj['ItemID'], $obj['Qty'], $obj['ItemUnitID'], $user['M_UserID']
|
|
]);
|
|
if (!$queSJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert into table suratjalan_detail");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
## GET LAST INSERTED DATA ##
|
|
$sqlgetSJ = "SELECT * FROM suratjalan WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
|
|
$quegetSJ = $this->db->query($sqlgetSJ, [$data['SJID']]);
|
|
if (!$quegetSJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get last inserted data from table suratjalan");
|
|
exit;
|
|
}
|
|
$lastSJ = $quegetSJ->row_array();
|
|
|
|
$sqlgetSJD = "SELECT * FROM suratjalan_detail WHERE SuratJalanDetailSuratJalanID = ? AND SuratJalanDetailIsActive = 'Y'";
|
|
$quegetSJD = $this->db->query($sqlgetSJD, [$data['SJID']]);
|
|
if (!$quegetSJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get last inserted data from table suratjalan_detail");
|
|
exit;
|
|
}
|
|
$lastSJD = $quegetSJD->result_array();
|
|
$lastSJ['detail'] = $lastSJD;
|
|
|
|
## UPDATE STOCK DAN KALKULASI STOCK ##
|
|
if (strtolower($data['SJstatus']) === 'process' && strtolower($data['TFtype']) === 'persediaan') {
|
|
$this->confirmSuratJalan($lastSJ, $lastSJD, $user);
|
|
$this->generateJurnal($lastSJ, $lastSJD, $data['TFtype'], $user);
|
|
}
|
|
|
|
if (strtolower($data['SJstatus']) === 'process' && strtolower($data['TFtype']) === 'non persediaan') {
|
|
$this->confirmSuratJalanNP($lastSJ, $lastSJD, $user);
|
|
$this->generateJurnal($lastSJ, $lastSJD, $data['TFtype'], $user);
|
|
}
|
|
|
|
## INSERT INTO LOG ACTIVITY ##
|
|
$msg = "Surat Jalan nomor: {$lastSJ['SuratJalanNumber']}, Tanggal: {$lastSJ['SuratJalanDate']}";
|
|
$this->insertUserActivty($data['SJID'], "UPDATE", $user['M_UserID'], $msg, json_encode($lastSJ));
|
|
|
|
$this->db->trans_commit();
|
|
$result = array(
|
|
"total" => 1,
|
|
"msg" => $msg,
|
|
"records" => $lastSJ
|
|
);
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function confirmSuratJalan($data, $detail, $user) {
|
|
|
|
## UPDATE STATUS SURATJALAN ##
|
|
$sqlsj = "UPDATE suratjalan SET SuratJalanStatus = 'Process' WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
|
|
$quesj = $this->db->query($sqlsj, [$data['SuratJalanID']]);
|
|
if (!$quesj) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update status surat jalan");
|
|
exit;
|
|
}
|
|
|
|
## UPDATE STATUS T_GOODS_TRANSFER ##
|
|
$sqltf = "UPDATE t_goods_transfer SET T_GoodsTransferStatus = 'Process' WHERE T_GoodsTransferID = ? AND T_GoodsTransferIsActive = 'Y'";
|
|
$quetf = $this->db->query($sqltf, [$data['SuratJalanT_GoodsTransferID']]);
|
|
if (!$quetf) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update status transfer request");
|
|
exit;
|
|
}
|
|
|
|
## UPDATE STOCK KELUAR KE TRANSIT ##
|
|
// foreach ($detail as $key => $obj) {
|
|
// ## GET DETAIL TF BATCHES STOCK ##
|
|
// $sqltfd = "SELECT T_GoodsTransferDetailItemBatchNo FROM t_goods_transfer_detail WHERE T_GoodsTransferDetailID = ? AND T_GoodsTransferDetailIsActive = 'Y'";
|
|
// $quetfd = $this->db->query($sqltfd, [$obj['SuratJalanDetailT_GoodsTransferDetailID']]);
|
|
// if (!$quetfd) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] get data batch number stock");
|
|
// exit;
|
|
// }
|
|
// $jsonStr = $quetfd->row_array()['T_GoodsTransferDetailItemBatchNo'];
|
|
// $batches = [];
|
|
|
|
// if (!empty($jsonStr)) {
|
|
// $decode = json_decode($jsonStr, true);
|
|
// if ($decode !== null && json_last_error() === JSON_ERROR_NONE) {
|
|
// $batches = $decode;
|
|
// } else {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] decode batches number stock");
|
|
// exit;
|
|
// }
|
|
// }
|
|
|
|
// ## UPDATE STOCK WAREHOUSE REGIONAL AND WAREHOUSE TRANSIT ##
|
|
// foreach ($batches as $key => $ele) {
|
|
// $sqlupdstock = "UPDATE stock SET
|
|
// StockQty = StockQty - ?,
|
|
// StockLastUpdated = NOW()
|
|
// WHERE StockID = ?";
|
|
// $queupdstock = $this->db->query($sqlupdstock, [$ele['QtyReq'], $ele['StockID']]);
|
|
// if (!$queupdstock) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] update stock regional");
|
|
// exit;
|
|
// }
|
|
|
|
// $sqlwh = "SELECT
|
|
// StockID,
|
|
// WarehouseID,
|
|
// WarehouseName
|
|
// FROM warehouse
|
|
// LEFT JOIN stock ON StockWarehouseID = WarehouseID
|
|
// AND StockItemID = ?
|
|
// AND StockItemUnitID = ?
|
|
// AND StockBatchNo = ?
|
|
// AND WarehouseIsActive = 'Y'
|
|
// WHERE WarehouseIsTransit = 'Y'
|
|
// AND WarehouseS_RegionalID = ?
|
|
// AND WarehouseM_BranchID = 0";
|
|
// $quewh = $this->db->query($sqlwh, [
|
|
// $ele['StockItemID'], $ele['StockItemUnitID'],
|
|
// $ele['StockBatchNo'], $user['S_RegionalID']
|
|
// ]);
|
|
// if (!$quewh) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] check wh transit");
|
|
// exit;
|
|
// }
|
|
// $transit = $quewh->row_array();
|
|
|
|
// if (is_null($transit['StockID'])) {
|
|
// $sqlupdtsit = "INSERT INTO stock (
|
|
// StockWarehouseID,
|
|
// StockStockNumber,
|
|
// StockItemID,
|
|
// StockItemUnitID,
|
|
// StockItemPrice,
|
|
// StockBatchNo,
|
|
// StockED,
|
|
// StockQty,
|
|
// StockUserID
|
|
// ) VALUES (?,fn_numbering('SN'),?,?,?,?,?,?,?)";
|
|
// $queupdtsit = $this->db->query($sqlupdtsit, [
|
|
// $transit['WarehouseID'],
|
|
// $ele['StockItemID'],
|
|
// $ele['StockItemUnitID'],
|
|
// $ele['StockItemPrice'],
|
|
// $ele['StockBatchNo'],
|
|
// $ele['StockED'],
|
|
// $ele['QtyReq'],
|
|
// $user['M_UserID']
|
|
// ]);
|
|
// if (!$queupdtsit) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] insert stock to warehouse transit");
|
|
// exit;
|
|
// }
|
|
// } else {
|
|
// $sqlupdtrst = "UPDATE stock SET
|
|
// StockQty = StockQty + ?,
|
|
// StockLastUpdated = NOW()
|
|
// WHERE StockID = ?";
|
|
// $queupdtrst = $this->db->query($sqlupdtrst, [$ele['QtyReq'], $transit['StockID']]);
|
|
// if (!$queupdtrst) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] update stock to warehouse transit");
|
|
// exit;
|
|
// }
|
|
// }
|
|
|
|
// $sqllog = "INSERT INTO stocklog (
|
|
// StockLogWarehouseID,
|
|
// StockLogDateTime,
|
|
// StockLogItemID,
|
|
// StockLogItemUnitID,
|
|
// StockLogStockNumber,
|
|
// StockLogBatchNo,
|
|
// StockLogED,
|
|
// StockLogReffID,
|
|
// StockLogStatus,
|
|
// StockLogQty,
|
|
// StockLogUserID
|
|
// ) VALUES (?,NOW(),?,?,?,?,?,?,?,?,?)";
|
|
// $quelog = $this->db->query($sqllog, [
|
|
// $ele['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'], $ele['StockStockNumber'],
|
|
// $ele['StockBatchNo'], $ele['StockED'], $obj['SuratJalanDetailT_GoodsTransferDetailID'],
|
|
// "WTT", $ele['QtyReq'], $user['M_UserID']
|
|
// ]);
|
|
// if (!$quelog) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] insert into stock log");
|
|
// exit;
|
|
// }
|
|
// }
|
|
// }
|
|
}
|
|
|
|
function confirmSuratJalanNP($data, $detail, $user) {
|
|
## UPDATE STATUS SURATJALAN ##
|
|
$sqlsj = "UPDATE suratjalan SET SuratJalanStatus = 'Process' WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
|
|
$quesj = $this->db->query($sqlsj, [$data['SuratJalanID']]);
|
|
if (!$quesj) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update status surat jalan");
|
|
exit;
|
|
}
|
|
|
|
## UPDATE STATUS T_GOODS_TRANSFER ##
|
|
$sqltf = "UPDATE t_goods_transfer SET T_GoodsTransferStatus = 'Process' WHERE T_GoodsTransferID = ? AND T_GoodsTransferIsActive = 'Y'";
|
|
$quetf = $this->db->query($sqltf, [$data['SuratJalanT_GoodsTransferID']]);
|
|
if (!$quetf) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] update status transfer request");
|
|
exit;
|
|
}
|
|
|
|
|
|
## UPDATE STOCK KELUAR KE TRANSIT ##
|
|
// foreach ($detail as $key => $obj) {
|
|
// ## GET DETAIL TF BATCHES STOCK ##
|
|
// $sqltfd = "SELECT T_GoodsTransferDetailItemBarNote FROM t_goods_transfer_detail WHERE T_GoodsTransferDetailID = ? AND T_GoodsTransferDetailIsActive = 'Y'";
|
|
// $quetfd = $this->db->query($sqltfd, [$obj['SuratJalanDetailT_GoodsTransferDetailID']]);
|
|
// if (!$quetfd) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] get data barnote number stock");
|
|
// exit;
|
|
// }
|
|
// $jsonStr = $quetfd->row_array()['T_GoodsTransferDetailItemBarNote'];
|
|
// $barnote = [];
|
|
|
|
// if (!empty($jsonStr)) {
|
|
// $decode = json_decode($jsonStr, true);
|
|
// if ($decode !== null && json_last_error() === JSON_ERROR_NONE) {
|
|
// $barnote = $decode;
|
|
// } else {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] decode barnote data number stock");
|
|
// exit;
|
|
// }
|
|
// }
|
|
|
|
// ## UPDATE STOCK WAREHOUSE REGIONAL AND WAREHOUSE TRANSIT ##
|
|
// foreach ($barnote as $key => $ele) {
|
|
// $sqlupdstock = "UPDATE stock SET
|
|
// StockQty = StockQty - ?,
|
|
// StockLastUpdated = NOW()
|
|
// WHERE StockID = ?";
|
|
// $queupdstock = $this->db->query($sqlupdstock, [$ele['QtyReq'], $ele['StockID']]);
|
|
// if (!$queupdstock) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] update stock regional");
|
|
// exit;
|
|
// }
|
|
|
|
// $sqlwh = "SELECT
|
|
// StockID,
|
|
// WarehouseID,
|
|
// WarehouseName
|
|
// FROM warehouse
|
|
// LEFT JOIN stock ON StockWarehouseID = WarehouseID
|
|
// AND StockItemID = ?
|
|
// AND StockItemUnitID = ?
|
|
// AND WarehouseIsActive = 'Y'
|
|
// WHERE WarehouseIsTransit = 'Y'
|
|
// AND WarehouseS_RegionalID = ?
|
|
// AND WarehouseM_BranchID = 0";
|
|
// $quewh = $this->db->query($sqlwh, [
|
|
// $ele['StockItemID'], $ele['StockItemUnitID'], $user['S_RegionalID']
|
|
// ]);
|
|
// if (!$quewh) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] check wh transit");
|
|
// exit;
|
|
// }
|
|
// $transit = $quewh->row_array();
|
|
|
|
// if (is_null($transit['StockID'])) {
|
|
// $sqlupdtsit = "INSERT INTO stock (
|
|
// StockWarehouseID,
|
|
// StockStockNumber,
|
|
// StockItemID,
|
|
// StockItemUnitID,
|
|
// StockItemPrice,
|
|
// StockED,
|
|
// StockQty,
|
|
// StockUserID
|
|
// ) VALUES (?,fn_numbering('SN'),?,?,?,?,?,?)";
|
|
// $queupdtsit = $this->db->query($sqlupdtsit, [
|
|
// $transit['WarehouseID'],
|
|
// $ele['StockItemID'],
|
|
// $ele['StockItemUnitID'],
|
|
// $ele['StockItemPrice'],
|
|
// $ele['StockED'],
|
|
// $ele['QtyReq'],
|
|
// $user['M_UserID']
|
|
// ]);
|
|
// if (!$queupdtsit) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] insert stock to warehouse transit");
|
|
// exit;
|
|
// }
|
|
// } else {
|
|
// $sqlupdtrst = "UPDATE stock SET
|
|
// StockQty = StockQty + ?,
|
|
// StockLastUpdated = NOW()
|
|
// WHERE StockID = ?";
|
|
// $queupdtrst = $this->db->query($sqlupdtrst, [$ele['QtyReq'], $transit['StockID']]);
|
|
// if (!$queupdtrst) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] update stock to warehouse transit");
|
|
// exit;
|
|
// }
|
|
// }
|
|
|
|
// $sqllog = "INSERT INTO stocklog (
|
|
// StockLogWarehouseID,
|
|
// StockLogDateTime,
|
|
// StockLogItemID,
|
|
// StockLogItemUnitID,
|
|
// StockLogStockNumber,
|
|
// StockLogED,
|
|
// StockLogReffID,
|
|
// StockLogStatus,
|
|
// StockLogQty,
|
|
// StockLogUserID
|
|
// ) VALUES (?,NOW(),?,?,?,?,?,?,?,?)";
|
|
// $quelog = $this->db->query($sqllog, [
|
|
// $ele['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'], $ele['StockStockNumber'],
|
|
// $ele['StockED'], $obj['SuratJalanDetailT_GoodsTransferDetailID'],
|
|
// "WTT", $ele['QtyReq'], $user['M_UserID']
|
|
// ]);
|
|
// if (!$quelog) {
|
|
// $this->db->trans_rollback();
|
|
// $this->sys_error_db("[Error] insert into stock log");
|
|
// exit;
|
|
// }
|
|
// }
|
|
// }
|
|
}
|
|
|
|
public function DeleteSuratJalan() {
|
|
try {
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("invalid token");
|
|
exit;
|
|
}
|
|
|
|
$para = $this->sys_input;
|
|
|
|
$this->db->trans_begin();
|
|
|
|
## GET DATA BEFORE DELETED ##
|
|
$sqlgetSJ = "SELECT * FROM suratjalan WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
|
|
$quegetSJ = $this->db->query($sqlgetSJ, [$para['SJalanID']]);
|
|
if (!$quegetSJ) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get last inserted data from table suratjalan");
|
|
exit;
|
|
}
|
|
$lastSJ = $quegetSJ->row_array();
|
|
|
|
$sqlgetSJD = "SELECT * FROM suratjalan_detail WHERE SuratJalanDetailSuratJalanID = ? AND SuratJalanDetailIsActive = 'Y'";
|
|
$quegetSJD = $this->db->query($sqlgetSJD, [$para['SJalanID']]);
|
|
if (!$quegetSJD) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get last inserted data from table suratjalan_detail");
|
|
exit;
|
|
}
|
|
$lastSJD = $quegetSJD->result_array();
|
|
$lastSJ['detail'] = $lastSJD;
|
|
|
|
## UPDATE IS ACTIVE TABLE 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;
|
|
}
|
|
|
|
## UPDATE IS ACTIVE TABLE SURATJALAN DETAIL##
|
|
$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;
|
|
}
|
|
|
|
$this->insertUserActivty($para['SJalanID'], "DELETE", $this->sys_user["M_UserID"], 'Delete Surat jalan', json_encode($lastSJ));
|
|
$this->db->trans_commit();
|
|
$this->sys_ok("success hapus surat jalan");
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function generateJurnal($data, $detail, $type, $user) {
|
|
## CHECK JOURNAL TIME PERIOD ##
|
|
$sqlperiod = "SELECT periodeID FROM periode WHERE DATE(NOW()) BETWEEN periodeStartDate AND periodeEndDate";
|
|
$queperiod = $this->db->query($sqlperiod, []);
|
|
if (!$queperiod) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] check periode");
|
|
exit;
|
|
}
|
|
$periode = $queperiod->row_array();
|
|
if (empty($periode)) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] periode waktu tidak ditemukan");
|
|
exit;
|
|
}
|
|
|
|
## GENERATE JURNAL NUMBER ##
|
|
$sqlnum = "SELECT `fn_numbering`('J') as JNumber";
|
|
$qrynum = $this->db->query($sqlnum, []);
|
|
if (!$qrynum) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] generate jurnal number");
|
|
exit;
|
|
}
|
|
$JurnalNumber = $qrynum->row()->JNumber;
|
|
|
|
## GET JURNAL TYPE ID ##
|
|
$sqltype = "SELECT JurnalTypeID as Jtype FROM jurnal_type WHERE JurnalTypeCode = ?";
|
|
$qrytype = $this->db->query($sqltype, ['AUTOSENDGOODR']);
|
|
if (!$qrytype) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error("[Error] get id jurnal type");
|
|
exit;
|
|
}
|
|
$Jurnaltype = $qrytype->row()->Jtype;
|
|
|
|
## TUJUAN TRANSFEr ##
|
|
$sqltj = "SELECT
|
|
M_BranchName,
|
|
M_BranchCode
|
|
FROM t_goods_transfer
|
|
JOIN m_branch ON M_BranchCode = T_GoodsTransferToM_BranchCode
|
|
WHERE T_GoodsTransferID = ? AND T_GoodsTransferIsActive = 'Y'";
|
|
$quetj = $this->db->query($sqltj, [$data['SuratJalanT_GoodsTransferID']]);
|
|
if (!$quetj) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error("[Error] get tujuan transfer");
|
|
exit;
|
|
}
|
|
$tjcabang = $quetj->row_array();
|
|
|
|
$title = "Auto Jurnal Transfer Regional - Cabang Surat Jalan Number {$data['SuratJalanNumber']}";
|
|
$descp = "Surat Jalan Number: {$data['SuratJalanNumber']}, Tanggal: {$data['SuratJalanDate']}, Tujuan: {$tjcabang['M_BranchName']} ({$tjcabang['M_BranchCode']})";
|
|
$sqlJurnal = "INSERT INTO jurnal (
|
|
jurnalM_BranchCompanyID,
|
|
JurnalS_RegionalID,
|
|
jurnalM_BranchCode,
|
|
jurnalperiodeID,
|
|
jurnalNo,
|
|
jurnalTitle,
|
|
jurnalDescription,
|
|
jurnalDate,
|
|
jurnalJurnalTypeID,
|
|
jurnalM_UserID
|
|
) VALUES (?,?,?,?,?,?,?,?,?,?)";
|
|
$queJurnal = $this->db->query($sqlJurnal, [
|
|
$user['M_BranchCompanyID'], $user['S_RegionalID'], $user['M_BranchCode'],
|
|
$periode['periodeID'], $JurnalNumber, $title, $descp,
|
|
$data['SuratJalanDate'], $Jurnaltype, $user['M_UserID']
|
|
]);
|
|
if (!$queJurnal) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert into table jurnal");
|
|
exit;
|
|
}
|
|
$JurnalID = $this->db->insert_id();
|
|
|
|
## GET COA ID ##
|
|
$sqlcoa = "SELECT coaID, coaDescription FROM coa WHERE coaAccountNo = ? AND coaIsActive = 'Y'";
|
|
$quecoa = $this->db->query($sqlcoa, ['1150700001']);
|
|
if (!$quecoa) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get coa id");
|
|
exit;
|
|
}
|
|
$coa = $quecoa->row_array();
|
|
if (empty($coa)) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] coa null or not found");
|
|
exit;
|
|
}
|
|
|
|
## INSERT DATA TO JURNAL TX ##
|
|
$sqlJurnalTX = "INSERT INTO jurnal_tx (
|
|
jurnalTxJurnalID,
|
|
jurnalTxCoaID,
|
|
jurnalTxDescription,
|
|
jurnalTxDebit,
|
|
jurnalTxCredit,
|
|
jurnalTxM_UserID
|
|
) VALUES (?,?,?,?,?,?)";
|
|
|
|
$total = 0.00;
|
|
foreach ($detail as $key => $obj) {
|
|
if (strtolower($type) === 'persediaan') {
|
|
## GET DETAIL TF BATCHES STOCK ##
|
|
$sqltfd = "SELECT T_GoodsTransferDetailItemBatchNo FROM t_goods_transfer_detail WHERE T_GoodsTransferDetailID = ? AND T_GoodsTransferDetailIsActive = 'Y'";
|
|
$quetfd = $this->db->query($sqltfd, [$obj['SuratJalanDetailT_GoodsTransferDetailID']]);
|
|
if (!$quetfd) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get data batch number stock");
|
|
exit;
|
|
}
|
|
$jsonStr = $quetfd->row_array()['T_GoodsTransferDetailItemBatchNo'];
|
|
$batches = [];
|
|
|
|
if (!empty($jsonStr)) {
|
|
$decode = json_decode($jsonStr, true);
|
|
if ($decode !== null && json_last_error() === JSON_ERROR_NONE) {
|
|
$batches = $decode;
|
|
} else {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] decode batches number stock");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
$subtotal = 0.00;
|
|
foreach ($batches as $key => $ele) {
|
|
$harga = intval($ele['QtyReq']) * doubleval($ele['StockItemPrice']);
|
|
$subtotal = round($subtotal + $harga, 2);
|
|
}
|
|
|
|
$sqlcoaitem = "SELECT
|
|
MapNatSub_PersediaanCoaID,
|
|
MapNatSub_PersediaanCoaDescription,
|
|
MapNatSub_PersediaanCoaAccountNo
|
|
FROM m_item
|
|
JOIN map_nat_subgroup ON MapNatSub_NatGroupID = M_ItemNat_GroupID
|
|
AND MapNatSub_NatSubGroupID = M_ItemNat_SubGroupID
|
|
AND MapNatSub_IsActive = 'Y'
|
|
WHERE M_ItemID = ?";
|
|
$quecoaitem = $this->db->query($sqlcoaitem, [$obj['SuratJalanDetailM_ItemID']]);
|
|
if (!$quecoaitem) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get coa item");
|
|
exit;
|
|
}
|
|
$coaItem = $quecoaitem->row_array();
|
|
if (empty($coaItem)) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] coa item null or not found");
|
|
exit;
|
|
}
|
|
|
|
# INSERT COA JURNAL PERSEDIAAN BARANG #
|
|
$queJurnalTX = $this->db->query($sqlJurnalTX, [
|
|
$JurnalID, $coaItem['MapNatSub_PersediaanCoaID'],
|
|
$coaItem['MapNatSub_PersediaanCoaDescription'], 0, $subtotal, $user['M_UserID']
|
|
]);
|
|
|
|
$total = $total + $subtotal;
|
|
} else {
|
|
## NON PERSEDIAAN ##
|
|
$sqltfd = "SELECT T_GoodsTransferDetailItemBarNote FROM t_goods_transfer_detail WHERE T_GoodsTransferDetailID = ? AND T_GoodsTransferDetailIsActive = 'Y'";
|
|
$quetfd = $this->db->query($sqltfd, [$obj['SuratJalanDetailT_GoodsTransferDetailID']]);
|
|
if (!$quetfd) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get data barnote number stock");
|
|
exit;
|
|
}
|
|
$jsonStr = $quetfd->row_array()['T_GoodsTransferDetailItemBarNote'];
|
|
$barnote = [];
|
|
|
|
if (!empty($jsonStr)) {
|
|
$decode = json_decode($jsonStr, true);
|
|
if ($decode !== null && json_last_error() === JSON_ERROR_NONE) {
|
|
$barnote = $decode;
|
|
} else {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] decode barnote number stock");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
$subtotal = 0.00;
|
|
foreach ($barnote as $key => $ele) {
|
|
$harga = intval($ele['QtyReq']) * doubleval($ele['StockItemPrice']);
|
|
$subtotal = round($subtotal + $harga, 2);
|
|
}
|
|
|
|
$sqlcoaitem = "SELECT
|
|
MapNatSub_BiayaCoaID,
|
|
MapNatSub_BiayaCoaAccountNo,
|
|
MapNatSub_BiayaCoaDescription
|
|
FROM m_item
|
|
JOIN map_nat_subgroup ON MapNatSub_NatGroupID = M_ItemNat_GroupID
|
|
AND MapNatSub_NatSubGroupID = M_ItemNat_SubGroupID
|
|
AND MapNatSub_IsActive = 'Y'
|
|
WHERE M_ItemID = ?";
|
|
$quecoaitem = $this->db->query($sqlcoaitem, [$obj['SuratJalanDetailM_ItemID']]);
|
|
if (!$quecoaitem) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] get coa item non persediaan");
|
|
exit;
|
|
}
|
|
$coaItem = $quecoaitem->row_array();
|
|
if (empty($coaItem)) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] coa item non persediaan null or not found");
|
|
exit;
|
|
}
|
|
|
|
# INSERT COA JURNAL NON PERSEDIAAN BARANG #
|
|
$queJurnalTX = $this->db->query($sqlJurnalTX, [
|
|
$JurnalID, $coaItem['MapNatSub_BiayaCoaID'], $coaItem['MapNatSub_BiayaCoaDescription'],
|
|
0, $subtotal, $user['M_UserID']
|
|
]);
|
|
|
|
$total = $total + $subtotal;
|
|
}
|
|
}
|
|
|
|
# INSERT COA JURNAL STOCK DALAM PERJALANAN #
|
|
$queJurnalTX = $this->db->query($sqlJurnalTX, [
|
|
$JurnalID, $coa['coaID'], $coa['coaDescription'],
|
|
$total, 0, $user['M_UserID']
|
|
]);
|
|
if (!$queJurnalTX) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert jurnal tx");
|
|
exit;
|
|
}
|
|
$JurnalTXID = $this->db->insert_id();
|
|
|
|
## INSERT JURNAL ADDON ##
|
|
$sqlJurnalAdd = "INSERT INTO jurnal_addon (
|
|
jurnalAddOnJurnalID,
|
|
jurnalAddOnJurnalTxID,
|
|
jurnalAddOnCode,
|
|
jurnalAddOnValue,
|
|
jurnalAddOnCreated,
|
|
jurnalAddOnCreatedUserID
|
|
) VALUES (?,?,?,?,NOW(),?)";
|
|
$queJurnalAdd = $this->db->query($sqlJurnalAdd, [
|
|
$JurnalID, $JurnalTXID, 'SENDGOODRDST', $data['SuratJalanNumber'], $user['M_UserID']
|
|
]);
|
|
if (!$queJurnalAdd) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error_db("[Error] insert jurnal addon");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// SELECT
|
|
// M_BranchName,
|
|
// M_BranchCode
|
|
// FROM t_goods_transfer
|
|
// JOIN m_branch ON M_BranchCode = T_GoodsTransferToM_BranchCode
|
|
// WHERE T_GoodsTransferID = 2
|