Files
BE_IBL/application/libraries/Nonlabtemplate.php
2026-04-15 15:16:12 +07:00

948 lines
39 KiB
PHP

<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Nonlabtemplate
{
function generate($T_SamplingSOID)
{
$CI = &get_instance();
$this->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");
}
}