db = $db; } public function getReportData(string $accessnumber, int $eng): array { $hostnumber = $this->getHost($accessnumber); $result = $this->getResult($accessnumber, $eng); $info = $this->getData2($accessnumber); $notes = $this->getNotes($accessnumber); $others = $this->getOthers($accessnumber, $eng); $collData = $this->getCollData($accessnumber); $recvData = $this->getRecvData($accessnumber); $noSample = $this->getNoSample($accessnumber); $collData = $this->cutData($collData); $recvData = $this->cutData($recvData); if ($noSample == '') { $status = $this->getStatus($accessnumber); } else { $status = "PENDING"; } $valBy = $this->getValBy($accessnumber); return [ 'hostnumber' => $hostnumber, 'result' => $result, 'info' => $info, 'notes' => $notes, 'others' => $others, 'collData' => $collData, 'recvData' => $recvData, 'noSample' => $noSample, 'status' => $status, 'valBy' => $valBy, 'date' => date('d-m-Y H:i') ]; } private function cutData(string $text): string { if (strlen($text) > 95) { $split_text = explode(" ", $text); $cut_length = 11; $split_text_cut1 = array_slice($split_text, 0, $cut_length); $split_text_cut2 = array_slice($split_text, $cut_length, count($split_text)); $text1 = implode(" ", $split_text_cut1); $text2 = implode(" ", $split_text_cut2); $text = $text1 . "\r\n" . $text2; } return $text; } private function getHost(string $accessnumber): string { $sql = "SELECT EXTERNALORDERNUMBER FROM REQUESTS WHERE ACCESSNUMBER=?"; $row = $this->db->query($sql, [$accessnumber])->getRowArray(); return $row['EXTERNALORDERNUMBER'] ?? ''; } private function getData2(string $accessnumber): string { $sql = "SELECT R.EXTERNALORDERNUMBER, FORMAT(SR.COLLECTIONDATE,'dd-MM-yyyy'), P.NAME, RIGHT(P.PATNUMBER,16), dmg.DMG_CADDRESS, P.TELEPHON, P.EMAIL, CASE WHEN P.SEX=1 THEN 'Male' WHEN P.SEX=2 THEN 'Female' ELSE 'Unknown' END, CASE WHEN FORMAT(P.BIRTHDATE,'MMdd')=FORMAT(R.COLLECTIONDATE,'MMdd') THEN DATEDIFF(YEAR,P.BIRTHDATE, R.COLLECTIONDATE) ELSE FLOOR(DATEDIFF(DAY, P.BIRTHDATE, R.COLLECTIONDATE) / 365.25) END, CASE WHEN DATEPART(day,R.COLLECTIONDATE) >= DATEPART(day,P.BIRTHDATE) THEN DATEDIFF(MONTH,P.BIRTHDATE, R.COLLECTIONDATE)%12 ELSE DATEDIFF(MONTH, P.BIRTHDATE, DATEADD(MONTH,-1,R.COLLECTIONDATE))%12 END, RO.COMMENTTEXT, dmg.DMG_CCITY, P.BIRTHDATE, T.SHORTTEXT FROM REQUESTS R LEFT JOIN SP_REQUESTS SR ON SR.SP_ACCESSNUMBER=R.ACCESSNUMBER LEFT JOIN PATIENTS P ON P.PATID=R.PATID LEFT JOIN REQUESTS_OCOM RO ON RO.REQUESTID=R.REQUESTID LEFT JOIN DICT_TEXTS T ON P.TITLEID=T.TEXTID LEFT JOIN GDC_CMOD.dbo.TDL_DEMOGRAPHIC dmg ON RIGHT(P.PATNUMBER,16)=dmg.DMG_CPATNUMBER COLLATE Latin1_general_CS_AS WHERE R.ACCESSNUMBER=?"; $row = $this->db->query($sql, [$accessnumber])->getRowArray(); $regno = $row['EXTERNALORDERNUMBER'] ?? ''; $reqdate = isset($row[1]) ? $row[1] : ''; $pname = $row['NAME'] ?? ''; $pnum = $row[2] ?? ''; $paddress = $row['DMG_CADDRESS'] ?? ''; $pphone = $row['TELEPHON'] ?? ''; $pemail = $row['EMAIL'] ?? ''; $psex = $row[3] ?? ''; $pAge = $row[4] ?? ''; $pAgeM = $row[5] ?? ''; $rcomment = $row['COMMENTTEXT'] ?? ''; $pcity = $row['DMG_CCITY'] ?? ''; $pdob = ''; if (isset($row['BIRTHDATE']) && $row['BIRTHDATE'] != null) { $pdob = date_format($row['BIRTHDATE'], 'd-m-Y'); } $title = $row['SHORTTEXT'] ?? ''; if ($title != '') { $pname = "$pname, $title"; } $sql = "SELECT ODR_CRESULT_TO, ODR_CREFERENCENAME, ODR_CREFERENCEDOCNAME FROM GDC_CMOD.dbo.TDL_ORDER WHERE ODR_CNOLAB=?"; $row2 = $this->db->query($sql, [$regno])->getRowArray(); $sendto = $row2['ODR_CRESULT_TO'] ?? ''; $loc = $row2['ODR_CREFERENCENAME'] ?? ''; $doc = $row2['ODR_CREFERENCEDOCNAME'] ?? ''; if ($loc == 'PT. BANGUN GUNUNG SARI (BGS)') { $loc = "PT. BANGUN GUNUNG SARI (BGS"; } elseif ($loc == 'PT. PUTRA DUTA PEMBANGUNAN') { $loc = "PT. PUTRA DUTA PEMBANGUNAN"; } elseif ($loc == 'PT. BENSA ADHI CIPTA') { $loc = "-"; } elseif ($loc == 'PT. LIM SIANG HUAT BALINDO') { $loc = "-"; } elseif ($loc == '') { $loc = 'WALK IN'; } if ($doc == '') { $doc = $loc; } $data = "
CLINICAL LABORATORY
Reg# : $regno Date
: $reqdate  $sendto
Lab# : $accessnumber DoB : $pdob (D-M-Y)
MR : $pnum Age : $pAge years, $pAgeM months
Name : $pname
Address : $paddress
Phone/Email : $pphone / $pemail
City : $pcity
Sex : $psex
Reff : $loc
Doctor : $doc
"; return $data; } private function getResult(string $accessnumber, int $eng): array { $_chinese = [ "HBSAG" => "B型肝炎抗原", "GGT" => "丙种谷氨酰转肽酶", "NEUT" => "中性粒细胞", "HBSAT" => "乙肝表面抗体", "AHBS" => "乙肝表面抗体", "AHBST" => "乙肝表面抗体效价", "LDH" => "乳酸脱氢酶", "LDL" => "
低密度脂蛋白", "PROLA" => "促乳素", "TPHCG" => "促绒毛膜性激素测验", "PSA" => "前列腺特异性抗原", "MONO" => "单核细胞", "HSV1G" => "单纯疱疹病毒抗体1IgG", "HSV1M" => "单纯疱疹病毒抗体1IgM", "HSV2G" => "单纯疱疹病毒抗体2IgG", "HSV2M" => "单纯疱疹病毒抗体2IgM", "CRPQN" => "反应蛋白质量", "2SWTH" => "咽喉", "2DIPT" => "咽喉", "BASO" => "嗜性粒血球数", "EOS" => "嗜酸性粒血球", "EOSC" => "嗜酸性粒血球", "PBF" => "
外周血沈淀率", "UA" => "尿酸", "CMVG" => "巨细胞病毒IgG", "CMVM" => "巨细胞病毒IgM", "MCHC" => "平均含血红素浓度", "MCH" => "平均含血红素量", "ACAG" => "异常冠状动脉IgG", "ACAM" => "异常冠状动脉IgM", "GDS" => "当时", "VDRL" => "性病研究实验试验", "CHOL" => "总胆固醇", "UBIL" => "总胆红素", "TP" => "总蛋白质(量)", "EBVEA" => "抗EB病毒定量免疫A", "EBVVA" => "抗EB病毒滴度免疫A", "SALMG" => "抗沙门菌IgG", "SALMM" => "抗沙门菌IgM", "DENGG" => "抗登革热IgG", "DENGR" => "抗登革热IgG/IgM快速", "DENGM" => "抗登革热IgM", "ICTTB" => "抗结核菌抗体线测试", "ASTO" => "抗链球菌", "AMUBA" => "抗阿米巴", "TPHA" => "梅毒螺旋体血凝集测定", "PAPS" => "涂片", "LYM" => "淋巴细胞", "1GO" => "淋病", "FPSA" => "游离前列腺特异性抗原", "GLOB" => "球蛋白", "TG" => "甘油三脂", "GROW" => "生长荷尔蒙", "PTH" => "甲状旁腺激素", "TPO" => "甲状腺过氧化物酶抗体", "AFP" => "甲胎蛋白", "CA125" => "癌抗体125", "CA153" => "癌抗体15-3", "CA199" => "癌抗体19-9", "CA724" => "癌抗体72-4", "CEA" => "癌胚抗原", "1NEIS" => "白喉(咽)", "2DIPN" => "白喉(鼻)", "WBC" => "白细胞", "FWBC" => "白细胞", "ULEUX" => "白细胞数目", "ALB" => "白蛋白", "CORPG" => "皮质醇", "CORSR" => "皮质醇", "DBIL" => "直接", "TESTO" => "睾酮", "ALP" => "
碱性磷酸", "NSE" => "神经原特异性烯醇化酶", "GLUP" => "空腹", "HBA1C" => "空腹与餐后血糖水平", "2SPER" => "精虫", "SPERM" => "精虫", "RBC" => "红细胞", "FRBC" => "红细胞", "UERY" => "红细胞数目", "LED" => "红细胞沈降率", "MCV" => "红血球平均体积", "PCV" => "红血球积压", "PASMS" => "组织学 病理", "CYSMS" => "细胞学", "CKMB" => "细胞角蛋白", "CREA" => "肌酸酐,肌酸内酰胺酸", "BTGN" => "肾石化验", "BATU" => "胆石化验", "CHE" => "胆碱酯酶", "INSL" => "胰岛素", "CYSTC" => "胱硫醚", "APN" => "脂联素", "LIPO" => "脂蛋白", "2PUS" => "脓", "DHEAS" => "脱氢表雄酮硫酸酯", "UGLU" => "葡萄糖", "UPROT" => "蛋白", "GOLRH" => "血型", "PLT" => "血小板", "BUN" => "血尿素氮", "TBIL" => "血清谷丙转氨酶", "SGPT" => "血清谷丙转氨酶", "SGOT" => "血清谷草转氨酶", "HB" => "血红素", "CHLAA" => "衣原体素", "CHLAG" => "衣原体素IgG", "CHLAM" => "衣原体素IgM", "HSCRP" => "赵敏反应蛋白", "APOA1" => "载脂蛋白", "APOB" => "载脂蛋白", "APOR" => "载脂蛋白比率", "SDLDL" => "载脂蛋白比率", "ALDO" => "醛固酮", "DIFF" => "鉴别", "ESTRI" => "雌三醇", "FESTR" => "雌三醇", "RUBG" => "风疹IgG", "RUBM" => "风疹IgM", "GLU2P" => "餐后两个小时", "HDL" => "高密度脂蛋白" ]; $_italic = ["UTRI","ITALIC","PLSFC", "PLSOV", "PLSML", "PLSVI"]; $sql = "SELECT DC.FULLTEXT, DT.TESTCODE, T.VALIDATIONSTATUS, RESULT = CASE WHEN T.RESTYPE=0 THEN 'Pending' WHEN T.RESTYPE=4 AND T.RESVALUE='' AND T.RESSTATUS=1 THEN '.' WHEN T.RESTYPE IN (7,15,4) THEN T.RESVALUE WHEN T.RESTYPE=9 THEN +'< '+T.RESVALUE WHEN T.RESTYPE=10 THEN +'> '+T.RESVALUE WHEN T.RESVALUE IS NULL THEN CASE WHEN T.CODEDRESULTID IS NULL AND DT.TESTTYPE IN (4,5) THEN NULL WHEN T.CODEDRESULTID IS NULL THEN TC.COMMENTTEXT WHEN T.CODEDRESULTID IS NOT NULL AND T.RESTYPE=6 AND SUBSTRING(DX.FULLTEXT,1,3) NOT LIKE '%#%' THEN DX.FULLTEXT END ELSE T.RESVALUE END, T.MINIMUM, T.MAXIMUM, DT.FULLTEXT, DT.RESPRECISION, DT.RESPRECISION2, DT.OPERAND, DT.SOFTCONVERSION, DT.UNITS, DT.UNITS2, T.RESTYPE, VI.FULLTEXT, CASE WHEN TC.COMMENTTEXT IS NULL THEN DX2.FULLTEXT ELSE TC.COMMENTTEXT END, T.RERUN FROM TESTS T JOIN DICT_TESTS DT ON DT.TESTID=T.TESTID LEFT JOIN DICT_TEXTS DX ON DX.TEXTID=T.CODEDRESULTID LEFT JOIN TESTS_COMMENTS TC ON TC.REQTESTID=T.REQTESTID LEFT JOIN DICT_TEXTS DX2 ON DX2.TEXTID=TC.COMMENTCODEDID LEFT JOIN REQUESTS R ON R.REQUESTID=T.REQUESTID LEFT JOIN DICT_CHAPTERS DC ON DC.CHAPID=T.CHAPID LEFT JOIN GDC_CMOD.dbo.V_INTER2 VI ON VI.ATR_ACCESSNUMBER=R.ACCESSNUMBER AND DT.TESTCODE=VI.ATR_TESTCODE WHERE R.ACCESSNUMBER=? AND T.NOTPRINTABLE IS NULL AND DT.TESTCODE<>'STATS' AND ISNUMERIC(DT.TESTCODE)=0 ORDER BY T.TESTORDER"; $stmt = $this->db->query($sql, [$accessnumber]); $rows = $stmt->getResultArray(); $CHAP = ""; $i = 0; $page = 1; $line = 0; $lpp = 38; $done[1] = ""; $nline = 0; $RERUN = 1; foreach ($rows as $row) { $CHAPTER = $row[0]; $TESTCODE = $row[1]; $VALIDATIONSTATUS = $row[2]; $R1 = $row[3]; if ($R1 == '****') { $R1 = '-'; } $L1 = $row[4]; $H1 = $row[5]; $FULLTEXT = $row[6]; $PRECISION1 = $row[7]; $PRECISION2 = $row[8]; $OPERAND = $row[9]; $SOFTCONVERSION = $row[10]; $U1 = $row[11]; $U2 = $row[12]; $RESTYPE = $row[13]; $I = $row[14]; $RESCOM = $row[15]; if ($eng == 1) { $ICHAPTER = substr($CHAPTER, strpos($CHAPTER, '#E') + 2, strrpos($CHAPTER, '#E') - strpos($CHAPTER, '#E') - 2); if ($ICHAPTER != $CHAP) { $raw[$i] = "
$ICHAPTER
\r\n"; $nline += 1; } $CHAP = $ICHAPTER; $ITEXT = substr($FULLTEXT, strpos($FULLTEXT, '#E') + 2, strrpos($FULLTEXT, '#E') - strpos($FULLTEXT, '#E') - 2); } else { $ICHAPTER = substr($CHAPTER, 2, strrpos($CHAPTER, '#I') - 2); if ($ICHAPTER != $CHAP) { $raw[$i] = "
$ICHAPTER
\r\n"; $nline += 1; } $CHAP = $ICHAPTER; $ITEXT = substr($FULLTEXT, 2, strrpos($FULLTEXT, '#I') - 2); } if ($TESTCODE == 'PCRN') { $raw[$i] .= "
$ITEXT
"; $done[$page] .= $raw[$i]; } elseif (!is_numeric($RESTYPE)) { if (array_key_exists($TESTCODE, $_chinese)) { $ITEXT = rtrim($ITEXT)." ".$_chinese[$TESTCODE].''; } if ($ITEXT != '') { $ITEXT = "
$ITEXT
\r\n"; $nline += 1; $raw[$i] .= $ITEXT; } $RERUN = $row[16]; } else { if (substr($R1, 0, 2) == '< ' && is_numeric(substr($R1, 2, strlen($R1)))) { $r1 = substr($R1, 2, strlen($R1)); $r1 -= 1; } elseif (substr($R1, 0, 2) == '> ' && is_numeric(substr($R1, 2, strlen($R1)))) { $r1 = substr($R1, 2, strlen($R1)); $r1 += 1; } else { $r1 = $R1; } $F = ""; if ($TESTCODE != 'TROPI') { if ($r1 < $L1 && is_numeric($r1) && is_numeric($L1)) { $F = "*L"; } elseif ($r1 > $H1 && is_numeric($r1) && is_numeric($H1)) { $F = "*H"; } } if ($RESTYPE == '9' && $TESTCODE == 'LH') { $qr1 = preg_replace('/<|>| |/', '', $r1); if ($qr1 < $L1 && is_numeric($qr1) && is_numeric($L1)) { $F = "*L"; } elseif ($qr1 > $H1 && is_numeric($qr1) && is_numeric($H1)) { $F = "*H"; } } if ($RESTYPE == 0) { $R2 = ""; $L1 = ""; $H1 = ""; $L2 = ""; $H2 = ""; } else { if (is_numeric($L1) && $PRECISION1 != 0) { $L1 = number_format($L1, $PRECISION1); } else { $L1 = number_format($L1); } if (is_numeric($H1) && $PRECISION1 != 0) { $H1 = number_format($H1, $PRECISION1); } else { $H1 = number_format($H1); } if (in_array($RESTYPE, [7, 15, 4]) && $OPERAND == 3) { if (is_numeric($R1)) { $R2 = number_format($R1 * $SOFTCONVERSION, $PRECISION2, '.', ''); } else { $R2 = ''; } if ($L1 != 0) { $L2 = number_format($L1 * $SOFTCONVERSION, $PRECISION2); } else { $L2 = 0; } if (is_numeric($H1) && $H1 != 0) { $H2 = number_format($H1 * $SOFTCONVERSION, $PRECISION2); } else { $H2 = 0; } } elseif (in_array($RESTYPE, [7, 15, 4]) && $OPERAND == 4) { if (is_numeric($R1)) { $R2 = number_format($R1 / $SOFTCONVERSION, $PRECISION2); } else { $R2 = ''; } if (is_numeric($L1) && $L1 != 0) { $L2 = number_format($L1 / $SOFTCONVERSION, $PRECISION2); } else { $L2 = 0; } if (is_numeric($H1) && $H1 != 0) { $H2 = number_format($H1 / $SOFTCONVERSION, $PRECISION2); } else { $H2 = 0; } } elseif (in_array($RESTYPE, [9, 10]) & $OPERAND == 3) { $r21 = substr($R1, 0, 2); $r22 = substr($R1, 2, 10); if (strlen($r22) > 5) { $r21 = substr($r21, 0, 1); } $R1 = $r21.$r22; $r22 = number_format($r22 * $SOFTCONVERSION, $PRECISION2, '.', ''); $R2 = $r21.$r22; if ($L1 != 0) { $L2 = number_format($L1 * $SOFTCONVERSION, $PRECISION2); } else { $L2 = ''; } if ($H1 != 0) { $H2 = number_format($H1 * $SOFTCONVERSION, $PRECISION2); } else { $H2 = ''; } } elseif (in_array($RESTYPE, [9, 10]) & $OPERAND == 4) { $r21 = substr($R1, 0, 2); $r22 = substr($R1, 2, 10); $r22 = number_format($r22 / $SOFTCONVERSION, $PRECISION2, '.', ''); $R2 = $r21.$r22; if ($L1 != 0) { $L2 = number_format($L1 / $SOFTCONVERSION, $PRECISION2); } else { $L2 = ''; } if ($H1 != 0) { $H2 = number_format($H1 / $SOFTCONVERSION, $PRECISION2); } else { $H2 = ''; } } else { $R2 = $R1; $L2 = $L1; $H2 = $H1; } } if (($L1 == 0) && ($H1 == 0)) { $L1 = ''; $H1 = ''; $L2 = ''; $H2 = ''; } if (is_numeric($R1) && is_numeric($PRECISION1)) { $R1 = number_format($R1, $PRECISION1, '.', ','); } if (is_numeric($R2) && is_numeric($PRECISION2)) { $R2 = number_format($R2, $PRECISION2, '.', ','); } $TEXT = explode("\r\n", $ITEXT); $test = []; $res = []; foreach ($TEXT as $text_item) { $test[] = substr($text_item, 0, 33); $res[] = substr($text_item, 33, strlen($text_item)); } $space = (strlen($test[0]) - strlen(ltrim($test[0]))) * 7; $test = rtrim(implode("\r\n", $test)); $res = implode("\r\n", $res); if (in_array($TESTCODE, $_italic)) { $test = "$test"; } if (array_key_exists($TESTCODE, $_chinese)) { $test .= " ".$_chinese[$TESTCODE].''; } $tline = count(explode(PHP_EOL, $test)); $rline = count(explode(PHP_EOL, $res)); $r1line = count(explode(PHP_EOL, $R1)); if ($rline < $r1line) { $rline = $r1line; } if ($test == ' Note') { $ITEXT = "
$test
$res            
\r\n"; } elseif (strlen($RESCOM) < 2) { $ITEXT = " $test
$res  
\r\n"; } else { $rline += count(explode(PHP_EOL, $RESCOM)); $res = rtrim($res); $ITEXT = " $test
$res        \r\n$RESCOM
\r\n "; } if ($tline > $rline) { $nline += $tline; } else { $nline += $rline; } $posR1 = strpos($ITEXT, "{R1"); $posR12 = strrpos($ITEXT, "{R1"); $posR2 = strpos($ITEXT, "{R2"); $posR22 = strrpos($ITEXT, "{R2"); $posI1 = strpos($ITEXT, "{I"); $posI2 = strrpos($ITEXT, "{I"); $posL1 = strpos($ITEXT, "{L1"); $posL12 = strrpos($ITEXT, "{L1"); $posH1 = strpos($ITEXT, "{H1"); $posH12 = strrpos($ITEXT, "{H1"); $posL2 = strpos($ITEXT, "{L2"); $posL22 = strrpos($ITEXT, "{L2"); $posH2 = strpos($ITEXT, "{H2"); $posH22 = strrpos($ITEXT, "{H2"); $posU1 = strpos($ITEXT, "{U1"); $posU2 = strpos($ITEXT, "{U2"); $ITEXT = str_replace("{R1", " ", $ITEXT); $ITEXT = str_replace("{R2", " ", $ITEXT); $ITEXT = str_replace("{I", " ", $ITEXT); $ITEXT = str_replace("{L1", " ", $ITEXT); $ITEXT = str_replace("{H1", " ", $ITEXT); $ITEXT = str_replace("{L2", " ", $ITEXT); $ITEXT = str_replace("{H2", " ", $ITEXT); $ITEXT = str_replace("{U1", " ", $ITEXT); $ITEXT = str_replace("{U2", " ", $ITEXT); if (in_array($RESTYPE, [4, 6, 7, 9, 10, 15])) { if ($R1 == 'Negatif') { $R2 = 'Negative'; } if ($R1 == 'Positif') { $R2 = 'Positive'; } $ITEXT = $this->f_repl($ITEXT, $R1.' '.$F, $posR1); if ($posR1 != $posR12) { $ITEXT = $this->f_repl($ITEXT, $R1.' '.$F, $posR12); } $ITEXT = $this->f_repl($ITEXT, $L1, $posL1); if ($posL1 != $posL12) { $ITEXT = $this->f_repl($ITEXT, $L1, $posL12); } $ITEXT = $this->f_repl($ITEXT, $H1, $posH1); if ($posH1 != $posH12) { $ITEXT = $this->f_repl($ITEXT, $H1, $posH12); } if (isset($R2)) { $ITEXT = $this->f_repl($ITEXT, $R2.' '.$F, $posR2); if ($posR2 != $posR22) { $ITEXT = $this->f_repl($ITEXT, $R2.' '.$F, $posR22); } } if (isset($L2)) { $ITEXT = $this->f_repl($ITEXT, $L2, $posL2); } if ($posL2 != $posL22) { $ITEXT = $this->f_repl($ITEXT, $L2, $posL22); } if (isset($H2)) { $ITEXT = $this->f_repl($ITEXT, $H2, $posH2); } if ($posH2 != $posH22) { $ITEXT = $this->f_repl($ITEXT, $H2, $posH22); } if ($I == 'Negative' || $I == 'Negatif') { $I1 = "Negatif"; $I2 = "Negative"; $ITEXT = $this->f_repl($ITEXT, $I1, $posI1); $ITEXT = $this->f_repl($ITEXT, $I2, $posI2); } else { $ITEXT = $this->f_repl($ITEXT, $I, $posI1); $ITEXT = $this->f_repl($ITEXT, $I, $posI2); } $ITEXT = $this->f_repl($ITEXT, $U1, $posU1); $ITEXT = $this->f_repl($ITEXT, $U2, $posU2); } elseif (in_array($RESTYPE, [2, 0, 5])) { if (strlen($RESCOM) < 2) { if ($TESTCODE == 'BUCRR') { $ITEXT = $this->f_repl($ITEXT, $R1, $posR1); $ITEXT = $this->f_repl($ITEXT, $R1, $posR2); } else { $ITEXT = substr($ITEXT, 0, $posR1); $ITEXT .= $R1." "; } } else { $ITEXT = substr($ITEXT, 0, $posR1); $ITEXT .= "$R1 \r\n$RESCOM "; } } $raw[$i] .= $ITEXT; $line += $nline; if ($TESTCODE != 'COVGG') { if ($line > $lpp) { $page++; $done[$page] = ""; $line = $nline; } } else { if ($line > $lpp - 14) { $page++; $done[$page] = ""; $line = $nline; } } if ($line > $lpp) { $page++; $done[$page] = ""; $line = $nline; } $done[$page] .= $raw[$i]; $i++; $raw[$i] = ""; $nline = 0; } } return $done; } private function f_repl(string $text, string $ntext, int $pos): string { if ($pos != 0) { $len = strlen($ntext); if (substr($text, $pos, 1) == ' ') { $text = substr_replace($text, $ntext, $pos, $len); } } return $text; } private function getNotes(string $accessnumber): string { $sql = "SELECT RO.COMMENTTEXT FROM REQUESTS R LEFT JOIN REQUESTS_OCOM RO ON RO.REQUESTID=R.REQUESTID WHERE R.ACCESSNUMBER=?"; $row = $this->db->query($sql, [$accessnumber])->getRowArray(); return $row['COMMENTTEXT'] ?? ''; } private function getOthers(string $accessnumber, int $eng): string { $sql = "SELECT DT.FULLTEXT FROM TESTS T LEFT JOIN REQUESTS R ON R.REQUESTID=T.REQUESTID LEFT JOIN DICT_TESTS DT ON DT.TESTID=T.TESTID WHERE R.ACCESSNUMBER=? AND ISNUMERIC(DT.TESTCODE)=1 ORDER BY T.TESTORDER"; $stmt = $this->db->query($sql, [$accessnumber]); $rows = $stmt->getResultArray(); $i = 1; $raw = ""; foreach ($rows as $row) { $text = $row[0]; if ($eng == 1) { $text = substr($text, strpos($text, '#E') + 2, strrpos($text, '#E') - strpos($text, '#E') - 2); } else { $text = substr($text, strpos($text, '#I') + 2, strrpos($text, '#I') - strpos($text, '#I') - 2); } $text = str_replace("{R1", " ", $text); $text = str_replace("{R2", " ", $text); $text = str_replace("{I", " ", $text); $text = str_replace("{L1", " ", $text); $text = str_replace("{H1", " ", $text); $text = str_replace("{L2", " ", $text); $text = str_replace("{H2", " ", $text); $text = str_replace("{U1", " ", $text); $text = str_replace("{U2", " ", $text); $text = trim($text); $raw .= "$i. $text
\r\n"; $i++; } return $raw; } private function getCollData(string $accessnumber): string { $collData = ""; $sql = "SELECT DISTINCT FORMAT(COLLECTIONDATE,'dd-MM-yyyy'), FORMAT(COLLECTIONDATE,'HH:mm'), x = STUFF( (SELECT ', ' + dst.SHORTTEXT FROM GDC_CMOD.dbo.TUBES t1 LEFT JOIN glendb.dbo.DICT_SAMPLES_TYPES dst ON t1.TUBENUMBER=dst.SAMPCODE WHERE t1.ACCESSNUMBER=t.ACCESSNUMBER AND FORMAT(t1.COLLECTIONDATE,'dd-MM-yyyy HH:mm')=FORMAT(t.COLLECTIONDATE,'dd-MM-yyyy HH:mm') FOR XML PATH('')), 1,1, '') FROM GDC_CMOD.dbo.TUBES t WHERE t.ACCESSNUMBER=? AND STATUS=1"; $stmt = $this->db->query($sql, [$accessnumber]); $rows = $stmt->getResultArray(); $date1 = ''; foreach ($rows as $row) { if ($date1 == $row[0]) { $collData .= $row[1].$row[2].'. '; } else { $collData .= $row[0].' '.$row[1].$row[2].'. '; } $date1 = $row[0]; } return $collData; } private function getRecvData(string $accessnumber): string { $recvData = ""; $sql = "SELECT ds.SHORTTEXT, FORMAT(st.COLLECTIONDATE,'dd-MM-yyyy'), FORMAT(st.COLLECTIONDATE,'HH:mm') FROM SP_TUBES st LEFT JOIN DICT_SAMPLES_TYPES ds ON ds.SAMPCODE=st.SAMPLETYPE WHERE st.SP_ACCESSNUMBER=? AND st.TUBESTATUS=4"; $stmt = $this->db->query($sql, [$accessnumber]); $rows = $stmt->getResultArray(); $date1 = ''; $time1 = ''; foreach ($rows as $row) { $x = $row[0]; $date = $row[1]; $time = $row[2]; if ($date1 == $date) { if ($time1 == $time) { $recvData .= $x.'. '; } else { $recvData .= $time.' '.$x.'. '; } } else { $recvData .= $date.' '.$time.' '.$x.'. '; } $date1 = $date; $time1 = $time; } return $recvData; } private function getNoSample(string $accessnumber): string { $sql = "SELECT DST.SHORTTEXT FROM SP_TUBES ST LEFT JOIN DICT_SAMPLES_TYPES DST ON DST.SAMPCODE=ST.TUBETYPE WHERE ST.SP_ACCESSNUMBER=? AND ST.TUBESTATUS<>4"; $stmt = $this->db->query($sql, [$accessnumber]); $rows = $stmt->getResultArray(); $noSample = ''; foreach ($rows as $row) { $sample = $row[0]; $noSample .= " $sample No Sample \r"; } return $noSample; } private function getStatus(string $accessnumber): string { $sql = "SELECT STATS FROM GDC_CMOD.dbo.V_DASHBOARD WHERE SP_ACCESSNUMBER=?"; $row = $this->db->query($sql, [$accessnumber])->getRowArray(); if (isset($row['STATS'])) { $status = $row['STATS']; if ($status == 'Comp') { $status = 'FINAL'; } else { $status = 'PENDING'; } } else { $status = ''; } return $status; } private function getValBy(string $accessnumber): string { $sql = "SELECT TOP 1 a.INITUSER, MAX(STEPDATE) as STEPDATE FROM glendb.dbo.AUDIT_TRAIL a WHERE (a.LIS_SESSION='VAL' OR (a.LIS_SESSION='ERM' AND a.VALIDATION=5)) AND a.ATR_ACCESSNUMBER=? GROUP BY a.INITUSER, a.STEPDATE ORDER BY a.STEPDATE DESC"; $row = $this->db->query($sql, [$accessnumber])->getRowArray(); $valBy = $row['INITUSER'] ?? ''; if ($valBy == '' || $valBy == 'LIS') { $valBy = "AHT"; } return $valBy; } }