diff --git a/app/Config/Routes.php b/app/Config/Routes.php index ea41e2b..3195bf9 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -92,18 +92,12 @@ $routes->group('cs', ['filter' => 'role:4'], function ($routes) { $routes->get('/dummypage', 'Home::dummyPage'); -// Report generation - Lab, Admin, Superuser -$routes->group('report', ['filter' => 'role:0,1,2'], function ($routes) { +// Report generation - Lab, Admin, Superuser, CS +$routes->group('report', ['filter' => 'role:0,1,2,4'], function ($routes) { $routes->get('(:num)', 'ReportController::generate/$1'); - $routes->get('(:num)/preview', 'ReportController::preview/$1'); $routes->get('(:num)/eng', 'ReportController::generate/$1/1'); - $routes->get('(:num)/preview/eng', 'ReportController::preview/$1/1'); -}); - -// Print access for CS role only -$routes->group('report/print', ['filter' => 'role:4'], function ($routes) { - $routes->get('(:num)', 'ReportController::print/$1'); - $routes->get('(:num)/eng', 'ReportController::print/$1/1'); + $routes->get('(:num)/print', 'ReportController::print/$1'); + $routes->get('(:num)/print/eng', 'ReportController::print/$1/1'); }); // Keep backward compatibility - updated filter diff --git a/app/Controllers/ReportController.php b/app/Controllers/ReportController.php index 8800077..c84e3fd 100644 --- a/app/Controllers/ReportController.php +++ b/app/Controllers/ReportController.php @@ -15,7 +15,25 @@ class ReportController extends BaseController helper(['url', 'text']); } - public function generate($accessnumber, $eng = 0, $preview = 0) + public function generate($accessnumber, $eng = 0, $ispdf = 0) + { + if ($ispdf == 0) { + $ispdf = $this->request->getVar('ispdf') ?? 0; + } + + return $this->renderReport($accessnumber, $eng, $ispdf, false); + } + + public function print($accessnumber, $eng = 0, $ispdf = 0) + { + if ($ispdf == 0) { + $ispdf = $this->request->getVar('ispdf') ?? 0; + } + + return $this->renderReport($accessnumber, $eng, $ispdf, true); + } + + private function renderReport($accessnumber, $eng, $ispdf, $shouldLog) { $userroleid = session()->get('userroleid'); if (!in_array($userroleid, [0, 1, 2, 4])) { @@ -23,31 +41,17 @@ class ReportController extends BaseController } $data = $this->reportHelper->getReportData($accessnumber, $eng); - $data['preview'] = $preview; $data['eng'] = $eng; $data['accessnumber'] = $accessnumber; + $data['ispdf'] = $ispdf; - if ($preview == 0) { + if ($shouldLog == true) { $this->logPrintAudit($accessnumber, $data['status']); } return view('report/template', $data); } - public function preview($accessnumber, $eng = 0) - { - return $this->generate($accessnumber, $eng, 1); - } - - public function print($accessnumber, $eng = 0) - { - $userroleid = session()->get('userroleid'); - if ($userroleid != 4) { - return $this->response->setStatusCode(403)->setJSON(['message' => 'Unauthorized']); - } - return $this->generate($accessnumber, $eng, 0); - } - private function logPrintAudit($accessnumber, $status) { $sql = "INSERT INTO GDC_CMOD.dbo.AUDIT_REQUESTS(ACCESSNUMBER, STEPDATE, STEPTYPE, STEPSTATUS) diff --git a/app/Libraries/ReportHelper.php b/app/Libraries/ReportHelper.php index d548d37..76a4bbb 100644 --- a/app/Libraries/ReportHelper.php +++ b/app/Libraries/ReportHelper.php @@ -31,7 +31,7 @@ class ReportHelper } $valBy = $this->getValBy($accessnumber); - + $valData = $this->getValData($accessnumber); return [ 'hostnumber' => $hostnumber, 'result' => $result, @@ -43,6 +43,8 @@ class ReportHelper 'noSample' => $noSample, 'status' => $status, 'valBy' => $valBy, + 'val1User' => $valData['VAL1USER'] ?? '', + 'val2User' => $valData['VAL2USER'] ?? '', 'date' => date('d-m-Y H:i') ]; } @@ -70,22 +72,30 @@ class ReportHelper 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, + $sql = "SELECT R.EXTERNALORDERNUMBER AS EXTERNALORDERNUMBER, + FORMAT(SR.COLLECTIONDATE,'dd-MM-yyyy') AS REQDATE, + P.NAME AS NAME, + RIGHT(P.PATNUMBER,16) AS PATNUM, + dmg.DMG_CADDRESS AS DMG_CADDRESS, + P.TELEPHON AS TELEPHON, + P.EMAIL AS EMAIL, CASE WHEN P.SEX=1 THEN 'Male' WHEN P.SEX=2 THEN 'Female' ELSE 'Unknown' - END, + END AS SEX, 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, + END AS AGE, 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 + END AS AGEMONTHS, + RO.COMMENTTEXT AS COMMENTTEXT, + dmg.DMG_CCITY AS DMG_CCITY, + P.BIRTHDATE AS BIRTHDATE, + T.SHORTTEXT AS SHORTTEXT FROM REQUESTS R LEFT JOIN SP_REQUESTS SR ON SR.SP_ACCESSNUMBER=R.ACCESSNUMBER LEFT JOIN PATIENTS P ON P.PATID=R.PATID @@ -97,20 +107,20 @@ class ReportHelper $row = $this->db->query($sql, [$accessnumber])->getRowArray(); $regno = $row['EXTERNALORDERNUMBER'] ?? ''; - $reqdate = isset($row[1]) ? $row[1] : ''; + $reqdate = $row['REQDATE'] ?? ''; $pname = $row['NAME'] ?? ''; - $pnum = $row[2] ?? ''; + $pnum = $row['PATNUM'] ?? ''; $paddress = $row['DMG_CADDRESS'] ?? ''; $pphone = $row['TELEPHON'] ?? ''; $pemail = $row['EMAIL'] ?? ''; - $psex = $row[3] ?? ''; - $pAge = $row[4] ?? ''; - $pAgeM = $row[5] ?? ''; + $psex = $row['SEX'] ?? ''; + $pAge = $row['AGE'] ?? ''; + $pAgeM = $row['AGEMONTHS'] ?? ''; $rcomment = $row['COMMENTTEXT'] ?? ''; $pcity = $row['DMG_CCITY'] ?? ''; $pdob = ''; if (isset($row['BIRTHDATE']) && $row['BIRTHDATE'] != null) { - $pdob = date_format($row['BIRTHDATE'], 'd-m-Y'); + $pdob = date('d-m-Y', strtotime($row['BIRTHDATE'])); } $title = $row['SHORTTEXT'] ?? ''; if ($title != '') { @@ -202,7 +212,9 @@ class ReportHelper $_italic = ["UTRI","ITALIC","PLSFC", "PLSOV", "PLSML", "PLSVI"]; - $sql = "SELECT DC.FULLTEXT, DT.TESTCODE, T.VALIDATIONSTATUS, + $sql = "SELECT DC.FULLTEXT AS CHAPTER, + DT.TESTCODE AS TESTCODE, + T.VALIDATIONSTATUS AS VALIDATIONSTATUS, RESULT = CASE WHEN T.RESTYPE=0 THEN 'Pending' WHEN T.RESTYPE=4 AND T.RESVALUE='' AND T.RESSTATUS=1 THEN '.' @@ -217,13 +229,22 @@ class ReportHelper 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, + T.MINIMUM AS MINIMUM, + T.MAXIMUM AS MAXIMUM, + DT.FULLTEXT AS FULLTEXT, + DT.RESPRECISION AS PRECISION1, + DT.RESPRECISION2 AS PRECISION2, + DT.OPERAND AS OPERAND, + DT.SOFTCONVERSION AS SOFTCONVERSION, + DT.UNITS AS U1, + DT.UNITS2 AS U2, + T.RESTYPE AS RESTYPE, + VI.FULLTEXT AS I, CASE WHEN TC.COMMENTTEXT IS NULL THEN DX2.FULLTEXT ELSE TC.COMMENTTEXT - END, T.RERUN + END AS RESCOM, + T.RERUN AS RERUN FROM TESTS T JOIN DICT_TESTS DT ON DT.TESTID=T.TESTID LEFT JOIN DICT_TEXTS DX ON DX.TEXTID=T.CODEDRESULTID @@ -248,25 +269,25 @@ class ReportHelper $RERUN = 1; foreach ($rows as $row) { - $CHAPTER = $row[0]; - $TESTCODE = $row[1]; - $VALIDATIONSTATUS = $row[2]; - $R1 = $row[3]; + $CHAPTER = $row['CHAPTER']; + $TESTCODE = $row['TESTCODE']; + $VALIDATIONSTATUS = $row['VALIDATIONSTATUS']; + $R1 = $row['RESULT']; 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]; + $L1 = $row['MINIMUM']; + $H1 = $row['MAXIMUM']; + $FULLTEXT = $row['FULLTEXT']; + $PRECISION1 = $row['PRECISION1']; + $PRECISION2 = $row['PRECISION2']; + $OPERAND = $row['OPERAND']; + $SOFTCONVERSION = $row['SOFTCONVERSION']; + $U1 = $row['U1']; + $U2 = $row['U2']; + $RESTYPE = $row['RESTYPE']; + $I = $row['I']; + $RESCOM = $row['RESCOM']; if ($eng == 1) { $ICHAPTER = substr($CHAPTER, strpos($CHAPTER, '#E') + 2, strrpos($CHAPTER, '#E') - strpos($CHAPTER, '#E') - 2); @@ -299,7 +320,7 @@ class ReportHelper $raw[$i] .= $ITEXT; } - $RERUN = $row[16]; + $RERUN = $row['RERUN']; } else { if (substr($R1, 0, 2) == '< ' && is_numeric(substr($R1, 2, strlen($R1)))) { $r1 = substr($R1, 2, strlen($R1)); @@ -512,13 +533,13 @@ class ReportHelper if ($posR1 != $posR12) { $ITEXT = $this->f_repl($ITEXT, $R1.' '.$F, $posR12); } - $ITEXT = $this->f_repl($ITEXT, $L1, $posL1); + $ITEXT = $this->f_repl($ITEXT, $L1 ?? '', $posL1); if ($posL1 != $posL12) { - $ITEXT = $this->f_repl($ITEXT, $L1, $posL12); + $ITEXT = $this->f_repl($ITEXT, $L1 ?? '', $posL12); } - $ITEXT = $this->f_repl($ITEXT, $H1, $posH1); + $ITEXT = $this->f_repl($ITEXT, $H1 ?? '', $posH1); if ($posH1 != $posH12) { - $ITEXT = $this->f_repl($ITEXT, $H1, $posH12); + $ITEXT = $this->f_repl($ITEXT, $H1 ?? '', $posH12); } if (isset($R2)) { $ITEXT = $this->f_repl($ITEXT, $R2.' '.$F, $posR2); @@ -527,16 +548,16 @@ class ReportHelper } } if (isset($L2)) { - $ITEXT = $this->f_repl($ITEXT, $L2, $posL2); + $ITEXT = $this->f_repl($ITEXT, $L2 ?? '', $posL2); } if ($posL2 != $posL22) { - $ITEXT = $this->f_repl($ITEXT, $L2, $posL22); + $ITEXT = $this->f_repl($ITEXT, $L2 ?? '', $posL22); } if (isset($H2)) { - $ITEXT = $this->f_repl($ITEXT, $H2, $posH2); + $ITEXT = $this->f_repl($ITEXT, $H2 ?? '', $posH2); } if ($posH2 != $posH22) { - $ITEXT = $this->f_repl($ITEXT, $H2, $posH22); + $ITEXT = $this->f_repl($ITEXT, $H2 ?? '', $posH22); } if ($I == 'Negative' || $I == 'Negatif') { $I1 = "Negatif"; @@ -544,16 +565,16 @@ class ReportHelper $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, $I ?? '', $posI1); + $ITEXT = $this->f_repl($ITEXT, $I ?? '', $posI2); } - $ITEXT = $this->f_repl($ITEXT, $U1, $posU1); - $ITEXT = $this->f_repl($ITEXT, $U2, $posU2); + $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); + $ITEXT = $this->f_repl($ITEXT, $R1 ?? '', $posR1); + $ITEXT = $this->f_repl($ITEXT, $R1 ?? '', $posR2); } else { $ITEXT = substr($ITEXT, 0, $posR1); $ITEXT .= $R1." "; @@ -618,7 +639,7 @@ class ReportHelper private function getOthers(string $accessnumber, int $eng): string { - $sql = "SELECT DT.FULLTEXT FROM TESTS T + $sql = "SELECT DT.FULLTEXT AS 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 @@ -629,7 +650,7 @@ class ReportHelper $i = 1; $raw = ""; foreach ($rows as $row) { - $text = $row[0]; + $text = $row['FULLTEXT']; if ($eng == 1) { $text = substr($text, strpos($text, '#E') + 2, strrpos($text, '#E') - strpos($text, '#E') - 2); } else { @@ -654,25 +675,25 @@ class ReportHelper private function getCollData(string $accessnumber): string { $collData = ""; - $sql = "SELECT DISTINCT FORMAT(COLLECTIONDATE,'dd-MM-yyyy'), FORMAT(COLLECTIONDATE,'HH:mm'), x = STUFF( + $sql = "SELECT DISTINCT FORMAT(COLLECTIONDATE,'dd-MM-yyyy') AS COLLDATE, FORMAT(COLLECTIONDATE,'HH:mm') AS COLLTIME, 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, '') + 1,1, '') AS SAMPLES 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].'. '; + if ($date1 == $row['COLLDATE']) { + $collData .= $row['COLLTIME'].$row['SAMPLES'].'. '; } else { - $collData .= $row[0].' '.$row[1].$row[2].'. '; + $collData .= $row['COLLDATE'].' '.$row['COLLTIME'].$row['SAMPLES'].'. '; } - $date1 = $row[0]; + $date1 = $row['COLLDATE']; } return $collData; } @@ -680,7 +701,7 @@ class ReportHelper 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 + $sql = "SELECT ds.SHORTTEXT AS SHORTTEXT, FORMAT(st.COLLECTIONDATE,'dd-MM-yyyy') AS RECVDATE, FORMAT(st.COLLECTIONDATE,'HH:mm') AS RECVTIME 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]); @@ -689,9 +710,9 @@ class ReportHelper $date1 = ''; $time1 = ''; foreach ($rows as $row) { - $x = $row[0]; - $date = $row[1]; - $time = $row[2]; + $x = $row['SHORTTEXT']; + $date = $row['RECVDATE']; + $time = $row['RECVTIME']; if ($date1 == $date) { if ($time1 == $time) { $recvData .= $x.'. '; @@ -709,7 +730,7 @@ class ReportHelper private function getNoSample(string $accessnumber): string { - $sql = "SELECT DST.SHORTTEXT FROM SP_TUBES ST + $sql = "SELECT DST.SHORTTEXT AS 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]); @@ -717,7 +738,7 @@ class ReportHelper $noSample = ''; foreach ($rows as $row) { - $sample = $row[0]; + $sample = $row['SHORTTEXT']; $noSample .= "
-
- Status : = esc($status) ?>
-
- Collected on = esc($collData) ?> -Received on = esc($recvData) ?> + + Status : = esc($status) ?> + +Collected on = esc($collData) ?> +Received on = esc($recvData) ?> +Val1 By : = esc($val1User) ?> | Val2 By = esc($val2User) ?> Page = $i ?>/= $npage ?> Printed By : = esc($valBy) ?> = esc($date) ?> |
- - -(__________________) -Authorised Signature -+ ”This result is valid without signature.” |
Collected on = esc($collData) ?> Received on = esc($recvData) ?> +Val1 By : = esc($val1User) ?> | Val2 By = esc($val2User) ?> Page = $i ?>/= $npage ?> Printed By : = esc($valBy) ?> = esc($date) ?>
- -(__________________) -Authorised Signature -+
”This result is valid without signature.”