Files
BE_CPONE/application/controllers/mockup/mcuoffline/Injectdetail.php
2026-04-27 10:31:17 +07:00

362 lines
15 KiB
PHP

<?php
class Injectdetail extends MY_Controller
{
var $db_onedev;
var $load;
var $kesimpulanfisik;
public function __construct()
{
parent::__construct();
$this->db_onedev = $this->load->database("onedev", true);
// $this->load->library("SsPriceMou");
}
public function index()
{
echo "CPONE RESUME INDIVIDU API";
}
public function getpatient($setupID, $startDate, $endDate, $debug = 'N')
{
$sql = "SELECT
T_OrderHeaderID AS orderID,
IFNULL(Mcu_ResumeStatus, 'NEW') as status,
T_OrderHeaderM_BranchID AS branchID,
DATE_FORMAT(T_OrderHeaderDate, '%d-%m-%Y') AS orderDate,
T_OrderHeaderLabNumber AS labNumber,
T_OrderHeaderM_PatientID AS patientID,
T_OrderHeaderCorporateID AS corporateID,
T_OrderHeaderMgm_McuID AS setupID,
UPPER(T_OrderHeaderM_PatientAge) AS patientAge,
M_PatientNoReg AS patientReg,
M_PatientName AS patientName,
UPPER(CONCAT(IF(ISNULL(M_TitleName),'',CONCAT(M_TitleName,'.')),
' ',
IFNULL(M_PatientPrefix,''),
' ',
M_PatientName,
' ',
IFNULL(M_PatientSuffix,''))) AS patientFullname,
CASE
WHEN LOWER(M_PatientGender) = 'male' THEN 'LAKI-LAKI'
WHEN LOWER(M_PatientGender) = 'female' THEN 'PEREMPUAN'
END patientGender,
M_PatientPhoto AS patientFoto,
M_PatientPhotoThumb AS patientFotoThumb,
CorporateCode AS corporateCode,
UPPER(CorporateName) AS corporateName,
M_BranchCode AS branchID,
M_BranchName AS branchName
FROM t_orderheader
JOIN m_patient
ON T_OrderHeaderM_PatientID = M_PatientID
AND (DATE_FORMAT(T_OrderHeaderDate, '%Y-%m-%d') BETWEEN ? AND ?)
AND T_OrderHeaderMgm_McuID = ?
AND T_OrderHeaderIsActive = 'Y'
JOIN corporate
ON T_OrderHeaderCorporateID = CorporateID
JOIN m_branch ON T_OrderHeaderM_BranchID = M_BranchID
LEFT JOIN m_title
ON M_PatientM_TitleID = M_TitleID
LEFT JOIN mcu_resume
ON T_OrderHeaderID = Mcu_ResumeT_OrderHeaderID
AND Mcu_ResumeIsActive = 'Y'
ORDER BY T_OrderHeaderLabNumber
";
$query = $this->db_onedev->query($sql, [$startDate, $endDate, $setupID]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$result = $query->result_array();
if ($debug == "N") {
return $result;
} else {
$this->sys_ok($result);
}
}
public function getDetail($orderID, $debug = 'N')
{
//get detail yang belum ada di resume_detail
$sql = "SELECT * FROM (
SELECT
T_OrderDetailID AS detailOrderID,
Group_ResultName AS groupResultName,
So_ResultEntryID AS resultID,
So_ResultEntryValidation1 AS resultValidation,
So_ResultEntryStatus AS resultStatus,
T_OrderDetailT_TestID AS testID,
T_TestName AS testName,
IFNULL(Mcu_ResumeDetailsID, 0) AS resumeDetailsID,
IFNULL(Mcu_ResumeID, 0) AS resumeID,
Mcu_ResumeKesimpulan AS resumeKesimpulan,
Mcu_ResumeRekomendasi AS resumeRekomendasi,
Mcu_ResumeSaran AS resumeSaran,
Mcu_ResumeDetailsResult resumeDetailResult,
So_ResultEntryDetailResult AS resumeEntryResult,
Group_ResultResumeMcu AS category,
CASE
WHEN Group_ResultResumeMcu = 'NONLAB' THEN
CASE
WHEN Mcu_ResumeSaran IS NOT NULL AND TRIM(Mcu_ResumeSaran) <> '' THEN Mcu_ResumeSaran
WHEN Mcu_ResumeSaran IS NULL OR TRIM(Mcu_ResumeSaran) <> '' THEN fn_getadvicenonlab(So_ResultEntryID)
ELSE Mcu_ResumeSaran
END
WHEN Group_ResultResumeMcu = 'FISIK' THEN
CASE
WHEN Mcu_ResumeSaran IS NOT NULL AND TRIM(Mcu_ResumeSaran) <> '' THEN Mcu_ResumeSaran
WHEN Mcu_ResumeSaran IS NULL OR TRIM(Mcu_ResumeSaran) <> '' THEN fn_getadvicefisik(So_ResultEntryID)
ELSE Mcu_ResumeSaran
END
ELSE Mcu_ResumeSaran
END AS saranso,
fn_countabnormal(So_ResultEntryID) AS isNormal,
TRIM(CONCAT(M_DoctorPrefix,' ',M_DoctorPrefix2, ' ', M_DoctorName, ' ',M_DoctorSuffix,' ', M_DoctorSuffix2, ' ')) doctorName,
Mcu_ResumeM_DoctorID AS doctorID,
IFNULL(Mcu_ResumeStatus,'NEW') AS status,
CASE
WHEN Mcu_ResumeDetailsResult IS NULL OR TRIM(Mcu_ResumeDetailsResult) = '' THEN So_ResultEntryDetailResult
WHEN Mcu_ResumeDetailsResult IS NOT NULL OR TRIM(Mcu_ResumeDetailsResult) <> '' THEN Mcu_ResumeDetailsResult
END AS result
FROM t_orderdetail
JOIN so_resultentry
ON T_OrderDetailT_OrderHeaderID = So_ResultEntryT_OrderHeaderID
AND T_OrderDetailID = So_ResultEntryT_OrderDetailID
AND So_ResultEntryIsActive = 'Y'
AND So_ResultEntryValidation1 = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
JOIN group_resultdetail
ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID
AND Group_ResultDetailIsActive ='Y'
JOIN group_result
ON Group_ResultID = Group_ResultDetailGroup_ResultID
AND Group_ResultResumeMcu IN ('NONLAB', 'FISIK')
AND Group_ResultIsActive ='Y'
JOIN t_test
ON T_OrderDetailT_TestID= T_TestID
AND T_TestIsActive = 'Y'
LEFT JOIN nonlab_template_mcu
ON T_TestNat_TestID = NonlabTemplateMcuT_TestID
AND NonlabTemplateMcuM_LangID = 1
AND NonlabTemplateMcuIsActive = 'Y'
LEFT JOIN so_resultentrydetail
ON So_ResultEntryID = So_ResultEntryDetailSo_ResultEntryID
AND NonlabTemplateMcuNonlabTemplateDetailID = So_ResultEntryDetailNonlab_TemplateDetailID
AND So_ResultEntryDetailIsActive = 'Y'
AND T_OrderDetailIsActive = 'Y'
LEFT JOIN mcu_resume
ON T_OrderDetailT_OrderHeaderID = Mcu_ResumeT_OrderHeaderID
LEFT JOIN mcu_resumedetails
ON T_OrderDetailID = Mcu_ResumeDetailsT_OrderDetailID
AND Mcu_ResumeDetailsIsActive = 'Y'
AND Mcu_ResumeID = Mcu_ResumeDetailsMcu_ResumeID
LEFT JOIN m_doctor
ON Mcu_ResumeM_DoctorID = M_DoctorID
AND M_DoctorIsActive = 'Y'
LEFT JOIN so_resultentry_category_result
ON So_ResultEntryCategoryResultSo_ResultEntryID = So_ResultEntryID
AND So_ResultEntryCategoryResultIsActive = 'Y'
GROUP BY T_OrderDetailT_TestID
) x
WHERE resumeDetailsID = 0 OR resumeDetailResult IS NULL OR resumeDetailResult = ''
ORDER BY category";
$query = $this->db_onedev->query($sql, [$orderID]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$result = $query->result_array();
$this->load->library("Kesimpulanfisik");
for ($i = 0; $i < count($result); $i++) {
if ($result[$i]['category'] == 'FISIK') {
$kesimpulanFisik = $this->kesimpulanfisik->kesimpulan($result[$i]['resultID']);
$result[$i]['result'] = $kesimpulanFisik;
$result[$i]['resumeEntryResult'] = $kesimpulanFisik;
if ($kesimpulanFisik != 'Tidak ditemukan kelainan.') {
$result[$i]['isNormal'] = 1;
} else {
$result[$i]['isNormal'] = 0;
}
}
}
if ($debug == "N") {
return $result;
} else {
$this->sys_ok($result);
}
}
public function inject($setupID, $startDate, $endDate)
{
$order = $this->getpatient($setupID, $startDate, $endDate);
for ($i = 0; $i < count($order); $i++) {
$ord = $order[$i];
$detail = $this->getDetail($ord['orderID']);
$order[$i]['dtl'] = $detail;
}
$this->sys_ok($order);
}
public function injectV2()
{
$jsonBefore = "";
$jsonAfter = "";
$prm = $this->sys_input;
$action = 'INJECT DETAIL BELUM INPUT';
$data = $prm['data'];
$resumeID = $data['resumeID'];
$userid = '9999';
$sql = "SELECT *
FROM mcu_resume
WHERE Mcu_ResumeID = ?
AND Mcu_ResumeIsActive = 'Y'";
$query = $this->db_onedev->query($sql, [$resumeID]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$resumeBefore = $query->result_array()[0];
$jsonBefore = $resumeBefore;
//get detail for log
$sql = "SELECT *
FROM mcu_resumedetails
WHERE
Mcu_ResumeDetailsMcu_ResumeID = ?
AND Mcu_ResumeDetailsIsActive = 'Y'";
$query = $this->db_onedev->query($sql, [$resumeID]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$detailResume = $query->result_array();
$jsonBefore['detail'] = $detailResume;
$sql = "SELECT Mcu_ResumeDetailsID
FROM mcu_resumedetails
WHERE Mcu_ResumeDetailsT_OrderDetailID = ?
AND Mcu_ResumeDetailsT_TestID = ?
AND Mcu_ResumeDetailsCategory = ?
AND Mcu_ResumeDetailsIsActive = 'Y'";
$query = $this->db_onedev->query($sql, [
$data['detailOrderID'],
$data['testID'],
$data['category'],
]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$cekDetail = $query->result_array();
if (count($cekDetail) == 0) {
$action = 'INJECT DETAIL BELUM INPUT';
$sql = "INSERT INTO mcu_resumedetails(
Mcu_ResumeDetailsMcu_ResumeID,
Mcu_ResumeDetailsCategory,
Mcu_ResumeDetailsT_OrderDetailID,
Mcu_ResumeDetailsT_TestID,
Mcu_ResumeDetailsResult,
Mcu_ResumeDetailsCreated,
Mcu_ResumeDetailsUserID)
VALUES(?,?,?,?,?,NOW(),?)";
$query = $this->db_onedev->query($sql, [
$resumeID,
$data['category'],
$data['detailOrderID'],
$data['testID'],
$data['resumeEntryResult'],
$userid,
]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
} else {
$action = 'UPDATE DETAIL INPUT KOSONG';
$sql = "UPDATE mcu_resumedetails
SET Mcu_ResumeDetailsResult = ?,
Mcu_ResumeDetailsLastUpdated = NOW(),
Mcu_ResumeDetailsUserID = ?
WHERE Mcu_ResumeDetailsID = ?";
$query = $this->db_onedev->query($sql, [
$data['resumeEntryResult'],
$userid,
$cekDetail[0]['Mcu_ResumeDetailsID']
]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
}
$sql = "SELECT *
FROM mcu_resume
WHERE Mcu_ResumeID = ?
AND Mcu_ResumeIsActive = 'Y'";
$query = $this->db_onedev->query($sql, [$resumeID]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$jsonAfter = $query->result_array()[0];
//get detail for log
$sql = "SELECT *
FROM mcu_resumedetails
WHERE
Mcu_ResumeDetailsMcu_ResumeID = ?
AND Mcu_ResumeDetailsIsActive = 'Y'";
$query = $this->db_onedev->query($sql, [$resumeID,]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$detailAfter = $query->result_array();
$jsonAfter['detail'] = $detailAfter;
$sql = "INSERT INTO cpone_log.log_mcu_resume_inject
(log_Mcu_ResumeMcu_ResumeID,
log_Mcu_ResumeJsonBefore,
log_Mcu_ResumeJsonAfter,
log_Mcu_ResumeJsonPrm,
log_Mcu_ResumeType,
log_Mcu_ResumeUserID,
log_Mcu_ResumeCreated)
VALUES(?,?,?,?,?,?,NOW())";
$query = $this->db_onedev->query($sql, [
$resumeID,
json_encode($jsonBefore),
json_encode($jsonAfter),
json_encode($prm),
$action,
$userid
]);
if (!$query) {
$message = $this->db_onedev->error();
$message['qry'] = $this->db_onedev->last_query();
$this->sys_error($message);
exit;
}
$this->sys_ok('ok');
}
}