2025-11-13 13:16:32 +07:00

155 lines
6.3 KiB
PHP

<?php
namespace App\Controllers;
class Admin extends BaseController
{
public function index()
{
$today = date('Y-m-d');
$date1 = $this->request->getVar('date1') ?? $today;
$date2 = $this->request->getVar('date2') ?? $today;
$db = \Config\Database::connect();
$sql = "SELECT * from GDC_CMOD.dbo.V_DASHBOARD_DEV
where COLLECTIONDATE between '$date1 00:00' and '$date2 23:59' and ODR_DDATE between '$date1 00:00' and '$date2 23:59'";
$query = $db->query($sql);
$results = $query->getResultArray();
// === Variabel counter ===
$CPending = 0; $CPColl = 0; $CColl = 0; $CPRecv = 0;
$CRecv = 0; $CInc = 0; $CPenV = 0; $CFin = 0; $CFinV = 0;
$dataList = [];
foreach ($results as $row) {
$reqdate = '';
if (!empty($row['REQDATE'])) {
$reqdate = date('Y-m-d H:i', strtotime($row['REQDATE']));
}
$patname = $row['Name'] ?? '';
$sp_accessnumber = $row['SP_ACCESSNUMBER'] ?? '';
$hostordernumber = $row['HOSTORDERNUMBER'] ?? '';
$stats = $row['STATS'] ?? '';
$tests = $row['TESTS'] ?? '';
$isDelete = $row['ISDELETE'] ?? 0;
// Bersihkan test string
$test = str_replace(['(', ')', ',', 'FA'], '', $tests);
if (!is_numeric($test) && $isDelete == 0) {
switch ($stats) {
case 'Pend': $statscode = 1; $CPending++; break;
case 'PartColl':$statscode = 2; $CPColl++; break;
case 'Coll': $statscode = 3; $CColl++; break;
case 'PartRecv':$statscode = 4; $CPRecv++; break;
case 'Recv': $statscode = 5; $CRecv++; break;
case 'Inc': $statscode = 6; $CInc++; break;
case 'PenV': $statscode = 7; $CPenV++; break;
case 'Fin': $statscode = 8; $CFin++; break;
case 'FinV': $statscode = 9; $CFinV++; break;
default: $statscode = 0; break;
}
// Simpan ke array
$dataList[] = [
'statscode' => $statscode,
'reqdate' => $reqdate,
'patname' => $patname,
'sp_accessnumber' => $sp_accessnumber,
'hostordernumber' => $hostordernumber,
'reff' => $row['REFF'] ?? '',
'doc' => $row['DOC'] ?? '',
'tests' => $row['TESTS'] ?? '',
'stats' => $stats,
'odr_cresult_to' => $row['ODR_CRESULT_TO'],
'isprinted'=> $row['ODR_ISPRINTED'] ?? 0,
'ispending'=> $row['ODR_ISPENDING'] ?? 0,
'ishardcopy'=> $row['ODR_NFLAGHARDCOPY'] ?? 0,
'isval' => $row['ISVAL'] ?? 0,
'isdelete' => $isDelete,
];
}
}
// === Total counter ===
$counter = [
'pending' => $CPending,
'partialCollected' => $CPColl,
'collected' => $CColl,
'partialReceived' => $CPRecv,
'received' => $CRecv,
'incomplete' => $CInc,
'pendingValidation' => $CPenV,
'final' => $CFin,
'finalValidation' => $CFinV,
];
$data['dataList'] = $dataList;
$data['counter'] = $counter;
$data['date1'] = $date1;
$data['date2'] = $date2;
// dd($results);
return view('admin/index', $data);
}
// Khusus Untuk API
public function specimenDetailApi()
{
$access = $this->request->getGet('access');
$db = \Config\Database::connect();
$sql = "SELECT right(p.PATNUMBER,16) as [Rm], ISNULL(p.FIRSTNAME,'') + ' ' + ISNULL(p.NAME,'') as [Name],
case when format(p.BIRTHDATE,'MMdd')=format(spr.COLLECTIONDATE,'MMdd') then DATEDIFF(YEAR,p.BIRTHDATE, spr.COLLECTIONDATE)
else FLOOR(DATEDIFF(DAY, p.BIRTHDATE, spr.COLLECTIONDATE) / 365.25) end ,
[Gender] = case
when p.SEX = 1 then 'Male'
when p.SEX = 2 then 'Female'
else ''
end, spr.REQDATE, spo.COMMENTTEXT, dmg.DMG_CKTPNO, dmg.DMG_CPLACEOFBIRTH
from SP_REQUESTS spr
left join PATIENTS p on p.PATID=spr.PATID
left join SP_REQUESTS_OCOM spo on spr.SP_ACCESSNUMBER=spo.SP_ACCESSNUMBER
left join GDC_CMOD.dbo.TDL_DEMOGRAPHIC dmg on right(dmg.DMG_CPATNUMBER,15)=right(p.PATNUMBER,15)
where spr.PATID=p.PATID and spr.SP_ACCESSNUMBER='$access'";
$query = $db->query($sql);
$results = $query->getRowArray();
$patientIdentity = [
'rm' => $results["Rm"],
'age' => $results[""], // key kosong
'name' => $results['Name'] ?? '',
'reqdate' => $results['REQDATE'] ?? '',
'gender' => $results['Gender'] ?? '',
'placeofbirth' => $results['DMG_CPLACEOFBIRTH'] ?? '',
'ktp' => $results['DMG_CKTPNO'] ?? '',
'comment' => $results['COMMENTTEXT'] ?? '',
];
$samples = [];
$sql = "SELECT req.SAMPTYPEID, req.SAMPCODE, req.SHORTTEXT, tu.STATUS, st.TUBESTATUS
from GDC_CMOD.dbo.v_sp_reqtube req
left join GDC_CMOD.dbo.TUBES tu on req.SP_ACCESSNUMBER=tu.ACCESSNUMBER and req.SAMPCODE=tu.TUBENUMBER
left join glendb.dbo.SP_TUBES st on st.SP_ACCESSNUMBER=req.SP_ACCESSNUMBER and req.SAMPCODE=st.SAMPLETYPE
where req.SP_ACCESSNUMBER='$access'";
$query = $db->query($sql);
$results = $query->getResultArray();
foreach ($results as $row) {
$samples[] = [
'samptypeid' => $row['SAMPTYPEID'] ?? null,
'sampcode' => $row['SAMPCODE'] ?? null,
'name' => $row['SHORTTEXT'] ?? '',
'colstatus' => $row['STATUS'] ?? '',
'tubestatus' => $row['TUBESTATUS'] ?? '',
];
}
$data = ['patientIdentity' => $patientIdentity, 'samples' => $samples];
return $this->response->setJSON($data);
}
}