db_smartone = $this->load->database("onedev", true); } 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 = "and ( 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 ) $q_company = " and T_OrderHeaderM_CompanyID = $company_id "; $total_day = 0; $total_susulan = 0; $sql = " SELECT COUNT(*) as total FROM ( SELECT T_OrderHeaderID from t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive= 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID AND DocumentationGroupDetailIsActive = 'Y' JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID AND DocumentationGroupName = 'lab' where T_OrderHeaderIsActive = 'Y' and DATE(T_OrderHeaderDate) = '{$sdate}' AND T_OrderHeaderAddOnFOVerification = 'Y' GROUP BY T_OrderHeaderID ) x "; $total_day = $this->db_onedev->query($sql)->row()->total; $sql = " SELECT COUNT(*) as total FROM ( SELECT T_OrderHeaderID from t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive= 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID AND DocumentationGroupDetailIsActive = 'Y' JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID AND DocumentationGroupName = 'lab' where T_OrderHeaderIsActive = 'Y' and ( DATE(T_OrderPromiseDateTime) = '{$sdate}' AND DATE(T_OrderHeaderDate) < '{$sdate}') AND T_OrderHeaderAddOnFOVerification = 'Y' GROUP BY T_OrderHeaderID ) x "; $total_susulan = $this->db_onedev->query($sql)->row()->total; // QUERY TOTAL $sql = " SELECT COUNT(*) as total FROM ( SELECT * FROM ( SELECT T_OrderHeaderID from t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID {$q_company} JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive= 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' JOIN t_orderdelivery ON T_OrderDeliveryT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDeliveryIsActive= 'Y' $filter_deliverytype -- AND T_OrderDetailVerification = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID AND DocumentationGroupDetailIsActive = 'Y' JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID AND DocumentationGroupName = 'lab' join m_patient on T_OrderHeaderM_PatientID = M_PatientID join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID join m_doctor db on T_OrderHeaderSenderM_DoctorID = db.M_DoctorID JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID JOIN m_mou on T_OrderHeaderM_MouID = M_MouID JOIN m_sex on M_PatientM_SexID = M_SexID JOIN nat_lang la ON T_OrderHeaderM_LangID = la.Nat_LangID LEFT JOIN nat_lang lb ON T_OrderHeaderAddOnSecondM_LangID = lb.Nat_LangID where T_OrderHeaderIsActive = 'Y' and (DATE(T_OrderHeaderDate) = '{$sdate}' OR DATE(T_OrderPromiseDateTime) = '{$sdate}') $filter_search AND T_OrderHeaderAddOnFOVerification = 'Y' ) x GROUP BY T_OrderHeaderID ) xxd "; //echo $sql; $query = $this->db_onedev->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_onedev); exit; } $sql = "SELECT * , CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('\"', T_OrderPromiseDateTime, '\"') SEPARATOR ','), ']') order_promise FROM ( SELECT T_OrderHeaderID, T_OrderPromiseID, T_OrderHeaderLabNumber, T_OrderHeaderDate, DATE_FORMAT(T_OrderHeaderDate,'%d.%m.%Y %H:%i') as order_date, M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName, M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP, M_SexName, da.M_DoctorID doctor_pj_id, fn_global_doctor_name(da.M_DoctorID) doctor_pj_name, db.M_DoctorID doctor_sender_id, fn_global_doctor_name(db.M_DoctorID) doctor_sender_name, M_MouID, M_MouName, M_CompanyID, M_CompanyName, T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote, la.Nat_LangID M_LangID, la.Nat_LangCode M_LangCode, la.Nat_LangName M_LangName, T_OrderHeaderLangIsSI, lb.Nat_LangID SecondM_LangID, lb.Nat_LangCode SecondM_LangCode, lb.Nat_LangName SecondM_LangName, T_OrderHeaderAddOnSecondLangIsSI, T_OrderHeaderIsCito, '' as deliveries, T_OrderPromiseDateTime, '' is_history, T_OrderHeaderLabNumberExt, T_OrderHeaderAddOnVerificationDone, T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnReadyPrint as ready_print, T_OrderHeaderAddonReadyPrintDate from t_orderheader JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID {$q_company} JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive= 'Y' JOIN t_orderpromise ON T_OrderDetailT_OrderPromiseID = T_OrderPromiseID AND T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' JOIN t_orderdelivery ON T_OrderDeliveryT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDeliveryIsActive= 'Y' $filter_deliverytype -- AND T_OrderDetailVerification = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID AND DocumentationGroupDetailIsActive = 'Y' JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID AND DocumentationGroupName = 'lab' join m_patient on T_OrderHeaderM_PatientID = M_PatientID join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID join m_doctor db on T_OrderHeaderSenderM_DoctorID = db.M_DoctorID JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID JOIN m_mou on T_OrderHeaderM_MouID = M_MouID JOIN m_sex on M_PatientM_SexID = M_SexID JOIN nat_lang la ON T_OrderHeaderM_LangID = la.Nat_LangID LEFT JOIN nat_lang lb ON T_OrderHeaderAddOnSecondM_LangID = lb.Nat_LangID where T_OrderHeaderIsActive = 'Y' and (DATE(T_OrderHeaderDate) = '{$sdate}' OR DATE(T_OrderPromiseDateTime) = '{$sdate}') $filter_search AND T_OrderHeaderAddOnFOVerification = 'Y' order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ) x GROUP BY T_OrderHeaderID order by ready_print DESC, T_OrderHeaderAddonReadyPrintDate ASC, T_OrderPromiseDateTime ASC 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]['delivery'] = []; $r = $this->db_smartone->query("CALL sp_fo_payment_get_delivery('{$v['T_OrderHeaderID']}')"); $this->clean_mysqli_connection($this->db_smartone->conn_id); if ($r) { $d = $r->row(); $rows[$k]['delivery'] = json_decode($d->delivery); } $rows[$k]['deliveries'] = JSON_DECODE($v['deliveries']); $rows[$k]['order_promise'] = JSON_DECODE($v['order_promise']); foreach($rows[$k]['order_promise'] as $l => $w) $rows[$k]['order_promise'][$l] = date('d-m-Y H:i', strtotime($w)); */ } $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(); $sql = "SELECT T_OrderDeliveryID as 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' WHEN M_DeliveryTypeCode = 'ADDRESS' THEN 'brown' WHEN M_DeliveryTypeCode = 'EMAIL' THEN 'primary' 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'"; //echo $sql; $rows['deliveries'] = $this->db_smartone->query($sql)->result_array(); //$result = array("total" => count($rows), "records" => $rows); $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, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'rpt' as type, T_OrderHeaderAddOnReadyPrint as ready_print 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' JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderDetailT_OrderHeaderID WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID UNION SELECT Group_ResultID as id, Group_ResultName as group_name, '' as rpt, 'N' as selected, T_OrderDetailT_OrderHeaderID as order_id, 'info' as type, T_OrderHeaderAddOnReadyPrint as ready_print 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 WHERE T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' GROUP BY Group_ResultID ) x ORDER BY type desc, id ASC "; // echo $sql; $rows['groups'] = $this->db_smartone->query($sql)->result_array(); if($rows['groups']){ foreach($rows['groups'] as $k => $v){ $ready_print = $v['ready_print']; if($k == 0) $rows['groups'][$k]['selected'] = 'Y'; if($v['group_name'] == 'LAB'){ $rpt = 'rpt_test_not_print'; if($ready_print != 'N') $rpt = 'rpt_test'; $rows['groups'][$k]['rpt'] = $rpt; } if($v['group_name'] == 'FNA'){ $rpt = 'rpt_hasil_fna_not_print'; if($ready_print != 'N') $rpt = 'rpt_hasil_fna'; $rows['groups'][$k]['rpt'] = $rpt; } if($v['group_name'] == 'Papsmear'){ $rpt = 'rpt_hasil_papsmear_not_print'; if($ready_print != 'N') $rpt = 'rpt_hasil_papsmear'; $rows['groups'][$k]['rpt'] = $rpt; } if($v['group_name'] == 'Pap Smear (Liquid C Prep)'){ $rpt = 'rpt_hasil_lcprep_not_print'; if($ready_print != 'N') $rpt = 'rpt_hasil_lcprep'; $rows['groups'][$k]['rpt'] = $rpt; } } } $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'"; //echo $sql; $rows['print_count'] = $this->db_onedev->query($sql)->row()->xcount; $result = array("total" => count($rows), "records" => $rows); $this->sys_ok($result); } 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 WHERE T_OrderDetailT_OrderHeaderID IN {$join_patients} AND T_OrderDetailT_OrderPromiseID <> 0 AND T_OrderDetailPrintCount = 0 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' WHERE T_OrderHeaderAddOnT_OrderHeaderID IN {$join_patients}"; $this->db_smartone->query($sql); $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); } }