load->library('Satusehat'); } function index() { echo "Satu Sehat Service Request"; } //fungsi translate hari function translateDayToIndonesian($englishDay) { $englishDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; $indonesianDays = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu']; $index = array_search($englishDay, $englishDays); if ($index !== false) { return $indonesianDays[$index]; } return 'Hari tidak valid'; } //fungsi translate bulan function translateMonthToIndonesian($englishMonth) { $englishMonths = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; $indonesianMonths = [ 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember' ]; $index = array_search($englishMonth, $englishMonths); if ($index !== false) { return $indonesianMonths[$index]; } return 'Bulan tidak valid'; } function getservicerequest() { $prm = $this->sys_input; $orderheaderID = $prm['orderheaderID']; // get organization $sql = "SELECT organizationID FROM one_health.organization WHERE organizationIsActive = 'Y'"; $qry = $this->db->query($sql, []); $last_qry = $this->db->last_query(); if (!$qry) { $error = array( "message" => $this->db->error()["message"], "sql" => $last_qry ); $this->sys_error_db($error); exit; } $organizationID = $qry->result_array()[0]['organizationID']; // get T_OrderDetail by T_OrderHeaderID $T_OrderDetailID = ""; $sql_get_orderDetailID = "SELECT T_OrderDetailID, IFNULL(Nat_TestLoincCode,'') as Nat_TestLoincCode , IFNULL(Nat_TestLoincDisplay,'') as Nat_TestLoincDisplay, T_OrderDetailT_TestName, T_OrderHeaderM_PatientID , OHPatientMapIHSNumber, EncounterUUID, M_PatientName, DAYNAME(T_OrderHeaderDate) as OrderHeaderDay, DATE_FORMAT(DATE(T_OrderHeaderDate),'%d %M %Y') as OrderHeaderDate, TIME(T_OrderHeaderDate) as OrderHeaderTime, T_OrderHeaderDate, OHDoctorMapIHSNumber, M_DoctorName, OHStaffMapIhsNumber, M_StaffName FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' AND T_OrderDetailT_TestIsPrice ='Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN nat_test ON T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y' LEFT JOIN nat_test_loinc ON Nat_TestLoincNat_TestID = Nat_TestID Join m_doctor ON M_DoctorID = T_OrderHeaderSenderM_DoctorID AND M_DoctorIsActive ='Y' JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND T_OrderHeaderIsActive = 'Y' AND M_PatientIsActive = 'Y' JOIN order_log ON OrderLogT_OrderHeaderID = T_OrderHeaderID JOIN m_user ON M_UserID = OrderLogUserID AND M_UserIsActive = 'Y' JOIN m_staff ON M_StaffID = M_UserM_StaffID AND M_StaffIsActive = 'Y' LEFT JOIN one_health.oh_patient_map ON T_OrderHeaderM_PatientID = OHPatientMapM_PatientID AND OHPatientMapIsActive = 'Y' LEFT JOIN one_health.encounter ON EncounterT_orderHeaderID = T_orderHeaderID AND EncounterIsActive= 'Y' AND T_OrderDetailT_OrderHeaderID = EncounterT_orderHeaderID LEFT JOIN one_health.oh_doctor_map ON OHDoctorMapM_DoctorID = M_DoctorID AND OHDoctorMapIsActive = 'Y' LEFT JOIN one_health.oh_staff_map ON OHStaffMapM_StaffNIK = M_StaffNIK AND OHStaffMapIsActive = 'Y'"; $qry_orderDetailID = $this->db->query($sql_get_orderDetailID, $orderheaderID); $last_qry = $this->db->last_query(); if (!$qry_orderDetailID) { $error = array( "message" => $this->db->error()["message"], "sql" => $last_qry ); $this->sys_error_db($error); exit; } $orders = $qry_orderDetailID->result_array(); $results = array(); $sql = "SELECT * FROM t_orderpromise WHERE T_OrderPromiseT_OrderHeaderID = ? AND T_OrderPromiseIsActive = 'Y' ORDER BY T_OrderPromiseDateTime ASC"; $qry = $this->db->query($sql, $orderheaderID); $last_qry = $this->db->last_query(); if (!$qry) { $error = array( "message" => $this->db->error()["message"], "sql" => $last_qry ); $this->sys_error_db($error); exit; } $rst_promise = $qry->result_array(); $T_OrderPromiseDateTime = $rst_promise[0]['T_OrderPromiseDateTime']; foreach ($orders as $key => $value) { $T_OrderorderDetailID = $value['T_OrderDetailID']; $sql = "SELECT COUNT(*) as xcount FROM one_health.service_request WHERE ServiceRequestT_OrderDetailID = ? AND ServiceRequestIsActive = 'Y'"; $qry_cek = $this->db->query($sql, $T_OrderorderDetailID); $last_qry = $this->db->last_query(); if (!$qry_cek) { $error = array( "message" => $this->db->error()["message"], "sql" => $last_qry ); $this->sys_error_db($error); exit; } if ($qry_cek->row()->xcount == 0) { //blm ada data di one_health maka diinsertkan $servicerequest_uuid = $this->satusehat->gen_uuid(); //mengambil orderpromise yang paling awal //mengubah hari dari inggris menjadi indonesia $dayInIndonesian = $this->translateDayToIndonesian($value['OrderHeaderDay']); //mengubah bulan dalam tanggal menjadi ke bahasa indonesia $parts = explode(' ', $value['OrderHeaderDate']); $indonesianMonth = $this->translateMonthToIndonesian($parts[1]); $timeParts = explode(':', $value['OrderHeaderTime']); $hourMinute = $timeParts[0] . ':' . $timeParts[1]; // mengubah Nama menjadi Huruf besar ditiap awal kata dan kecil selanjutnya $formattedNamePatient = ucwords(strtolower($value['M_PatientName'])); $formattedNameDoctor = ucwords(strtolower($value['M_DoctorName'])); $formattedNamePerformer = ucwords(strtolower($value['M_StaffName'])); $serviceRequestJSON = [ "fullUrl" => "urn:uuid:{$servicerequest_uuid}", "resource" => [ "resourceType"=> "ServiceRequest", "identifier"=> [ [ "system"=> "http://sys-ids.kemkes.go.id/servicerequest/$organizationID", "value"=> $value['T_OrderDetailID'] ], ], "status" => "active", "intent" => "original-order", "priority" => "routine", "code" => [ "coding" => [ [ "system"=> "http://loinc.org", "code"=> $value['Nat_TestLoincCode'], "display"=> $value['Nat_TestLoincDisplay'], ], ], "text" => $value['T_OrderDetailT_TestName'], ], "subject" => [ "reference"=> "Patient/".$value['OHPatientMapIHSNumber'], ], "encounter"=> [ "reference"=> "Encounter/".$value['EncounterUUID'], "display"=> "Permintaan {$value['T_OrderDetailT_TestName']} {$formattedNamePatient} di hari {$dayInIndonesian}, {$parts[0]} $indonesianMonth {$parts[2]} pukul {$hourMinute} WIB" ], "occurrenceDateTime"=> date('c', strtotime($T_OrderPromiseDateTime)), "authoredOn"=> date('c', strtotime($value['T_OrderHeaderDate'])), "requester"=>[ "reference"=> "Practitioner/{$value['OHDoctorMapIHSNumber']}", "display"=> $formattedNameDoctor ], "performer"=> [ [ "reference"=> "Practitioner/{$value['OHStaffMapIhsNumber']}", "display"=> $formattedNamePerformer ] ], "reasonCode"=> [ [ "text"=> "" ] ] ], "request" => [ "method" => "POST", "url" => "ServiceRequest" ] ]; $sql = "INSERT INTO one_health.service_request ( ServiceRequestUUID, ServiceRequestT_OrderHeaderID, ServiceRequestT_OrderDetailID, ServiceRequestJSON, ServiceRequestCreated ) VALUES ( ?, ?, ?, ?, NOW() )"; $qry = $this->db->query($sql, [ $servicerequest_uuid, $orderheaderID, $T_OrderorderDetailID, json_encode($serviceRequestJSON) ]); $last_qry = $this->db->last_query(); if (!$qry) { $error = array( "message" => $this->db->error()["message"], "sql" => $last_qry ); $this->sys_error_db($error); exit; } $results[] = $serviceRequestJSON; } else { //sudah ada data di one_health maka langsung di returnkan jsonya ; echo "Data sudah diinsert"; } } echo json_encode($results); } }