db_smartone = $this->load->database("onedev", true); $this->load->library("Reporturl"); } public function search() { $prm = $this->sys_input; $max_rst = 10; $deliverytype_id = $prm["filter_delivery"]; //echo $deliverytype_id; $filter_deliverytype = ""; if ($deliverytype_id != '0') $filter_deliverytype = " AND T_OrderDeliveryM_DeliveryTypeID = {$deliverytype_id}"; //echo $filter_deliverytype; $sdate = $prm["start_date"]; $search = '%' . $prm["search"] . '%'; $page = $prm['page']; $current_page = isset($prm['current_page']) ? $prm['current_page'] : 1; $filter_search = ''; if ($prm['search'] != '') { $filter_search = "WHERE ( M_PatientName LIKE '{$search}' or T_OrderHeaderLabNumber like '{$search}' or T_OrderHeaderLabNumberExt like '{$search}' )"; } $number_limit = 10; $number_offset = ($current_page - 1) * $number_limit; if ($page == null) $page = 1; $offset = ($page - 1) * $max_rst; // OVERRIDE $q_company = ""; $company_id = 0; if (isset($prm["company_id"])) $company_id = $prm["company_id"]; if ($company_id > 0) { if ($filter_search == '') $filter_search .= 'WHERE '; if ($filter_search != '' && $filter_search != 'WHERE ') $filter_search .= ' AND '; if ($prm["exclude"]) $filter_search .= " T_OrderHeaderM_CompanyID <> {$company_id}"; if (!$prm["exclude"]) { $filter_search .= " T_OrderHeaderM_CompanyID = {$company_id}"; } } if (isset($prm["mou_id"])) $mou_id = $prm["mou_id"]; if ($mou_id > 0) { if ($filter_search == '') $filter_search .= 'WHERE '; if ($filter_search != '' && $filter_search != 'WHERE ') $filter_search .= ' AND '; $filter_search .= " T_OrderHeaderM_MouID = {$mou_id}"; } $total_day = 0; $total_susulan = 0; // QUERY TOTAL $sql = " SELECT COUNT(*) total FROM ( SELECT * FROM ( SELECT T_OrderHeaderID, T_OrderHeaderM_CompanyID, T_OrderHeaderM_MouID,T_OrderPromiseID, T_OrderHeaderLabNumber, T_OrderHeaderDate, DATE_FORMAT(T_OrderHeaderDate,'%d.%m.%Y %H:%i') as order_date, T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote, M_PatientName, T_OrderHeaderIsCito, '' as deliveries, T_OrderPromiseDateTime, '' is_history, if(T_OrderHeaderAddOnLabNumberOrigin is null, T_OrderHeaderLabNumberExt, T_OrderHeaderAddOnLabNumberOrigin) T_OrderHeaderLabNumberExt, T_OrderHeaderAddOnVerificationDone, T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint as ready_print, T_OrderHeaderAddonReadyPrintDate FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' WHERE (DATE(T_OrderPromiseDateTime) = '{$sdate}') AND T_OrderHeaderIsActive = 'Y' GROUP BY T_OrderHeaderID,DATE(T_OrderPromiseDateTime) ) x $filter_search ) xx "; //echo $sql; $query = $this->db_smartone->query($sql); $tot_count = 0; $tot_page = 0; if ($query) { $tot_count = $query->result_array()[0]["total"]; $tot_page = ceil($tot_count / $number_limit); } else { $this->sys_error_db("m_doctor count", $this->db_smartone); exit; } $sql = "SELECT * FROM ( SELECT T_OrderHeaderID, T_OrderHeaderM_CompanyID,T_OrderHeaderM_MouID, T_OrderPromiseID, T_OrderHeaderLabNumber, T_OrderHeaderDate, DATE_FORMAT(T_OrderHeaderDate,'%d.%m.%Y %H:%i') as order_date, M_SexName, M_TitleName, CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, M_PatientName, T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote, T_OrderHeaderIsCito, '' as deliveries, T_OrderPromiseDateTime, '' is_history, if(T_OrderHeaderAddOnLabNumberOrigin is null, T_OrderHeaderLabNumberExt, T_OrderHeaderAddOnLabNumberOrigin) T_OrderHeaderLabNumberExt, T_OrderHeaderAddOnVerificationDone, T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint as ready_print, 0 as count_print, T_OrderHeaderAddonReadyPrintDate, GROUP_CONCAT(DISTINCT DATE_FORMAT(T_OrderPromiseDateTime,'%d.%m.%Y %H:%i') separator ', ') as janji_manis FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_title ON M_PatientM_TitleID = M_TitleID JOIN m_sex ON M_PatientM_SexID = M_SexID JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderHeaderID = T_OrderPromiseT_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' WHERE (DATE(T_OrderPromiseDateTime) = '{$sdate}') AND T_OrderHeaderIsActive = 'Y' GROUP BY T_OrderHeaderID,DATE(T_OrderPromiseDateTime) ORDER BY T_OrderHeaderAddOnReadyPrint DESC, T_OrderHeaderID ASC ) x $filter_search limit $number_limit offset $number_offset "; $query = $this->db_smartone->query($sql); // echo $this->db_smartone->last_query(); if ($query) { $rows = $query->result_array(); foreach ($rows as $k => $v) { $rows[$k]['data'] = json_decode($v['data']); $rows[$k]['M_PatientName'] = stripslashes($rows[$k]['M_PatientName']); $sql = "SELECT MAX(T_OrderDetailPrintCount) as xcount FROM t_orderdetail JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' WHERE T_OrderDetailT_OrderHeaderID = {$v['T_OrderHeaderID']} AND T_OrderDetailT_TestIsResult = 'Y' AND T_OrderDetailIsActive = 'Y'"; $rows[$k]['count_print'] = $this->db_smartone->query($sql)->row()->xcount; } $result = array("total" => $tot_count, "total_page" => $tot_page, "total_day" => $total_day, "total_susulan" => $total_susulan, "cur_page" => $page, "records" => $rows, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query()); $this->sys_ok($result); } else { $this->sys_error_db("worklist rows", $this->db_smartone); exit; } } function get_deliverytype() { $sql = " SELECT '0' as id, 'x' as code,'Semua' as name UNION SELECT M_DeliveryTypeID as id, M_DeliveryTypeCode as code, M_DeliveryTypeName as name FROM m_deliverytype WHERE M_DeliveryTypeIsActive = 'Y'"; $rows = $this->db_smartone->query($sql)->result_array(); $result = array("total" => count($rows), "records" => $rows); $this->sys_ok($result); } function getdeliveries() { $prm = $this->sys_input; $ready_print = $prm['ready_print']; $rows = array(); // GET ORDER DATA $sql = "SELECT *, IFNULL(T_OrderHeaderAddOnValidationInternal,'') T_OrderHeaderAddOnValidationInternal, IFNULL(T_OrderHeaderAddOnAliasDoctorName,'') T_OrderHeaderAddOnAliasDoctorName, IFNULL(T_OrderHeaderAddOnAliasDoctorAddress,'') T_OrderHeaderAddOnAliasDoctorAddress, IFNULL(M_UserUsername,'') M_UserUsername FROM t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID LEFT JOIN m_user ON T_OrderHeaderAddonValidationInternalM_UserID = M_UserID WHERE T_OrderHeaderID = {$prm['id']}"; $row_data_order = $this->db_smartone->query($sql)->row(); $flag_show_alert_doctor = 'N'; if ($row_data_order) { if ($row_data_order->T_OrderHeaderAddOnAliasDoctorName != '' && trim($row_data_order->M_DoctorName) == '-' && strtoupper($row_data_order->M_CompanyName) != 'PASIEN MANDIRI' && strpos(strtoupper($row_data_order->M_CompanyName), 'PRAMITA') === false) $flag_show_alert_doctor = 'Y'; } $alias_doctor_name = $row_data_order->T_OrderHeaderAddOnAliasDoctorName; $alias_doctor_addr = $row_data_order->T_OrderHeaderAddOnAliasDoctorAddress; // GET NOTES $sql = "SELECT IFNULL(T_OrderHeaderFoNote,'') as fo_note, fn_getstaffname(T_OrderHeaderFoNoteM_UserID) as fo_note_user, IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, fn_getstaffname(T_OrderHeaderVerificationNoteM_UserID) as fo_ver_note_user, IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, fn_getstaffname(T_OrderHeaderSamplingNoteM_UserID) as sampling_note_user, IFNULL(T_OrderHeaderResultNote,'') as result_note, fn_getstaffname(T_OrderHeaderResultNoteM_UserID) as result_note_user, IFNULL(T_OrderHeaderAddOnValidationInternal,'') as validation_note, fn_getstaffname(T_OrderHeaderAddonValidationInternalM_UserID) as validation_note_user FROM t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' WHERE T_OrderHeaderID = {$prm['id']}"; $notes = $this->db_smartone->query($sql)->row_array(); // GET DELIVERIES $sql = "SELECT T_OrderDeliveryID as id, M_DeliveryTypeID as delivery_type_id, M_DeliveryTypeCode as code,M_DeliveryName as name, CASE WHEN M_DeliveryTypeCode = 'PICKUP' THEN 'account_circle' WHEN M_DeliveryTypeCode = 'ADDRESS' THEN 'local_shipping' WHEN M_DeliveryTypeCode = 'EMAIL' THEN 'email' END as icon, CASE WHEN M_DeliveryTypeCode = 'PICKUP' THEN 'red lighten-2' WHEN M_DeliveryTypeCode = 'ADDRESS' THEN 'brown lighten-2' WHEN M_DeliveryTypeCode = 'EMAIL' THEN 'pink lighten-2' WHEN M_DeliveryTypeCode = 'WHATSAPP' THEN 'teal lighten-2' WHEN M_DeliveryTypeCode = 'TELEGRAM' THEN 'blue lighten-2' END as color, T_OrderDeliveryDestination FROM t_orderdelivery JOIN m_delivery ON T_OrderDeliveryM_DeliveryID = M_DeliveryID JOIN m_deliverytype ON T_OrderDeliveryM_DeliveryTypeID = M_DeliveryTypeID WHERE T_OrderDeliveryT_OrderHeaderID = {$prm['id']} AND T_OrderDeliveryIsActive = 'Y'"; $rows['deliveries'] = $this->db_smartone->query($sql)->result_array(); // GET GROUPS $date_promise = date('Y-m-d', strtotime($prm['promise_date'])); $sql = "SELECT * FROM ( SELECT Group_ResultID as id, Group_ResultName as group_name, '' as rpt, '' as e_rpt, '' as rptqrcode, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'rpt' as type, T_OrderHeaderAddOnReadyPrint as ready_print, M_LangCode as lang FROM t_orderdetail JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseIsActive = 'Y' AND DATE(T_OrderPromiseDatetime) = '{$date_promise}' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' AND Group_ResultName <> 'Mikro' JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN m_lang ON T_OrderHeaderM_LangID = M_LangID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID UNION SELECT Group_ResultID as id, CONCAT(Group_ResultName,'_',M_LangCode) as group_name, '' as rpt, '' as e_rpt, '' as rptqrcode, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'rpt' as type, T_OrderHeaderAddOnReadyPrint as ready_print, M_LangCode as lang FROM t_orderdetail JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseIsActive = 'Y' AND DATE(T_OrderPromiseDatetime) = '{$date_promise}' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' AND Group_ResultName <> 'Mikro' JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN m_lang ON T_OrderHeaderAddOnSecondM_LangID = M_LangID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID UNION SELECT T_OrderDetailID as id, Group_ResultName as group_name, '' as rpt, '' as e_rpt, '' as rptqrcode, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'rpt' as type, T_OrderHeaderAddOnReadyPrint as ready_print, M_LangCode as lang FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseIsActive = 'Y' AND DATE(T_OrderPromiseDatetime) = '{$date_promise}' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' AND Group_ResultName = 'Mikro' JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN m_lang ON T_OrderHeaderM_LangID = M_LangID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY T_OrderDetailID UNION SELECT T_OrderDetailID as id, CONCAT(Group_ResultName,'_',M_LangCode) as group_name, '' as rpt, '' as e_rpt, '' as rptqrcode, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'rpt' as type, T_OrderHeaderAddOnReadyPrint as ready_print, M_LangCode as lang FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseIsActive = 'Y' AND DATE(T_OrderPromiseDatetime) = '{$date_promise}' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' AND Group_ResultName = 'Mikro' JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN m_lang ON T_OrderHeaderAddOnSecondM_LangID = M_LangID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY T_OrderDetailID UNION SELECT Group_ResultID as id, Group_ResultName as group_name, '' as rpt, '' as e_rpt, '' as rptqrcode, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'info' as type, T_OrderHeaderAddOnReadyPrint as ready_print, M_LangCode as lang FROM t_orderdetail JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseIsActive = 'Y' AND DATE(T_OrderPromiseDatetime) = '{$date_promise}' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'Y' AND ( Group_ResultName = 'Manthoux Test' OR Group_ResultName = 'Tensi' ) JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN m_lang ON T_OrderHeaderM_LangID = M_LangID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID UNION SELECT Group_ResultID as id, CONCAT(Group_ResultName,'_',M_LangCode) as group_name, '' as rpt, '' as e_rpt, '' as rptqrcode, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'info' as type, T_OrderHeaderAddOnReadyPrint as ready_print, M_LangCode as lang FROM t_orderdetail JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseIsActive = 'Y' AND DATE(T_OrderPromiseDatetime) = '{$date_promise}' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'Y' AND ( Group_ResultName = 'Manthoux Test' OR Group_ResultName = 'Tensi' ) JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN m_lang ON T_OrderHeaderAddOnSecondM_LangID = M_LangID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID UNION SELECT T_OrderDetailID as id, CONCAT(Group_ResultName,'_',M_LangCode) as group_name, '' as rpt, '' as e_rpt, '' as rptqrcode, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'rpt' as type, T_OrderHeaderAddOnReadyPrint as ready_print, M_LangCode as lang FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseIsActive = 'Y' AND DATE(T_OrderPromiseDatetime) = '{$date_promise}' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' AND Group_ResultName = 'Patologi Anatomi' JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID JOIN m_lang ON T_OrderHeaderAddOnSecondM_LangID = M_LangID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY T_OrderDetailID ) x ORDER BY type desc, id ASC"; $rows['groups'] = $this->db_smartone->query($sql)->result_array(); // PROCESS GROUPS - ASSIGN REPORT NAMES if ($rows['groups']) { $exist_lab = 'N'; foreach ($rows['groups'] as $kx => $vx) { if ($vx['group_name'] == 'LAB') $exist_lab = 'Y'; } foreach ($rows['groups'] as $k => $v) { $ready_print = $v['ready_print']; $gn = $v['group_name']; $report_codes = $this->get_report_codes_by_group($gn); if ($report_codes) { $rpt_code = $ready_print == 'Y' ? $report_codes['P'] : ($report_codes['NP'] ?? $report_codes['P']); $e_rpt_code = $ready_print == 'Y' ? ($report_codes['E'] ?? $report_codes['P']) : ($report_codes['NE'] ?? $report_codes['NP'] ?? $report_codes['E'] ?? $report_codes['P']); $rptq_code = $ready_print == 'Y' ? ($report_codes['Q'] ?? $report_codes['P']) : ($report_codes['NQ'] ?? $report_codes['NP'] ?? $report_codes['P']); $rpt = $this->get_report_name_from_code($rpt_code); $e_rpt = $this->get_report_name_from_code($e_rpt_code); $rptqrcode = $this->get_report_name_from_code($rptq_code); if (empty($rptqrcode)) $rptqrcode = $rpt; } else { $rpt_code = $e_rpt_code = ''; $rpt = $this->get_fallback_report($gn, 'P', $ready_print); $e_rpt = $this->get_fallback_report($gn, 'E', $ready_print); $rptqrcode = $this->get_fallback_report($gn, 'Q', $ready_print); if (empty($rptqrcode)) $rptqrcode = $rpt; } // LOGIC KHUSUS MIKRO if ($gn == 'Mikro') { $sql = "SELECT T_OrderDetailResult as result FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' AND Group_ResultName = 'Mikro' WHERE T_OrderDetailID = {$v['id']} AND T_OrderDetailIsActive = 'Y' LIMIT 1"; $xresult = $this->db_smartone->query($sql)->row()->result; if ($xresult != 'Terlampir') { $rpt_code = $ready_print == 'Y' ? 'LAB-RESULT-P-01' : 'LAB-RESULT-NP-01'; $e_rpt_code = $ready_print == 'Y' ? 'LAB-RESULT-P-02' : 'LAB-RESULT-NP-02'; $rpt = $this->get_report_name_from_code($rpt_code); $e_rpt = $this->get_report_name_from_code($e_rpt_code); } if ($xresult == 'Terlampir' && $exist_lab == 'N') { $rows['groups'][$k]['group_name'] = 'Lampiran Mikro'; $new_group = $rows['groups'][$k]; $new_group['group_name'] = 'Mikro'; $new_group['rpt_code'] = 'LAB-RESULT-P-01'; $new_group['e_rpt_code'] = 'LAB-RESULT-P-02'; $new_group['rpt'] = $this->get_report_name_from_code('LAB-RESULT-P-01'); $new_group['e_rpt'] = $this->get_report_name_from_code('LAB-RESULT-P-02'); $new_group['rptqrcode'] = $new_group['rpt']; array_push($rows['groups'], $new_group); } } $rows['groups'][$k]['rpt'] = $rpt; $rows['groups'][$k]['e_rpt'] = $e_rpt; $rows['groups'][$k]['rptqrcode'] = $rptqrcode; $rows['groups'][$k]['rpt_code'] = $rpt_code; $rows['groups'][$k]['e_rpt_code'] = $e_rpt_code; } $rows['groups'][0]['selected'] = 'Y'; } // GET PAYMENT STATUS $sql = "SELECT IF(M_MouIsBill = 'Y','Y',Last_StatusPaymentIsLunas) as xpayment FROM last_statuspayment join t_orderheader ON Last_StatusPaymentT_OrderHeaderID = T_OrderHeaderID JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID WHERE Last_StatusPaymentT_OrderHeaderID = {$prm['id']}"; $rows['status_payment'] = $this->db_smartone->query($sql)->row()->xpayment; // GET PRINT COUNT $sql = "SELECT MAX(T_OrderDetailPrintCount) as xcount FROM t_orderdetail JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailT_TestIsResult = 'Y' AND T_OrderDetailIsActive = 'Y'"; $rows['print_count'] = $this->db_smartone->query($sql)->row()->xcount; $result = array( "total" => count($rows), "records" => $rows, "alert_doctor" => array( 'show' => $flag_show_alert_doctor, 'doctor_name' => $alias_doctor_name, 'doctor_address' => $alias_doctor_addr ), "notes" => $notes ); $this->sys_ok($result); } private function get_report_codes_by_group($group_name) { // P = siap cetak, NP = belum siap cetak, E = email siap, NE = email belum siap $mapping = [ 'LAB' => ['P' => 'LAB-RESULT-P-01', 'NP' => 'LAB-RESULT-NP-01', 'E' => 'LAB-RESULT-P-02', 'NE' => 'LAB-RESULT-NP-02'], 'LAB_EN' => ['P' => 'LABEN-RESULT-P-01', 'NP' => 'LABEN-RESULT-NP-01', 'E' => 'LABEN-RESULT-P-02'], 'Mikro' => ['P' => 'MIKRO-RESULT-P-01', 'NP' => 'MIKRO-RESULT-NP-01', 'E' => 'MIKRO-RESULT-P-02'], 'Mikro_EN' => ['P' => 'MIKROEN-RESULT-P-01', 'NP' => 'MIKROEN-RESULT-NP-01', 'E' => 'MIKROEN-RESULT-P-02'], 'FNA' => ['P' => 'FNA-RESULT-P-01', 'NP' => 'FNA-RESULT-NP-01', 'E' => 'FNA-RESULT-P-02'], 'Patologi Anatomi' => ['P' => 'PA-RESULT-P-01', 'NP' => 'PA-RESULT-NP-01', 'E' => 'PA-RESULT-P-02'], 'Papsmear' => ['P' => 'PAP-RESULT-P-01', 'NP' => 'PAP-RESULT-NP-01', 'E' => 'PAP-RESULT-P-02'], 'Pap Smear (Liquid C Prep)' => ['P' => 'PAPLCP-RESULT-P-01', 'NP' => 'PAPLCP-RESULT-NP-01', 'E' => 'PAPLCP-RESULT-P-02'], 'Pap Smear (Liquid C Prep)_EN' => ['P' => 'PAPLEN-RESULT-P-01', 'NP' => 'PAPLEN-RESULT-NP-01', 'E' => 'PAPLEN-RESULT-P-02'], 'Papsmear_EN' => ['P' => 'PAPLEN-RESULT-P-01', 'NP' => 'PAPLEN-RESULT-NP-01', 'E' => 'PAPLEN-RESULT-P-02'], 'Preparasi Sperma' => ['P' => 'PS-RESULT-P-01', 'NP' => 'PS-RESULT-NP-01', 'E' => 'PS-RESULT-P-02'], 'dfi' => ['P' => 'DFI-RESULT-P-01', 'NP' => 'DFI-RESULT-NP-01', 'E' => 'DFI-RESULT-P-02'], 'DFI' => ['P' => 'DFI-RESULT-P-01', 'NP' => 'DFI-RESULT-NP-01', 'E' => 'DFI-RESULT-P-02'], 'Cytologi' => ['P' => 'CT-RESULT-P-01', 'NP' => 'CT-RESULT-NP-01', 'E' => 'CT-RESULT-P-02'], ]; return $mapping[$group_name] ?? null; } private function get_report_name_from_code($report_code) { if (empty($report_code)) return ''; $row = $this->db_smartone->query( "SELECT Print_TransactionUrl FROM print_transaction WHERE Print_TransactionCode = ? LIMIT 1", [$report_code] )->row(); if (!$row) return ''; preg_match('/\/([^\/]+)\.rptdesign/', $row->Print_TransactionUrl, $matches); return $matches[1] ?? ''; } private function get_report_name_from_db($report_code, $ready_print = 'Y') { if (empty($report_code)) return ''; $row = $this->db_smartone->query( "SELECT Print_TransactionUrl FROM print_transaction WHERE Print_TransactionCode = ? LIMIT 1", [$report_code] )->row(); if (!$row) return ''; preg_match('/\/([^\/]+)\.rptdesign/', $row->Print_TransactionUrl, $matches); $report_name = $matches[1] ?? ''; if ($ready_print != 'Y' && !empty($report_name)) { $report_name .= '_not_print'; } return $report_name; } private function get_fallback_report($group_name, $type, $ready_print) { $fallback = [ 'Preparasi Sperma' => ['P' => 'rpt_hasil_sperma', 'E' => 'rpt_hasil_sperma_email'], 'dfi' => ['P' => 'rpt_hasil_dfi', 'E' => 'rpt_hasil_dfi_email'], 'Cytologi' => ['P' => 'rpt_hasil_cytologi', 'E' => 'rpt_hasil_cytologi_email'] ]; if (!isset($fallback[$group_name][$type])) return ''; $rpt_name = $fallback[$group_name][$type]; if ($ready_print != 'Y') { $rpt_name .= '_not_print'; } return $rpt_name; } function releaseresult() { $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $patients = $prm['patients']; $xdate = $prm['xdate']; if ($prm['selectall']) { $sql = "SELECT T_OrderHeaderAddOnT_OrderHeaderID as T_OrderHeaderID FROM t_orderheaderaddon JOIN t_orderheader ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' WHERE (DATE(T_OrderHeaderDate) = '{$xdate}' OR DATE(T_OrderPromiseDateTime) = '{$xdate}') AND T_OrderHeaderAddOnReadyPrint = 'Y' AND T_OrderHeaderAddOnIsActive = 'Y'"; //echo $sql; $patients = $this->db_smartone->query($sql)->result_array(); } $arr_patients = []; foreach ($patients as $k => $v) { array_push($arr_patients, $v['T_OrderHeaderID']); } $join_patients = "(" . join(",", $arr_patients) . ")"; $sql = " INSERT INTO result_processtooffice ( Result_ProcessToOfficeT_OrderHeaderID, Result_ProcessToOfficeT_OrderDeliveryID, Result_ProcessToOfficeT_OrderDeliveryM_DeliveryTypeID, Result_ProcessToOfficeT_OrderDeliveryM_DeliveryID, Result_ProcessToOfficeT_OrderPromiseID, Result_ProcessToOfficeGroup_ResultID, Result_ProcessToOfficeSendBy, Result_ProcessToOfficeSendTime, Result_ProcessToOfficeUserID, Result_ProcessToOfficeCreated, Result_ProcessToOfficeLastUpdated ) SELECT T_OrderDetailT_OrderHeaderID, T_OrderDeliveryID, T_OrderDeliveryM_DeliveryTypeID, T_OrderDeliveryM_DeliveryID, T_OrderPromiseID, Group_ResultID, {$userid}, NOW(), {$userid}, NOW(), NOW() FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' AND T_TestIsNonLab = '' JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID JOIN t_orderdelivery ON T_OrderDeliveryT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDeliveryIsActive = 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID LEFT JOIN result_processtooffice ON Result_ProcessToOfficeT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND Result_ProcessToOfficeT_OrderDeliveryID = T_OrderDeliveryID AND Result_ProcessToOfficeT_OrderPromiseID = T_OrderDetailT_OrderPromiseID AND Result_ProcessToOfficeGroup_ResultID = Group_ResultID AND Result_ProcessToOfficeStatus = 'S' AND Result_ProcessToOfficeIsActive = 'Y' WHERE T_OrderDetailT_OrderHeaderID IN {$join_patients} AND T_OrderDetailT_OrderPromiseID <> 0 AND ISNULL(Result_ProcessToOfficeID) AND T_OrderDetailValidation = 'Y' AND T_OrderDetailIsActive = 'Y' GROUP BY T_OrderDeliveryID, T_OrderPromiseID, Group_ResultID "; //echo $sql; $rows = $this->db_smartone->query($sql); $sql = "UPDATE t_orderheaderaddon SET T_OrderHeaderAddOnReadyPrint = 'P', T_OrderHeaderAddOnUserID = {$userid} WHERE T_OrderHeaderAddOnT_OrderHeaderID IN {$join_patients}"; $this->db_smartone->query($sql); $result = array("total" => count($rows), "records" => $rows); $this->sys_ok($result); } function printcount() { $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $sql = " UPDATE t_orderdetail SET T_OrderDetailPrintCount = T_OrderDetailPrintCount +1, T_OrderDetailPrintBy = $userid, T_OrderDetailPrintTime = NOW() WHERE T_OrderDetailValidation = 'Y' AND T_OrderDetailT_OrderHeaderID = {$prm['orderid']} "; //echo $sql; $this->db_smartone->query($sql); $sql = "SELECT MAX(T_OrderDetailPrintCount) as xcount FROM t_orderdetail JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' WHERE T_OrderDetailT_OrderHeaderID = {$prm['orderid']} AND T_OrderDetailT_TestIsResult = 'Y' AND T_OrderDetailIsActive = 'Y'"; //echo $sql; $rows['print_count'] = $this->db_smartone->query($sql)->row()->xcount; $result = array("total" => count($rows), "records" => $rows); $this->sys_ok($result); } public function info_req() { $prm = $this->sys_input; $sql = "CALL sp_process_result_reqs(?)"; $query = $this->db_smartone->query($sql, [$prm['order_id']]); if ($query) { $row = $query->row(); $this->sys_ok(json_decode($row->data)); exit; } $this->sys_error_db("RESULT REQ", $this->db_smartone); } function geturl() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $order_id = isset($prm['order_id']) ? $prm['order_id'] : 0; $group_name = isset($prm['group_name']) ? $prm['group_name'] : ''; $type = isset($prm['type']) ? $prm['type'] : 'P'; // P: Print, E: Email, Q: QR $url = ''; // 1. Mapping Group Name to DB Prefix $code_prefix = ''; if ($group_name == 'LAB') $code_prefix = 'LAB-RESULT'; elseif ($group_name == 'LAB_EN' || $group_name == 'Mikro_EN') $code_prefix = 'LAB-RESULT-EN'; elseif ($group_name == 'FNA') $code_prefix = 'FNA'; elseif ($group_name == 'Patologi Anatomi') $code_prefix = 'PA'; elseif ($group_name == 'Papsmear') $code_prefix = 'PAP'; elseif ($group_name == 'Pap Smear (Liquid C Prep)') $code_prefix = 'LCP'; // 2. Try Fetch from DB if ($code_prefix) { $tx_code = $code_prefix . '-' . $type . '-01'; $sql = "SELECT * FROM print_transaction WHERE Print_TransactionCode = ? LIMIT 1"; $row = $this->db_smartone->query($sql, [$tx_code])->row(); if ($row && !empty($row->Print_TransactionUrl)) { $url = $row->Print_TransactionUrl; $db_params = $row->Print_TransactionParams; // e.g. "PUsername,PT_OrderHeaderID,TS" // Prepare dynamic values map $map_vars = [ 'PUsername' => urlencode($this->sys_user['M_StaffName']), 'PT_OrderHeaderID' => $order_id, 'TS' => round(microtime(true) * 1000) ]; // Replace params in URL if (!empty($db_params)) { $params_array = explode(',', $db_params); foreach ($params_array as $param_key) { $param_key = trim($param_key); if (isset($map_vars[$param_key])) { $url = str_replace($param_key, $map_vars[$param_key], $url); } } } } } // 3. Fallback if DB didn't return URL (Hardcoded logic) if (empty($url)) { $rpt_name = 'rpt_test'; $folder = 'lab'; $mode = 'frameset'; // Simple fallback mapping if ($group_name == 'FNA') { $rpt_name = 'rpt_hasil_fna'; $folder = 'fna'; } elseif ($group_name == 'Patologi Anatomi') { $rpt_name = 'rpt_patologi_anatomy'; $folder = 'pa'; } elseif ($group_name == 'Papsmear') { $rpt_name = 'rpt_hasil_papsmear'; $folder = 'papsmear'; } // ... add other fallbacks as needed if ($type == 'E') $rpt_name .= '_email'; // Construct URL manually $username = urlencode($this->sys_user['M_StaffName']); $tm = round(microtime(true) * 1000); $url = "/birt/{$mode}?__report=report/onelab/{$folder}/{$rpt_name}.rptdesign&__format=pdf&username={$username}&PID={$order_id}&tm={$tm}"; } // Populate decrypt cache sebelum frontend buka URL ke BIRT $this->load->library('ibl_patient_decrypt'); $this->ibl_patient_decrypt->pre_cache_and_get_url($url); $this->sys_ok($url); } function getprinttransaction() { try { if (! $this->isLogin) { $this->sys_error("Invalid Token"); return; } $prm = $this->sys_input; $prefix = isset($prm['prefix']) ? trim($prm['prefix']) : ''; $type = isset($prm['type']) ? trim($prm['type']) : ''; if ($prefix === '' || $type === '') { $this->sys_error("Parameter prefix dan type wajib diisi"); return; } $printCode = $prefix . '-' . $type . '-01'; $sql = "SELECT * FROM print_transaction WHERE Print_TransactionCode = ? LIMIT 1"; $row = $this->db_smartone->query($sql, [$printCode])->row_array(); if (! $row) { $this->sys_error("Data print transaction tidak ditemukan"); return; } $this->sys_ok([ 'status' => true, 'message' => 'Success', 'data' => $row ]); } catch (Exception $e) { $this->sys_error($e->getMessage()); } } function get_report_url_by_code() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); return; } $prm = $this->sys_input; $report_code = isset($prm['code']) ? $prm['code'] : ''; $params = isset($prm['params']) ? $prm['params'] : []; if (empty($report_code)) { $this->sys_error("Report code is required"); return; } $sql = "SELECT * FROM print_transaction WHERE Print_TransactionCode = ? LIMIT 1"; $row = $this->db_smartone->query($sql, [$report_code])->row_array(); if (!$row) { $this->sys_error("Report code not found: " . $report_code); return; } $final_url = $row['Print_TransactionUrl']; // Jika params tidak diberikan, gunakan default if (empty($params) || !is_array($params)) { $params = [ 'PUsername' => urlencode($this->sys_user['M_StaffName']), 'PT_OrderHeaderID' => '0', 'TS' => round(microtime(true) * 1000) ]; } // Replace parameters in URL foreach ($params as $key => $value) { $final_url = str_replace($key, $value, $final_url); } // Populate patient_print_cache agar sp_rpt_hasil_header baca DOB/name dari cache $order_id = intval($params['PT_OrderHeaderID'] ?? 0); if ($order_id <= 0) { parse_str(parse_url($final_url, PHP_URL_QUERY) ?? '', $_url_params); $order_id = intval($_url_params['PID'] ?? 0); } if ($order_id > 0) { $this->load->library('ibl_patient_decrypt'); $this->ibl_patient_decrypt->populate_cache_by_order($order_id); } $this->sys_ok([ 'status' => true, 'url' => $final_url, 'report_code' => $report_code, 'original_url' => $row['Print_TransactionUrl'] ]); } function generateurl() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $orderid = isset($prm['orderid']) ? $prm['orderid'] : 0; $url = isset($prm['url']) ? $prm['url'] : ''; // re_id fix 0 (tidak jadi param) $re_id = 0; $format = 'default-format'; if ($orderid == 0 || empty($url)) { $this->sys_error("Data tidak lengkap (OrderID/URL kosong)"); exit; } // Ambil Group_ResultID & Name dari parameter frontend (dikirim per-group) $group_result_id = isset($prm['T_EmailNonLabGroup_ResultID']) ? (int)$prm['T_EmailNonLabGroup_ResultID'] : 0; $group_result_name = isset($prm['T_EmailNonLabGroup_ResultName']) ? $prm['T_EmailNonLabGroup_ResultName'] : ''; // Gunakan type = group_result_name agar tiap group punya baris tersendiri // (misal: "LAB", "FNA", "Patologi Anatomi", dst.) $type = $group_result_name; // FALLBACK: jika frontend tidak mengirim group info yang valid, // cari SEMUA group dari t_orderheader_group_result dan proses satu per satu. // Ini memastikan tidak ada group yang terlewat meskipun frontend kirim data kosong. if ($group_result_id == 0 || empty($group_result_name)) { $sql_gr = "SELECT T_OrderHeaderGroupResultGroup_ResultID, T_OrderHeaderGroupResultGroup_ResultName, T_OrderHeaderGroupResultDetails FROM t_orderheader_group_result WHERE T_OrderHeaderGroupResultT_OrderHeaderID = ? AND T_OrderHeaderGroupResultIsActive = 'Y'"; $q_gr = $this->db_smartone->query($sql_gr, array($orderid)); if ($q_gr && $q_gr->num_rows() > 0) { $rows_gr = $q_gr->result(); foreach ($rows_gr as $row_gr) { $gr_id = $row_gr->T_OrderHeaderGroupResultGroup_ResultID; $gr_name = $row_gr->T_OrderHeaderGroupResultGroup_ResultName; // Cek existing per group (UNIQUE: OrderHeaderID + re_id + type/group_name) $check_sql = "SELECT T_EmailNonLabID FROM t_email_nonlab WHERE T_EmailNonLabT_OrderHeaderID = ? AND T_EmailNonLabSo_ResultEntryID = ? AND T_EmailNonLabType = ?"; $existing = $this->db_smartone ->query($check_sql, array($orderid, $re_id, $gr_name)) ->row(); if ($existing) { $sql_upd = "UPDATE t_email_nonlab SET T_EmailNonLabFormat = ?, T_EmailNonLabUrl = ?, T_EmailNonLabUserID = ?, T_EmailNonLabGroup_ResultID = ?, T_EmailNonLabGroup_ResultName = ?, T_EmailNonLabUpdated = NOW() WHERE T_EmailNonLabID = ?"; $this->db_smartone->query($sql_upd, array( $format, $url, $userid, $gr_id, $gr_name, $existing->T_EmailNonLabID )); } else { $sql_ins = "INSERT INTO t_email_nonlab ( T_EmailNonLabT_OrderHeaderID, T_EmailNonLabSo_ResultEntryID, T_EmailNonLabType, T_EmailNonLabFormat, T_EmailNonLabUrl, T_EmailNonLabUserID, T_EmailNonLabGroup_ResultID, T_EmailNonLabGroup_ResultName, T_EmailNonLabCreated, T_EmailNonLabUpdated ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())"; $this->db_smartone->query($sql_ins, array( $orderid, $re_id, $gr_name, $format, $url, $userid, $gr_id, $gr_name )); } } $this->sys_ok(array("status" => "OK", "message" => "URL Berhasil disimpan (fallback all groups)")); exit; } // Jika sama sekali tidak ada group di t_orderheader_group_result, tolak $this->sys_error("Group Result tidak ditemukan untuk order ini"); exit; } // === FLOW NORMAL: frontend sudah kirim Group_ResultID & Group_ResultName yang benar === // Unique key: (OrderHeaderID, re_id=0, type=group_result_name) // Dengan type = group_result_name, LAB dan FNA akan jadi 2 baris terpisah. $check_sql = "SELECT T_EmailNonLabID FROM t_email_nonlab WHERE T_EmailNonLabT_OrderHeaderID = ? AND T_EmailNonLabSo_ResultEntryID = ? AND T_EmailNonLabType = ?"; $existing = $this->db_smartone ->query($check_sql, array($orderid, $re_id, $type)) ->row(); if ($existing) { $sql = "UPDATE t_email_nonlab SET T_EmailNonLabFormat = ?, T_EmailNonLabUrl = ?, T_EmailNonLabUserID = ?, T_EmailNonLabGroup_ResultID = ?, T_EmailNonLabGroup_ResultName = ?, T_EmailNonLabUpdated = NOW() WHERE T_EmailNonLabID = ?"; $this->db_smartone->query($sql, array( $format, $url, $userid, $group_result_id, $group_result_name, $existing->T_EmailNonLabID )); } else { $sql = "INSERT INTO t_email_nonlab ( T_EmailNonLabT_OrderHeaderID, T_EmailNonLabSo_ResultEntryID, T_EmailNonLabType, T_EmailNonLabFormat, T_EmailNonLabUrl, T_EmailNonLabUserID, T_EmailNonLabGroup_ResultID, T_EmailNonLabGroup_ResultName, T_EmailNonLabCreated, T_EmailNonLabUpdated ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())"; $query = $this->db_smartone->query($sql, array( $orderid, $re_id, $type, $format, $url, $userid, $group_result_id, $group_result_name )); if (!$query) { $this->sys_error_db("Gagal menyimpan URL Email", $this->db_smartone); exit; } } $this->sys_ok(array( "status" => "OK", "message" => "URL Berhasil disimpan" )); exit; } }