db->query("select database() as current_db")->result(); // print_r($cek); } public function __construct() { parent::__construct(); } function getPeriode() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $sql = "SELECT periodeID AS id, periodeName as name, CONCAT(DATE_FORMAT(periodeStartDate, '%d-%m-%Y'), ' - ',DATE_FORMAT(periodeEndDate, '%d-%m-%Y')) as periode FROM periode WHERE periodeIsActive = 'Y' AND periodeIsClosed = 'N'"; $qry = $this->db->query($sql, []); if (!$qry) { $this->sys_error_db("select coa", $this->db); exit; } $rst = $qry->result_array(); // $data = array( // array("id" => "1", "name" => "Periode Januari", "periode" => '01-01-2024 - 31-01-2024'), // array("id" => "2", "name" => "Periode Februari", "periode" => '01-02-2024 - 31-02-2024'), // array("id" => "3", "name" => "Periode Maret", "periode" => '01-03-2024 - 31-03-2024'), // ); $this->sys_ok($rst); } function getBranch() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $sql = "SELECT M_BranchID branchID, M_BranchCode branchCode, M_BranchName branchName FROM m_branch WHERE M_BranchIsActive = 'Y'"; $qry = $this->db->query($sql, []); if (!$qry) { $this->sys_error_db("get branch", $this->db); exit; } $rst = $qry->result_array(); $this->sys_ok($rst); } function addJurnal() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $sql = "SELECT fn_numbering('PJ') as number"; $qry = $this->db->query($sql, []); if (!$qry) { $this->sys_error_db("get numbering", $this->db); exit; } $numbering = $qry->result_array()[0]['number']; $sql = "INSERT INTO t_presetjurnal( jurnalM_BranchCode, jurnalperiodeID, jurnalNo, jurnalTitle, jurnalType, jurnalCreated, jurnalM_UserID) VALUES (?,?,?,?,?,NOW(),?)"; $qry = $this->db->query($sql, [ $prm['branch'], $prm['periode'], $numbering, $prm['name'], $prm['type'], $userid ]); if (!$qry) { $this->sys_error_db("Error insert preset jurnal header", $this->db); exit; } $this->sys_ok($numbering); } function editJurnal() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $sql = "UPDATE t_presetjurnal SET jurnalM_BranchCode = ?, jurnalperiodeID = ?, jurnalTitle = ?, jurnalType = ?, jurnalLastUpdated = NOW(), jurnalM_UserID = ? WHERE jurnalID = ? "; $qry = $this->db->query($sql, [ $prm['branch'], $prm['periode'], $prm['name'], $prm['type'], $userid, $prm['id'], ]); if (!$qry) { $this->sys_error_db("Error update preset jurnal header", $this->db); exit; } $this->sys_ok('OK'); } function deleteJurnal() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $sql = "UPDATE t_presetjurnal SET jurnalIsActive = 'N', jurnalLastUpdated = NOW(), jurnalM_UserID = ? WHERE jurnalID = ? "; $qry = $this->db->query($sql, [ $userid, $prm['id'], ]); if (!$qry) { $this->sys_error_db("Error delete jurnal header", $this->db); exit; } $sql = "UPDATE t_presetjurnaldetail SET jurnalTxIsActive = 'N', jurnalTxLastUpdated = NOW(), jurnalTxM_UserID = ? WHERE jurnalTxJurnalID = ? "; $qry = $this->db->query($sql, [ $userid, $prm['id'], ]); if (!$qry) { $this->sys_error_db("Error delete jurnal header", $this->db); exit; } $this->sys_ok('OK'); } function searchHeader() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $search = '%' . $prm['search'] . '%'; $page = $prm["page"]; $periode = $prm["periode"]; $ROW_PER_PAGE = 5; $start_offset = 0; // print_r($prm); if (isset($prm["page"])) { if ( is_numeric($prm["page"]) && $prm["page"] > 0 ) { $start_offset = ($page - 1) * $ROW_PER_PAGE; } } $sql = "SELECT COUNT(jurnalID) as total FROM t_presetjurnal JOIN periode ON jurnalperiodeID = periodeID AND periodeIsActive = 'Y' JOIN m_branch ON jurnalM_BranchCode = M_BranchCode AND M_BranchIsActive = 'Y' WHERE (jurnalNo LIKE ? OR jurnalTitle LIKE ?) AND jurnalperiodeID = ? AND jurnalIsActive = 'Y'"; $qry = $this->db->query($sql, [ $search, $search, $periode ]); if (!$qry) { $this->sys_error_db("Error get total", $this->db); exit; } $total = $qry->result_array()[0]['total']; $sql = "SELECT jurnalID id, jurnalM_BranchCode as branch, jurnalperiodeID periode, periodeName, CONCAT(DATE_FORMAT(periodeStartDate, '%d/%m/%Y'), ' - ',DATE_FORMAT(periodeEndDate, '%d/%m/%Y')) as periodeDate, M_BranchName branchName, jurnalNo number, jurnalTitle name, jurnalType as type, CASE WHEN jurnalStatus = 0 THEN 'NEW' WHEN jurnalStatus <> 0 THEN 'POST' END as status FROM t_presetjurnal JOIN periode ON jurnalperiodeID = periodeID AND periodeIsActive = 'Y' JOIN m_branch ON jurnalM_BranchCode = M_BranchCode AND M_BranchIsActive = 'Y' WHERE (jurnalNo LIKE ? OR jurnalTitle LIKE ?) AND jurnalperiodeID = ? AND jurnalIsActive = 'Y' LIMIT ? OFFSET ?"; $qry = $this->db->query($sql, [ $search, $search, $periode, $ROW_PER_PAGE, $start_offset ]); if (!$qry) { $this->sys_error_db("Error get total", $this->db); exit; } $rst = array( "total" => ceil($total / $ROW_PER_PAGE), "records" => $qry->result_array() ); $this->sys_ok($rst); } function cek() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $sql = "SELECT COUNT(*) as total FROM t_beginningbalance"; $qry = $this->db->query($sql, []); if (!$qry) { $this->sys_error_db("select coa", $this->db); exit; } $rst = $qry->result_array()[0]['total']; $this->sys_ok($rst); } function save() { // $this->db->trans_begin(); // $this->db->trans_rollback(); // $this->db->trans_commit(); $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; $data = $prm['data']; $jurnal = $prm['jurnal']; $userid = $this->sys_user["M_UserID"]; $sql = "SELECT COUNT(*) as total FROM t_beginningbalance"; $qry = $this->db->query($sql, []); if (!$qry) { $this->sys_error_db("select coa", $this->db); $this->db->trans_rollback(); exit; } $total = $qry->result_array()[0]['total']; if (intval($total) > 0) { $sql = "DELETE FROM t_presetjurnaldetail WHERE jurnalTxJurnalID = ?"; $qry = $this->db->query($sql, [$jurnal['id']]); if (!$qry) { $this->sys_error_db("Error truncate", $this->db); $this->db->trans_rollback(); exit; } } for ($i = 0; $i < count($data); $i++) { $cekData = $data[$i]; if (!array_key_exists('Number', $cekData)) { $this->sys_error("Kolom Number tidak ditemukan"); $this->db->trans_rollback(); exit; } if (!array_key_exists('Keterangan', $cekData)) { $this->sys_error("Kolom Keterangan tidak ditemukan"); $this->db->trans_rollback(); exit; } if (!array_key_exists('Debit', $cekData)) { $this->sys_error("Kolom Debit tidak ditemukan"); $this->db->trans_rollback(); exit; } if (!array_key_exists('Kredit', $cekData)) { $this->sys_error("Kolom Kredit tidak ditemukan"); $this->db->trans_rollback(); exit; } if (floatval($cekData['Debit']) > 0 && floatval($cekData['Kredit']) > 0) { $this->sys_error("Jumlah debit dan credit keduanya lebih besar dari 0"); $this->db->trans_rollback(); exit; } $sql = "SELECT coaID FROM coa WHERE coaAccountNo = ? AND coaIsInput = 'Y' AND coaIsActive = 'Y'"; $qry = $this->db->query($sql, [$cekData['Number']]); if (!$qry) { $this->sys_error_db("cek coa", $this->db); $this->db->trans_rollback(); exit; } $cek = $qry->result_array(); if (count($cek) == 0) { $this->sys_error_db("{$cekData['Number']} tidak ada di coa", $this->db); $this->db->trans_rollback(); exit; } $data[$i]['coaID'] = $cek[0]['coaID']; } for ($i = 0; $i < count($data); $i++) { $dataCoa = $data[$i]; $debit = $dataCoa['Debit']; $credit = $dataCoa['Kredit']; $type = 'DB'; if (floatval($dataCoa['Kredit']) > 0) { $type = 'CR'; } $sql = "INSERT INTO t_presetjurnaldetail( jurnalTxJurnalID, jurnalTxCoaID, junalTxDescription, jurnalTxDebit, jurnalTxCredit, jurnalTxCreated, jurnalTxM_UserID) VALUES(?,?,?,?,?,NOW(),?)"; $qry = $this->db->query($sql, [ $jurnal['id'], $dataCoa['coaID'], $dataCoa['Keterangan'], $debit, $credit, $userid ]); if (!$qry) { $this->sys_error_db("Error insert beginning balance", $this->db); $this->db->trans_rollback(); exit; } } $this->sys_ok("OK"); $this->db->trans_commit(); } function addData() { // $this->db->trans_begin(); // $this->db->trans_rollback(); // $this->db->trans_commit(); $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; $data = $prm['data']; $jurnal = $prm['jurnal']; $userid = $this->sys_user["M_UserID"]; $sql = "SELECT COUNT(*) as total FROM t_beginningbalance"; $qry = $this->db->query($sql, []); if (!$qry) { $this->sys_error_db("select coa", $this->db); $this->db->trans_rollback(); exit; } $total = $qry->result_array()[0]['total']; // if (intval($total) > 0) { // $sql = "DELETE FROM t_presetjurnaldetail"; // $qry = $this->db->query($sql, []); // if (!$qry) { // $this->sys_error_db("Error truncate", $this->db); // $this->db->trans_rollback(); // exit; // } // } for ($i = 0; $i < count($data); $i++) { $cekData = $data[$i]; if (!array_key_exists('Number', $cekData)) { $this->sys_error("Pilih coa terlebih dahulu"); $this->db->trans_rollback(); exit; } if (!array_key_exists('Keterangan', $cekData)) { $this->sys_error("Kolom Keterangan tidak ditemukan"); $this->db->trans_rollback(); exit; } if (trim($cekData['Keterangan']) == '') { $this->sys_error("Keterangan tidak boleh kosong"); $this->db->trans_rollback(); exit; } if (!array_key_exists('Debit', $cekData)) { $this->sys_error("Kolom Debit tidak ditemukan"); $this->db->trans_rollback(); exit; } if (!array_key_exists('Kredit', $cekData)) { $this->sys_error("Kolom Kredit tidak ditemukan"); $this->db->trans_rollback(); exit; } if (floatval($cekData['Debit']) > 0 && floatval($cekData['Kredit']) > 0) { $this->sys_error("Jumlah debit dan credit keduanya lebih besar dari 0"); $this->db->trans_rollback(); exit; } $sql = "SELECT coaID FROM coa WHERE coaAccountNo = ? AND coaIsInput = 'Y' AND coaIsActive = 'Y'"; $qry = $this->db->query($sql, [$cekData['Number']]); if (!$qry) { $this->sys_error_db("cek coa", $this->db); $this->db->trans_rollback(); exit; } $cek = $qry->result_array(); if (count($cek) == 0) { $this->sys_error_db("{$cekData['Number']} tidak ada di coa", $this->db); $this->db->trans_rollback(); exit; } $data[$i]['coaID'] = $cek[0]['coaID']; } for ($i = 0; $i < count($data); $i++) { $dataCoa = $data[$i]; $debit = $dataCoa['Debit']; $credit = $dataCoa['Kredit']; $type = 'DB'; if (floatval($dataCoa['Kredit']) > 0) { $type = 'CR'; } $sql = "INSERT INTO t_presetjurnaldetail( jurnalTxJurnalID, jurnalTxCoaID, junalTxDescription, jurnalTxDebit, jurnalTxCredit, jurnalTxCreated, jurnalTxM_UserID) VALUES(?,?,?,?,?,NOW(),?)"; $qry = $this->db->query($sql, [ $jurnal['id'], $dataCoa['coaID'], $dataCoa['Keterangan'], $debit, $credit, $userid ]); if (!$qry) { $this->sys_error_db("Error insert beginning balance", $this->db); $this->db->trans_rollback(); exit; } } $this->sys_ok("OK"); $this->db->trans_commit(); } function searchDetail() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $search = '%' . $prm['search'] . '%'; $page = $prm["page"]; $jurnal = $prm["jurnal"]; $ROW_PER_PAGE = 20; $start_offset = 0; // print_r($prm); if (isset($prm["page"])) { if ( is_numeric($prm["page"]) && $prm["page"] > 0 ) { $start_offset = ($page - 1) * $ROW_PER_PAGE; } } $sql = "SELECT count(jurnalTxID) as total FROM t_presetjurnaldetail JOIN coa ON jurnalTxCoaID = coaID AND coaIsActive = 'Y' WHERE (coaAccountNo LIKE ? OR junalTxDescription LIKE ?) AND jurnalTxIsActive = 'Y' AND jurnalTxJurnalID = ?"; $qry = $this->db->query($sql, [ $search, $search, $jurnal['id'] ]); if (!$qry) { $this->sys_error_db("Error get total", $this->db); exit; } $total = $qry->result_array()[0]['total']; $sql = "SELECT jurnalTxID id, coaAccountNo number, jurnalTxCoaID coaid, CONCAT(coaAccountNo, ' ' ,coaDescription) as searchCoa, coaDescription, junalTxDescription keterangan, jurnalTxDebit, jurnalTxCredit, CASE WHEN jurnalTxDebit <> 0 AND jurnalTxCredit = 0 THEN jurnalTxDebit WHEN jurnalTxCredit <> 0 AND jurnalTxDebit = 0 THEN jurnalTxCredit WHEN jurnalTxCredit = 0 AND jurnalTxDebit = 0 THEN jurnalTxDebit ELSE jurnalTxDebit END as value, CASE WHEN jurnalTxDebit <> 0 AND jurnalTxCredit = 0 THEN 'DB' WHEN jurnalTxCredit <> 0 AND jurnalTxDebit = 0 THEN 'CR' WHEN jurnalTxCredit = 0 AND jurnalTxDebit = 0 THEN 'DB' ELSE 'ERROR' END as type FROM t_presetjurnaldetail JOIN coa ON jurnalTxCoaID = coaID AND coaIsActive = 'Y' WHERE (coaAccountNo LIKE ? OR junalTxDescription LIKE ?) AND jurnalTxIsActive = 'Y' AND jurnalTxJurnalID = ? LIMIT ? OFFSET ?"; $qry = $this->db->query($sql, [$search, $search, $jurnal['id'], $ROW_PER_PAGE, $start_offset]); if (!$qry) { $this->sys_error_db("search detail", $this->db); exit; } $data = $qry->result_array(); $totalDebit = 0; $totalCredit = 0; $totalBalance = 0; $status = 'N'; $sql = "SELECT IFNULL(SUM(jurnalTxDebit), 0) as debit, IFNULL(SUM(jurnalTxCredit), 0) as credit FROM t_presetjurnaldetail JOIN coa ON jurnalTxCoaID = coaID AND coaIsActive = 'Y' AND jurnalTxIsActive = 'Y' AND jurnalTxJurnalID = ? "; $qry = $this->db->query($sql, [$jurnal['id'],]); if (!$qry) { $this->sys_error_db("Error sql count balance", $this->db); exit; } $totalSum = $qry->row_array(); $totalDebit = $totalSum['debit']; $totalCredit = $totalSum['credit']; // for ($i = 0; $i < count($data); $i++) { // $dataCek = $data[$i]; // if ($dataCek['type'] == 'DB') { // $totalDebit = $totalDebit + floatval($dataCek['value']); // } // if ($dataCek['type'] == 'CR') { // $totalCredit = $totalCredit + floatval($dataCek['value']); // } // } $totalBalance = $totalDebit - $totalCredit; $periode = array(); $rst = array( 'data' => $data, "total" => ceil($total / $ROW_PER_PAGE), 'summary' => array( 'debit' => $totalDebit, 'credit' => $totalCredit, 'balance' => $totalBalance ) ); $this->sys_ok($rst); } function updateData() { // $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; $data = $prm['data']; $coa = $prm['coa']; $userid = $this->sys_user["M_UserID"]; $debit = 0; $credit = 0; $type = $data['type']; if ($type == 'DB') { $debit = $data['value']; $credit = 0; } if ($type == 'CR') { $credit = $data['value']; $debit = 0; } $sql = "UPDATE t_presetjurnaldetail SET jurnalTxCoaID = ?, jurnalTxDebit = ?, jurnalTxCredit = ?, junalTxDescription = ?, jurnalTxM_UserID = ? WHERE jurnalTxID = ?"; $qry = $this->db->query($sql, [$coa['coaID'], $debit, $credit, $data['keterangan'], $userid, $data['id']]); if (!$qry) { $this->sys_error_db("Error update preset jurnal", $this->db); exit; } $retval = array( "debit" => $debit, "type" => $type, "credit" => $credit, "last_qry" => $this->db->last_query() ); $this->sys_ok($retval); } function postData() { $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; $id = $prm['id']; $userid = $this->sys_user["M_UserID"]; $sql = "SELECT COUNT(jurnalTxCoaID) as total FROM t_presetjurnaldetail JOIN coa ON jurnalTxCoaID = coaID AND coaIsActive = 'Y' AND jurnalTxIsActive = 'Y' AND jurnalTxJurnalID = ? "; $qry = $this->db->query($sql, [$id]); if (!$qry) { $this->sys_error_db("Error sql count balance", $this->db); exit; } $totalData = $qry->row_array()['total']; if (intval($totalData) == 0) { $this->sys_error_db("Belum memiliki jurnal detail", $this->db); exit; } $sql = "SELECT IFNULL(SUM(jurnalTxDebit), 0) as debit, IFNULL(SUM(jurnalTxCredit), 0) as credit FROM t_presetjurnaldetail JOIN coa ON jurnalTxCoaID = coaID AND coaIsActive = 'Y' AND jurnalTxIsActive = 'Y' AND jurnalTxJurnalID = ? "; $qry = $this->db->query($sql, [$id]); if (!$qry) { $this->sys_error_db("Error sql count balance", $this->db); exit; } $totalSum = $qry->row_array(); $totalDebit = $totalSum['debit']; $totalCredit = $totalSum['credit']; if ((floatval($totalDebit) - floatval($totalCredit)) != 0) { $this->sys_error_db(" GAGAL, Jurnal tidak balance !", $this->db); exit; } $sql = "INSERT INTO jurnal (jurnalM_BranchCode, jurnalperiodeID, jurnalNo, jurnalTitle, jurnalDate, jurnalType, jurnalM_UserID) SELECT jurnalM_BranchCode, jurnalperiodeID, fn_numbering('J'), jurnalTitle, NOW(), jurnalType, {$userid} FROM t_presetjurnal WHERE jurnalID = ? "; $qry = $this->db->query($sql, [$id]); if (!$qry) { $this->sys_error_db("Insert jurnal", $this->db); $this->db->trans_rollback(); exit; } $insertedID = $this->db->insert_id(); $sql = "UPDATE t_presetjurnal SET jurnalStatus = ?, jurnalLastUpdated = NOW(), jurnalM_UserID = ? WHERE jurnalID = ? "; $qry = $this->db->query($sql, [ $insertedID, $userid, $id ]); if (!$qry) { $this->sys_error_db("Error update preset jurnal header", $this->db); $this->db->trans_rollback(); exit; } $sql = "INSERT INTO jurnal_tx( jurnalTxJurnalID, jurnalTxCoaID, junalTxDescription, jurnalTxDebit, jurnalTxCredit, jurnalTxM_UserID) SELECT {$insertedID}, jurnalTxCoaID, junalTxDescription, jurnalTxDebit, jurnalTxCredit, {$userid} FROM t_presetjurnaldetail JOIN coa ON jurnalTxCoaID = coaID AND coaIsActive = 'Y' AND coaIsInput = 'Y' WHERE jurnalTxIsActive = 'Y' AND jurnalTxJurnalID = ?"; $qry = $this->db->query($sql, [ $id ]); if (!$qry) { $this->sys_error_db("Error update preset jurnal detail", $this->db); $this->db->trans_rollback(); exit; } $this->db->trans_commit(); $this->sys_ok('OK'); } function delete() { $this->db->trans_begin(); // $this->db->trans_rollback(); if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $sql = "DELETE FROM t_presetjurnaldetail WHERE jurnalTxID = ?"; $qry = $this->db->query($sql, [$prm['id']]); if (!$qry) { $this->sys_error_db("Error delete", $this->db); $this->db->trans_rollback(); exit; } $this->db->trans_commit(); $this->sys_ok('OK'); } function searchCoa() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $search = '%' . $prm['search'] . '%'; $jurnal = $prm['jurnal']; $sql = "SELECT coaID, jurnalTxID , coaAccountNo as number, coaDescription as keterangan, CONCAT(coaAccountNo, ' ' ,coaDescription) as display FROM coa LEFT JOIN t_presetjurnaldetail ON coaID = jurnalTxCoaID AND jurnalTxJurnalID = ? WHERE coaIsInput = 'Y' AND coaIsActive = 'Y' AND (coaAccountNo LIKE ? OR coaDescription LIKE ? OR CONCAT(coaAccountNo, ' ' ,coaDescription) LIKE ? ) "; // AND jurnalTxID IS NULL $qry = $this->db->query($sql, [$jurnal['id'], $search, $search, $search]); if (!$qry) { $this->sys_error_db("Error truncate", $this->db); exit; } $data = $qry->result_array(); $this->sys_ok($data); } }