405 lines
12 KiB
PHP
405 lines
12 KiB
PHP
<?php
|
|
namespace App\Controllers;
|
|
|
|
class PrintResult extends BaseController {
|
|
|
|
public function otherTests($resultData, $data){
|
|
|
|
// var_dump($data);die();
|
|
|
|
if($data[0] != null) {
|
|
|
|
$accessnumber = $data[0]['SP_ACCESSNUMBER'];
|
|
|
|
$sex = $data[0]['sex'] == 1 ? "Male" : "Female";
|
|
|
|
$rm_number = $data[0]['PATNUMBER'];
|
|
$rm_number = substr($rm_number, -10);
|
|
|
|
$first_name = $data[0]['FIRSTNAME'];
|
|
$last_name = $data[0]['NAME'];
|
|
|
|
$birth_date = $data[0]['BIRTHDATE'];
|
|
$birth_date = \DateTime::createFromFormat('Y-m-d H:i:s.u', $birth_date);
|
|
if ($birth_date) { $birth_date = $birth_date->format('d-m-Y'); }
|
|
|
|
$hostordernumber = $data[0]['HOSTORDERNUMBER'];
|
|
$collection_date = $data[0]['COLLECTIONDATE'];
|
|
$dateTime = \DateTime::createFromFormat('Y-m-d H:i:s.u', $collection_date);
|
|
if ($dateTime) {
|
|
$collection_date = $dateTime->format('d-m-Y H:i');
|
|
}
|
|
|
|
$resultdate = date('d-m-Y H:i', time());
|
|
} else {
|
|
$sex ='';
|
|
$accessnumber = "";
|
|
$rm_number = "";
|
|
$first_name = "";
|
|
$last_name = "";
|
|
$birth_date = "";
|
|
$hostordernumber = "";
|
|
$collection_date = "";
|
|
}
|
|
|
|
$fullPage="";
|
|
$headPage = "
|
|
<div id='page'>
|
|
<div id='pagetop' style='height:0.01cm'> </div>
|
|
<img src='".base_url()."assets/img/padma-header.png' class='img' />
|
|
|
|
<div id='dinfo'>
|
|
|
|
<table class='information t_center'>
|
|
<tr>
|
|
<th class='padmaColor' colspan='6' align='center'>CLINICAL LABORATORY</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<th style='width:18%' align='left'>RM Number</th>
|
|
<td style='width:2%'>:</td>
|
|
<td style='width:35%'>$rm_number</td>
|
|
<th style='width:18%' align='left'>Visit Number</th>
|
|
<td style='width:2%'>:</td>
|
|
<td style='width:35%'>$hostordernumber</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<th align='left'>First Name</th>
|
|
<td>:</td>
|
|
<td>$first_name</td>
|
|
<th align='left'>Request Number</th>
|
|
<td>:</td>
|
|
<td>$accessnumber</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<th align='left'>Last Name</th>
|
|
<td>:</td>
|
|
<td>$last_name</td>
|
|
<th align='left'>Order Date/Time</th>
|
|
<td>:</td>
|
|
<td>$collection_date</td>
|
|
</tr>
|
|
<tr>
|
|
<th align='left'>DoB/Gender</th>
|
|
<td>:</td>
|
|
<td>$birth_date / $sex</td>
|
|
<th align='left'>Result Date/Time</th>
|
|
<td>:</td>
|
|
<td>$resultdate</td>
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
<div id='dresult'>
|
|
<br>
|
|
<table class='result t_center'>
|
|
|
|
<tr align='left'>
|
|
<th class='padmaColor' style='width:34%'>Parameter</th>
|
|
<th class='padmaColor' style='width:1%'> </th>
|
|
<th class='padmaColor' style='width:13%'>Result</th>
|
|
<th class='padmaColor' style='width:13%'>Unit</th>
|
|
<th class='padmaColor' style='width:20%'>Normal Range</th>
|
|
<th class='padmaColor' style='width:20%'>Sample Type</th>
|
|
</tr>
|
|
|
|
";
|
|
|
|
$resultTest ="";
|
|
|
|
$notes = end($resultData);
|
|
$note = $notes['RESULT'] == "" ? "-" : $notes['RESULT'];
|
|
|
|
// Untuk Collection
|
|
if ($data[1] != null) {
|
|
$colltext = '';
|
|
$recvtext = '';
|
|
$qcolldate = '';
|
|
$qcolltime = '';
|
|
$qrecvdate = '';
|
|
$qrecvtime = '';
|
|
foreach ($data[1] as $item) {
|
|
$samp = $item['SHORTTEXT'];
|
|
$colldate = $item['colldate'];
|
|
$recvdate = $item['recvdate'];
|
|
$colltime = $item['colltime'];
|
|
$recvtime = $item['recvtime'];
|
|
if($colldate !='') {
|
|
if($colldate != $qcolldate) { $colltext .= "$colldate $colltime $samp"; $qcolldate = $colldate; $qcolltime = $colltime; }
|
|
else {
|
|
if($colltime != $qcolltime) { $colltext .= ", $colltime $samp"; $qcolltime = $colltime; }
|
|
else { $colltext .= ", $samp"; }
|
|
}
|
|
}
|
|
if($recvdate !='') {
|
|
if($recvdate != $qrecvdate) { $recvtext .= "$recvdate $recvtime $samp"; $qrecvdate = $recvdate; $qrecvtime = $recvtime; }
|
|
else {
|
|
if($recvtime != $qrecvtime) { $recvtext .= ", $recvtime $samp"; $qrecvtime = $recvtime; }
|
|
else { $recvtext .= ", $samp"; }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$resultNoteandSpecimen = "
|
|
<br>
|
|
|
|
<table class='result t_center'>
|
|
<tr>
|
|
<th align='left' class='padmaColor'>Notes</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
".$note."
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
|
|
<table class='t_center table_collection' >
|
|
<tr>
|
|
<td>Collection datetime : $colltext </td>
|
|
</tr>
|
|
<tr>
|
|
<td>Reception datetime : $recvtext </td>
|
|
</tr>
|
|
</table>
|
|
";
|
|
$footerPage = "
|
|
<div id='footer'>
|
|
<table class='table_footer t_center'>
|
|
<tr>
|
|
<td></td>
|
|
<td align='right'><img src='http://cmod.id/assets/img/ttd.png' alt=''></td>
|
|
</tr>
|
|
<tr>
|
|
<td><u>Entered By</u></td>
|
|
<td align='right'><u>Verified By</u></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Lab Technician</td>
|
|
<td align='right'>dr. I Komang Parwata Sp.PK</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Mrs. Gusti Ayu Riska Mastari</td>
|
|
<td align='right'>Reg. No: 570/SIPDS/0001/I/DPMPTSP/2023</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
";
|
|
$lastDiv="</div>";
|
|
|
|
|
|
$tempChapEng = "";
|
|
$tempChapInd = "";
|
|
|
|
array_pop($resultData);
|
|
|
|
$i=0;
|
|
foreach ($resultData as $item) {
|
|
|
|
$space="";
|
|
if ($item['DEPTH'] > 0) {
|
|
$j=0;
|
|
for ($j=0; $j<$item['DEPTH']; $j++) {
|
|
$space .= " ";
|
|
}
|
|
}
|
|
|
|
$resflag = $item["RESFLAG"] == "N" ? '' : $item["RESFLAG"];
|
|
|
|
if ($tempChapEng != $item['chap_eng']) {
|
|
$tempChapEng = $item['chap_eng'];
|
|
$tempChapInd = $item['chap_ind'];
|
|
|
|
$i++;
|
|
// Untuk Chapter
|
|
$resultTest .= "
|
|
<tr align='left' class='chapter'>
|
|
<td colspan='5'>
|
|
<pre><b>".$tempChapEng."</b></pre>
|
|
</td>
|
|
</tr>
|
|
";
|
|
|
|
}
|
|
|
|
// Melebihi batas Kertas
|
|
if($i % 20 == 0) {
|
|
$resultTest .= "</table></div>";
|
|
$fullPage .= $headPage.$resultTest.$footerPage.$lastDiv;
|
|
$i=0;
|
|
$resultTest = "";
|
|
}
|
|
|
|
$i++;
|
|
if ($item['RESTYPE'] == "CE"){
|
|
$resvalue = $item['RESULT'];
|
|
} else {
|
|
$resvalue = $item['RESVALUE'];
|
|
}
|
|
$reff = $item["REFRANGE"];
|
|
$refftext = $item["REFFTEXT"];
|
|
if($refftext !='') {$reff = $refftext;}
|
|
$unit = $item['UNIT'];
|
|
$unittext = $item['UNITTEXT'];
|
|
if($unittext !='') {$unit = $unittext;}
|
|
$resultTest .= "
|
|
<tr>
|
|
<td colspan='1' class=''>
|
|
<pre> ".$space . $item["test_eng"]."</pre>
|
|
<pre> ".$space."<small>".$item["test_ind"]."</small></pre>
|
|
</td>
|
|
<td class=''>" . $resflag . "</td>
|
|
<td class=''>" . $resvalue . "</td>
|
|
<td class=''>" . $unit . "</td>
|
|
<td class=''>" . $reff . "</td>
|
|
<td class=''>" . $item["serum_type"] . "</td>
|
|
</tr>
|
|
";
|
|
|
|
|
|
// Melebihi batas Kertas
|
|
if($i % 21 == 0) {
|
|
$resultTest .= "</table></div>";
|
|
$fullPage .= $headPage.$resultTest.$footerPage.$lastDiv;
|
|
$i=0;
|
|
$resultTest = "";
|
|
}
|
|
|
|
}
|
|
|
|
$resultTest .= "
|
|
</table>
|
|
".$resultNoteandSpecimen."
|
|
</div>";
|
|
|
|
$fullPage .= $headPage.$resultTest.$footerPage.$lastDiv;
|
|
|
|
return $fullPage;
|
|
}
|
|
|
|
public function printResultTest($access) {
|
|
$db = \Config\Database::connect();
|
|
|
|
// Untuk Header
|
|
$sql = "select p.PATNUMBER, p.FIRSTNAME, p.NAME, p.BIRTHDATE, sr.HOSTORDERNUMBER, sr.COLLECTIONDATE, sr.SP_ACCESSNUMBER, p.sex
|
|
from PATIENTS p
|
|
left join SP_REQUESTS sr on p.PATID=sr.PATID
|
|
where sr.SP_ACCESSNUMBER='$access'";
|
|
$query = $db->query($sql);
|
|
$results = $query->getResultArray();
|
|
$header = $results[0];
|
|
|
|
// Untuk Collection
|
|
$sql = "select ds.SHORTTEXT,
|
|
format(tu.COLLECTIONDATE, 'dd-MM-yyyy') as recvdate, format(tu.COLLECTIONDATE, 'hh:mm') as recvtime,
|
|
format(ct.COLLECTIONDATE, 'dd-MM-yyyy') as colldate, format(ct.COLLECTIONDATE, 'hh:mm') as colltime
|
|
from SP_TUBES tu
|
|
left join DICT_SAMPLES_TYPES ds on ds.SAMPCODE= tu.SAMPLETYPE
|
|
left join cmod.dbo.CM_TUBES ct on ct.SAMPLETYPE=tu.SAMPLETYPE and ct.ACCESSNUMBER=tu.SP_ACCESSNUMBER
|
|
where tu.SP_ACCESSNUMBER='$access'";
|
|
$query = $db->query($sql);
|
|
$results = $query->getResultArray();
|
|
$collection = $results;
|
|
|
|
$data = [$header, $collection];
|
|
// var_dump($data[0]['PATNUMBER']);die();
|
|
|
|
// BACKUP
|
|
// $sql = "
|
|
// select dc.CHAPID, dc.FULLTEXT as chap_eng,dc.FULLTEXT as chap_ind,
|
|
// RESULT=case when cr.RESTYPE in('NM','TX') then cr.RESVALUE when cr.RESTYPE='CE' then tx.FULLTEXT end,
|
|
// cr.*, cdt.TEXT1 as test_eng, cdt.TEXT2 as test_ind
|
|
// from cmod.dbo.CM_RESULTS cr
|
|
// left join REQUESTS r on r.ACCESSNUMBER=cr.ACCESSNUMBER
|
|
// left join cmod.dbo.CM_DICT_TESTS cdt on cr.TESTCODE=cdt.TESTCODE
|
|
// left join DICT_TESTS dt on dt.TESTCODE=cr.TESTCODE and dt.ENDVALIDDATE is null
|
|
// left join TESTS t on t.REQUESTID = r.REQUESTID and t.TESTID=dt.TESTID
|
|
// left join DICT_TEXTS tx on tx.TEXTID=t.CODEDRESULTID
|
|
// left join DICT_CHAPTERS dc on dc.CHAPID=dt.CHAPID and dc.ENDVALIDDATE is null
|
|
// left join cmod.dbo.CM_DICT_CHAPTERS cdc on cdc.CHAPCODE=dc.CHAPCODE
|
|
// where cr.ACCESSNUMBER='$access'
|
|
// ORDER BY
|
|
// CASE
|
|
// WHEN cr.TESTCODE = 'NOTE' THEN 1
|
|
// ELSE 0
|
|
// END,
|
|
// t.TESTORDER;
|
|
// ";
|
|
|
|
$sql = "
|
|
select
|
|
dc.CHAPID,
|
|
dc.FULLTEXT as chap_eng,
|
|
dc.FULLTEXT as chap_ind,
|
|
st.FULLTEXT as serum_type,
|
|
cdt.TEXT1 as test_eng,
|
|
cdt.TEXT2 as test_ind,
|
|
cdt.UNIT as UNITTEXT,
|
|
t.DEPTH,
|
|
t.TESTORDER,
|
|
dt.SHORTTEXT,
|
|
RESULT = case when t.RESVALUE is null then tx.FULLTEXT else t.RESVALUE end,
|
|
cr.*, cdt.REFFTEXT
|
|
from REQUESTS r
|
|
left join TESTS t on t.REQUESTID = r.REQUESTID
|
|
left join DICT_TESTS dt on dt.ENDVALIDDATE is null and t.TESTID=dt.TESTID
|
|
left join DICT_TEXTS tx on tx.TEXTID=t.CODEDRESULTID
|
|
left join DICT_CHAPTERS dc on dc.CHAPID=dt.CHAPID and dc.ENDVALIDDATE is null
|
|
left join DICT_TEST_SAMPLES ts on ts.TESTID=t.TESTID and dt.TESTID=ts.TESTID
|
|
left join DICT_SAMPLES_TYPES st on st.SAMPTYPEID=ts.SAMPTYPEID
|
|
left join cmod.dbo.CM_DICT_TESTS cdt on dt.TESTCODE=cdt.TESTCODE
|
|
left join cmod.dbo.CM_RESULTS cr on cr.ACCESSNUMBER=r.ACCESSNUMBER and cr.TESTCODE=cdt.TESTCODE and cr.TESTCODE=dt.TESTCODE
|
|
where r.ACCESSNUMBER='$access'
|
|
ORDER BY t.TESTORDER
|
|
";
|
|
|
|
$query = $db->query($sql);
|
|
$results = $query->getResultArray();
|
|
|
|
|
|
$data_urine = array_filter($results, function($item) {
|
|
$chapterid = $item["CHAPID"];
|
|
$tesscode = $item['TESTCODE'];
|
|
// Memfilter data dengan CHAPID 3, 61, atau 62
|
|
return $chapterid == 3 || $chapterid == 61 || $chapterid == 62 || $tesscode == 'NOTE';
|
|
});
|
|
|
|
// Seleksi data yang mengandung "FESES"
|
|
$data_feces = array_filter($results, function($item) {
|
|
$chapterid = $item["CHAPID"];
|
|
$tesscode = $item['TESTCODE'];
|
|
// Memfilter data yang 4
|
|
return $chapterid == 4 || $tesscode == 'NOTE';
|
|
});
|
|
// Seleksi data yang tidak mengandung "urine" dan "feces"
|
|
$data_others = array_filter($results, function($item) {
|
|
$chapterid = $item["CHAPID"];
|
|
$tesscode = $item['TESTCODE'];
|
|
// Memfilter data yang bukan 61 atau 3
|
|
return $chapterid !== 3 && $chapterid !== 4 && $chapterid !== 61 && $chapterid !== 62 || $tesscode == 'NOTE';
|
|
});
|
|
|
|
|
|
$fullPage = "";
|
|
|
|
if ($data_urine != null && count($data_urine) > 1) {
|
|
$fullPage .= $this->otherTests($data_urine, $data);
|
|
}
|
|
if ($data_feces != null && count($data_feces) > 1) {
|
|
$fullPage .= $this->otherTests($data_feces, $data);
|
|
}
|
|
if ($data_others != null && count($data_others) > 1) {
|
|
$fullPage .= $this->otherTests($data_others, $data);
|
|
}
|
|
|
|
return view('result_report', ['data' => $fullPage]);
|
|
}
|
|
|
|
} |