<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class SsPriceMou{

   // retrun array status, message
   public function create($mouID) {
      $CI =& get_instance();
      $this->db = $CI->load->database("onedev",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");
   }
   public function edit($mouID,$testID,$cito) {
      $CI =& get_instance();
      $this->db = $CI->load->database("onedev",true);

      $sql = "select * from t_test where T_TestID = ? ";
      $qry = $this->db->query($sql, array($testID));
      if (! $qry ) {
         return array(false, print_r($this->db->error(),true));
      }
      $rows = $qry->result_array();
      if (count($rows) == 0 ) {
         return array(false, "No Test $testID found");
      }
      $sasCode = $rows[0]["T_TestSasCode"];
      if ( strlen($sasCode) == 8 ) {
         $flagProfile = false;
      } else {
         $flagProfile = 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, "No MOU $mouID found");
      }
      $mouName = $rows[0]["M_MouName"];
      $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_TestID = ?
         and T_PriceIsActive = 'Y' and T_TestIsActive = 'Y' 
         and T_TestIsPrice  = 'Y' and T_PriceIsCito = ?
         join nat_test on T_TestNat_TestID = Nat_TestID 
         and Nat_TestIsActive = 'Y' and Nat_TestNat_TestTypeID <> 5
         where T_PriceM_MouID = ?";
      $qry = $this->db->query($sql, array($testID, $cito, $mouID));
      if (! $qry ) {
         return array(false, 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 )  {
               return array(false, 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"]);
      }
      if ( count($rows) > 0 ) {
         $r = $rows[0];
         unset($r["T_TestSasCode"]);
         $this->db->where("T_PriceM_MouID", $r["T_PriceM_MouID"]);
         $this->db->where("T_TestID", $r["T_TestID"]);
         $this->db->where("T_PriceIsCito", $r["T_PriceIsCito"]);
         $qry = $this->db->update("ss_price_mou",$r);
         if (! $qry ) {
            return array(false, print_r($this->db->error(),true));
         }
      }
      $sasCode = substr($sasCode,0,8);
      foreach($rows as $idx => $r ) {
         if ( strlen($r["T_TestSasCode"]) > 8  ) {
            unset($rows[$idx]);
         }  else {
            unset($rows[$idx]["T_TestSasCode"]);
         }
      }
      if ($cito == 'Y' ) {
         return array(true,"OK",$rows);
      }
      // for non cito
      if($flagProfile ) {
         //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 T_TestSasCode = ?
            and Nat_TestIsActive = 'Y' and Nat_TestNat_TestTypeID = 5
            where length(T_TestSasCode) = 8 ";
         $qry = $this->db->query($sql, array($sasCode));

         if (! $qry ) {
            return array(false, print_r($this->db->error(),true));
         }
         $p_rows = $qry->result_array();

         $sasCodeLike = $sasCode . "%";
         $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 T_TestSasCode like ?
            join nat_test on T_TestNat_TestID = Nat_TestID 
            and Nat_TestIsActive = 'Y' 
            where T_PriceM_MouID = ?  ";
         $qry = $this->db->query($sql,array($sasCodeLike,$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 nat_test " . 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]);
            }
         }

         foreach($p_rows as $r) {
            $this->db->where("T_PriceM_MouID", $r["T_PriceM_MouID"]);
            $this->db->where("T_TestID", $r["T_TestID"]);
            $this->db->where("T_PriceIsCito", $r["T_PriceIsCito"]);
            $qry = $this->db->update("ss_price_mou",$r);
            if (! $qry ) {
               return array(false, "Err Update Ss_priceMou " . print_r($this->db->error(),true));
            }
         }
         $rows = array_merge($rows,$p_rows);
      }
      //Update Panel yang mengandung Test 
      $sql = "select 
         distinct T_PacketDetailT_PacketID
         from 
         t_packetdetail
         where T_PacketDetailIsActive = 'Y'
         and T_PacketDetailT_TestID = ?";
      $qry = $this->db->query($sql, array($testID));
      if (!$qry) {
         return array(false, print_r($this->db->error(),true));
      }
      $xrows = $qry->result_array();
      $packet_ids = "0";
      foreach($xrows as $r ) {
         $packet_ids .= "," . $r["T_PacketDetailT_PacketID"]; 
      }

      $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_PacketID in ( $packet_ids )
         and T_PacketM_MouID = ?";

      $qry = $this->db->query($sql, array($mouID));
      if (! $qry ) {
         return array(false, 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 $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, '[]' 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"]);
      }
      foreach($pn_rows as $r ) {
         $this->db->where("T_PriceM_MouID", $r["T_PriceM_MouID"]);
         $this->db->where("T_TestID", $r["T_TestID"]);
         $this->db->where("T_PriceIsCito", $r["T_PriceIsCito"]);
         $qry = $this->db->update("ss_price_mou",$r);
         if (! $qry ) {
            return array(false, print_r($this->db->error(),true));
         }
      }
      $rows = array_merge($rows,$pn_rows);
      return array(true,"OK",$rows);
   }
}
