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;
}
}