db = $CI->load->database("onedev", true); $this->db_log = $CI->load->database("one_lab_log", true); $this->db->trans_begin(); $sql = "SELECT NonlabTemplateID as template_id, NonlabTemplateName as template_name, T_SamplingSoT_OrderHeaderID as order_header_id, T_OrderDetailID as order_detail_id FROM t_samplingso JOIN t_orderdetail ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_SamplingSoT_TestID = T_OrderDetailT_TestID AND T_OrderDetailIsActive = 'Y' JOIN t_test ON T_SamplingSoT_TestID = T_TestID JOIN nat_test ON Nat_TestID = T_TestNat_TestID JOIN nonlab_template_mapping ON NonlabTemplateMappingNat_TestID = Nat_TestID AND NonlabTemplateMappingIsActive = 'Y' JOIN nonlab_template ON NonlabTemplateMappingNonlabTemplateID = NonlabTemplateID AND NonlabTemplateIsActive = 'Y' LEFT JOIN so_resultentry ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND So_ResultEntryIsActive = 'Y' WHERE T_SamplingSoID = ? AND T_SamplingSoIsActive = 'Y' AND So_ResultEntryID IS NULL GROUP BY NonlabTemplateID LIMIT 1"; $qry = $this->db->query($sql, array($T_SamplingSOID)); //echo $this->db->last_query(); if (!$qry) { $dt_log = ['data' => ['id' => $T_SamplingSOID],'error' => $this->db->error()]; $prm_log = ['SELECT_NONLAB_TEMPLATE', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $row_arr = $qry->row_array(); if ($row_arr) { //print_r($row_arr); $template_name = $row_arr['template_name']; if($row_arr['template_name'] == 'Fisik Umum'){ $sql = "SELECT FisikTemplateType as xtype FROM fisik_template JOIN t_orderheader ON T_OrderHeaderID = {$row_arr['order_header_id']} JOIN mgm_mcutemplate ON Mgm_McuTemplateMgm_McuID = T_OrderHeaderMgm_McuID JOIN fisik_template_mapping ON Mgm_McuTemplateFisikTemplateMappingID = FisikTemplateMappingID JOIN fisik_template_mapping_detail ON FisikTemplateMappingDetailFisikTemplateMappingID = FisikTemplateMappingID AND FisikTemplateMappingDetailFisikTemplateID = FisikTemplateID AND FisikTemplateMappingDetailIsActive = 'Y' WHERE FisikTemplateIsActive = 'Y' GROUP BY FisikTemplateType"; $qry = $this->db->query($sql); //echo $this->db->last_query(); if (!$qry) { $dt_log = ['data' => ['id' => $T_SamplingSOID],'error' => $this->db->error()]; $prm_log = ['SELECT_FISIK_TEMPLATE', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $arr_types = $qry->result_array(); $xtypes = []; foreach ($arr_types as $key => $value) { $xtypes[] = $value['xtype']; } $template_name = "Fisik Umum"; if(in_array("K3", $xtypes)){ $template_name = "Fisik Umum K3"; } //echo $template_name; } $sql = "SELECT COUNT(*) as xcount FROM so_resultentry WHERE So_ResultEntryT_OrderHeaderID = ? AND So_ResultEntryT_OrderDetailID = ? AND So_ResultEntryIsActive = 'Y'"; $query = $this->db->query($sql, array( $row_arr['order_header_id'], $row_arr['order_detail_id'] )); if (!$qry) { $dt_log = ['data' => ['id' => $T_SamplingSOID, 'arr' => $row_arr],'error' => $this->db->error()]; $prm_log = ['CHECK_EXIST_SO_RE', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $check_exist = $query->row()->xcount; if($check_exist == 0){ $sql = "INSERT INTO so_resultentry( So_ResultEntryT_OrderHeaderID, So_ResultEntryT_OrderDetailID, So_ResultEntryNonlab_TemplateID, So_ResultEntryNonlab_TemplateName, So_ResultEntryCreated ) VALUES(?,?,?,?,NOW())"; $qry = $this->db->query($sql, array( $row_arr['order_header_id'], $row_arr['order_detail_id'], $row_arr['template_id'], $template_name )); //echo $this->db->last_query(); if (!$qry) { $dt_log = ['data' => ['id' => $T_SamplingSOID],'error' => $this->db->error()]; $prm_log = ['INSERT_SO_RESULTENTRY', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $soresultentryid = $this->db->insert_id(); if($template_name == 'TBBB'){ $sql = "SELECT COUNT(*) as exist_tbbb FROM t_samplingso_additional_fisik_bbtb WHERE T_SamplingAdditionalFisikBBTBIsActive = 'Y' AND T_SamplingAdditionalFisikBBTBT_OrderHeaderID = ? "; $qry = $this->db->query($sql, array( $row_arr['order_header_id'] )); if (!$qry) { $dt_log = ['data' => ['id' => $row_arr['order_header_id']],'error' => $this->db->error()]; $prm_log = ['SELECT_ORDER_HEADER_LANG', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $check_exist_tbbbb = $qry->row()->exist_tbbb; if($check_exist_tbbbb == 0){ $sql = "INSERT INTO t_samplingso_additional_fisik_bbtb ( T_SamplingAdditionalFisikBBTBT_OrderHeaderID, T_SamplingAdditionalFisikBBTBValueBB, T_SamplingAdditionalFisikBBTBValueTB, T_SamplingAdditionalFisikBBTBValueClassification, T_SamplingAdditionalFisikBBTBBodyFat, T_SamplingAdditionalFisikBBTBCreated ) VALUES(?,0,0,'',0, NOW())"; $qry = $this->db->query($sql, array( $row_arr['order_header_id'] )); if (!$qry) { $dt_log = ['data' => ['id' => $row_arr['order_header_id']],'error' => $this->db->error()]; $prm_log = ['INSERT_ADD_TBBB', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } } } if($template_name == 'VISUS'){ $sql = "SELECT COUNT(*) as exist_visus FROM t_samplingso_additional_fisik_visus WHERE T_SamplingAdditionalFisikVisusT_OrderHeaderID = ? "; $qry = $this->db->query($sql, array( $row_arr['order_header_id'] )); // echo $this->db->last_query(); if (!$qry) { $dt_log = ['data' => ['id' => $row_arr['order_header_id']],'error' => $this->db->error()]; $prm_log = ['SELECT_ORDER_HEADER_LANG', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $check_exist_visus = $qry->row()->exist_visus; //echo $check_exist_visus ; if($check_exist_visus == 0){ $sql = "INSERT INTO t_samplingso_additional_fisik_visus ( T_SamplingAdditionalFisikVisusT_OrderHeaderID, T_SamplingAdditionalFisikVisusCreated ) VALUES(?,NOW())"; $qry = $this->db->query($sql, array( $row_arr['order_header_id'] )); if (!$qry) { $dt_log = ['data' => ['id' => $row_arr['order_header_id']],'error' => $this->db->error()]; $prm_log = ['INSERT_ADD_VISUS', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } } } if($template_name == 'BW'){ $sql = "SELECT COUNT(*) as exist_bw FROM t_samplingso_additional_fisik_bw WHERE T_SamplingAdditionalFisikBWT_OrderHeaderID = ? "; $qry = $this->db->query($sql, array( $row_arr['order_header_id'] )); if (!$qry) { $dt_log = ['data' => ['id' => $row_arr['order_header_id']],'error' => $this->db->error()]; $prm_log = ['SELECT_ORDER_HEADER_LANG', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $check_exist_visus = $qry->row()->exist_bw; if($check_exist_visus == 0){ $sql = "INSERT INTO t_samplingso_additional_fisik_bw ( T_SamplingAdditionalFisikBWT_OrderHeaderID, T_SamplingAdditionalFisikBWCreated ) VALUES(?,NOW())"; $qry = $this->db->query($sql, array( $row_arr['order_header_id'] )); if (!$qry) { $dt_log = ['data' => ['id' => $row_arr['order_header_id']],'error' => $this->db->error()]; $prm_log = ['INSERT_ADD_BW', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } } } $sql = "SELECT * FROM t_orderheaderlang WHERE T_OrderHeaderLangT_OrderHeaderID = ? AND T_OrderHeaderLangIsActive = 'Y'"; $qry = $this->db->query($sql, array( $row_arr['order_header_id'] )); if (!$qry) { $dt_log = ['data' => ['id' => $T_SamplingSOID],'error' => $this->db->error()]; $prm_log = ['SELECT_ORDER_HEADER_LANG', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $order_langs = $qry->result_array(); //print_r($order_langs); foreach ($order_langs as $k_lang => $val_lang) { $sql = "SELECT * FROM nonlab_template_detail JOIN t_orderheader ON T_OrderHeaderID = ? JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN m_sex ON M_SexID = M_PatientM_SexID AND M_SexIsActive = 'Y' AND ( NonlabTemplateDetailGender = 'all' OR NonlabTemplateDetailGender = M_SexNameLang) WHERE NonlabTemplateDetailNonlabTemplateID = ? AND NonlabTemplateDetailIsActive = 'Y' AND NonlabTemplateDetaiM_LangID = ? "; $qry = $this->db->query($sql, array( $row_arr['order_header_id'], $row_arr['template_id'], $val_lang['T_OrderHeaderLangM_LangID'] )); //echo $this->db->last_query(); if (!$qry) { $dt_log = ['data' => ['id' => $soresultentryid ,'arr' => $row_arr ],'error' => $this->db->error()]; $prm_log = ['SELECT_NONLAB_TEMPLATE_DETAIL', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $rows_result = $qry->result_array(); if($rows_result && count($rows_result) > 0){ foreach ($rows_result as $key => $value) { if(intval($val_lang['T_OrderHeaderLangM_LangID']) == 1){ $sql = "SELECT COUNT(*) as xcount FROM so_resultentrydetail WHERE So_ResultEntryDetailSo_ResultEntryID = ? AND So_ResultEntryDetailNonlab_TemplateDetailID = ? AND So_ResultEntryDetailIsActive = 'Y'"; $query = $this->db->query($sql, array( $soresultentryid, $value['NonlabTemplateDetailID'] )); if (!$qry) { $dt_log = ['data' => ['id' => $T_SamplingSOID, 'arr' => $value],'error' => $this->db->error()]; $prm_log = ['CHECK_EXIST_SO_RE', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } $check_exist_detail = $query->row()->xcount; if($check_exist_detail == 0){ $sql = "INSERT INTO so_resultentrydetail ( So_ResultEntryDetailSo_ResultEntryID, So_ResultEntryDetailNonlab_TemplateDetailID, So_ResultEntryDetailNonlab_TemplateDetailName, So_ResultEntryDetailCreated ) VALUES(?,?,?,NOW())"; $qry = $this->db->query($sql, array( $soresultentryid, $value['NonlabTemplateDetailID'], $value['NonlabTemplateDetailName'] )); if (!$qry) { $dt_log = ['data' => ['id' => $T_SamplingSOID],'error' => $this->db->error()]; $prm_log = ['INSERT_SO_RESULTENTRY_DETAIL', 'nonlabtemplate/generate']; $xsql = $this->db->last_query(); $log_error = $this->insert_log_error($xsql, $prm_log,$dt_log); $this->db->trans_rollback(); return array(false, print_r($this->db->error(), true)); } } //echo $this->db->last_query(); } } } } } $this->db->trans_commit(); $sql = "SELECT * FROM so_resultentry WHERE So_ResultEntryID = ? "; $qry = $this->db->query($sql, array( $soresultentryid )); if (!$qry) { return array(false, print_r($this->db->error(), true)); } $rows_return = $qry->row_array(); return $rows_return; } else { return false; } } function insert_log_error($log_sql, $params,$data='') { // Membersihkan SQL dari \r\n dan whitespace berlebih //$clean_log_sql = trim(str_replace(["\r\n", "\r", "\n"], ' ', $log_sql)); $sql = "INSERT INTO error_log_order( ErrorLogOrderCode, ErrorLogOrderFnName, ErrorLogOrderDescription, ErrorLogOrderData, ErrorLogOrderCreated ) VALUES( ?,?,?,?,NOW() )"; $query = $this->db_log->query($sql, [$params[0],$params[1],$log_sql,json_encode($data)]); //echo $this->db_log->last_query(); if (!$query) { return false; } return true; } function create($tPriceHeaderID) { $CI = &get_instance(); $this->db = $CI->load->database("onedev", true); $this->db->trans_begin(); $sql = "select * from t_priceheader where T_PriceHeaderID = ?"; $qry = $this->db->query($sql, array($tPriceHeaderID)); if (!$qry) { return array(false, print_r($this->db->error(), true)); } $rows = $qry->result_array(); if (count($rows) == 0) { return array(false, "T PriceHeader ID : $tPriceHeaderID not found"); } $sql = "select distinct T_PriceT_PriceHeaderID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_PriceT_TestID, T_PriceIsCito, T_PricePriority, T_PriceAmount, T_PriceDisc, T_PriceDiscRp, T_PriceSubTotal, T_PriceOther, T_PriceTotal, T_TestForceSell, 'N' is_packet, 0 packet_id, 'PX' px_type, '[]' nat_test, '[]' child_test, 'N' IsFavourite, Nat_TestNat_TestTypeID, T_TestSasCode, $tPriceHeaderID Ss_PriceMouT_PriceHeaderID from t_price join t_test on T_PriceT_TestID = T_TestID and T_PriceIsActive = 'Y' and T_TestIsActive = 'Y' and T_TestIsPrice = 'Y' join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y' and Nat_TestNat_TestTypeID <> 5 where T_PriceT_PriceHeaderID= ? and length(T_TestSasCode) = 8 "; $qry = $this->db->query($sql, array($tPriceHeaderID)); if (!$qry) { $this->db->trans_rollback(); return array(false, "Regional select t_price " . print_r($this->db->error(), true)); } $rows = $qry->result_array(); foreach ($rows as $idx => $r) { $nat_testType = $r["Nat_TestNat_TestTypeID"]; switch ($nat_testType) { case 1: //Single $rows[$idx]['nat_test'] = '[' . $r['Nat_TestID'] . ']'; break; case 3: //Multi case 4: //Panel $sasCode = $r["T_TestSasCode"] . '%'; $sql = "select T_TestNat_TestID from t_test where T_TestIsResult = 'Y' and T_TestSasCode like ? and T_TestIsActive = 'Y'"; $qry = $this->db->query($sql, array($sasCode)); if (!$qry) { // HANYA DEBUG // echo $this->db->last_query(); // print_r($this->db->error()); $this->db->trans_rollback(); return array(false, "Regional " . print_r($this->db->error(), true)); } $nt_rows = $qry->result_array(); $t_rows = array($r["Nat_TestID"]); foreach ($nt_rows as $nr) { $t_rows[] = $nr["T_TestNat_TestID"]; } $rows[$idx]['nat_test'] = "[" . join(",", $t_rows) . "]"; break; default: $rows[$idx]['nat_test'] = '[' . $r['Nat_TestID'] . ']'; break; } unset($rows[$idx]["Nat_TestNat_TestTypeID"]); unset($rows[$idx]["T_TestSasCode"]); } //Test Profile // wip profile $sql = "select distinct $tPriceHeaderID T_PriceT_PriceHeaderID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_TestID T_PriceT_TestID, 'N' T_PriceIsCito, 0 T_PricePriority, 0 T_PriceAmount, 0 T_PriceDisc, 0 T_PriceDiscRp, 0 T_PriceSubTotal, 0 T_PriceOther, 0 T_PriceTotal, T_TestForceSell, 'N' is_packet, 0 packet_id, 'PXR' px_type, '[]' nat_test, '[]' child_test, 'N' IsFavourite, Nat_TestNat_TestTypeID, T_TestSasCode, $tPriceHeaderID Ss_PriceMouT_PriceHeaderID from t_test join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y' and Nat_TestNat_TestTypeID = 5 where length(T_TestSasCode) = 8 "; $qry = $this->db->query($sql); if (!$qry) { return array(false, "Regional " . print_r($this->db->error(), true)); } $p_rows = $qry->result_array(); $sql = "select distinct substr(T_TestSasCode,1,8) parentCode, T_PriceT_PriceHeaderID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_PriceT_TestID, T_PriceIsCito, T_PricePriority, T_PriceAmount, T_PriceDisc, T_PriceDiscRp, T_PriceSubTotal, T_PriceOther, T_PriceTotal, T_TestForceSell, 'N' is_packet, 0 packet_id, 'PX' px_type, concat('[', T_TestNat_TestID , ']') nat_test, '[]' child_test, 'N' IsFavourite, Nat_TestNat_TestTypeID, T_TestSasCode,T_TestIsResult, T_TestCode from t_price join t_test on T_PriceT_TestID = T_TestID and T_PriceIsActive = 'Y' and T_TestIsActive = 'Y' and T_TestIsPrice = 'Y' and T_PriceIsCito = 'N' and length(T_TestSasCode) = 10 join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y' where T_PriceT_PriceHeaderID= ? "; $qry = $this->db->query($sql, array($tPriceHeaderID)); if (!$qry) { return array(false, "Regional child test " . print_r($this->db->error(), true)); } $xrows = $qry->result_array(); $arr_child = array(); $p_codes = "'0'"; foreach ($xrows as $r) { $pCode = $r["parentCode"]; if (!isset($arr_child[$pCode])) { $arr_child[$pCode] = array(); } $cCode = $r["T_TestSasCode"]; $p_codes .= ", '$cCode'"; unset($r["parentCode"]); $arr_child[$pCode][] = $r; } $sql = "select substr(T_TestSasCode,1,8) parentCode, group_concat(distinct T_TestNat_TestID) nat from t_test where ( T_TestIsResult = 'Y' or T_TestIsPrice = 'Y' ) and T_TestSasCode in ( $p_codes ) and T_TestIsActive = 'Y' group by parentCode"; $qry = $this->db->query($sql); if (!$qry) { //DEBUG // echo $this->db->last_query(); // print_r($this->db->error()); return array(false, "Regional " . print_r($this->db->error(), true)); } $xrows = $qry->result_array(); $arr_nat = array(); foreach ($xrows as $r) { $pCode = $r["parentCode"]; //if ( ! isset($arr_nat[$pCode])) { // $arr_nat[$pCode] = array(); //} $arr_nat[$pCode] = $r["nat"]; } $flag_error = false; foreach ($p_rows as $idx => $r) { $T_TestName = $r["T_TestName"]; $sasCode = $r["T_TestSasCode"]; if (isset($arr_child[$sasCode])) { $the_childs = $arr_child[$sasCode]; $p_rows[$idx]['child_test'] = json_encode($the_childs, true); if (isset($arr_nat[$sasCode])) { $p_rows[$idx]['nat_test'] = "[" . $arr_nat[$sasCode] . "]"; } unset($p_rows[$idx]["Nat_TestNat_TestTypeID"]); unset($p_rows[$idx]["T_TestSasCode"]); } else { unset($p_rows[$idx]); } } //Paket Panel / Profile $sql = "select distinct $tPriceHeaderID T_PriceT_PriceHeaderID, T_PacketID T_TestID, T_PacketName T_TestName, 'N' IsFromPanel, 0 Nat_TestID, T_PacketID T_PriceT_TestID, 'N' T_PriceIsCito, 0 T_PricePriority, T_PacketOriginalBruto T_PriceAmount, 0 T_PriceDisc, (T_PacketOriginalBruto - T_PacketPrice) T_PriceDiscRp, 0 T_PriceSubTotal, 0 T_PriceOther, T_PacketPrice T_PriceTotal, 'Y' T_TestForceSell, 'Y' is_packet, T_PacketID packet_id, T_PacketType px_type, '[]' nat_test, '[]' child_test, 'N' IsFavourite, $tPriceHeaderID Ss_PriceMouT_PriceHeaderID from t_packet where T_PacketIsActive = 'Y' and T_PacketT_PriceHeaderID= ?"; $qry = $this->db->query($sql, array($tPriceHeaderID)); if (!$qry) { // echo $this->db->last_query(); // print_r($this->db->error()); return array(false, "Regional " . print_r($this->db->error(), true)); } $pn_rows = $qry->result_array(); foreach ($pn_rows as $idx => $pnr) { $packetID = $pnr["packet_id"]; //child test $sql = "select distinct $tPriceHeaderID T_PriceT_PriceHeaderID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_TestID T_PriceT_TestID, 'N' T_PriceIsCito, 0 T_PricePriority, T_PacketDetailPrice T_PriceAmount, 0 T_PriceDisc, 0 T_PriceDiscRp, T_PacketDetailPrice T_PriceSubTotal, 0 T_PriceOther, T_PacketDetailPrice T_PriceTotal, 'Y' T_TestForceSell, 'N' is_packet, 0 packet_id, 'PX' px_type, concat('[', T_TestNat_TestID , ']') nat_test, '[]' child_test, 'N' IsFavourite, T_TestSasCode from t_packetdetail JOIN t_packet ON T_PacketDetailT_PacketID = T_PacketID JOIN t_price ON T_PacketDetailT_TestID = T_PriceT_TestID AND T_PriceIsActive = 'Y' AND T_PriceT_PriceHeaderID = T_PacketT_PriceHeaderID join t_test on T_PacketDetailT_TestID = T_TestID and T_PacketDetailIsActive = 'Y' and T_TestIsActive = 'Y' and T_PacketDetailT_PacketID = ? join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y'"; $qry = $this->db->query($sql, array($packetID)); if (!$qry) { return array(false, print_r($this->db->error(), true)); } $ct_rows = $qry->result_array(); $p_nat_test = array(); foreach ($ct_rows as $ct_idx => $cr) { $sasCode = $cr["T_TestSasCode"] . '%'; $sql = "select distinct T_TestNat_TestID from t_test where T_TestSasCode like ? and T_TestIsActive = 'Y'"; $qry = $this->db->query($sql, array($sasCode)); if (!$qry) { return array(false, print_r($this->db->error(), true)); } $nt_rows = $qry->result_array(); $t_rows = array(); foreach ($nt_rows as $nr) { $t_rows[] = intval($nr["T_TestNat_TestID"]); $p_nat_test[] = intval($nr["T_TestNat_TestID"]); } $ct_rows[$ct_idx]['nat_test'] = json_encode($t_rows, JSON_NUMERIC_CHECK); } if (count($ct_rows) > 0) { $x_arr = array(); foreach ($ct_rows as $x_cr) { $x_arr[] = $x_cr; } $pn_rows[$idx]['child_test'] = json_encode($x_arr, true); $pn_rows[$idx]['nat_test'] = json_encode($p_nat_test, true); } unset($pn_rows[$idx]["Nat_TestNat_TestTypeID"]); unset($pn_rows[$idx]["T_TestSasCode"]); } $rows = array_merge($rows, $p_rows, $pn_rows); $qry = $this->db->query( "delete from ss_price_mou where Ss_PriceMouT_PriceHeaderID=?", array($tPriceHeaderID) ); if (!$qry) { $this->db->trans_rollback(); return array(false, "" . print_r($this->db->error(), true) . $this->db->last_query()); } $this->db->insert_batch("ss_price_mou", $rows); $err = $this->db->error(); if ($err["code"] != 0) { echo "ERR Code : " . $err["code"] . " | " . $err["message"] . " \n"; $this->db->trans_rollback(); return array(false, "" . print_r($this->db->error(), true) . $this->db->last_query()); } // $sql_i = "insert into ss_price_mou( // T_TestID, T_TestName, // IsFromPanel, Nat_TestID,T_PriceT_TestID, T_PriceIsCito, // T_PricePriority, T_PriceAmount, T_PriceDisc, // T_PriceDiscRp, T_PriceSubTotal, T_PriceOther, T_PriceTotal, // T_TestForceSell, is_packet, packet_id, px_type, // nat_test, child_test, IsFavourite, Ss_PriceMouT_PriceHeaderID) // values ( // ?,?, // ?,?,?,?, // ?,?,?, // ?,?,?,?, // ?,?,?,?, // ?,?,?,? // )"; // foreach ($rows as $r) { // $arr = [ // $r["T_TestID"], // $r["T_TestName"], // $r["IsFromPanel"], // $r["Nat_TestID"], // $r["T_PriceT_TestID"], // $r["T_PriceIsCito"], // $r["T_PricePriority"], // $r["T_PriceAmount"], // $r["T_PriceDisc"], // $r["T_PriceDiscRp"], // $r["T_PriceSubTotal"], // $r["T_PriceOther"], // $r["T_PriceTotal"], // $r["T_TestForceSell"], // $r["is_packet"], // $r["packet_id"], // $r["px_type"], // $r["nat_test"], // $r["child_test"], // $r["IsFavourite"], // $r["Ss_PriceMouT_PriceHeaderID"], // ]; // $qry = $this->db->query($sql_i, $arr); // if (!$qry) { // // header("Content-Type: text/plain"); // print_r($r); // echo $this->db->last_query(); // return array(false, "Regional " . print_r($this->db->error(), true)); // } // } $this->db->trans_commit(); return array(true, "OK"); } // retrun array status, message public function bisone_create($mouID) { $CI = &get_instance(); $this->db = $CI->load->database("one", true); $sql = "select * from m_mou where M_MouID = ?"; $qry = $this->db->query($sql, array($mouID)); if (!$qry) { return array(false, print_r($this->db->error(), true)); } $rows = $qry->result_array(); if (count($rows) == 0) { return array(false, "MOU ID : $mouID not found"); } $companyID = $rows[0]["M_MouM_CompanyID"]; $sql = "select distinct T_PriceM_MouID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_PriceT_TestID, T_PriceIsCito, T_PriceM_CompanyID, T_PriceM_MouID, T_PricePriority, T_PriceAmount, T_PriceDisc, T_PriceDiscRp, T_PriceSubTotal, T_PriceOther, T_PriceTotal, T_TestForceSell, 'N' is_packet, 0 packet_id, 'PX' px_type, '[]' nat_test, '[]' child_test, 'N' IsFavourite, Nat_TestNat_TestTypeID, T_TestSasCode, $mouID Ss_PriceMouM_MouID from t_price join t_test on T_PriceT_TestID = T_TestID and T_PriceIsActive = 'Y' and T_TestIsActive = 'Y' and T_TestIsPrice = 'Y' join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y' and Nat_TestNat_TestTypeID <> 5 where T_PriceM_MouID = ? and length(T_TestSasCode) = 8 "; $qry = $this->db->query($sql, array($mouID)); if (!$qry) { return array(false, "Regional select t_price " . print_r($this->db->error(), true)); } $rows = $qry->result_array(); $flag_error = false; foreach ($rows as $idx => $r) { $nat_testType = $r["Nat_TestNat_TestTypeID"]; switch ($nat_testType) { case 1: //Single $rows[$idx]['nat_test'] = '[' . $r['Nat_TestID'] . ']'; break; case 3: //Multi case 4: //Panel $sasCode = $r["T_TestSasCode"] . '%'; $sql = "select T_TestNat_TestID from t_test where T_TestIsResult = 'Y' and T_TestSasCode like ? and T_TestIsActive = 'Y'"; $qry = $this->db->query($sql, array($sasCode)); if (!$qry) { return array(false, "Regional " . print_r($this->db->error(), true)); } $nt_rows = $qry->result_array(); $t_rows = array($r["Nat_TestID"]); foreach ($nt_rows as $nr) { $t_rows[] = $nr["T_TestNat_TestID"]; } $rows[$idx]['nat_test'] = "[" . join(",", $t_rows) . "]"; break; default: $rows[$idx]['nat_test'] = '[' . $r['Nat_TestID'] . ']'; break; } unset($rows[$idx]["Nat_TestNat_TestTypeID"]); unset($rows[$idx]["T_TestSasCode"]); } //Test Profile // wip profile $sql = "select distinct $mouID T_PriceM_MouID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_TestID T_PriceT_TestID, 'N' T_PriceIsCito, $companyID T_PriceM_CompanyID, $mouID T_PriceM_MouID, 0 T_PricePriority, 0 T_PriceAmount, 0 T_PriceDisc, 0 T_PriceDiscRp, 0 T_PriceSubTotal, 0 T_PriceOther, 0 T_PriceTotal, T_TestForceSell, 'N' is_packet, 0 packet_id, 'PXR' px_type, '[]' nat_test, '[]' child_test, 'N' IsFavourite, Nat_TestNat_TestTypeID, T_TestSasCode, $mouID Ss_PriceMouM_MouID from t_test join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y' and Nat_TestNat_TestTypeID = 5 where length(T_TestSasCode) = 8 "; $qry = $this->db->query($sql, array($mouID)); if (!$qry) { return array(false, "Regional " . print_r($this->db->error(), true)); } $p_rows = $qry->result_array(); $sql = "select distinct substr(T_TestSasCode,1,8) parentCode, T_PriceM_MouID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_PriceT_TestID, T_PriceIsCito, T_PriceM_CompanyID, T_PriceM_MouID, T_PricePriority, T_PriceAmount, T_PriceDisc, T_PriceDiscRp, T_PriceSubTotal, T_PriceOther, T_PriceTotal, T_TestForceSell, 'N' is_packet, 0 packet_id, 'PX' px_type, concat('[', T_TestNat_TestID , ']') nat_test, '[]' child_test, 'N' IsFavourite, Nat_TestNat_TestTypeID, T_TestSasCode,T_TestIsResult, T_TestCode from t_price join t_test on T_PriceT_TestID = T_TestID and T_PriceIsActive = 'Y' and T_TestIsActive = 'Y' and T_TestIsPrice = 'Y' and T_PriceIsCito = 'N' and length(T_TestSasCode) = 10 join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y' where T_PriceM_MouID = ? "; $qry = $this->db->query($sql, array($mouID)); if (!$qry) { return array(false, "Regional child test " . print_r($this->db->error(), true)); } $xrows = $qry->result_array(); $arr_child = array(); $p_codes = "'0'"; foreach ($xrows as $r) { $pCode = $r["parentCode"]; if (!isset($arr_child[$pCode])) { $arr_child[$pCode] = array(); } $cCode = $r["T_TestSasCode"]; $p_codes .= ", '$cCode'"; unset($r["parentCode"]); $arr_child[$pCode][] = $r; } $sql = "select substr(T_TestSasCode,1,8) parentCode, group_concat(distinct T_TestNat_TestID) nat from t_test where ( T_TestIsResult = 'Y' or T_TestIsPrice = 'Y' ) and T_TestSasCode in ( $p_codes ) and T_TestIsActive = 'Y' group by parentCode"; $qry = $this->db->query($sql, array($mouID)); if (!$qry) { return array(false, "Regional " . print_r($this->db->error(), true)); } $xrows = $qry->result_array(); $arr_nat = array(); foreach ($xrows as $r) { $pCode = $r["parentCode"]; //if ( ! isset($arr_nat[$pCode])) { // $arr_nat[$pCode] = array(); //} $arr_nat[$pCode] = $r["nat"]; } $flag_error = false; foreach ($p_rows as $idx => $r) { $T_TestName = $r["T_TestName"]; $sasCode = $r["T_TestSasCode"]; if (isset($arr_child[$sasCode])) { $the_childs = $arr_child[$sasCode]; $p_rows[$idx]['child_test'] = json_encode($the_childs, true); if (isset($arr_nat[$sasCode])) { $p_rows[$idx]['nat_test'] = "[" . $arr_nat[$sasCode] . "]"; } unset($p_rows[$idx]["Nat_TestNat_TestTypeID"]); unset($p_rows[$idx]["T_TestSasCode"]); } else { unset($p_rows[$idx]); } } //Paket Panel / Profile $sql = "select distinct $mouID T_PriceM_MouID, T_PacketID T_TestID, T_PacketName T_TestName, 'N' IsFromPanel, 0 Nat_TestID, T_PacketID T_PriceT_TestID, 'N' T_PriceIsCito, $companyID T_PriceM_CompanyID, $mouID T_PriceM_MouID, 0 T_PricePriority, T_PacketOriginalBruto T_PriceAmount, 0 T_PriceDisc, (T_PacketOriginalBruto - T_PacketPrice) T_PriceDiscRp, 0 T_PriceSubTotal, 0 T_PriceOther, T_PacketPrice T_PriceTotal, 'Y' T_TestForceSell, 'Y' is_packet, T_PacketID packet_id, T_PacketType px_type, '[]' nat_test, '[]' child_test, 'N' IsFavourite, $mouID Ss_PriceMouM_MouID from t_packet where T_PacketIsActive = 'Y' and T_PacketM_MouID = ?"; $qry = $this->db->query($sql, array($mouID)); if (!$qry) { return array(false, "Regional " . print_r($this->db->error(), true)); } $pn_rows = $qry->result_array(); foreach ($pn_rows as $idx => $pnr) { $packetID = $pnr["packet_id"]; //child test $sql = "select distinct $mouID T_PriceM_MouID, T_TestID, T_TestName, 'N' IsFromPanel, Nat_TestID, T_TestID T_PriceT_TestID, 'N' T_PriceIsCito, $companyID T_PriceM_CompanyID, $mouID T_PriceM_MouID, 0 T_PricePriority, T_PacketDetailPriceAmount T_PriceAmount, T_PacketDetailPriceDisc T_PriceDisc, T_PacketDetailPriceDiscRp T_PriceDiscRp, T_PacketDetailPriceSubTotal T_PriceSubTotal, 0 T_PriceOther, T_PacketDetailPrice T_PriceTotal, 'Y' T_TestForceSell, 'N' is_packet, 0 packet_id, 'PX' px_type, concat('[', T_TestNat_TestID , ']') nat_test, '[]' child_test, 'N' IsFavourite, T_TestSasCode from t_packetdetail join t_test on T_PacketDetailT_TestID = T_TestID and T_PacketDetailIsActive = 'Y' and T_TestIsActive = 'Y' and T_PacketDetailT_PacketID = ? join nat_test on T_TestNat_TestID = Nat_TestID and Nat_TestIsActive = 'Y'"; $qry = $this->db->query($sql, array($packetID)); if (!$qry) { return array(false, print_r($this->db->error(), true)); } $ct_rows = $qry->result_array(); $p_nat_test = array(); foreach ($ct_rows as $ct_idx => $cr) { $sasCode = $cr["T_TestSasCode"] . '%'; $sql = "select distinct T_TestNat_TestID from t_test where T_TestSasCode like ? and T_TestIsActive = 'Y'"; $qry = $this->db->query($sql, array($sasCode)); if (!$qry) { return array(false, print_r($this->db->error(), true)); } $nt_rows = $qry->result_array(); $t_rows = array(); foreach ($nt_rows as $nr) { $t_rows[] = intval($nr["T_TestNat_TestID"]); $p_nat_test[] = intval($nr["T_TestNat_TestID"]); } $ct_rows[$ct_idx]['nat_test'] = json_encode($t_rows, JSON_NUMERIC_CHECK); } if (count($ct_rows) > 0) { $x_arr = array(); foreach ($ct_rows as $x_cr) { $x_arr[] = $x_cr; } $pn_rows[$idx]['child_test'] = json_encode($x_arr, true); $pn_rows[$idx]['nat_test'] = json_encode($p_nat_test, true); } unset($pn_rows[$idx]["Nat_TestNat_TestTypeID"]); unset($pn_rows[$idx]["T_TestSasCode"]); } $rows = array_merge($rows, $p_rows, $pn_rows); $qry = $this->db->query("delete from ss_price_mou where Ss_PriceMouM_MouID=?", array($mouID)); if (!$qry) { return array(false, "Regional " . print_r($this->db->error(), true)); } $qry = $this->db->insert_batch("ss_price_mou", $rows); if (!$qry) { return array(false, "Regional " . print_r($this->db->error(), true)); } return array(true, "OK"); } }