Files
be-accone/application/controllers/mockup/purchase/receivesuratjalan/ReceiveSuratJalan.php

1638 lines
66 KiB
PHP

<?php
use BcMath\Number;
class ReceiveSuratJalan extends MY_Controller {
var $db;
public function index() {
echo "Receive Surat Jalan API";
}
public function __construct()
{
parent::__construct();
}
## QUERY ##
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 ListingBranch() {
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$user = $this->sys_user;
$regID = $prm["S_RegionalID"];
$sql = "SELECT M_BranchID, M_BranchCode, M_BranchName
FROM m_branch
WHERE M_BranchIsActive = 'Y'
AND M_BranchS_RegionalID = ?
AND (? = '' OR M_BranchCode = ? )";
$qry = $this->db->query($sql, [$regID, $user['M_BranchCode'], $user['M_BranchCode']]);
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 LookupWarehouse() {
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$payload = $this->sys_input;
$user = $this->sys_user;
$userId = $this->sys_user["M_UserID"];
$regionalId = $this->sys_user["S_RegionalID"];
$sqlWhere = "";
if ($user['M_UserLocationFlag'] == "R") {
$sqlWhere = "AND WarehouseType = 'R'";
}
if ($user['M_UserLocationFlag'] == "RB" || $user['M_UserLocationFlag'] == "B") {
$sqlWhere = "AND WarehouseType = 'B' AND WarehouseM_BranchID = {$user['M_BranchID']}";
}
$sql = "SELECT
WarehouseID,
WarehouseCode,
CASE
WHEN WarehouseType = 'B' THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', M_BranchName)
WHEN WarehouseType = 'R' THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', S_RegionalName)
ELSE ''
END WarehouseName,
WarehouseType,
WarehouseIsDefault,
WarehouseS_RegionalID,
WarehouseM_BranchID,
S_RegionalID,
S_RegionalName
FROM warehouse
JOIN s_regional ON WarehouseS_RegionalID = S_RegionalID AND S_RegionalIsActive = 'Y'
LEFT JOIN m_branch ON WarehouseM_BranchID = M_BranchID AND M_BranchIsActive = 'Y'
where WarehouseS_RegionalID = ?
AND WarehouseIsActive = 'Y'
AND WarehouseIsTransit = 'N'
$sqlWhere
ORDER BY WarehouseName ASC ";
$qry = $this->db->query($sql, [$regionalId]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("select warehouse", $this->db);;
exit;
}
$rows = $qry->result_array();
$result = array(
"records" => $rows,
"sql" => $this->db->last_query()
);
$this->sys_ok($rows);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
public function LookupSuratJalan() {
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'
LEFT JOIN expedition ON ExpeditionID = SuratJalanEkspedisiID
AND ExpeditionIsActive = 'Y'
LEFT JOIN m_user ON M_UserID = SuratJalanReceivedUserID
AND M_UserIsActive = 'Y'
LEFT JOIN m_staff ON M_UserM_StaffID = M_StaffID
AND M_StaffIsActive = 'Y'
WHERE SuratJalanIsActive = 'Y'
AND SuratJalanStatus != 'Draft'
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
]);
$totalcount = 0;
$totalpage = 0;
if ($qryto) {
$totalcount = $qryto->result_array()[0]['total'];
$totalpage = ceil($totalcount / $limit);
} else {
$this->sys_error_db("count surat jalan error", $this->db);
exit;
}
$sqlSJ = "SELECT
SuratJalanID,
SuratJalanNumber,
SuratJalanDate,
SuratJalanNote,
M_BranchCode,
M_BranchName,
SuratJalanEkspedisiID,
ExpeditionID,
ExpeditionName,
ExpeditionIsInternal,
SuratJalanEkspedisiStaffID,
SuratJalanEkspedisiStaffContact,
ExpeditionStaffID,
ExpeditionStaffName,
ExpeditionStaffMobile,
SuratJalanStatus,
SuratJalanT_GoodsTransferID,
DATE_FORMAT(IF(SuratJalanReceivedDate = '0000-00-00 00:00:00' OR SuratJalanReceivedDate IS NULL, NULL, SuratJalanReceivedDate), '%d-%m-%Y') as SuratJalanReceivedDate,
SuratJalanReceivedNote,
SuratJalanReceivedWarehouseID,
SuratJalanReceivedConfirmed,
SuratJalanReceivedConfirmedDate,
SuratJalanReceivedConfirmedUserID,
M_StaffName
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'
LEFT JOIN expedition ON ExpeditionID = SuratJalanEkspedisiID
AND ExpeditionIsActive = 'Y'
LEFT JOIN m_user ON M_UserID = SuratJalanReceivedUserID
AND M_UserIsActive = 'Y'
LEFT JOIN m_staff ON M_UserM_StaffID = M_StaffID
AND M_StaffIsActive = 'Y'
WHERE SuratJalanIsActive = 'Y'
AND SuratJalanStatus != 'Draft'
AND SuratJalanDate >= DATE(?)
AND SuratJalanDate <= DATE(?)
AND (? = 'ALL' OR T_GoodsTransferToM_BranchCode = ? )
AND (? = 'ALL' OR SuratJalanStatus = ? )
AND SuratJalanNumber LIKE ?
ORDER BY SuratJalanID 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", $this->db);
exit;
}
$list = $qrySJ->result_array();
$result = array(
"total" => $totalcount,
"records" => $list
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
public function LookupDetailSuratJalan() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$para = $this->sys_input;
$user = $this->sys_user;
$sqlSJ = "SELECT
suratjalan.*,
ExpeditionID,
ExpeditionName,
ExpeditionIsInternal,
ExpeditionStaffID,
ExpeditionStaffName,
ExpeditionStaffMobile,
T_GoodsTransferID,
T_GoodsTransferNum,
T_GoodsTransferDate,
T_GoodsTransferType
FROM suratjalan
JOIN t_goods_transfer ON SuratJalanT_GoodsTransferID = T_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 = ?";
$queSJ = $this->db->query($sqlSJ, [$para['SuratJalanID']]);
if (!$queSJ) {
$this->sys_error_db("[Error] get data detail surat jalan");
exit;
}
$data = $queSJ->row_array();
$sqlSJD = "SELECT
suratjalan_detail.*,
T_GoodsTransferDetailItemBatchNo,
T_GoodsTransferDetailItemBarNote,
M_ItemCode,
M_ItemDesc,
ItemUnitCode,
ItemUnitName
FROM suratjalan
JOIN suratjalan_detail ON SuratJalanDetailSuratJalanID = SuratJalanID
AND SuratJalanDetailIsActive = 'Y'
JOIN t_goods_transfer_detail ON SuratJalanDetailT_GoodsTransferDetailID = T_GoodsTransferDetailID
AND T_GoodsTransferDetailIsActive = 'Y'
JOIN m_item ON M_ItemID = SuratJalanDetailM_ItemID
AND M_ItemIsActive = 'Y'
LEFT JOIN itemunit ON ItemUnitID = SuratJalanDetailItemUnitID
AND ItemUnitIsActive = 'Y'
WHERE SuratJalanIsActive = 'Y'
AND SuratJalanID = ?";
$queSJD = $this->db->query($sqlSJD, [$para['SuratJalanID']]);
if (!$queSJD) {
$this->sys_error_db("[Error] get data detail surat jalan");
exit;
}
$detail = $queSJD->result_array();
if ($data['T_GoodsTransferType'] === 'P') {
foreach ($detail as $key => $obj) {
$jsonStr = $obj['T_GoodsTransferDetailItemBatchNo'];
$batches = [];
if (!empty($jsonStr)) {
$decode = json_decode($jsonStr);
if ($decode !== null && json_last_error() === JSON_ERROR_NONE) {
$batches = $decode;
} else {
$this->sys_error_db("[Error] decode json for batches number");
exit;
}
}
$detail[$key]['ItemRequest'] = $batches;
unset($detail[$key]['T_GoodsTransferDetailItemBatchNo']);
}
} else {
foreach ($detail as $key => $obj) {
$jsonStr = $obj['T_GoodsTransferDetailItemBarNote'];
$batches = [];
if (!empty($jsonStr)) {
$decode = json_decode($jsonStr);
if ($decode !== null && json_last_error() === JSON_ERROR_NONE) {
$batches = $decode;
} else {
$this->sys_error_db("[Error] decode json for batches number");
exit;
}
}
$detail[$key]['ItemRequest'] = $batches;
unset($detail[$key]['T_GoodsTransferDetailItemBarNote']);
}
}
$data['detail'] = $detail;
$result = array(
"records" => $data,
"total" => sizeof($data)
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
## MUTATIONS ##
public function TestInput() {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$data = $this->sys_input;
$detail = $data['detail'];
$user = $this->sys_user;
$userId = $user["M_UserID"];
$this->sys_ok($data);
}
public function SaveReceiveSJ() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$data = $this->sys_input;
$detail = $data['detail'];
$user = $this->sys_user;
$userId = $user["M_UserID"];
$this->db->trans_begin();
## UPDATE SURATjALAN ##
$sqlSJ = "UPDATE suratjalan
SET SuratJalanStatus = ?,
SuratJalanReceivedDate = NOW(),
SuratJalanReceivedUserID = ?,
SuratJalanReceivedNote = ?,
SuratJalanReceivedWarehouseID = ?,
SuratJalanLastUpdated = NOW(),
SuratJalanUserID = ?
WHERE SuratJalanID = ?";
$qrySJ = $this->db->query($sqlSJ, [
$data['i_status'], $userId, $data['i_receivenotes'],
$data['i_receivewarehouse']['WarehouseID'],
$userId, $data['SuratJalanID']
]);
if (!$qrySJ) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update surat jalan");
exit;
}
foreach ($detail as $key => $obj) {
$sqlSJD = "UPDATE suratjalan_detail SET
SuratJalanDetailQtyReceived = ?,
SuratJalanDetailLastUpdated = NOW(),
SuratJalanDetailUserID = ?
WHERE SuratJalanDetailID = ?";
$queSJD = $this->db->query($sqlSJD, [
$obj['SuratJalanDetailQtyReceived'],
$userId, $obj['SuratJalanDetailID']
]);
if (!$queSJD) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update surat jalan");
exit;
}
$jsonObj = "[]";
if (isset($obj['ItemRequest']) && is_array($obj['ItemRequest'])) {
$batches = $obj['ItemRequest'];
if (sizeof($batches) > 0) {
$jsonResult = json_encode($batches);
if ($jsonResult === false) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] encode json batch number persediaan");
exit;
} else {
$jsonObj = $jsonResult;
}
}
}
if (strtolower($data['i_tftype']) === "persediaan") {
$sqltf = "UPDATE t_goods_transfer_detail SET
T_GoodsTransferDetailItemBatchNo = ?
WHERE T_GoodsTransferDetailID = ?";
$quetf = $this->db->query($sqltf, [$jsonObj, $obj['SuratJalanDetailT_GoodsTransferDetailID']]);
if (!$quetf) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update surat jalan");
exit;
}
} else {
$sqltf = "UPDATE t_goods_transfer_detail SET
T_GoodsTransferDetailItemBarNote = ?
WHERE T_GoodsTransferDetailID = ?";
$quetf = $this->db->query($sqltf, [$jsonObj, $obj['SuratJalanDetailT_GoodsTransferDetailID']]);
if (!$quetf) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update surat jalan");
exit;
}
}
}
# Check if all received #
$partialRec = false;
foreach ($detail as $key => $obj) {
if (intval($obj['SuratJalanDetailQty'] != intval($obj['SuratJalanDetailQtyReceived']))) {
$partialRec = true;
}
}
## UPDATE STOCK JIKA CONFIRMED ##
if (strtolower($data['i_status']) === 'completed' && strtolower($data['i_tftype']) === "persediaan") {
$this->confirmReceive($data, $detail, $user);
$this->generateJurnalRegional($data, $detail, $user);
$this->generateJurnalCabang($data, $detail, $user);
if ($partialRec) {
$this->generateJurnalDiff($data, $detail, $user);
}
}
if (strtolower($data['i_status']) === 'completed' && strtolower($data['i_tftype']) === "non persediaan") {
$this->confirmReceive($data, $detail, $user);
$this->generateJurnalRegional($data, $detail, $user);
$this->generateJurnalCabang($data, $detail, $user);
if ($partialRec) {
$this->generateJurnalDiff($data, $detail, $user);
}
}
## GET LAST INSERTED DATA ##
$sqlgetSJ = "SELECT * FROM suratjalan WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
$quegetSJ = $this->db->query($sqlgetSJ, [$data['SuratJalanID']]);
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['SuratJalanID']]);
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;
## INSERT INTO LOG ACTIVITY ##
$msg = "Surat Jalan nomor: {$lastSJ['SuratJalanNumber']}, Tanggal: {$lastSJ['SuratJalanDate']}";
$this->insertUserActivty($data['SuratJalanID'], "UPDATE", $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 confirmReceive($data, $detail, $user) {
## UPDATE STATUS SURATJALAN ##
$sqlsj = "UPDATE suratjalan SET
SuratJalanStatus = 'Completed',
SuratJalanReceivedConfirmed = 'Y',
SuratJalanReceivedConfirmedDate = NOW(),
SuratJalanReceivedConfirmedUserID = ?
WHERE SuratJalanID = ? AND SuratJalanIsActive = 'Y'";
$quesj = $this->db->query($sqlsj, [$user['M_UserID'], $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 = 'Completed'
WHERE T_GoodsTransferID IN (
SELECT T_GoodsTransferID
FROM suratjalan
JOIN t_goods_transfer ON T_GoodsTransferID = SuratJalanT_GoodsTransferID
AND T_GoodsTransferNum = SuratJalanT_GoodsTransferNum
WHERE SuratJalanID = ?
AND SuratJalanNumber = ?
AND T_GoodsTransferIsActive = 'Y'
)
AND T_GoodsTransferIsActive = 'Y'";
$quetf = $this->db->query($sqltf, [$data['SuratJalanID'], $data['SuratJalanNumber']]);
if (!$quetf) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update status transfer request");
exit;
}
## UPDATE STOCK ##
if (strtolower($data['i_tftype']) == 'persediaan') {
foreach ($detail as $key => $obj) {
# UPDATE STOCK IN BRANCH WAREHOUSE #
$sqlwh = "SELECT
StockID,
IFNULL(StockQty, 0) as StockQty,
WarehouseID,
WarehouseName
FROM warehouse
LEFT JOIN stock ON StockWarehouseID = WarehouseID
AND StockItemID = ?
AND StockItemUnitID = ?
AND StockBatchNo = ?
AND WarehouseIsActive = 'Y'
WHERE WarehouseIsTransit = ?
AND WarehouseS_RegionalID = ?
AND WarehouseM_BranchID = ?";
# SQL FOR STOCKKCARD #
$sqlcard = "INSERT INTO stockcard (
StockCardWarehouseID,
StockCardDatetime,
StockCardItemID,
StockCardItemUnitID,
StockCardBatchNo,
StockCardED,
StockCardReffID,
StockCardStatus,
StockCardBefore,
StockCardIn,
StockCardOut,
StockCardAfter,
StockCardUserID
) VALUES (?,NOW(),?,?,?,?,?,?,?,?,?,?,?)";
foreach ($obj['ItemRequest'] as $key => $ele) {
$quewhb = $this->db->query($sqlwh, [
$ele['StockItemID'], $ele['StockItemUnitID'],
$ele['StockBatchNo'], 'N', $user['S_RegionalID'], $user['M_BranchID']
]);
$branchwh = $quewhb->row_array();
if (is_null($branchwh['WarehouseID'])) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] warehouse destination null");
exit;
}
if (is_null($branchwh['StockID'])) {
# INSERT STOCK CABANG #
$sqlupdtsit = "INSERT INTO stock (
StockWarehouseID,
StockStockNumber,
StockItemID,
StockItemUnitID,
StockItemPrice,
StockBatchNo,
StockED,
StockQty,
StockUserID,
StockLastUpdated
) VALUES (?,fn_numbering('SN'),?,?,?,?,?,?,?,NOW())";
$queupdtsit = $this->db->query($sqlupdtsit, [
$branchwh['WarehouseID'],
$ele['StockItemID'],
$ele['StockItemUnitID'],
$ele['StockItemPrice'],
$ele['StockBatchNo'],
$ele['StockED'],
$ele['QtyReceive'],
$user['M_UserID']
]);
if (!$queupdtsit) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert stock to warehouse cabang");
exit;
}
$stockid = $this->db->insert_id();
# INSERT STOCK CARD #
$quecard = $this->db->query($sqlcard, [
$branchwh['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
$ele['StockBatchNo'], $ele['StockED'], $stockid,
'MRB', 0, $ele['QtyReceive'], 0, $ele['QtyReceive'], $user['M_UserID']
]);
if (!$quecard) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert stock card persediaan");
exit;
}
} else {
# UPDATE STOCK CABANG #
$sqlupdtrst = "UPDATE stock SET
StockQty = StockQty + ?,
StockLastUpdated = NOW()
WHERE StockID = ?";
$queupdtrst = $this->db->query($sqlupdtrst, [$ele['QtyReceive'], $branchwh['StockID']]);
if (!$queupdtrst) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update stock to warehouse");
exit;
}
# INSERT INTO STOCK CARD #
$after = intval($ele['QtyReceive']) + intval($branchwh['StockQty']);
$quecard = $this->db->query($sqlcard, [
$branchwh['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
$ele['StockBatchNo'], $ele['StockED'], $branchwh['StockID'], 'MRB',
$branchwh['StockQty'], $ele['QtyReceive'], 0, $after, $user['M_UserID']
]);
if (!$quecard) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert stock card");
exit;
}
}
# GET DATA STOCK IN WAREHOUSE TRANSIT #
$quetrsit = $this->db->query($sqlwh, [
$ele['StockItemID'], $ele['StockItemUnitID'],
$ele['StockBatchNo'], 'Y', $user['S_RegionalID'], 0
]);
if (!$quetrsit) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] check wh transit persediaan");
exit;
}
$transit = $quetrsit->row_array();
# UDPATE STOCK CARD INTRANSIT #
$aftertr = intval($transit['StockQty']) - intval($ele['QtyReceive']);
$quecardtr = $this->db->query($sqlcard, [
$transit['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
$ele['StockBatchNo'], $ele['StockED'], $transit['StockID'], 'MWT',
$transit['StockQty'], 0, $ele['QtyReceive'], $aftertr, $user['M_UserID']
]);
if (!$quecardtr) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update stockcard in transit persediaan");
exit;
}
# UPDATE STOCK IN TRANSIT #
$sqltrs = "UPDATE stock SET
StockQty = StockQty - ?,
StockLastUpdated = NOW()
WHERE StockID = ?";
$quetrs = $this->db->query($sqltrs, [$ele['QtyReceive'], $transit['StockID']]);
if (!$quetrs) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update stock in transit");
exit;
}
# INSERT INTO STOCK LOG #
$sqllog = "INSERT INTO stocklog (
StockLogWarehouseID,
StockLogDateTime,
StockLogItemID,
StockLogItemUnitID,
StockLogStockNumber,
StockLogBatchNo,
StockLogED,
StockLogReffID,
StockLogStatus,
StockLogQty,
StockLogUserID
) VALUES (?,NOW(),?,?,?,?,?,?,?,?,?)";
$quelog = $this->db->query($sqllog, [
$branchwh['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
$ele['StockStockNumber'], $ele['StockBatchNo'], $ele['StockED'],
$obj['SuratJalanDetailT_GoodsTransferDetailID'], 'TTW', $ele['QtyReceive'], $user['M_UserID']
]);
if (!$quelog) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into stock log");
exit;
}
}
}
} else {
foreach ($detail as $key => $obj) {
$sqlwh = "SELECT
StockID,
IFNULL(StockQty, 0) as StockQty,
WarehouseID,
WarehouseName
FROM warehouse
LEFT JOIN stock ON StockWarehouseID = WarehouseID
AND StockItemID = ?
AND StockItemUnitID = ?
AND WarehouseIsActive = 'Y'
WHERE WarehouseIsTransit = ?
AND WarehouseS_RegionalID = ?
AND WarehouseM_BranchID = ?";
# SQL FOR STOCKKCARD #
$sqlcard = "INSERT INTO stockcard (
StockCardWarehouseID,
StockCardDatetime,
StockCardItemID,
StockCardItemUnitID,
StockCardBatchNo,
StockCardED,
StockCardReffID,
StockCardStatus,
StockCardBefore,
StockCardIn,
StockCardOut,
StockCardAfter,
StockCardUserID
) VALUES (?,NOW(),?,?,?,?,?,?,?,?,?,?,?)";
foreach ($obj['ItemRequest'] as $key => $ele) {
$quewhb = $this->db->query($sqlwh, [
$ele['StockItemID'], $ele['StockItemUnitID'],
'N', $user['S_RegionalID'], $user['M_BranchID']
]);
$branchwh = $quewhb->row_array();
if (is_null($branchwh['WarehouseID'])) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] warehouse destination null");
exit;
}
if (is_null($branchwh['StockID'])) {
$sqlupdtsit = "INSERT INTO stock (
StockWarehouseID,
StockStockNumber,
StockItemID,
StockItemUnitID,
StockItemPrice,
StockQty,
StockUserID,
StockLastUpdated
) VALUES (?,fn_numbering('SN'),?,?,?,?,?,NOW())";
$queupdtsit = $this->db->query($sqlupdtsit, [
$branchwh['WarehouseID'],
$ele['StockItemID'],
$ele['StockItemUnitID'],
$ele['StockItemPrice'],
$ele['QtyReceive'],
$user['M_UserID']
]);
if (!$queupdtsit) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert stock to warehouse cabang");
exit;
}
$stockid = $this->db->insert_id();
# INSERT STOCK CARD #
$quecard = $this->db->query($sqlcard, [
$branchwh['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
'', '', $stockid, 'MRB', 0, $ele['QtyReceive'], 0, $ele['QtyReceive'],
$user['M_UserID']
]);
if (!$quecard) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert stock card non persediaan");
exit;
}
} else {
# UPDATE STOCK #
$sqlupdtrst = "UPDATE stock SET
StockQty = StockQty + ?,
StockLastUpdated = NOW()
WHERE StockID = ?";
$queupdtrst = $this->db->query($sqlupdtrst, [$ele['QtyReceive'], $branchwh['StockID']]);
if (!$queupdtrst) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update stock to warehouse");
exit;
}
# INSERT INTO STOCK CARD #
$after = intval($ele['QtyReceive']) + intval($branchwh['StockQty']);
$quecard = $this->db->query($sqlcard, [
$branchwh['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
'', '', $branchwh['StockID'], 'MRB', $branchwh['StockQty'],
$ele['QtyReceive'], 0, $after, $user['M_UserID']
]);
if (!$quecard) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert stock card");
exit;
}
}
# GET STOCK IN WAREHOUSE TRANSIT #
$sqltrn = $sqlwh . " AND StockQty >= ?";
$quetrsit = $this->db->query($sqltrn, [
$ele['StockItemID'], $ele['StockItemUnitID'],
'Y', $user['S_RegionalID'], 0, $ele['QtyReceive']
]);
if (!$quetrsit) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] check wh transit non persediaan");
exit;
}
$transit = $quetrsit->row_array();
# UPDATE STOCK CARD IN TRANSIT #
$aftertr = intval($transit['StockQty']) - intval($ele['QtyReceive']);
$quecardtr = $this->db->query($sqlcard, [
$transit['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
'', '', $transit['StockID'], 'MWT', $transit['StockQty'], 0,
$ele['QtyReceive'], $aftertr, $user['M_UserID']
]);
if (!$quecardtr) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] stock card in transit non persediaan");
exit;
}
# UPDATE STOCK IN TRANSIT #
$sqltrs = "UPDATE stock SET
StockQty = StockQty - ?,
StockLastUpdated = NOW()
WHERE StockID = ?";
$quetrs = $this->db->query($sqltrs, [$ele['QtyReceive'], $transit['StockID']]);
if (!$quetrs) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update stock in transit");
exit;
}
# INSERT INTO STOCK LOG #
$sqllog = "INSERT INTO stocklog (
StockLogWarehouseID,
StockLogDateTime,
StockLogItemID,
StockLogItemUnitID,
StockLogStockNumber,
StockLogBatchNo,
StockLogED,
StockLogReffID,
StockLogStatus,
StockLogQty,
StockLogUserID
) VALUES (?,NOW(),?,?,?,?,?,?,?,?,?)";
$quelog = $this->db->query($sqllog, [
$branchwh['WarehouseID'], $ele['StockItemID'], $ele['StockItemUnitID'],
$ele['StockStockNumber'], '', '', $obj['SuratJalanDetailT_GoodsTransferDetailID'],
'TTW', $ele['QtyReceive'], $user['M_UserID']
]);
if (!$quelog) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into stock log");
exit;
}
}
}
}
}
function generateJurnalRegional($data, $detail, $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, ['AUTOGOODRECEIVE']);
if (!$qrytype) {
$this->db->trans_rollback();
$this->sys_error("[Error] get id jurnal type");
exit;
}
$Jurnaltype = $qrytype->row()->Jtype;
$title = "Auto Penerimaan Barang dari Transfer Regional - Jurnal Regional";
$descp = "Surat Jalan Number: {$data['SuratJalanNumber']}, Tanggal: {$data['SuratJalanDate']}, Asal: Regional {$user['S_RegionalName']}";
$jdate = date('Y-m-d');
$sqljur = "INSERT INTO jurnal (
jurnalM_BranchCompanyID,
JurnalS_RegionalID,
jurnalM_BranchCode,
jurnalperiodeID,
jurnalNo,
jurnalTitle,
jurnalDescription,
jurnalDate,
jurnalJurnalTypeID,
jurnalCreated,
jurnalM_UserID
) VALUES (?,?,?,?,?,?,?,?,?,NOW(),?)";
$quejur = $this->db->query($sqljur, [
$user['M_BranchCompanyID'], $user['S_RegionalID'], '',
$periode['periodeID'], $JurnalNumber, $title, $descp,
$jdate, $Jurnaltype, $user['M_UserID']
]);
if (!$quejur) {
$this->db->trans_rollback();
$this->sys_error("[Error] get id jurnal type");
exit;
}
$jurnalID = $this->db->insert_id();
$sqljurtx = "INSERT INTO jurnal_tx (
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID
) VALUES (?,?,?,?,?,?)";
$total = 0.00;
foreach ($detail as $key => $obj) {
$subtotal = 0.00;
foreach ($obj['ItemRequest'] as $key => $ele) {
$harga = intval($ele['QtyReceive']) * doubleval($ele['StockItemPrice']);
$subtotal = round($subtotal + $harga, 2);
}
$total = $total + $subtotal;
}
## 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 JURNAL TX FOR IN TRANSIT #
$quetx = $this->db->query($sqljurtx, [
$jurnalID, $coa['coaID'], $coa['coaDescription'],
0, $total, $user['M_UserID']
]);
if (!$quetx) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] error insert jurnal tx intransit reg");
exit;
}
# GET COA FOR R/K #
if (strtolower($data['i_tftype']) == 'persediaan') {
$sqlRK = "SELECT
Map_RkCabang_Rk_TypeID,
Map_RkCabang_SRegionalID,
Map_RkCabang_BranchCode,
Map_RkCabang_CoaID,
Map_RkCabang_CoaAccountNo,
Map_RkCabang_CoaDescription
FROM map_rk_cabang
JOIN rk_type ON Map_RkCabang_Rk_TypeID = Rk_TypeID AND Rk_TypeIsActive ='Y'
AND Rk_TypeCode = 'STOK'
WHERE Map_RkCabang_IsActive = 'Y'
AND Map_RkCabang_SRegionalID = ?
AND Map_RkCabang_BranchCode = ?";
$queRK = $this->db->query($sqlRK, [$user['S_RegionalID'], $user['M_BranchCode']]);
if (!$queRK) {
$this->db->trans_rollback();
$this->sys_error("[Error] get coa rk regional");
exit;
}
$coaRK = $queRK->row_array();
if (empty($coaRK)) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] coa rk regional stock null or not found");
exit;
}
} else {
$sqlRK = "SELECT
Map_RkCabang_Rk_TypeID,
Map_RkCabang_SRegionalID,
Map_RkCabang_BranchCode,
Map_RkCabang_CoaID,
Map_RkCabang_CoaAccountNo,
Map_RkCabang_CoaDescription
FROM map_rk_cabang
JOIN rk_type ON Map_RkCabang_Rk_TypeID = Rk_TypeID AND Rk_TypeIsActive ='Y'
AND Rk_TypeCode = 'AKTIVA'
WHERE Map_RkCabang_IsActive = 'Y'
AND Map_RkCabang_SRegionalID = ?
AND Map_RkCabang_BranchCode = ?";
$queRK = $this->db->query($sqlRK, [$user['S_RegionalID'], $user['M_BranchCode']]);
if (!$queRK) {
$this->db->trans_rollback();
$this->sys_error("[Error] get coa rk regional");
exit;
}
$coaRK = $queRK->row_array();
if (empty($coaRK)) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] coa rk regional aktiva null or not found");
exit;
}
}
# INSERT JURNAL TX FOR R/K #
$quetx = $this->db->query($sqljurtx, [
$jurnalID, $coaRK['Map_RkCabang_CoaID'], $coaRK['Map_RkCabang_CoaDescription'],
$total, 0, $user['M_UserID']
]);
if (!$quetx) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into jurnal tx");
exit;
}
$jurnalTXID = $this->db->insert_id();
# INSERT JURNAL ADDON #
$sqladdon = "INSERT INTO jurnal_addon (
jurnalAddOnJurnalID,
jurnalAddOnJurnalTxID,
jurnalAddOnCode,
jurnalAddOnValue,
jurnalAddOnCreated,
jurnalAddOnCreatedUserID
) VALUES (?,?,?,?,NOW(),?)";
$queaddon = $this->db->query($sqladdon, [
$jurnalID, $jurnalTXID, 'SENDGOODRDST', $data['SuratJalanNumber'], $user['M_UserID']
]);
if (!$queaddon) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into jurnal addon");
exit;
}
}
function generateJurnalCabang($data, $detail, $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, ['AUTOGOODRECEIVE']);
if (!$qrytype) {
$this->db->trans_rollback();
$this->sys_error("[Error] get id jurnal type");
exit;
}
$Jurnaltype = $qrytype->row()->Jtype;
$title = "Auto Penerimaan Barang dari Transfer Regional - Jurnal Cabang";
$descp = "Surat Jalan Number: {$data['SuratJalanNumber']}, Tanggal: {$data['SuratJalanDate']}, Asal: Regional {$user['S_RegionalName']}";
$jdate = date('Y-m-d');
$sqljur = "INSERT INTO jurnal (
jurnalM_BranchCompanyID,
JurnalS_RegionalID,
jurnalM_BranchCode,
jurnalperiodeID,
jurnalNo,
jurnalTitle,
jurnalDescription,
jurnalDate,
jurnalJurnalTypeID,
jurnalCreated,
jurnalM_UserID
) VALUES (?,?,?,?,?,?,?,?,?,NOW(),?)";
$quejur = $this->db->query($sqljur, [
$user['M_BranchCompanyID'], $user['S_RegionalID'], $user['M_BranchCode'],
$periode['periodeID'], $JurnalNumber, $title, $descp,
$jdate, $Jurnaltype, $user['M_UserID']
]);
if (!$quejur) {
$this->db->trans_rollback();
$this->sys_error("[Error] get id jurnal type");
exit;
}
$jurnalID = $this->db->insert_id();
$sqljurtx = "INSERT INTO jurnal_tx (
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID
) VALUES (?,?,?,?,?,?)";
$total = 0.00;
foreach ($detail as $key => $obj) {
if (strtolower($data['i_tftype']) == 'persediaan') {
$subtotal = 0.00;
foreach ($obj['ItemRequest'] as $key => $ele) {
$harga = intval($ele['QtyReceive']) * 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 JURNAL TX #
$quejurtx = $this->db->query($sqljurtx, [
$jurnalID, $coaItem['MapNatSub_PersediaanCoaID'],
$coaItem['MapNatSub_PersediaanCoaDescription'],
$subtotal, 0, $user['M_UserID']
]);
if (!$quejurtx) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into jurnal tx persediaan");
exit;
}
$total = $total + $subtotal;
} else {
$subtotal = 0.00;
foreach ($obj['ItemRequest'] as $key => $ele) {
$harga = intval($ele['QtyReceive']) * 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 JURNAL TX #
$quejurtx = $this->db->query($sqljurtx, [
$jurnalID, $coaItem['MapNatSub_BiayaCoaID'],
$coaItem['MapNatSub_BiayaCoaDescription'],
$subtotal, 0, $user['M_UserID']
]);
if (!$quejurtx) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into jurnal tx non persediaan");
exit;
}
$total = $total + $subtotal;
}
}
# GET COA FOR R/K #
if (strtolower($data['i_tftype']) == 'persediaan') {
$sqlRK = "SELECT
Map_RkCabang_Rk_TypeID,
Map_RkCabang_SRegionalID,
Map_RkCabang_BranchCode,
Map_RkCabang_CoaID,
Map_RkCabang_CoaAccountNo,
Map_RkCabang_CoaDescription
FROM map_rk_cabang
JOIN rk_type ON Map_RkCabang_Rk_TypeID = Rk_TypeID AND Rk_TypeIsActive ='Y'
AND Rk_TypeCode = 'STOK'
WHERE Map_RkCabang_IsActive = 'Y'
AND Map_RkCabang_SRegionalID = ?
AND Map_RkCabang_BranchCode = ?";
$queRK = $this->db->query($sqlRK, [$user['S_RegionalID'], '']);
if (!$queRK) {
$this->db->trans_rollback();
$this->sys_error("[Error] get coa rk regional");
exit;
}
$coaRK = $queRK->row_array();
if (empty($coaRK)) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] coa rk regional stock null or not found");
exit;
}
} else {
$sqlRK = "SELECT
Map_RkCabang_Rk_TypeID,
Map_RkCabang_SRegionalID,
Map_RkCabang_BranchCode,
Map_RkCabang_CoaID,
Map_RkCabang_CoaAccountNo,
Map_RkCabang_CoaDescription
FROM map_rk_cabang
JOIN rk_type ON Map_RkCabang_Rk_TypeID = Rk_TypeID AND Rk_TypeIsActive ='Y'
AND Rk_TypeCode = 'AKTIVA'
WHERE Map_RkCabang_IsActive = 'Y'
AND Map_RkCabang_SRegionalID = ?
AND Map_RkCabang_BranchCode = ?";
$queRK = $this->db->query($sqlRK, [$user['S_RegionalID'], '']);
if (!$queRK) {
$this->db->trans_rollback();
$this->sys_error("[Error] get coa rk regional");
exit;
}
$coaRK = $queRK->row_array();
if (empty($coaRK)) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] coa rk regional aktiva null or not found");
exit;
}
}
# INSERT JURNAL TX FOR R/K #
$quetx = $this->db->query($sqljurtx, [
$jurnalID, $coaRK['Map_RkCabang_CoaID'], $coaRK['Map_RkCabang_CoaDescription'],
0, $total, $user['M_UserID']
]);
if (!$quetx) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into jurnal tx");
exit;
}
$jurnalTXID = $this->db->insert_id();
# INSERT JURNAL ADDON #
$sqladdon = "INSERT INTO jurnal_addon (
jurnalAddOnJurnalID,
jurnalAddOnJurnalTxID,
jurnalAddOnCode,
jurnalAddOnValue,
jurnalAddOnCreated,
jurnalAddOnCreatedUserID
) VALUES (?,?,?,?,NOW(),?)";
$queaddon = $this->db->query($sqladdon, [
$jurnalID, $jurnalTXID, 'SENDGOODRDST', $data['SuratJalanNumber'], $user['M_UserID']
]);
if (!$queaddon) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into jurnal addon");
exit;
}
}
function generateJurnalDiff($data, $detail, $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, ['AUTOGOODRECEIVE']);
if (!$qrytype) {
$this->db->trans_rollback();
$this->sys_error("[Error] get id jurnal type");
exit;
}
$Jurnaltype = $qrytype->row()->Jtype;
$title = "Auto Penerimaan Barang dari Transfer Regional - Jurnal Investigasi Perbedaan Stock";
$descp = "Surat Jalan Number: {$data['SuratJalanNumber']}, Tanggal: {$data['SuratJalanDate']}, Asal: Regional {$user['S_RegionalName']}";
$jdate = date('Y-m-d');
$sqljur = "INSERT INTO jurnal (
jurnalM_BranchCompanyID,
JurnalS_RegionalID,
jurnalM_BranchCode,
jurnalperiodeID,
jurnalNo,
jurnalTitle,
jurnalDescription,
jurnalDate,
jurnalJurnalTypeID,
jurnalCreated,
jurnalM_UserID
) VALUES (?,?,?,?,?,?,?,?,?,NOW(),?)";
$quejur = $this->db->query($sqljur, [
$user['M_BranchCompanyID'], $user['S_RegionalID'], '',
$periode['periodeID'], $JurnalNumber, $title, $descp,
$jdate, $Jurnaltype, $user['M_UserID']
]);
if (!$quejur) {
$this->db->trans_rollback();
$this->sys_error("[Error] get id jurnal type");
exit;
}
$jurnalID = $this->db->insert_id();
$sqljurtx = "INSERT INTO jurnal_tx (
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID
) VALUES (?,?,?,?,?,?)";
$total = 0.00;
foreach ($detail as $key => $obj) {
$subtotal = 0.00;
foreach ($obj['ItemRequest'] as $key => $ele) {
$harga = (intval($ele['QtyReq']) - intval($ele['QtyReceive'])) * doubleval($ele['StockItemPrice']);
$subtotal = round($subtotal + $harga, 2);
}
$total = $total + $subtotal;
}
## 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 JURNAL TX FOR IN TRANSIT #
$quetx = $this->db->query($sqljurtx, [
$jurnalID, $coa['coaID'], $coa['coaDescription'],
0, $total, $user['M_UserID']
]);
if (!$quetx) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] error insert jurnal tx intransit diff");
exit;
}
# STOCK DALAM INVESTIGASI #
$sqlCoaInvestigasi = "SELECT coaID, coaDescription FROM coa WHERE coaAccountNo = '1150700002' AND coaIsActive = 'Y'";
$qryCoaInvestigasi = $this->db->query($sqlCoaInvestigasi);
if (!$qryCoaInvestigasi) {
$this->db->trans_rollback();
$this->sys_error("[Error] get coa investigasi");
exit;
}
$coaInvest = $qryCoaInvestigasi->row_array();
if (empty($coaInvest)) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] coa null or not found");
exit;
}
$queinv = $this->db->query($sqljurtx, [
$jurnalID, $coaInvest['coaID'], $coaInvest['coaDescription'],
$total, 0, $user['M_UserID']
]);
if (!$queinv) {
$this->db->trans_rollback();
$this->sys_error("[Error] insert jurnal tx investigasi diff");
exit;
}
$jurnalTXID = $this->db->insert_id();
# INSERT JURNAL ADDON #
$sqladdon = "INSERT INTO jurnal_addon (
jurnalAddOnJurnalID,
jurnalAddOnJurnalTxID,
jurnalAddOnCode,
jurnalAddOnValue,
jurnalAddOnCreated,
jurnalAddOnCreatedUserID
) VALUES (?,?,?,?,NOW(),?)";
$queaddon = $this->db->query($sqladdon, [
$jurnalID, $jurnalTXID, 'SENDGOODRDST', $data['SuratJalanNumber'], $user['M_UserID']
]);
if (!$queaddon) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into 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, [
'RSJ',
$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;
}
}
}