Files
2026-05-25 20:01:37 +07:00

499 lines
20 KiB
PHP

<?php
class Registration extends MY_Controller
{
var $db_regional;
var $load;
var $db;
public function __construct()
{
parent::__construct();
$this->db_regional = $this->load->database("regional", true);
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userID = $this->sys_user['M_UserID'];
$sql_cek_token = "SELECT M_UserActiveToken
from one_mitra.m_user
WHERE M_UserID = ?
AND M_UserActiveToken IS NOT NULL";
$qry_token = $this->db->query($sql_cek_token, [$userID]);
if (!$qry_token) {
$this->sys_error('Invalid token');
exit;
}
$rows_token = $qry_token->result_array();
if (count($rows_token) == 0) {
$this->sys_error('Invalid token');
exit;
}
}
function getfilter()
{
try {
$prm = $this->sys_input;
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql_gender = "SELECT M_SexID AS id,
m_sexname AS name
FROM m_sex
WHERE M_SexIsActive = 'Y'";
$query_gender = $this->db->query($sql_gender, []);
if (!$query_gender) {
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$genders = $query_gender->result_array();
$sql_title = "SELECT M_TitleID AS id,
M_TitleM_SexID AS type,
M_TitleName AS name
FROM m_title WHERE M_TitleIsActive = 'Y'";
$query_title = $this->db->query($sql_title, []);
if (!$query_title) {
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$titles = $query_title->result_array();
$sql_regional = "SELECT
S_RegionalID AS regional_id,
S_RegionalName AS regional_name
FROM s_regional WHERE S_RegionalIsActive = 'Y'";
$query_regional = $this->db->query($sql_regional, []);
if (!$query_regional) {
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$regionals = $query_regional->result_array();
$sql_branch = "SELECT
M_BranchID AS branch_id,
M_BranchCode AS branch_code,
M_BranchName AS branch_name,
M_BranchS_RegionalID AS regional_id
FROM m_branch Where M_BranchIsActive = 'Y'";
$query_branch = $this->db->query($sql_branch, []);
if (!$query_branch) {
$message = $this->db->error();
$this->sys_error($message);
exit;
}
$branchs = $query_branch->result_array();
for ($i = 0; $i < count($regionals); $i++) {
$regionals[$i]['branch'] = [];
}
for ($i = 0; $i < count($regionals); $i++) {
for ($j = 0; $j < count($branchs); $j++) {
if ($regionals[$i]['regional_id'] == $branchs[$j]['regional_id']) {
$regionals[$i]['branch'][] = $branchs[$j];
}
}
}
$result = array(
"titles" => $titles,
"gender" => $genders,
"regional" => $regionals
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getsampletype()
{
try {
$prm = $this->sys_input;
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$arr_test = 0;
if (isset($prm['arr_test'])) {
$arr_test = $prm['arr_test'];
} else {
$this->sys_error("arr_test is mandatory");
}
// print_r($arr_test);
$result = array();
for ($i = 0; $i < count($arr_test); $i++) {
$test = $arr_test[$i];
$sasCode = substr($test['sasCode'], 0, 8) . "%";
$sql = "SELECT T_TestID AS id
FROM t_test
WHERE T_TestSasCode LIKE ?
AND T_TestIsActive = 'Y'";
$qry = $this->db_regional->query($sql, [$sasCode]);
if (!$qry) {
$message = $this->db_regional->error();
$this->sys_error($message);
exit;
}
$allTest = $qry->result_array();
$arr = [];
for ($k = 0; $k < count($allTest); $k++) {
$arr[] = $allTest[$k]['id'];
}
// print_r($arr);
$implodeTest = implode(",", $arr);
$sql_specimen = "SELECT Nat_TestID,
Nat_TestName,
T_TestID,
T_TestName,
Nat_SampleTypeID,
Nat_SampleTypeNat_BahanID,
Nat_SampleTypeName,
Nat_BahanID,
Nat_BahanName
FROM nat_test
JOIN t_test
ON Nat_TestID = T_TestNat_TestID
AND T_TestID IN ($implodeTest)
AND T_TestIsActive = 'Y'
JOIN nat_sampletype
ON Nat_TestNat_SampleTypeID = Nat_SampleTypeID
AND Nat_SampleTypeIsActive = 'Y'
JOIN nat_bahan
ON Nat_SampleTypeNat_BahanID = Nat_BahanID
WHERE Nat_TestIsActive = 'Y'
";
// GROUP_CONCAT(DISTINCT CONCAT(Nat_SampleTypeID, '^', Nat_SampleTypeName)) AS sampletype,
// GROUP_CONCAT(DISTINCT CONCAT(Nat_BahanID, '^', Nat_BahanName)) AS nat_bahan
// GROUP BY Nat_SampleTypeID, Nat_BahanID
$qry_specimen = $this->db_regional->query($sql_specimen, []);
// echo $this->db_regional->last_query();
// exit;
if (!$qry_specimen) {
$message = $this->db_regional->error();
$this->sys_error($message);
exit;
}
$specimen = $qry_specimen->result_array();
// print_r($specimen);
// exit;
$data = array(
"id" => $test['id'],
"tab" => $test['tab'],
"specimen" => [],
"bahan" => []
);
// print_r($specimen);
// if (count($specimen) > 0) {
// if ($specimen[0]['sampletype'] != null && $specimen[0]['nat_bahan'] != null) {
// $sampleType = explode(',', $specimen[0]['sampletype']);
// $natBahan = explode(',', $specimen[0]['nat_bahan']);
// // print_r($sampleType);
// // print_r($natBahan);
// for ($i = 0; $i < count($sampleType); $i++) {
// $temp = explode('^', $sampleType[$i]);
// $data['specimen'][] = array(
// "id" => $temp[0],
// "name" => $temp[1]
// );
// }
// for ($i = 0; $i < count($natBahan); $i++) {
// $temp = explode('^', $natBahan[$i]);
// $data['bahan'][] = array(
// "id" => $temp[0],
// "name" => $temp[1]
// );
// }
// }
// }
for ($j = 0; $j < count($specimen); $j++) {
$sp = $specimen[$j];
$tempSp = array(
"id" => $sp["Nat_SampleTypeID"],
"name" => $sp['Nat_SampleTypeName']
);
$tempBhn = array(
"id" => $sp["Nat_BahanID"],
"name" => $sp['Nat_BahanName']
);
if (!in_array($tempSp, $data['specimen'])) {
$data['specimen'][] = array(
"id" => $sp["Nat_SampleTypeID"],
"name" => $sp['Nat_SampleTypeName']
);
}
if (!in_array($tempBhn, $data['bahan'])) {
$data['bahan'][] = array(
"id" => $sp["Nat_BahanID"],
"name" => $sp['Nat_BahanName']
);
}
}
$result[] = $data;
}
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function addpatient()
{
try {
$prm = $this->sys_input;
$userid = $this->sys_user["M_UserID"];
$regionalID = $this->sys_user["M_UserS_RegionalID"];
$companyID = $this->sys_user["M_UserM_CompanyID"];
$mouID = $this->sys_user["M_UserM_MouID"];
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$patient = $prm['patient_data'];
$paket = $prm['paket'];
$patientDOB = date('Y-m-d', strtotime($patient['dob']));
$withoutNIK = $patient['without_nik'];
$nik = $patient['nik'];
$tests = $prm['tests'];
$specimens = $prm['specimens'];
$bahan = $prm['bahan'];
$userMou = $prm['userMouID'];
$patientID = $prm['patient_id'];
// $this->db->trans_begin();
// $this->db->trans_rollback();
// $this->db->trans_commit();
// print_r($this->sys_user);
// exit;
$isNIK = 'N';
$this->db->trans_begin();
if ($withoutNIK == 'Y') {
$nik = "0";
}
if ($patientID == "new") {
if ($withoutNIK == "N") {
$isNIK = 'Y';
}
$ptn = [
"M_PatientPrefix" => $patient['prefix'],
"M_PatientTitleID" => $patient['saluation'],
"M_PatientName" => $patient['name'],
"M_PatientSuffix" => $patient['suffix'],
"M_PatientDOB" => $patientDOB,
"M_PatientNIK" => $nik,
"M_PatientNIP" => $patient['nip'],
"M_PatientIsNIK" => $isNIK,
"M_PatientM_SexID" => $patient['gender'],
"M_PatientHP" => $patient['hp'],
"M_PatientAddress" => $patient['address'],
"M_PatientNoRM" => $patient['noRM'],
"M_PatientM_CompanyID" => $companyID,
"M_PatientUserID" => $userid,
"M_PatientJabatan" => $patient['jabatan'],
"M_PatientKedudukan" => $patient['kedudukan'],
"M_PatientLocation" => $patient['lokasi'],
"M_PatientJob" => $patient['pekerjaan'],
];
$this->db->insert('one_mitra.m_patient', $ptn);
$err = $this->db->error();
if (
$err['message'] != ""
) {
$this->sys_error_db("ERROR INSERT PATIENT", $this->db);
$this->db->trans_rollback();
exit;
}
$patientID = $this->db->insert_id();
if ($withoutNIK == 'Y') {
$awalan = sprintf("%05s", intval($companyID)) . $patientID;
// print_r($awalan);
$nik = str_pad($awalan, 16, "0");
// print_r($nik);
$this->db->set("M_PatientNIK", $nik)->where("M_PatientID", $patientID)->update('one_mitra.m_patient');
$err = $this->db->error();
if (
$err['message'] != ""
) {
$this->sys_error_db("m_patient rows", $this->db);
$this->db->trans_rollback();
exit;
}
}
}
$sql = "SELECT one_mitra.fn_numbering('MT') as number";
$qry = $this->db->query($sql, []);
if (!$qry) {
$message = $this->db->error();
$this->db->trans_rollback();
$this->sys_error($message);
exit;
}
$number = $qry->result_array()[0]['number'];
$total = intval($prm['total']);
$order = [
"T_OrderNumber" => $number,
"T_OrderM_PatientID" => $patientID,
"T_OrderM_MouID" => $userMou,
"T_OrderM_CompanyID" => $companyID,
"T_OrderS_RegionalID" => $regionalID,
"T_OrderNote" => $patient['note'],
"T_OrderDiagnosis" => $patient['diagnosis'],
"T_OrderUserID" => $userid,
"T_OrderTotal" => $total,
];
$this->db->insert('one_mitra.t_order', $order);
$err = $this->db->error();
if (
$err['message'] != ""
) {
$this->sys_error_db("ERROR INSERT ORDER", $this->db);
$this->db->trans_rollback();
exit;
}
$orderId = $this->db->insert_id();
for ($i = 0; $i < count($tests); $i++) {
// T_OrderDetailID int(11) Auto Increment
// T_OrderDetailOrderID int(11)
// T_OrderDetailTestID int(11)
// T_OrderDetailTestName varchar(30)
// T_OrderDetailTotal int(11)
// T_OrderDetailUserID
$coba = strtotime($tests[$i]['date']);
$dt = date('Y-m-d H:i:s', $coba);
$order = [
"T_OrderDetailOrderID" => $orderId,
"T_OrderDetailTestID" => $tests[$i]['id'],
"T_OrderDetailTestName" => $tests[$i]['name'],
"T_OrderDetailTotal" => $tests[$i]['price'],
"T_OrderDetailTestDate" => $dt,
"T_OrderDetailUserID" => $userid,
];
$this->db->insert('one_mitra.t_orderdetail', $order);
$err = $this->db->error();
if (
$err['message'] != ""
) {
$this->sys_error_db("ERROR INSERT ORDER DETAIL", $this->db);
$this->db->trans_rollback();
exit;
}
}
for ($i = 0; $i < count($specimens); $i++) {
// T_OrderDetailSampleT_OrderID int(11)
// T_OrderDetailSampleNat_SampleTypeID int(11)
// T_OrderDetailSampleName varchar(200)
// T_OrderDetailSampleQty varchar(200)
// T_OrderDetailSampleUserID
if ($specimens[$i]['amount'] != 0 && $specimens[$i]['amount'] != "0" && $specimens[$i]['amount'] != "") {
$order = [
"T_OrderDetailSampleT_OrderID" => $orderId,
"T_OrderDetailSampleNat_SampleTypeID" => $specimens[$i]['id'],
"T_OrderDetailSampleName" => $specimens[$i]['name'],
"T_OrderDetailSampleQty" => $specimens[$i]['amount'],
"T_OrderDetailSampleUserID" => $userid,
];
$this->db->insert('one_mitra.t_orderdetailsample', $order);
$err = $this->db->error();
if (
$err['message'] != ""
) {
$this->sys_error_db("ERROR INSERT ORDER DETAIL SAMPLE", $this->db);
$this->db->trans_rollback();
exit;
}
}
}
for ($i = 0; $i < count($bahan); $i++) {
// T_OrderDetailBahanT_OrderID int(11)
// T_OrderDetailBahanNat_BahanID int(11)
// T_OrderDetailBahanName int(11)
// T_OrderDetailBahanQty varchar(200)
// T_OrderDetailBahanUserID
if ($bahan[$i]['amount'] != 0 && $bahan[$i]['amount'] != "0" && $bahan[$i]['amount'] != "") {
# code...
$order = [
"T_OrderDetailBahanT_OrderID" => $orderId,
"T_OrderDetailBahanNat_BahanID" => $bahan[$i]['id'],
"T_OrderDetailBahanName" => $bahan[$i]['name'],
"T_OrderDetailBahanQty" => $bahan[$i]['amount'],
"T_OrderDetailBahanUserID" => $userid,
];
$this->db->insert('one_mitra.t_orderdetailbahan', $order);
$err = $this->db->error();
if (
$err['message'] != ""
) {
$this->sys_error_db("ERROR INSERT ORDER DETAIL BAHAN", $this->db);
$this->db->trans_rollback();
exit;
}
}
}
for ($i = 0; $i < count($paket); $i++) {
//T_OrderDetailPacketID int(11) Auto Increment
// T_OrderDetailPacketT_PacketID int(11)
// T_OrderDetailPacketName varchar(250)
// T_OrderDetailPacketIsActive char(1) [Y]
// T_OrderDetailPacketUserID int(11)
// T_OrderDetailPacketCreated datetime [current_timestamp()]
// T_OrderDetailPacketLastUpdated
# code...
$order = [
"T_OrderDetailPacketOrderID" => $orderId,
"T_OrderDetailPacketPrice" => $paket[$i]['price'],
"T_OrderDetailPacketT_PacketType" => $paket[$i]["type"],
"T_OrderDetailPacketT_PacketID" => $paket[$i]['id'],
"T_OrderDetailPacketName" => $paket[$i]['name'],
"T_OrderDetailPacketUserID" => $userid,
];
$this->db->insert('one_mitra.t_orderdetailpacket', $order);
$err = $this->db->error();
if (
$err['message'] != ""
) {
$this->sys_error_db("ERROR INSERT ORDER DETAIL BAHAN", $this->db);
$this->db->trans_rollback();
exit;
}
}
$this->db->trans_commit();
$result = [
"patientID" => $patientID,
"orderID" => $orderId,
"orderNumber" => $number,
];
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
}