Files
BE_IBL/application/controllers/training/Databranch_mike.php
2026-04-15 15:23:57 +07:00

597 lines
22 KiB
PHP

<?php
class Databranch_mike extends MY_Controller
{
var $db_onedev;
public function index()
{
echo "DATA BRANCH API";
}
public function __construct()
{
parent::__construct();
$this->db_onedev = $this->load->database("onedev", true);
}
public function request_hold($mouid, $billid)
{
// Kirim request hold ke regional
// echo json_encode(["status" => "OK", "message" => "Request HOLD on : $mouid, $billid "]) . "\n";
// select data dari f_bill_issue
// join f_bill, m_mou, m_company, m_branch (M_BranchIsActive = 'Y' & M_BranchIsDefault = 'Y')
// pastikan M_MouIsActive = 'H'
// Data yang dibutuhkan M_BranchID, M_BranchCode, M_BranchName,F_BillNo, M_MouID, M_MouName, M_MouNumber, M_CompanyID, M_CompanyNumber, M_MouLastUpdated (untuk info tanggal terholdnya)
// BillID 1403 , MouID 2689
// BEGIN TRANSACTION
$this->db->trans_begin();
$sql = "
SELECT
m_mou.M_MouID,
m_mou.M_MouNumber,
m_mou.M_MouName,
m_mou.M_MouLastUpdated,
f_bill.F_BillNo,
f_bill.F_BillID,
m_company.M_CompanyID,
m_company.M_CompanyNumber,
m_company.M_CompanyName,
m_branch.M_BranchID,
m_branch.M_BranchS_RegionalID,
m_branch.M_BranchCode,
m_branch.M_BranchName
FROM f_bill_issue
JOIN m_mou ON f_bill_issue.F_BillIssueM_MouID=m_mou.M_MouID
AND m_mou.M_MouIsActive = 'H' AND m_mou.M_MouID= ?
JOIN f_bill ON f_bill_issue.F_BillIssueF_BillID=f_bill.F_BillID AND f_bill.F_BillID= ?
JOIN m_company ON f_bill_issue.F_BillIssueM_CompanyID=m_company.M_CompanyID
JOIN m_branch ON m_branch.M_BranchIsDefault = 'Y' AND m_branch.M_BranchIsActive = 'Y'
";
$qry = $this->db->query($sql, array($mouid, $billid));
$rows = $qry->result_array();
// cek query berjalan atau tidak
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
// echo json_encode(["status" => "OK", "\n" . "data" => $rows]);
$rows = array();
if ($qry) {
$rows = $qry->result_array();
$param = json_encode($rows);
$user = $this->sys_user;
$userID = $user["M_UserID"];
// insert data ke tabel log_aoh
// insert into log_aoh ()
$sql_insert =
// insert ignore untuk melewatkan inputan jika ada data yang sama
"INSERT INTO log_aoh (
Log_AohM_MouID,
Log_AohF_BillID,
Log_AohJson,
Log_AohType,
Log_AohUserID)
VALUE( ?, ?, ?, 'HOLD', ?)
ON duplicate KEY UPDATE Log_AohM_MouID = Log_AohM_MouID";
// mengisi sql '?' berurutan, select
$qry = $this->db->query($sql_insert, array($mouid, $billid, $param, $userID));
// cek query insert berfungsi atau tidak
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
// mengambil ip addres dari db
$regional_ip_address = $this->get_region_ip();
$url = "http://$regional_ip_address/one-api/training/dataregional_mike/receive_request_hold";
// $url_dummy = "https://devone.aplikasi.web.id/one-api/training/Databranch_mike/receive_request_hold_dummy";
$result = $this->post($url, $param); #kirim data $param ke url
echo "\n to $url \n response : $result\n";
$result = json_decode($result, true);
if ($result["status"] == "OK") {
// check yang lama( sudah ada ) isActive nya di ubah menjadi N
$sql_update_status = "UPDATE log_aoh SET Log_AohIsActive = 'N' WHERE Log_AohM_MouID = ? AND Log_AohF_BillID = ? AND Log_AohStatus = 'S'";
$this->db->query($sql_update_status, array($mouid, $billid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
// Update log_aoh field Log_AohStatus menjadi S
$sql_update_status = "
UPDATE log_aoh
SET Log_AohStatus = 'S'
WHERE Log_AohM_MouID = ? AND Log_AohF_BillID = ? AND Log_AohType = 'HOLD'
";
$this->db->query($sql_update_status, array($mouid, $billid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
} else {
// update log_aoh field Log_AohStatus menjadi 'E'
$sql_update = "UPDATE log_aoh SET Log_AohStatus = 'E' WHERE Log_AohM_MouID = ? AND Log_AohF_BillID = ? ";
$qry = $this->db->query($sql_update, array($mouid, $billid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
print_r($result);
}
} else {
print_r($this->db->error());
// akhir transaksi query dengna database
}
// COMMIT TRANSACTION
$this->db->trans_commit();
}
public function receive_execute_hold()
{
// Update data hold dari regional
$prm = $this->sys_input;
$mou_id = $prm['mou_id'];
// print_r($prm);
// exit;
// parameter array mou_id
// BEGIN TRANSACTION
$this->db->trans_begin();
// Update data m_mou field M_MouIsActive menjadi H
$sql = "UPDATE m_mou SET M_MouIsActive = 'H' WHERE M_MouId=?";
$qry = $this->db->query($sql, $mou_id);
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
// COMMIT TRANSACTION
$this->db->trans_commit();
// return array mou_id beserta statusnya
print_r(json_encode(["status" => "OK", "message" => $mou_id, "Berhasil mengupdate data hold regional"]));
exit;
}
public function request_unhold($mouid, $billid)
{
// Kirim request unhold ke regional
$user = $this->sys_user;
$userID = $user["M_UserID"];
// BEGIN TRANSACTION
$this->db->trans_begin();
// select data dari f_bill_issue
// jika F_BillIssueIsAllMou = 'Y' join f_bill_mou untuk mendapatkan mouid , jika F_BillIssueIsAllMou = 'N' langsung ambil dari F_BillIssueM_MouID
// join f_bill, m_mou, m_company, m_branch (M_BranchIsActive = 'Y' & M_BranchIsDefault = 'Y')
// Data yang dibutuhkan F_BillNo, M_MouID, M_MouName, M_MouNumber, M_CompanyID, M_CompanyNumber
// pastikan F_BillIsLunas = 'Y'
$sql = "
SELECT
f_bill.F_BillID,
f_bill.F_BillNo,
f_bill_mou.F_BillMouM_MouID AS M_MouID,
m_mou.M_MouName,
m_mou.M_MouNumber,
m_company.M_CompanyID,
m_company.M_CompanyNumber,
m_branch.M_BranchID
FROM f_bill_issue
JOIN f_bill ON f_bill_issue.F_BillIssueF_BillID = f_bill.F_BillID
AND f_bill.F_BillIsLunas = 'Y'
AND f_bill.F_BillID = ?
JOIN f_bill_mou ON f_bill.F_BillID = f_bill_mou.F_BillMouF_BillID
JOIN m_mou ON f_bill_issue.F_BillIssueIsAllMou = 'Y'
AND f_bill_mou.F_BillMouM_MouID= m_mou.M_MouID
AND m_mou.M_MouID = ?
JOIN m_branch ON m_branch.M_BranchIsActive = 'Y' AND m_branch.M_BranchIsDefault = 'Y'
JOIN m_company ON m_mou.M_MouM_CompanyID= m_company.M_CompanyID
UNION
SELECT
f_bill.F_BillID,
f_bill.F_BillNo,
f_bill_issue.F_BillIssueM_MouID AS M_MouID,
m_mou.M_MouName,
m_mou.M_MouNumber,
m_company.M_CompanyID,
m_company.M_CompanyNumber,
m_branch.M_BranchID
FROM f_bill_issue
JOIN f_bill ON f_bill_issue.F_BillIssueF_BillID = f_bill.F_BillID
AND f_bill.F_BillIsLunas = 'Y'
AND f_bill.F_BillID = ?
JOIN m_mou ON f_bill_issue.F_BillIssueIsAllMou = 'N'
AND f_bill_issue.F_BillIssueM_MouID = m_mou.M_MouID
AND m_mou.M_MouID = ?
JOIN m_branch ON m_branch.M_BranchIsActive = 'Y'
AND m_branch.M_BranchIsDefault = 'Y'
JOIN m_company ON m_mou.M_MouM_CompanyID= m_company.M_CompanyID
";
$qry = $this->db->query($sql, array($billid, $mouid, $billid, $mouid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
$rows = array();
if ($qry) {
//CHECK rows count kosong / tidak jika return langusng tanpa insert
$rows = $qry->result_array();
if (COUNT($rows) == 0) {
return "Rows Not Found";
}
$param = json_encode($rows);
// insert data ke tabel log_aoh
$sql_insert = "INSERT INTO log_aoh
(
Log_AohM_MouID,
Log_AohF_BillID,
Log_AohJson,
Log_AohType,
Log_AohUserID)
VALUES (?, ?, ?, 'UNHOLD', ?)
ON duplicate KEY UPDATE Log_AohM_MouID = Log_AohM_MouID";
$qry = $this->db->query($sql_insert, array($mouid, $billid, $param, $userID));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
//get data dari tabel conf_systems S_SystemIPAddressRegional untuk mendapatkan ip regional
$regional_ip_address = $this->get_region_ip();
// $url = "http://$regional_ip_address/one-api/aoh/receive_request_unhold";
$url = "http://$regional_ip_address/one-api/training/dataregional_mike/receive_request_unhold";
// $url_dummy = "https://devone.aplikasi.web.id/one-api/training/Databranch_stephen/receive_request_unhold_dummy";
// $result = $this->post($url_dummy, $param);
// echo "to $url_dummy \nresponse : $result\n";
$result = $this->post($url, $param);
echo "to $url \nresponse : $result\n";
$result = json_decode($result, true);
if ($result["status"] == "OK") {
// CHECK YANG LAMA, JIKA ADA STATUS Log_AohIsActive menjadi 'N'
$sql_update = "UPDATE log_aoh SET Log_AohIsActive = 'N'
WHERE Log_AohM_MouID = ? AND Log_AohF_BillID = ? AND Log_AohStatus = 'S'";
$qry = $this->db->query($sql_update, array($mouid, $billid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
// update log_aoh field Log_AohStatus menjadi S
$sql_update = "UPDATE log_aoh SET Log_AohStatus = 'S'
WHERE Log_AohM_MouID = ? AND Log_AohF_BillID = ? AND Log_AohStatus != 'E'";
$qry = $this->db->query($sql_update, array($mouid, $billid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
return true;
} else {
// update log_aoh field Log_AohStatus menjadi E
$sql_update = "UPDATE log_aoh SET Log_AohStatus = 'E'
WHERE Log_AohM_MouID = ? AND Log_AohF_BillID = ? AND Log_AohStatus = 'S'";
$qry = $this->db->query($sql_update, array($mouid, $billid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
print_r($result);
}
} else {
print_r($this->db_onedev->error());
}
// COMMIT TRANSACTION
$this->db->trans_commit();
}
public function receive_execute_unhold()
{
// Update data unhold dari regional
$prm = $this->sys_input;
$mou_id = $prm['mou_id'];
// print_r($prm);
// exit;
// parameter array mou_id
// BEGIN TRANSACTION
$this->db->trans_begin();
// Update data m_mou field M_MouIsActive menjadi Y
$sql = "UPDATE m_mou SET M_MouIsActive = 'Y' WHERE M_MouId=?";
$qry = $this->db->query($sql, $mou_id);
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
// COMMIT TRANSACTION
$this->db->trans_commit();
// return array mou_id beserta statusnya
$message = "Berhasil mengupdate unhold regional";
echo (json_encode(["status" => "OK", "message" => $message]));
}
public function receive_check_agrement_status()
{
// mengambil mou id "$this"
$param = $this->sys_input;
$mouid = $param["M_MouID"];
// BEGIN TRANSACTION
$this->db->trans_begin();
// select data dari f_bill_issue
// jika F_BillIssueIsAllMou = 'Y' join f_bill_mou untuk mendapatkan mouid , jika F_BillIssueIsAllMou = 'N' langsung ambil dari F_BillIssueM_MouID
// join f_bill, m_mou, m_company
// cek apakah agreement tersebut masih ada tagihan jatuh tempo & belum lunas x
// jika F_BillIssueExtendDay = 0 maka F_BillDueDate + 7 & F_BillIsLunas = 'N'
// jika F_BillIssueExtendDay <> 0 maka F_BillDueDate + F_BillIssueExtendDay & F_BillIsLunas = 'N'
//jika tidak ada status oke dan message tidak ada tagihan
//jika ada status err dan message ada tagihan
$sql = "
SELECT DISTINCT F_BillNo, M_MouID, M_MouName,
M_CompanyName, M_BranchName, F_BillIsLunas,
F_BillCreated,
CASE
WHEN F_BillIssueExtendDay = 0 THEN DATE_ADD(f_bill.F_BillDueDate, INTERVAL 7 DAY)
ELSE DATE_ADD(f_bill.F_BillDueDate, INTERVAL F_BillIssueExtendDay DAY)
END AS F_BillDueDate
FROM f_bill_issue
JOIN f_bill ON f_bill_issue.F_BillIssueF_BillID = f_bill.F_BillID
AND F_BillIsActive = 'Y'
AND F_BillIsLunas = 'N'
AND F_BillIssueIsActive ='Y'
JOIN f_bill_mou ON f_bill.F_BillID = f_bill_mou.F_BillMouF_BillID AND F_BillMouIsActive = 'Y'
JOIN m_mou ON f_bill_issue.F_BillIssueIsAllMou = 'Y'
AND f_bill_mou.F_BillMouM_MouID= m_mou.M_MouID
AND m_mou.M_MouID = ?
JOIN m_branch ON m_branch.M_BranchIsActive = 'Y' AND m_branch.M_BranchIsDefault = 'Y'
JOIN m_company ON m_mou.M_MouM_CompanyID= m_company.M_CompanyID
UNION
SELECT DISTINCT F_BillNo, M_MouID, M_MouName,
M_CompanyName, M_BranchName, F_BillIsLunas,
F_BillCreated,
CASE
WHEN F_BillIssueExtendDay = 0 THEN DATE_ADD(f_bill.F_BillDueDate, INTERVAL 7 DAY)
ELSE DATE_ADD(f_bill.F_BillDueDate, INTERVAL F_BillIssueExtendDay DAY)
END AS F_BillDueDate
FROM f_bill_issue
JOIN f_bill ON f_bill_issue.F_BillIssueF_BillID = f_bill.F_BillID
AND F_BillIsActive = 'Y'
AND F_BillIsLunas = 'N'
AND F_BillIssueIsActive ='Y'
JOIN m_mou ON f_bill_issue.F_BillIssueIsAllMou = 'N'
AND f_bill_issue.F_BillIssueM_MouID = m_mou.M_MouID
AND m_mou.M_MouID = ?
JOIN m_branch ON m_branch.M_BranchIsActive = 'Y' AND m_branch.M_BranchIsDefault = 'Y'
JOIN m_company ON m_mou.M_MouM_CompanyID= m_company.M_CompanyID
ORDER BY F_BillCreated
";
$qry = $this->db->query($sql, array($mouid, $mouid));
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
$rows = array();
$log_message = "";
$status = "";
if ($qry) {
$rows = $qry->result_array();
$bill_created = $rows[0]["F_BillCreated"];
$due_date = $rows[0]["F_BillDueDate"];
if (count($rows) > 0) {
// jika ada tagihan belum tuntas maka status Tidak OK / ERR
$mou_name = $rows[0]['M_MouName'];
$company_name = $rows[0]['M_CompanyName'];
$first_bill_date = $rows[0]['F_BillDueDate'];
$branch_name = $rows[0]['M_BranchName'];
$bill_number = $rows[0]['F_BillNo'];
// Mengubah format date menjadi d(tanggal 1-31) F(nama bulan Full letter) Y (tahun 4 digit angka)
$hold_date = date("d F Y", strtotime($first_bill_date));
// diganti sesuai meesage grup
$log_message = "Agreement $mou_name kelompok pelanggan $company_name telah terhold di cabang $branch_name dengan nomor tagihan $bill_number pada tanggal $hold_date .";
$status = "ERR";
} else {
// jika tidak ada tagihan yang pending maka status OK
$log_message = "Tagihan Sudah Dibayarkan Semua";
$status = "OK";
}
} else {
print_r($this->db->error());
}
// COMMIT TRANSACTION
$this->db->trans_commit();
echo json_encode(array("status" => $status, "message" => $log_message, "bill_created" => $bill_created, "due_date" => $due_date));
// print_r(json_encode(array("status" => $status, "message" => $log_message, "bill_created" => $bill_created, "due_date" => $due_date)));
}
public function get_region_ip()
{
// BEGIN TRANSACTION
$this->db->trans_begin();
$sql = "Select S_SystemIPAddressRegional from conf_systems";
$qry = $this->db->query($sql, array());
$last_qry = $this->db->last_query();
if (!$qry) {
$error = array(
"status" => "ERR",
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error);
// ROLLBACK TRANSACTION
$this->db->trans_rollback();
exit;
}
$rows = $qry->result_array();
if (COUNT($rows) == 0) {
return "Host Not Found";
} else {
return $rows[0]["S_SystemIPAddressRegional"];
}
// COMMIT TRANSACTION
$this->db->trans_commit();
}
function post($url, $data)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data)
)
);
$result = curl_exec($ch);
//echo "RST : $result ";
return $result;
}
}