db_onedev = $this->load->database("onedev", true); $this->db_log = $this->load->database("one_lab_log", true); $this->load->helper(array('form', 'url')); } function uncompress() { $data = file_get_contents("php://input"); $this->sys_input = json_decode(gzinflate($data), true); } function index() { $this->uncompress(); $data = $this->sys_input["data"]; $user_id = 555; $md5 = $this->sys_input["md5"]; $l_md5 = md5(json_encode($data)); if ($md5 != $l_md5) { $this->sys_error("Md5 $md5 <> $l_md5"); exit(); } $order = $data["order"]; $tests = $data["tests"]; $samples = $data["samples"]; $order_promises = $data["order_promises"]; $order_detail_promises = $data["order_detail_promises"]; $log_id = null; $old_order_id = $order["T_OrderHeaderID"]; $lab_number = $order["T_OrderHeaderLabNumber"] ?? null; if($lab_number == null) { echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Lab number tidak ditemukan", ]), 9 ); exit; }else{ $sql = "INSERT INTO log_download ( Log_DownloadReffID, Log_DownloadLabNumber, Log_DownloadData, Log_DownloadStatus, Log_DownloadCreatedUserID, Log_DownloadCreated ) VALUES ( ?,?,?,?,?,NOW() )"; $query = $this->db_log->query($sql, [$old_order_id, $lab_number, json_encode($data), 'P',555]); if(!$query) { $sql = ""; echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Gagal menyimpan log", ]), 9 ); exit; } $log_id = $this->db_log->insert_id(); } $this->db_onedev->trans_begin(); $patient = $this->get_patient($order); if($patient["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$patient["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $patient["message"], ]), 9 ); exit; } $patient_id = $patient["data"]["New_PatientID"]; if(intval($patient_id) == 0) { $this->db_onedev->trans_rollback(); $this->insert_error('get_patient:get_patient', '', json_encode($patient), 'pasien tidak ditemukan'); if($log_id != null) $this->update_log($log_id,'E','Pasien tidak ditemukan'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Pasien tidak ditemukan", ]), 9 ); exit; } $sql = "SELECT * FROM m_company WHERE M_CompanyNumber = 'CPONE' AND M_CompanyIsActive = 'Y'"; $query = $this->db_onedev->query($sql); if(!$query) { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Gagal mengambil data perusahaan'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Gagal mengambil data perusahaan", ]), 9 ); exit; } $company = $query->row_array(); if(!$company || $company["M_CompanyID"] == null) { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Perusahaan cpone tidak ditemukan'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Perusahaan cpone tidak ditemukan", ]), 9 ); exit; } $sql = "SELECT * FROM m_mou WHERE M_MouIsActive = 'Y' AND M_MouM_CompanyID = ? AND M_MouIsDefault = 'Y' ORDER BY M_MouID DESC LIMIT 1"; $query = $this->db_onedev->query($sql, [$company["M_CompanyID"]]); if(!$query) { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Gagal mengambil data mou'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Gagal mengambil data mou", ]), 9 ); exit; } $mou = $query->row_array(); if(!$mou || $mou["M_MouID"] == null) { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Mou tidak ditemukan'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Mou tidak ditemukan", ]), 9 ); exit; } $mou_id = $mou["M_MouID"]; $check_test = $this->check_test($tests); if($check_test["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$check_test["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $check_test["message"], ]), 9 ); exit; } $order['T_OrderHeaderM_CompanyID'] = $company["M_CompanyID"]; $order['T_OrderHeaderM_MouID'] = $mou_id; $sql = "SELECT * FROM config_local WHERE Config_LocalIsActive = 'Y'"; $query = $this->db_onedev->query($sql); if(!$query) { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Gagal mengambil data config local'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Gagal mengambil data config local", ]), 9 ); exit; } $config_local = $query->row_array(); if(!$config_local || $config_local["Config_LocalID"] == null) { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Config local tidak ditemukan'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Config local tidak ditemukan", ]), 9 ); exit; } if( $config_local["Config_LocalSenderM_DoctorID"] == 0 || $config_local["Config_LocalSenderM_DoctorAddressID"] == 0 || $config_local["Config_LocalPjM_DoctorID"] == 0){ $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Config dokter sender atau pj tidak ditemukan'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Config dokter sender atau pj tidak ditemukan", ]), 9 ); exit; } $order["T_OrderHeaderSenderM_DoctorID"] = $config_local["Config_LocalSenderM_DoctorID"]; $order["T_OrderHeaderSenderM_DoctorAddressID"] = $config_local["Config_LocalSenderM_DoctorAddressID"]; $order["T_OrderHeaderPjM_DoctorID"] = $config_local["Config_LocalPjM_DoctorID"]; $order["T_OrderHeaderM_PatientID"] = $patient_id; $order["T_OrderHeaderCorporateID"] = $order['CorporateID']; $save_order_header = $this->save_order_header($order); if($save_order_header["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$save_order_header["message"]); } $order_header_id = $save_order_header["data"]["T_OrderHeaderID"]; if($order_header_id == null) { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E','Gagal menyimpan data order header'); echo gzdeflate( json_encode([ "status" => "ERR", "message" => "Gagal menyimpan data order header", ]), 9 ); exit; } /*$save_order_promise = $this->save_order_promise($order_header_id,$order); if($save_order_promise["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$save_order_promise["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $save_order_promise["message"], ]), 9 ); exit; } $promise_id = $save_order_promise["data"]["T_OrderPromiseID"];*/ $promise_id = 0; $save_detail = $this->save_detail($tests,$order_header_id,$promise_id); if($save_detail["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$save_detail["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $save_detail["message"], ]), 9 ); exit; } $save_sample = $this->save_sample($samples,$order_header_id); if($save_sample["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$save_sample["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $save_sample["message"], ]), 9 ); exit; } $save_corporate = $this->save_corporate($order); if($save_corporate["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$save_corporate["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $save_corporate["message"], ]), 9 ); exit; } $save_order_promises = $this->save_order_promises($orderheader_id,$order_promises); if($save_corporate["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$save_corporate["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $save_corporate["message"], ]), 9 ); exit; } $save_order_detail_promises = $this->save_order_detail_promises($order_header_id,$order_detail_promises); if($save_order_detail_promises["status"] == "ERR") { $this->db_onedev->trans_rollback(); if($log_id != null) $this->update_log($log_id,'E',$save_order_detail_promises["message"]); echo gzdeflate( json_encode([ "status" => "ERR", "message" => $save_order_detail_promises["message"], ]), 9 ); exit; } $this->update_log($log_id,'D','Menyimpan data order header',$order_header_id); $this->db_onedev->trans_commit(); echo gzdeflate( json_encode([ "status" => "OK", "result" => $result, ]), 9 ); } function update_log($log_id,$status,$message,$header_id = 0) { $sql = "UPDATE log_download SET Log_DownloadStatus = ?, Log_DownloadMessage = ?, Log_DownloadT_OrderHeaderID = ? WHERE Log_DownloadID = ?"; $query = $this->db_log->query($sql, [$status,$message,$header_id,$log_id]); $this->insert_error('update_log:update_log', $this->db_log->last_query(), json_encode([$status,$message,$header_id,$log_id]), 'update log'); if(!$query) { $this->insert_error('update_log:update_log', $this->db_log->last_query(), json_encode([$status,$message,$header_id,$log_id]), 'update log'); return false; } return true; } function save_corporate($data){ $result = [ "status" => "OK", "message" => "Berhasil menyimpan data corporate", "data" => null ]; $corporate_id = $data["CorporateID"]; $corporate_name = $data["CorporateName"]; $corporate_code = $data["CorporateCode"]; $sql = "SELECT * FROM corporate WHERE CorporateCode = ? AND CorporateIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$corporate_code]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal mendapatkan data corporate"; $this->insert_error('save_corporate:get_corporate', $this->db_onedev->last_query(), json_encode($data), $result["message"]); return $result; } $corporate = $query->row_array(); if(!$corporate) { $sql = "INSERT INTO corporate( CorporateID, CorporateCode, CorporateName, CorporateCreatedUserID, CorporateCreated ) VALUES ( ?,?,?,?,NOW() )"; $query = $this->db_onedev->query($sql, [$corporate_id,$corporate_code,$corporate_name,555]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data corporate"; $this->insert_error('save_corporate:save_corporate', $this->db_onedev->last_query(), json_encode($data), $result["message"]); return $result; } $corporate_id = $this->db_onedev->insert_id(); }else{ $corporate_id = $corporate["CorporateID"]; } $result["data"] = $corporate; return $result; } function get_patient($data){ $result = [ "status" => "OK", "message" => "Berhasil mendapatkan data pasien", "data" => null ]; $patient_id = $data["M_PatientID"]; $new_patient_id = 0; $sql = "SELECT * FROM m_patient WHERE M_PatientOldPID = ? AND M_PatientIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$patient_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal mendapatkan data pasien"; return $result; } $patient = $query->row_array(); if(!$patient) { $sql = "INSERT INTO m_patient( M_PatientOldPID, M_PatientNoReg, M_PatientPrefix, M_PatientName, M_PatientM_TitleID, M_PatientSuffix, M_PatientM_SexID, M_PatientPOB, M_PatientDOB, M_PatientReligionCode, M_PatientReligionSystem, M_PatientBloodTypeCode, M_PatientBloodTypeSystem, M_PatientBloodRhCode, M_PatientBloodRhSystem, M_PatientEducationCode, M_PatientEducationSystem, M_PatientCitizenship, M_PatientEtnicCode, M_PatientEtnicSystem, M_PatientIdentifierCode, M_PatientIdentifierSystem, M_PatientIdentifierValue, M_PatientHP, M_PatientPhone, M_PatientEmail, M_PatientIDNumber, M_PatientNote, M_PatientNIK, M_PatientJabatan, M_PatientKedudukan, M_PatientPJ, M_PatientLocation, M_PatientNIP, M_PatientJob, M_PatientPosisi, M_PatientDivisi, M_PatientDepartement, M_PatientCreatedUserID, M_PatientCreated ) VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() )"; $query = $this->db_onedev->query($sql, [ $data["M_PatientID"], $data["M_PatientNoReg"], $data["M_PatientPrefix"], $data["M_PatientName"], strtolower($data["M_PatientGender"]) == 'male' ? 1 : 3, $data["M_PatientSuffix"], strtolower($data["M_PatientGender"]) == 'male' ? 1 : 2, $data["M_PatientPOB"], $data["M_PatientDOB"], $data["M_PatientReligionCode"], $data["M_PatientReligionSystem"], $data["M_PatientBloodTypeCode"], $data["M_PatientBloodTypeSystem"], $data["M_PatientBloodRhCode"], $data["M_PatientBloodRhSystem"], $data["M_PatientEducationCode"], $data["M_PatientEducationSystem"], $data["M_PatientCitizenship"], $data["M_PatientEtnicCode"], $data["M_PatientEtnicSystem"], $data["M_PatientIdentifierCode"], $data["M_PatientIdentifierSystem"], $data["M_PatientIdentifierValue"], $data["M_PatientHP"], $data["M_PatientPhone"], $data["M_PatientEmail"], $data["M_PatientIDNumber"], $data["M_PatientNote"], $data["M_PatientNIK"], $data["M_PatientJabatan"], $data["M_PatientKedudukan"], $data["M_PatientPJ"], $data["M_PatientLocation"], $data["M_PatientNIP"], $data["M_PatientJob"], $data["M_PatientPosisi"], $data["M_PatientDivisi"], $data["M_PatientDepartement"], 555 ]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data pasien"; $this->insert_error('get_patient:save_patient', $this->db_onedev->last_query(), json_encode($data), $result["message"]); return $result; } $new_patient_id = $this->db_onedev->insert_id(); $sql = "INSERT INTO m_patientaddress( M_PatientAddressM_PatientID, M_PatientAddressNote, M_PatientAddressDescription, M_PatientAddressRegionalCd, M_PatientAddressLocation, M_PatientAddressCity, M_PatientAddressRT, M_PatientAddressRW, M_PatientAddressVillage, M_PatientAddressDistrict, M_PatientAddressState, M_PatientAddressCountry, M_PatientAddressCountryCode, M_PatientAddressCreatedUserID, M_PatientAddressCreated ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() )"; $query = $this->db_onedev->query($sql, [ $new_patient_id, 'Utama', $data["M_PatientAddress"]?$data["M_PatientAddress"]:'', $data["M_PatientAddressRegionalCd"]?$data["M_PatientAddressRegionalCd"]:'', '', $data["M_PatientAddressCity"]?$data["M_PatientAddressCity"]:'', $data["M_PatientAddressRT"]?$data["M_PatientAddressRT"]:'', $data["M_PatientAddressRW"]?$data["M_PatientAddressRW"]:'', $data["M_PatientAddressVillage"]?$data["M_PatientAddressVillage"]:'', $data["M_PatientAddressDistrict"]?$data["M_PatientAddressDistrict"]:'', $data["M_PatientAddressState"]?$data["M_PatientAddressState"]:'', $data["M_PatientAddressCountry"]?$data["M_PatientAddressCountry"]:'', $data["M_PatientAddressCountry"] == 'Indonesia'?'ID':'', 555 ]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data alamat pasien"; $this->insert_error('get_patient:save_patient_address', $this->db_onedev->last_query(), json_encode($data), $result["message"]); return $result; } }else{ $new_patient_id = $patient["M_PatientID"]; } $this->insert_error('get_patient:get_patient', '', json_encode($patient), 'berhasil get patient'); $patient["New_PatientID"] = $new_patient_id; $result["data"] = $patient; return $result; } function check_test($data){ $result = [ "status" => "OK", "message" => "Berhasil mendapatkan data test", "data" => null ]; $test_fail = []; $tests = $data["tests"]; foreach($tests as $test){ $test_id = $test["M_TestID"]; $sql = "SELECT * FROM t_test JOIN t_sampletype ON T_SampleTypeID = T_TestT_SampleTypeID JOIN t_bahan ON T_BahanID = T_SampleT_BahanID WHERE T_TestID = ? AND T_TestIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$test_id]); if(!$query) { $test_fail[] = $test; } } if(count($test_fail) > 0) { $result["status"] = "ERR"; $string_test_fail = join(',',array_column($test_fail,'T_TestName')); $result["message"] = "Test $string_test_fail tidak ditemukan"; $result["data"] = $test_fail; $this->insert_error('check_test:get_test', '', json_encode($test_fail), $result["message"]); } return $result; } function save_order_header($data){ $return = [ "status" => "OK", "message" => "", "data" => [] ]; //get no trans $no_trans = $data["T_OrderHeaderLabNumber"]; $sql = "SELECT * FROM log_download WHERE Log_DownloadReffID = ? AND Log_DownloadLabNumber = ? AND Log_DownloadStatus = 'D' ORDER BY Log_DownloadID DESC LIMIT 1"; $query = $this->db_log->query($sql, [$data["T_OrderHeaderID"],$no_trans]); if(!$query) { $return["status"] = "ERR"; $return["message"] = "Gagal mendapatkan data log download"; $this->insert_error('save_order_header:get_log_download', $this->db_log->last_query(), json_encode($data), $return["message"]); return $return; } $log_download = $query->row_array(); if($log_download && intval($log_download["Log_DownloadT_OrderHeaderID"]) > 0) { $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderID = ?"; $query = $this->db_onedev->query($sql, [$log_download["Log_DownloadT_OrderHeaderID"]]); if(!$query) { $return["status"] = "ERR"; $return["message"] = "Gagal mendapatkan data order header exist"; $this->insert_error('save_order_header:get_order_header_exist', $this->db_onedev->last_query(), json_encode($data), $return["message"]); return $return; } $order_header = $query->row_array(); if($order_header) { $return["status"] = "OK"; $return["message"] = "Order header sudah ada"; $return["data"] = $order_header; return $return; } } $header = $data; $age = $this->generate_age($header['M_PatientDOB'],$header['T_OrderHeaderDate']); //insert header $sql_header = "INSERT INTO t_orderheader ( T_OrderHeaderDate, T_OrderHeaderLabNumber, T_OrderHeaderM_PatientID, T_OrderHeaderM_CompanyID, T_OrderHeaderCorporateID, T_OrderHeaderM_MouID, T_OrderHeaderM_PatientAge, T_OrderHeaderSenderM_DoctorID, T_OrderHeaderSenderM_DoctorAddressID, T_OrderHeaderPjM_DoctorID, T_OrderHeaderPj2M_DoctorID, T_OrderHeaderM_LangID, T_OrderHeaderLangIsSI, T_OrderHeaderIsCito, T_OrderHeaderNat_CitoID, T_OrderHeaderDiagnose, T_OrderHeaderFoNote, T_OrderHeaderFoNoteM_UserID, T_OrderHeaderCreatedUserID, T_OrderHeaderCreated ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW() ) "; $prm_header = [ $header['T_OrderHeaderDate'], $no_trans, $header['T_OrderHeaderM_PatientID'], $header['T_OrderHeaderM_CompanyID'], $header['CorporateID'], $header['T_OrderHeaderM_MouID'], $age, $header['T_OrderHeaderSenderM_DoctorID'], $header['T_OrderHeaderSenderM_DoctorAddressID'], $header['T_OrderHeaderPjM_DoctorID'], 0, 1, 'N', 'N', 0, $header['T_OrderHeaderDiagnose'], $header['T_OrderHeaderFoNote'], 0, 555 ]; $this->insert_error('save_order_header:sql_header', $sql_header, json_encode($prm_header), 'insert header debug'); $query_header = $this->db_onedev->query($sql_header, $prm_header); //this->insert_error('save_order_header:save_order_header', $this->db_onedev->last_query(), json_encode($prm_header), 'insert header'); if (!$query_header) { $return["status"] = "ERR"; $return["message"] = "Gagal menyimpan data order header"; $this->insert_error('save_order_header:save_order_header', $this->db_onedev->last_query(), json_encode($data), $return["message"]); return $return; } //get header id $header_id = $this->db_onedev->insert_id(); $sql = "INSERT INTO t_orderheaderaddon ( T_OrderHeaderAddOnT_OrderHeaderID, T_OrderHeaderAddOnSecondM_LangID, T_OrderHeaderAddOnSecondLangIsSI, T_OrderHeaderAddOnAliasDoctorName, T_OrderHeaderAddOnAliasDoctorAddress, T_OrderHeaderAddOnOnlySampleTime, T_OrderHeaderAddOnPatientMcu, T_OrderHeaderAddOnCreated, T_OrderHeaderAddOnCreatedUserID ) VALUES( ?,?,?,?,?,?,?,NOW(),? )"; $prm_addon = [ $header_id, 2, 'N', '', '', '', 'Y', 555 ]; $query_addon = $this->db_onedev->query($sql, $prm_addon); if (!$query_addon) { $return["status"] = "ERR"; $return["message"] = "Gagal menyimpan data order header addon"; $this->insert_error('save_order_header:save_order_header_addon', $this->db_onedev->last_query(), json_encode($data), $return["message"]); return $return; } $sqlheaderlang = "INSERT INTO t_orderheaderlang (T_OrderHeaderLangT_OrderHeaderID, T_OrderHeaderLangM_LangID, T_OrderHeaderLangCreated, T_OrderHeaderLangCreatedUserID, T_OrderHeaderLangLastUpdated, T_OrderHeaderLangLastUpdatedUserID) VALUES(?,?,NOW(),?,NOW(),?)"; $prm_header_lang = [ $header_id, 1, 555, 555 ]; $query_header_lang = $this->db_onedev->query($sqlheaderlang, $prm_header_lang); if (!$query_header_lang) { $return["status"] = "ERR"; $return["message"] = "Gagal menyimpan data order header lang"; $this->insert_error('save_order_header:save_order_header_lang', $this->db_onedev->last_query(), json_encode($data), $return["message"]); return $return; } $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderID = ? AND T_OrderHeaderIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$header_id]); if(!$query) { $return["status"] = "ERR"; $return["message"] = "Gagal mendapatkan data order header"; $this->insert_error('save_order_header:get_order_header', $this->db_onedev->last_query(), json_encode($data), $return["message"]); return $return; } $order_header = $query->row_array(); $return["status"] = "OK"; $return["message"] = "Berhasil menyimpan data order header"; $return["data"] = $order_header; //$this->insert_error('save_order_header:get_order_header', '', json_encode($order_header), 'berhasil order header'); return $return; } function generate_age($dob, $xdate){ // Pastikan format tanggal yang valid if (empty($dob) || empty($xdate)) { return "0 tahun 0 bulan 0 hari"; } try { // Konversi string tanggal ke DateTime object $birth_date = new DateTime($dob); $reference_date = new DateTime($xdate); // Pastikan tanggal lahir tidak lebih besar dari tanggal referensi if ($birth_date > $reference_date) { return "0 tahun 0 bulan 0 hari"; } // Hitung selisih tanggal $interval = $birth_date->diff($reference_date); // Format output $years = $interval->y; $months = $interval->m; $days = $interval->d; $age_string = ""; // Tambahkan tahun jika ada if ($years > 0) { $age_string .= $years . " tahun"; } // Tambahkan bulan jika ada if ($months > 0) { if (!empty($age_string)) $age_string .= " "; $age_string .= $months . " bulan"; } // Tambahkan hari jika ada if ($days > 0) { if (!empty($age_string)) $age_string .= " "; $age_string .= $days . " hari"; } // Jika semua nilai 0 (bayi baru lahir) if (empty($age_string)) { $age_string = "0 hari"; } return $age_string; } catch (Exception $e) { // Jika terjadi error dalam parsing tanggal return "Format tanggal tidak valid"; } } function save_order_promise($header_id,$order,$userid=555){ $result = [ "status" => "OK", "message" => "Berhasil menyimpan data promise", "data" => [] ]; $promise_date = date('Y-m-d H:i:s',strtotime($order["T_OrderHeaderDate"] . ' +1 day')); $sql = "INSERT INTO t_orderpromise( T_OrderPromiseT_OrderHeaderID, T_OrderPromiseDateTime, T_OrderPromiseCreatedUserID, T_OrderPromiseCreated ) VALUES (?,?,?,NOW())"; $query = $this->db_onedev->query($sql, [$header_id,$promise_date,$userid]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data promise"; $this->insert_error('save_order_promise:save_order_promise', $this->db_onedev->last_query(), json_encode($order), $result["message"]); } $promise_id = $this->db_onedev->insert_id(); $result["data"] = array('T_OrderPromiseID' => $promise_id); return $result; } function save_detail($tests,$header_id,$promise_id,$userid=555){ $result = [ "status" => "OK", "message" => "Berhasil menyimpan data detail", "data" => [] ]; if(count($tests) == 0) { $result["status"] = "ERR"; $result["message"] = "Tidak ada data test"; return $result; } foreach($tests as $test) { $old_id = $test["T_OrderDetailID"]; $sql = "SELECT * FROM t_orderdetail WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailT_OrderDetailOldID = ? AND T_OrderDetailIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$header_id,$old_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal check exist detail"; $this->insert_error('save_detail:get_detail', $this->db_onedev->last_query(), json_encode($test), $result["message"]); return $result; } $detail = $query->result_array(); if(count($detail) == 0) { $sql = "INSERT INTO t_orderdetail( T_OrderDetailT_OrderDetailOldID, T_OrderDetailT_OrderHeaderID, T_OrderDetailT_TestID, T_OrderDetailT_TestCode, T_OrderDetailT_TestSasCode, T_OrderDetailT_TestName, T_OrderDetailT_TestIsResult, T_OrderDetailT_TestIsPanel, T_OrderDetailT_TestIsPanelChildren, T_OrderDetailT_TestIsPanelChildrenPrintNota, T_OrderDetailT_TestIsPrice, T_OrderDetailNat_UnitID, T_OrderDetailNat_UnitName, T_OrderDetailT_OrderPromiseID, T_OrderDetailCreatedUserID, T_OrderDetailCreated ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())"; $params = [ $old_id, $header_id, $test["T_OrderDetailT_TestID"], $test["T_OrderDetailT_TestCode"], $test["T_OrderDetailT_TestSasCode"], $test["T_OrderDetailT_TestName"], $test["T_OrderDetailT_TestIsResult"], $test["T_OrderDetailT_TestIsPanel"], $test["T_OrderDetailT_TestIsPanelChildren"], $test["T_OrderDetailT_TestIsPanelChildrenPrintNota"], $test["T_OrderDetailT_TestIsPrice"], $test["T_OrderDetailNat_UnitID"], $test["T_OrderDetailNat_UnitName"], $promise_id, $userid ]; $query = $this->db_onedev->query($sql, $params); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data detail baru"; $this->insert_error('save_detail:save_detail', $this->db_onedev->last_query(), json_encode($params), $result["message"]); return $result; } } } return $result; } function save_sample($samples,$header_id,$userid=555){ $result = [ "status" => "OK", "message" => "Berhasil menyimpan data sample", "data" => [] ]; if(count($samples) == 0) { $result["status"] = "ERR"; $result["message"] = "Tidak ada data sample"; return $result; } foreach($samples as $sample) { $old_id = $sample["T_OrderSampleID"]; $sql = "SELECT * FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ? AND T_OrderSampleOldID = ? AND T_OrderSampleIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$header_id,$old_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal check exist sample"; $this->insert_error('save_sample:get_sample', $this->db_onedev->last_query(), json_encode($sample), $result["message"]); return $result; } $sample_exist = $query->result_array(); if(count($sample_exist) == 0) { $sql = "INSERT INTO t_ordersample( T_OrderSampleOldID, T_OrderSampleT_OrderHeaderID, T_OrderSampleT_SampleTypeID, T_OrderSampleT_BarcodeLabID, T_OrderSampleT_SampleStationID, T_OrderSampleBarcode, T_OrderSampleSampling, T_OrderSampleSamplingDate, T_OrderSampleSamplingTime, T_OrderSampleSamplingUserID, T_OrderSampleReceive, T_OrderSampleReceiveDate, T_OrderSampleReceiveTime, T_OrderSampleReceiveUserID, T_OrderSampleVerification, T_OrderSampleVerificationDate, T_OrderSampleVerificationTime, T_OrderSampleVerificationUserID, T_OrderSampleHandling, T_OrderSampleHandlingDate, T_OrderSampleHandlingTime, T_OrderSampleHandlingUserID, T_OrderSampleSendHandling, T_OrderSampleSendHandlingDate, T_OrderSampleSendHandlingTime, T_OrderSampleSendHandlingUserID, T_OrderSampleReceiveHandling, T_OrderSampleReceiveHandlingDate, T_OrderSampleReceiveHandlingTime, T_OrderSampleReceiveHandlingUserID, T_OrderSampleProcessing, T_OrderSampleReadyToProcessDateTime, T_OrderSampleProcessingDate, T_OrderSampleProcessingTime, T_OrderSampleProcessingUserID, T_OrderSampleCreatedUserID, T_OrderSampleCreated ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),CURDATE(),CURTIME(),?,?,NOW())"; $query = $this->db_onedev->query($sql, [ $old_id, $header_id, $sample["T_OrderSampleT_SampleTypeID"], $sample["T_OrderSampleT_BarcodeLabID"], $sample["T_OrderSampleT_SampleStationID"], $sample["T_OrderSampleBarcode"], $sample["T_OrderSampleSampling"], $sample["T_OrderSampleSamplingDate"], $sample["T_OrderSampleSamplingTime"], $userid, $sample["T_OrderSampleReceive"], $sample["T_OrderSampleReceiveDate"], $sample["T_OrderSampleReceiveTime"], $userid, $sample["T_OrderSampleReceive"], $sample["T_OrderSampleReceiveDate"], $sample["T_OrderSampleReceiveTime"], $userid, $sample["T_OrderSampleReceive"], $sample["T_OrderSampleReceiveDate"], $sample["T_OrderSampleReceiveTime"], $userid, $sample["T_OrderSampleReceive"], $sample["T_OrderSampleReceiveDate"], $sample["T_OrderSampleReceiveTime"], $userid, $sample["T_OrderSampleReceive"], $sample["T_OrderSampleReceiveDate"], $sample["T_OrderSampleReceiveTime"], $userid, 'Y', $userid, $userid ]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data sample baru"; $this->insert_error('save_sample:save_sample', $this->db_onedev->last_query(), json_encode($sample), $result["message"]); return $result; } $sql = "CALL `sp_sampling_set_normal`(?,?)"; $r_schedule_set = $this->db_onedev->query($sql,[$header_id,$sample["T_OrderSampleT_SampleTypeID"]]); $this->clean_mysqli_connection($this->db_onedev->conn_id); } } return $result; } function save_order_promises($order_header_id,$order_promises){ $result = [ "status" => "OK", "message" => "Berhasil menyimpan data promise", "data" => [] ]; /* CREATE TABLE `t_orderpromises` ( `T_OrderPromisesID` int(11) NOT NULL AUTO_INCREMENT, `T_OrderPromisesT_OrderHeaderID` int(11) DEFAULT 0, `T_OrderPromisesT_OrderHeaderOldID` int(11) DEFAULT 0, `T_OrderPromisesDateTime` datetime DEFAULT '0000-00-00 00:00:00', `T_OrderPromisesTestIDs` varchar(500) DEFAULT '', `T_OrderPromisesM_ScheduleID` int(11) DEFAULT 0, `T_OrderPromisesM_ScheduleFlagAtTime` char(1) DEFAULT NULL, `T_OrderPromisesM_ScheduleAtTime` time DEFAULT NULL, `T_OrderPromisesTAT_Menit` int(11) DEFAULT NULL, `T_OrderPromisesM_ScheduleStartHourMinute` time DEFAULT NULL, `T_OrderPromisesM_ScheduleEndHourMinute` time DEFAULT NULL, `T_OrderPromisesCreated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `T_OrderPromisesCreatedUserID` int(11) NOT NULL DEFAULT 0, `T_OrderPromisesLastUpdated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `T_OrderPromisesLastUpdatedUserID` int(11) NOT NULL DEFAULT 0, `T_OrderPromisesIsActive` char(1) NOT NULL DEFAULT 'Y', PRIMARY KEY (`T_OrderPromisesID`), KEY `T_OrderPromisesT_OrderHeaderOldID` (`T_OrderPromisesT_OrderHeaderOldID`), KEY `T_OrderPromisesT_OrderHeaderID` (`T_OrderPromisesT_OrderHeaderID`), KEY `T_OrderPromisesCreatedUserID` (`T_OrderPromisesCreatedUserID`), KEY `T_OrderPromisesLastUpdatedUserID` (`T_OrderPromisesLastUpdatedUserID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; */ if(count($order_promises) > 0){ $sql = "UPDATE t_orderpromises SET T_OrderPromisesIsActive = 'X' WHERE T_OrderPromisesT_OrderHeaderID = ? AND T_OrderPromisesIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$order_header_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal update data promise"; $this->insert_error('save_order_promises:update_order_promises', $this->db_onedev->last_query(), json_encode($order_promises), $result["message"]); return $result; } foreach($order_promises as $order_promise){ $sql = "SELECT * FROM t_orderpromises WHERE T_OrderPromisesT_OrderHeaderID = ? AND T_OrderPromisesIsActive = 'X' AND T_OrderPromisesID = ? LIMIT 1"; $query = $this->db_onedev->query($sql, [$order_header_id,$order_promise["T_OrderPromisesID"]]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal check exist promise"; $this->insert_error('save_order_promises:get_promise', $this->db_onedev->last_query(), json_encode($order_promise), $result["message"]); return $result; } $dt_exist = $query->result_array(); if(count($dt_exist) > 0) { $sql = "UPDATE t_orderpromises SET T_OrderPromisesIsActive = 'Y' WHERE T_OrderPromisesID = ? AND T_OrderPromisesIsActive = 'X' AND T_OrderPromisesT_OrderHeaderID = ?"; $query = $this->db_onedev->query($sql, [$order_promise["T_OrderPromisesID"],$order_header_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal update data promise"; $this->insert_error('save_order_promises:update_order_promises', $this->db_onedev->last_query(), json_encode($order_promise), $result["message"]); return $result; } }else{ $sql = "INSERT INTO t_orderpromises( T_OrderPromisesID, T_OrderPromisesT_OrderHeaderID, T_OrderPromisesT_OrderHeaderOldID, T_OrderPromisesDateTime, T_OrderPromisesTestIDs, T_OrderPromisesM_ScheduleID, T_OrderPromisesM_ScheduleFlagAtTime, T_OrderPromisesM_ScheduleAtTime, T_OrderPromisesTAT_Menit, T_OrderPromisesM_ScheduleStartHourMinute, T_OrderPromisesM_ScheduleEndHourMinute, T_OrderPromisesCreatedUserID, T_OrderPromisesCreated ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,NOW())"; $query = $this->db_onedev->query($sql, [ $order_promise["T_OrderPromisesID"], $order_header_id, $order_promise["T_OrderPromisesT_OrderHeaderID"], $order_promise["T_OrderPromisesDateTime"], $order_promise["T_OrderPromisesTestIDs"], $order_promise["T_OrderPromisesM_ScheduleID"], $order_promise["T_OrderPromisesM_ScheduleFlagAtTime"], $order_promise["T_OrderPromisesM_ScheduleAtTime"], $order_promise["T_OrderPromisesTAT_Menit"], $order_promise["T_OrderPromisesM_ScheduleStartHourMinute"], $order_promise["T_OrderPromisesM_ScheduleEndHourMinute"], $order_promise["T_OrderPromisesCreatedUserID"]]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data promise"; $this->insert_error('save_order_promises:save_order_promises', $this->db_onedev->last_query(), json_encode($order_promises), $result["message"]); continue; } } } $sql = "UPDATE t_orderpromises SET T_OrderPromisesIsActive = 'N' WHERE T_OrderPromisesT_OrderHeaderID = ? AND T_OrderPromisesIsActive = 'X'"; $query = $this->db_onedev->query($sql, [$order_header_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal update data promise"; $this->insert_error('save_order_promises:update_order_promises', $this->db_onedev->last_query(), json_encode($order_promises), $result["message"]); return $result; } } return $result; } function save_order_detail_promises($header_id,$order_detail_promises){ $result = [ "status" => "OK", "message" => "Berhasil menyimpan data detail promise", "data" => [] ]; /* CREATE TABLE `t_orderdetail_promise` ( `T_OrderDetailPromiseID` int(11) NOT NULL AUTO_INCREMENT, `T_OrderDetailPromiseOldID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseT_OrderHeaderID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseT_OrderHeaderOldID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseT_OrderDetailID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseT_OrderDetailOldID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseT_OrderPromiseID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseT_OrderPromiseOldID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseIsActive` char(1) NOT NULL DEFAULT 'Y', `T_OrderDetailPromiseCreated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `T_OrderDetailPromiseCreatedUserID` int(11) NOT NULL DEFAULT 0, `T_OrderDetailPromiseDeleted` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `T_OrderDetailPromiseDeletedUserID` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`T_OrderDetailPromiseID`), KEY `T_OrderDetailPromiseT_OrderPromiseID` (`T_OrderDetailPromiseT_OrderPromiseID`), KEY `T_OrderDetailPromiseCreatedUserID` (`T_OrderDetailPromiseCreatedUserID`), KEY `T_OrderDetailPromiseDeletedUserID` (`T_OrderDetailPromiseDeletedUserID`), KEY `T_OrderDetailPromiseT_OrderPromiseOldID` (`T_OrderDetailPromiseT_OrderPromiseOldID`), KEY `T_OrderDetailPromiseOldID` (`T_OrderDetailPromiseOldID`), KEY `T_OrderDetailPromiseT_OrderHeaderID` (`T_OrderDetailPromiseT_OrderHeaderID`), KEY `T_OrderDetailPromiseT_OrderHeaderOldID` (`T_OrderDetailPromiseT_OrderHeaderOldID`), KEY `T_OrderDetailPromiseT_OrderDetailID` (`T_OrderDetailPromiseT_OrderDetailID`), KEY `T_OrderDetailPromiseT_OrderDetailOldID` (`T_OrderDetailPromiseT_OrderDetailOldID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; */ if(count($order_detail_promises) > 0){ $sql = "UPDATE t_orderdetail_promise SET T_OrderDetailPromiseIsActive = 'X' WHERE T_OrderDetailPromiseT_OrderHeaderID = ? AND T_OrderDetailPromiseIsActive = 'Y'"; $query = $this->db_onedev->query($sql, [$header_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal update data detail promise"; $this->insert_error('save_order_detail_promises:update_order_detail_promises', $this->db_onedev->last_query(), json_encode($order_detail_promises), $result["message"]); return $result; } foreach($order_detail_promises as $order_detail_promise){ $sql = "SELECT * FROM t_orderdetail WHERE T_OrderDetailT_OrderDetailOldID = ? AND T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, [$order_detail_promise["T_OrderDetailPromiseT_OrderDetailID"],$header_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal check exist detail promise"; $this->insert_error('save_order_detail_promises:get_detail_promise', $this->db_onedev->last_query(), json_encode($order_detail_promise), $result["message"]); return $result; } $data_new_detail = $query->result_array(); //$this->insert_error('save_order_detail_promises:get_detail_promise', $this->db_onedev->last_query(), json_encode($order_detail_promise), json_encode($data_new_detail)); /*if(count($data_new_detail) == 0) { $result["status"] = "ERR"; $result["message"] = "Detail promise tidak ditemukan"; $this->insert_error('save_order_detail_promises:get_detail_promise', $this->db_onedev->last_query(), json_encode($order_detail_promise), $result["message"]); continue; }*/ if(count($data_new_detail) > 0) { $data_new_detail = $data_new_detail[0]; $t_orderdetailID = $data_new_detail["T_OrderDetailID"]; } else { $t_orderdetailID = 0; } if( $t_orderdetailID > 0) { $sql = "SELECT * FROM t_orderdetail_promise WHERE T_OrderDetailPromiseT_OrderHeaderID = ? AND T_OrderDetailPromiseIsActive = 'X' AND T_OrderDetailPromiseID = ? AND T_OrderDetailPromiseT_OrderDetailID = ? LIMIT 1"; $query = $this->db_onedev->query($sql, [ $header_id, $order_detail_promise["T_OrderDetailPromiseID"], $t_orderdetailID ]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal check exist detail promise"; $this->insert_error('save_order_detail_promises:get_detail_promise', $this->db_onedev->last_query(), json_encode($order_detail_promise), $result["message"]); return $result; } $dt_exist = $query->result_array(); if(count($dt_exist) > 0){ $sql = "UPDATE t_orderdetail_promise SET T_OrderDetailPromiseIsActive = 'Y' WHERE T_OrderDetailPromiseID = ? AND T_OrderDetailPromiseIsActive = 'X' AND T_OrderDetailPromiseT_OrderHeaderID = ? AND T_OrderDetailPromiseT_OrderDetailID = ?"; $query = $this->db_onedev->query($sql, [$order_detail_promise["T_OrderDetailPromiseID"],$header_id,$t_orderdetailID]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal update data detail promise"; $this->insert_error('save_order_detail_promises:update_order_detail_promises', $this->db_onedev->last_query(), json_encode($order_detail_promise), $result["message"]); return $result; } }else{ $sql = "INSERT INTO t_orderdetail_promise( T_OrderDetailPromiseID, T_OrderDetailPromiseOldID, T_OrderDetailPromiseT_OrderHeaderID, T_OrderDetailPromiseT_OrderHeaderOldID, T_OrderDetailPromiseT_OrderDetailID, T_OrderDetailPromiseT_OrderDetailOldID, T_OrderDetailPromiseT_OrderPromiseID, T_OrderDetailPromiseT_OrderPromiseOldID, T_OrderDetailPromiseCreatedUserID, T_OrderDetailPromiseCreated ) VALUES (?,?,?,?,?,?,?,?,?,NOW())"; $query = $this->db_onedev->query($sql, [ $order_detail_promise["T_OrderDetailPromiseID"], $order_detail_promise["T_OrderDetailPromiseID"], $header_id, $order_detail_promise["T_OrderDetailPromiseT_OrderHeaderID"], $t_orderdetailID, $order_detail_promise["T_OrderDetailPromiseT_OrderDetailID"], $order_detail_promise["T_OrderDetailPromiseT_OrderPromiseID"], $order_detail_promise["T_OrderDetailPromiseT_OrderPromiseID"], $order_detail_promise["T_OrderDetailPromiseCreatedUserID"]]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal menyimpan data detail promise"; $this->insert_error('save_order_detail_promises:save_order_detail_promises', $this->db_onedev->last_query(), json_encode($order_detail_promise), $result["message"]); return $result; } } } } $sql = "UPDATE t_orderdetail_promise SET T_OrderDetailPromiseIsActive = 'N' WHERE T_OrderDetailPromiseT_OrderHeaderID = ? AND T_OrderDetailPromiseIsActive = 'X'"; $query = $this->db_onedev->query($sql, [$header_id]); if(!$query) { $result["status"] = "ERR"; $result["message"] = "Gagal update data detail promise"; $this->insert_error('save_order_detail_promises:update_order_detail_promises', $this->db_onedev->last_query(), json_encode($order_detail_promises), $result["message"]); return $result; } } return $result; } function insert_error($fn,$query,$data,$message) { $sql = "INSERT INTO log_error_download( Log_ErrorDownloadFn, Log_ErrorDownloadQuery, Log_ErrorDownloadData, Log_ErrorDownloadMessage, Log_ErrorDownloadCreated ) VALUES (?,?,?,?,NOW())"; $query = $this->db_log->query($sql, [$fn,$query,$data,$message]); if(!$query) { return false; } return true; } }