Files
be-accone/application/controllers/mockup/masterdata/accounting/Jurnalsendreg.php
2026-05-06 16:48:09 +07:00

559 lines
19 KiB
PHP

<?php
class Jurnalsendreg extends MY_Controller
{
var $db;
public function index()
{
echo "COA API";
// $cek = $this->db->query("select database() as current_db")->result();
// print_r($cek);
}
public function __construct()
{
parent::__construct();
}
function searchPeriode()
{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = '%' . $prm['search'] . '%';
$sql = "SELECT
CONCAT(periodeYear, ' - ', periodeName) as display,
periode.*
FROM periode
WHERE periodeIsActive = 'Y'
AND periodeIsClosed = 'N'
AND CONCAT(periodeYear, ' - ', periodeName) LIKE ?
LIMIT 70
";
$qry = $this->db->query($sql, [$search]);
if (!$qry) {
$this->sys_error_db("Error get coa", $this->db);
exit;
}
$data = $qry->result_array();
$this->sys_ok($data);
}
function getBranch()
{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$sql = "SELECT
M_BranchID as branchID,
M_BranchS_RegionalID as branchRegionalID,
M_BranchCode as branchCode ,
M_BranchName as branchName,
M_BranchCompanyDetailM_BranchCompanyID branchCompanyID
FROM m_branch
JOIN m_branch_companydetail
ON M_BranchCode = M_BranchCompanyDetailM_BranchCode
WHERE M_BranchS_RegionalID = ?
AND M_BranchCompanyDetailIsActive = 'Y'
AND M_BranchCompanyDetailM_BranchCompanyID = ?
AND M_BranchIsActive = 'Y'";
$qry = $this->db->query($sql, array($prm['regional'], $prm['company']));
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("Error get branch");
exit;
}
$data = $qry->result_array();
$this->sys_ok($data);
}
function getJurnalType()
{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$sql = "SELECT * FROM jurnal_type WHERE JurnalTypeIsActive = 'Y'
";
$qry = $this->db->query($sql, []);
if (!$qry) {
$this->sys_error_db("Error truncate", $this->db);
exit;
}
$default = array();
$data = $qry->result_array();
foreach ($data as $key => $value) {
if ($value['JurnalTypeCode'] == 'SENDGOODR') {
$default = $value;
}
}
$this->sys_ok([
"records" => $data,
"default" => $default
]);
}
function searchCoa()
{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = '%' . $prm['search'] . '%';
$sql = "SELECT
coaID as id,
coaAccountNo as number,
coaDescription as keterangan,
CONCAT(coaAccountNo, ' - ' ,coaDescription) as display
FROM coa
WHERE
coaIsActive = 'Y'
AND coaIsInput = 'Y'
AND (CONCAT(coaAccountNo, ' - ' ,coaDescription) LIKE ?)
LIMIT 70
";
$qry = $this->db->query($sql, [$search]);
if (!$qry) {
$this->sys_error_db("Error get coa", $this->db);
exit;
}
$data = $qry->result_array();
$this->sys_ok($data);
}
function saveJurnal()
{
$this->db->trans_begin();
// $this->db->trans_rollback();
// $this->db->trans_commit();
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$detail = $prm['detail'];
$jurnalRegional = $prm['jurnalRegional'];
$sallary = $prm['sallary'];
$user = $this->sys_user;
$userid = $user["M_UserID"];
$kreditTotal = 0;
$debetTotal = 0;
foreach ($detail as $i => $value) {
if ($value['type'] == 'D') {
$debetTotal = $debetTotal + doubleval($value['debet']);
} else if ($value['type'] == 'K') {
$kreditTotal = $kreditTotal + doubleval($value['kredit']);
}
# code...
}
if ($debetTotal != $kreditTotal) {
$this->sys_error("Jumlah debet dan kredit secara total tidak balance" . ", debet " . strval($debetTotal) . " ,Kredit " . strval($kreditTotal));
exit;
}
//insert jurnal regional
$sql = "SELECT `fn_numbering`('PBR') as number";
$qry = $this->db->query($sql, array());
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error get number");
exit;
}
$numberingCounter = $qry->row_array()['number'];
$currentMonth = date('m'); // Mendapatkan bulan saat ini dalam format angka dua digit
$currentYear = date('Y'); // Mendapatkan tahun saat ini
$numbering = 'PBR/' . $currentYear . "/" . $currentMonth . "/" . strval($numberingCounter);
$sql = "INSERT INTO jurnal (
jurnalM_BranchCompanyID,
JurnalS_RegionalID,
jurnalM_BranchCode,
jurnalperiodeID,
jurnalNo,
jurnalTitle,
jurnalDescription,
jurnalDate,
jurnalJurnalTypeID,
jurnalM_UserID)
VALUES(?,?,?,?,?,?,?,?,?,?)";
$qry = $this->db->query($sql, array(
$user['M_BranchCompanyID'],
$user['S_RegionalID'],
'',
$prm['periodeID'],
$numbering,
$prm['title'],
$prm['description'],
$prm['date'],
$prm['jurnalTypeID'],
$userid
));
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error insert jurnal");
exit;
}
$insertedJurnalRegID = $this->db->insert_id();
$sql = "INSERT INTO jurnal_addon(
jurnalAddOnJurnalID,
jurnalAddOnCode,
jurnalAddOnValue,
jurnalAddOnCreatedUserID)
VALUES({$insertedJurnalRegID},'SENDGOODRDST','{$prm['branchCode']}',{$userid});";
$qry = $this->db->query($sql, []);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error insert jurnal gaji addon regional");
exit;
}
foreach ($detail as $i => $value) {
$sql = 'INSERT INTO jurnal_tx(
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID)
VALUES(?,?,?,?,?,?)';
$qry = $this->db->query($sql, array(
$insertedJurnalRegID,
$value['coaID'],
$value['coaName'],
$value['debet'],
$value['kredit'],
$userid
));
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error insert jurnal tx regional");
exit;
}
}
$this->db->trans_commit();
$this->sys_ok("Success");
}
function getDetail()
{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$id = $prm['id'];
$user = $this->sys_user;
$sql = "SELECT
jurnal.*,
M_BranchID as branchID,
M_BranchName as branchName,
M_branchCode as branchCode
FROM jurnal
JOIN jurnal_addon
ON jurnalID = jurnalAddOnJurnalID
AND jurnalAddOnCode = 'SENDGOODRDST'
JOIN m_branch
ON jurnalAddOnValue = M_BranchCode
AND M_BranchIsActive = 'Y'
WHERE jurnalID = ?";
$qry = $this->db->query($sql, array(
$id
));
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("error get jurnal");
exit;
}
$jurnal = $qry->row_array();
$isEdit = 'Y';
if ($jurnal['jurnalIsPosted'] === 'Y') {
$isEdit = 'N';
}
$destination = [
"branchID" => $jurnal['branchID'],
"branchName" => $jurnal['branchName'],
"branchCode" => $jurnal['branchCode'],
];
$date = $jurnal['jurnalDate'];
$title = $jurnal['jurnalTitle'];
$description = $jurnal['jurnalDescription'];
$jurnalDetail = [];
$sql = "SELECT
CONCAT(periodeYear, ' - ', periodeName) as display,
periode.*
FROM periode
WHERE periodeIsActive = 'Y'
AND periodeID = ?
LIMIT 70
";
$qry = $this->db->query($sql, [$jurnal['jurnalperiodeID']]);
if (!$qry) {
$this->sys_error_db("Error get coa", $this->db);
exit;
}
$jurnalPeriode = $qry->row_array();
$sql = "SELECT
jurnalTxID as id,
coaDescription as description,
jurnalTxDebit as debet,
jurnalTxCredit as kredit,
CASE
WHEN jurnalTxDebit > 0 THEN 'D'
WHEN jurnalTxCredit > 0 THEN 'K'
else ''
END as type,
'Y' as dataType,
coaID,
coaDescription as coaName,
coaAccountNo as coaNo,
CONCAT(coaAccountNo, ' - ' ,coaDescription) as display
FROM jurnal_tx
JOIN coa
ON jurnalTxCoaID = coaID
AND jurnalTxJurnalID = ?
AND jurnalTxIsActive = 'Y'
";
$qry = $this->db->query($sql, [$id]);
if (!$qry) {
$this->sys_error_db("Error get jurnal tx");
exit;
}
$jurnalDetail = $qry->result_array();
$result = array(
"date" => $date,
"isEdit" => $isEdit,
"jurnal" => $jurnal,
"destination" => $destination,
"periode" => $jurnalPeriode,
"title" => $title,
"description" => $description,
"jurnalDetail" => $jurnalDetail,
);
$this->sys_ok($result);
}
function editJurnal()
{
$this->db->trans_begin();
// $this->db->trans_rollback();
// $this->db->trans_commit();
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$detail = $prm['detail'];
$id = $prm['id'];
$user = $this->sys_user;
$userid = $user["M_UserID"];
$kreditTotal = 0;
$debetTotal = 0;
$sql = "SELECT *
FROM jurnal
WHERE jurnalID = ?";
$qry = $this->db->query($sql, array(
$id
));
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("Error cek jurnal jurnal");
exit;
}
$cekJurnal = $qry->row_array();
if ($cekJurnal['jurnalIsPosted'] == 'Y') {
$this->sys_error('Jurnal sudah di post tidak bisa di ubah');
exit;
}
foreach ($detail as $i => $value) {
if ($value['type'] == 'D') {
$debetTotal = $debetTotal + doubleval($value['debet']);
} else if ($value['type'] == 'K') {
$kreditTotal = $kreditTotal + doubleval($value['kredit']);
}
# code...
}
if ($debetTotal != $kreditTotal) {
$this->sys_error("Jumlah debet dan kredit secara total tidak balance" . ", debet " . strval($debetTotal) . " ,Kredit " . strval($kreditTotal));
exit;
}
$sql = "UPDATE jurnal SET
jurnalperiodeID = ?,
jurnalTitle = ?,
jurnalDescription = ?,
jurnalDate = ?,
jurnalM_UserID = ?,
jurnalLastUpdated = NOW()
WHERE jurnalID = ?";
$qry = $this->db->query($sql, array(
$prm['periodeID'],
$prm['title'],
$prm['description'],
$prm['date'],
$userid,
$id
));
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error insert jurnal");
exit;
}
$sql = "UPDATE jurnal_addon SET
jurnalAddOnValue = ?,
jurnalAddOnLastUpdatedUserID = ?,
jurnalAddOnLastUpdated = NOW()
WHERE jurnalAddOnJurnalID = ?
AND jurnalAddOnCode = 'SENDGOODRDST'
";
$qry = $this->db->query($sql, [$prm['branchCode'], $userid, $id]);
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error insert jurnal addon regional");
exit;
}
$sql = " UPDATE jurnal_tx SET jurnalTxIsActive = 'N' WHERE jurnalTxJurnalID = ? ";
$qry = $this->db->query($sql, array(
$id
));
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error jurnal tx regional");
exit;
}
foreach ($detail as $i => $value) {
if ($value['dataType'] == 'N') {
$sql = 'INSERT INTO jurnal_tx(
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID)
VALUES(?,?,?,?,?,?)';
$qry = $this->db->query($sql, array(
$id,
$value['coaID'],
$value['coaName'],
$value['debet'],
$value['kredit'],
$userid
));
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error insert jurnal tx regional");
exit;
}
} else {
$sql = "UPDATE jurnal_tx SET
jurnalTxCoaID = ?,
jurnalTxDescription = ?,
jurnalTxDebit = ?,
jurnalTxCredit = ?,
jurnalTxM_UserID = ?,
jurnalTxIsActive = 'Y',
jurnalTxLastUpdated = NOW()
WHERE jurnalTxID = ?";
$qry = $this->db->query($sql, array(
$value['coaID'],
$value['coaName'],
$value['debet'],
$value['kredit'],
$userid,
$value['id']
));
if (!$qry) {
$this->db->trans_rollback();
$this->sys_error_db("Error insert jurnal tx regional");
exit;
}
}
}
$this->db->trans_commit();
$this->sys_ok("Success");
}
function deleteJurnal()
{
$this->db->trans_begin();
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$detail = $prm['detail'];
$id = $prm['id'];
$sql = "SELECT *
FROM jurnal
WHERE jurnalID = ?";
$qry = $this->db->query($sql, array(
$id
));
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("Error cek jurnal jurnal");
exit;
}
$cekJurnal = $qry->row_array();
if ($cekJurnal['jurnalIsPosted'] == 'Y') {
$this->sys_error('Jurnal sudah di post tidak bisa di hapus');
exit;
}
$user = $this->sys_user;
$userid = $user["M_UserID"];
$sql = "UPDATE jurnal
SET jurnalIsActive = 'N',
jurnalM_UserID = ?
WHERE
jurnalID = ?";
$qry = $this->db->query($sql, array($userid, $id));
if (!$qry) {
$this->sys_error_db("Error delet jurnal gaji");
$this->db->trans_rollback();
exit;
}
$sql = "UPDATE jurnal_tx
SET jurnalTxIsActive = 'N',
jurnalTxM_UserID = ?
WHERE
jurnalTxJurnalID = ?";
$qry = $this->db->query($sql, array($userid, $id));
if (!$qry) {
$this->sys_error_db("Error delet jurnal gaji tx");
$this->db->trans_rollback();
exit;
}
$sql = "UPDATE jurnal_addon
SET jurnalAddOnIsActive = 'N',
jurnalAddOnDeletedUserID = ?
WHERE
jurnalAddOnJurnalID = ?";
$qry = $this->db->query($sql, array($userid, $id));
if (!$qry) {
$this->sys_error_db("Error delet jurnal gaji tx");
$this->db->trans_rollback();
exit;
}
$this->db->trans_commit();
$this->sys_ok("Success");
}
}