Update mayor tampilan
This commit is contained in:
parent
86b0722df6
commit
2103ef609f
@ -24,6 +24,8 @@ $routes->group('admin', ['filter' => 'role:1'], function($routes) {
|
|||||||
$routes->post('user/create', 'User::create');
|
$routes->post('user/create', 'User::create');
|
||||||
$routes->post('user/update', 'User::update');
|
$routes->post('user/update', 'User::update');
|
||||||
$routes->post('user/delete', 'User::delete');
|
$routes->post('user/delete', 'User::delete');
|
||||||
|
$routes->get('specimenDetail', 'Admin::specimenDetailApi'); //Ini Api ya ges ya
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$routes->group('doctor', ['filter' => 'role:2'], function($routes) {
|
$routes->group('doctor', ['filter' => 'role:2'], function($routes) {
|
||||||
@ -39,4 +41,4 @@ $routes->group('cs', ['filter' => 'role:4'], function($routes) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// ------------------------------------------------------For API------------------------------------------------------ //
|
// ------------------------------------------------------For API------------------------------------------------------ //
|
||||||
$routes->get('/api/dashboard', 'ApiDashboard::index');
|
// $routes->get('/api/dashboard', 'ApiDashboard::index');
|
||||||
@ -5,7 +5,150 @@ class Admin extends BaseController
|
|||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
return view('admin/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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,11 +15,81 @@ class ApiDashboard extends ResourceController
|
|||||||
where COLLECTIONDATE between '$date1 00:00' and '$date2 23:59' and ODR_DDATE between '$date1 00:00' and '$date2 23:59'";
|
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);
|
$query = $db->query($sql);
|
||||||
$results = $query->getResultArray();
|
$results = $query->getResultArray();
|
||||||
$data['data'] = $results;
|
|
||||||
|
// === Variabel counter ===
|
||||||
return $this->respond($data, 200);
|
$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'] ?? '';
|
||||||
|
$reqnum = $row['SP_ACCESSNUMBER'] ?? '';
|
||||||
|
$hosnum = $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': $statCode = 1; $CPending++; break;
|
||||||
|
case 'PartColl':$statCode = 2; $CPColl++; break;
|
||||||
|
case 'Coll': $statCode = 3; $CColl++; break;
|
||||||
|
case 'PartRecv':$statCode = 4; $CPRecv++; break;
|
||||||
|
case 'Recv': $statCode = 5; $CRecv++; break;
|
||||||
|
case 'Inc': $statCode = 6; $CInc++; break;
|
||||||
|
case 'PenV': $statCode = 7; $CPenV++; break;
|
||||||
|
case 'Fin': $statCode = 8; $CFin++; break;
|
||||||
|
case 'FinV': $statCode = 9; $CFinV++; break;
|
||||||
|
default: $statCode = 0; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simpan ke array
|
||||||
|
$dataList[] = [
|
||||||
|
'statCode' => $statCode,
|
||||||
|
'reqdate' => $reqdate,
|
||||||
|
'patname' => $patname,
|
||||||
|
'reqnum' => $reqnum,
|
||||||
|
'hosnum' => $hosnum,
|
||||||
|
'reff' => $row['REFF'] ?? '',
|
||||||
|
'doc' => $row['DOC'] ?? '',
|
||||||
|
'tests' => $row['TESTS'] ?? '',
|
||||||
|
'stats' => $stats,
|
||||||
|
'isPrinted'=> $row['ODR_ISPRINTED'] ?? 0,
|
||||||
|
'isPending'=> $row['ODR_ISPENDING'] ?? 0,
|
||||||
|
'isHardcopy'=> $row['ODR_NFLAGHARDCOPY'] ?? 0,
|
||||||
|
'isVal' => $row['ISVAL'] ?? 0,
|
||||||
|
'isDelete' => $isDelete,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// === Total Summary ===
|
||||||
|
$summary = [
|
||||||
|
'Pending' => $CPending,
|
||||||
|
'PartialCollected' => $CPColl,
|
||||||
|
'Collected' => $CColl,
|
||||||
|
'PartialReceived' => $CPRecv,
|
||||||
|
'Received' => $CRecv,
|
||||||
|
'Incomplete' => $CInc,
|
||||||
|
'PendingValidation' => $CPenV,
|
||||||
|
'Final' => $CFin,
|
||||||
|
'FinalValidation' => $CFinV,
|
||||||
|
];
|
||||||
|
|
||||||
|
// === Response JSON (misal API) ===
|
||||||
|
return $this->respond([
|
||||||
|
'status' => 'success',
|
||||||
|
'summary' => $summary,
|
||||||
|
'data' => $dataList,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -3,8 +3,6 @@
|
|||||||
$uri = service('uri');
|
$uri = service('uri');
|
||||||
$path = $uri->getPath();
|
$path = $uri->getPath();
|
||||||
$activeUrls = ['/admin', '/cs', '/analyst', '/doctor'];
|
$activeUrls = ['/admin', '/cs', '/analyst', '/doctor'];
|
||||||
|
|
||||||
// dd(session()->get('userid'));
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="id">
|
<html lang="id">
|
||||||
@ -88,7 +86,7 @@
|
|||||||
.status-card {
|
.status-card {
|
||||||
width: 123px;
|
width: 123px;
|
||||||
/* lebar tetap */
|
/* lebar tetap */
|
||||||
height: 65px;
|
height: 60px;
|
||||||
/* tinggi seragam */
|
/* tinggi seragam */
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
@ -145,47 +143,57 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 1 */
|
||||||
.Pend {
|
.Pend {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 2 */
|
||||||
.PartColl {
|
.PartColl {
|
||||||
background-color: #ff99aa;
|
background-color: #ff99aaaf !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Coll {
|
/* 3 */
|
||||||
background-color: #d63031;
|
.Collected {
|
||||||
|
background-color: #d6303086 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 4 */
|
||||||
.PartRecv {
|
.PartRecv {
|
||||||
background-color: #a0c0d9;
|
background-color: #a0c0d9af !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Recv {
|
/* 5 */
|
||||||
background-color: #0984e3;
|
.Received {
|
||||||
|
background-color: #0985e39d !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Inc {
|
/* 6 */
|
||||||
background-color: yellow;
|
.Incomplete {
|
||||||
|
background-color: #fbff009a !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Fin {
|
/* 7 */
|
||||||
background-color: lightgreen;
|
.Final {
|
||||||
|
background-color: #90EE90 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.FinV {
|
/* 8 */
|
||||||
background-color: green;
|
.FinVerification {
|
||||||
|
background-color: #09ff00ab !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.PenV {
|
/* 9 */
|
||||||
background-color: #EE5A24;
|
.PenVerification {
|
||||||
|
background-color: #ee5a24c7 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 10 */
|
||||||
.Suspend {
|
.Suspend {
|
||||||
background-color: purple;
|
background-color: purple;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<?= $this->renderSection('css'); ?>
|
<?= $this->renderSection('css'); ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@ -253,6 +261,7 @@
|
|||||||
$('#datatables').DataTable({
|
$('#datatables').DataTable({
|
||||||
pageLength: 100, // jumlah baris per halaman
|
pageLength: 100, // jumlah baris per halaman
|
||||||
lengthMenu: [10, 25, 50, 75, 100],
|
lengthMenu: [10, 25, 50, 75, 100],
|
||||||
|
order: [[0, 'asc'], [1, 'asc']],
|
||||||
columnDefs: [{
|
columnDefs: [{
|
||||||
className: 'text-center',
|
className: 'text-center',
|
||||||
targets: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
|
targets: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
<?php
|
|
||||||
$today = date('Y-m-d');
|
|
||||||
$date1 = $_GET['date1'] ?? $today;
|
|
||||||
$date2 = $_GET['date2'] ?? $today;
|
|
||||||
?>
|
|
||||||
<?= $this->extend('_layouts/main.php') ?>
|
<?= $this->extend('_layouts/main.php') ?>
|
||||||
|
|
||||||
<?= $this->section('title') ?>
|
<?= $this->section('title') ?>
|
||||||
@ -14,7 +9,7 @@
|
|||||||
<div class="container-fluid px-5">
|
<div class="container-fluid px-5">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<!-- Accordion Search Detail -->
|
<!-- Accordion Search Detail -->
|
||||||
<div class="col col-12 mt-3">
|
<div class="col col-12 mt-3">
|
||||||
<div class="accordion" id="accordionPanelsStayOpenExample">
|
<div class="accordion" id="accordionPanelsStayOpenExample">
|
||||||
@ -28,7 +23,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show">
|
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<form method="GET" class="p-1" action='<?= base_url('api/dashboard') ?>'>
|
<form method="GET" class="p-1" action='<?= base_url('/admin') ?>'>
|
||||||
<div class="row align-items-center g-2">
|
<div class="row align-items-center g-2">
|
||||||
<div class="col-auto fw-semibold text-muted">
|
<div class="col-auto fw-semibold text-muted">
|
||||||
Date :
|
Date :
|
||||||
@ -61,8 +56,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- <div class="accordion-item">
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false"
|
data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false"
|
||||||
@ -74,7 +68,6 @@
|
|||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<form class="p-1">
|
<form class="p-1">
|
||||||
|
|
||||||
<!-- Baris 1: Name & Reff -->
|
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<div class="col-md-6 d-flex align-items-center mb-2 mb-md-0">
|
<div class="col-md-6 d-flex align-items-center mb-2 mb-md-0">
|
||||||
<label class="col-3 col-form-label-sm text-muted fw-semibold">Name :</label>
|
<label class="col-3 col-form-label-sm text-muted fw-semibold">Name :</label>
|
||||||
@ -88,7 +81,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Baris 2: Test & Doctor -->
|
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<div class="col-md-6 d-flex align-items-center mb-2 mb-md-0">
|
<div class="col-md-6 d-flex align-items-center mb-2 mb-md-0">
|
||||||
<label class="col-3 col-form-label-sm text-muted fw-semibold">Test :</label>
|
<label class="col-3 col-form-label-sm text-muted fw-semibold">Test :</label>
|
||||||
@ -102,7 +94,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Baris 3: Exc & Send To -->
|
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-md-6 d-flex align-items-center mb-2 mb-md-0">
|
<div class="col-md-6 d-flex align-items-center mb-2 mb-md-0">
|
||||||
<label class="col-3 col-form-label-sm text-muted fw-semibold">Exc :</label>
|
<label class="col-3 col-form-label-sm text-muted fw-semibold">Exc :</label>
|
||||||
@ -117,8 +108,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -128,107 +118,107 @@
|
|||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-warning">8</div>
|
<div class="status-count"><?=$counter['pending']?></div>
|
||||||
<div class="status-label text-warning">Pending</div>
|
<div class="status-label">Pending</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Partial Collected -->
|
<!-- Partial Collected -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center PartColl">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-secondary">7</div>
|
<div class="status-count"><?=$counter['partialCollected']?></div>
|
||||||
<div class="status-label text-secondary">Partial Collected</div>
|
<div class="status-label">Partial Collected</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Collected -->
|
<!-- Collected -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center Collected">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-danger">79</div>
|
<div class="status-count"><?=$counter['collected']?></div>
|
||||||
<div class="status-label text-danger">Collected</div>
|
<div class="status-label">Collected</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Partial Received -->
|
<!-- Partial Received -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center PartRecv">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-info">5</div>
|
<div class="status-count"><?=$counter['partialReceived']?></div>
|
||||||
<div class="status-label text-info">Partial Received</div>
|
<div class="status-label">Partial Received</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Received -->
|
<!-- Received -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center Received">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-primary">0</div>
|
<div class="status-count"><?=$counter['received']?></div>
|
||||||
<div class="status-label text-primary">Received</div>
|
<div class="status-label">Received</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Incomplete -->
|
<!-- Incomplete -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center Incomplete">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-warning">0</div>
|
<div class="status-count"><?=$counter['incomplete']?></div>
|
||||||
<div class="status-label text-warning">Incomplete</div>
|
<div class="status-label">Incomplete</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Printed not Complete -->
|
<!-- Printed not Complete -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center Final">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-muted">2</div>
|
<div class="status-count"><?=$counter['final']?></div>
|
||||||
<div class="status-label text-muted">Printed<br>Not complete</div>
|
<div class="status-label">Final</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Complete -->
|
<!-- Complete -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center FinVerification">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-success">10</div>
|
<div class="status-count"><?=$counter['finalValidation']?></div>
|
||||||
<div class="status-label text-success">Complete</div>
|
<div class="status-label">Final(Verified)</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 1-validation -->
|
<!-- 1-validation -->
|
||||||
<div class="col-auto mb-2">
|
<div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center PenVerification">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-info">4</div>
|
<div class="status-count"><?=$counter['pendingValidation']?></div>
|
||||||
<div class="status-label text-info">1-validation</div>
|
<div class="status-label">Pending(Verified)</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 2-validation -->
|
<!-- 2-validation -->
|
||||||
<div class="col-auto mb-2">
|
<!-- <div class="col-auto mb-2">
|
||||||
<div class="card status-card text-center">
|
<div class="card status-card text-center">
|
||||||
<div class="card-body p-2">
|
<div class="card-body p-2">
|
||||||
<div class="status-count text-success">3</div>
|
<div class="status-count text-success">-</div>
|
||||||
<div class="status-label text-success">2-validation</div>
|
<div class="status-label text-success">-</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Semua Tabel -->
|
<!-- Semua Tabel -->
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table id="datatables" class="table table-striped table-hover table-bordered align-middle">
|
<table id="datatables" class="table table-sm table-hover table-bordered align-middle">
|
||||||
<thead class="table-primary">
|
<thead class="table-primary">
|
||||||
<tr>
|
<tr>
|
||||||
<th>S</th>
|
<th>S</th>
|
||||||
@ -241,25 +231,65 @@
|
|||||||
<th style='width:10%;'>Tests</th>
|
<th style='width:10%;'>Tests</th>
|
||||||
<th style='width:5%;'>Result To</th>
|
<th style='width:5%;'>Result To</th>
|
||||||
<th style='width:8%;'>Validation</th>
|
<th style='width:8%;'>Validation</th>
|
||||||
<th style='width:7%;'>Status</th>
|
<th style='width:5%;'>Status</th>
|
||||||
<th style='width:8%;'></th>
|
<th style='width:8%;'></th>
|
||||||
<th style='width:6%;'></th>
|
<th style='width:6%;'></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<?php foreach($dataList as $row) : ?>
|
||||||
|
<?php
|
||||||
|
switch ($row['statscode']) {
|
||||||
|
case 1: $class = 'BackPend'; break;
|
||||||
|
case 2: $class = 'PartColl'; break;
|
||||||
|
case 3: $class = 'Collected'; break;
|
||||||
|
case 4: $class = 'PartRecv'; break;
|
||||||
|
case 5: $class = 'Received'; break;
|
||||||
|
case 6: $class = 'Incomplete'; break;
|
||||||
|
case 7: $class = 'Final'; break;
|
||||||
|
case 8: $class = 'FinVerification'; break;
|
||||||
|
case 9: $class = 'PenVerification'; break;
|
||||||
|
default: $class = ''; break;
|
||||||
|
}
|
||||||
|
?>
|
||||||
<tr>
|
<tr>
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">1</td>
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">2025-10-25 11:25</td>
|
data-bs-target="#detailModal">
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">TEGUH PUTRA SIE, MR</td>
|
<?= esc($row['statscode']) ?>
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">5102723628</td>
|
</td>
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">01251002841</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">PT. PRUDENTIAL LIFE ASSURANCE</td>
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">✶ HERNI SUPRAPTI, Dr</td>
|
data-bs-target="#detailModal">
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">
|
<?= esc($row['reqdate']) ?>
|
||||||
(DL), (DBIL), (IBIL), (SGOT), (SGPT), (ALP), (GGT), (ALB), (GLOBU),
|
</td>
|
||||||
(CHOL), (TG), (HDL), (LDL), (GLUP), (HBA1C), (UL)
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#detailModal">
|
||||||
|
<?= esc($row['patname']) ?>
|
||||||
|
</td>
|
||||||
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#detailModal">
|
||||||
|
<?= esc($row['sp_accessnumber']) ?>
|
||||||
|
</td>
|
||||||
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#detailModal">
|
||||||
|
<?= esc($row['hostordernumber']) ?>
|
||||||
|
</td>
|
||||||
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#detailModal">
|
||||||
|
<?= esc($row['reff']) ?>
|
||||||
|
</td>
|
||||||
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#detailModal">
|
||||||
|
<?= esc($row['doc']) ?>
|
||||||
|
</td>
|
||||||
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#detailModal">
|
||||||
|
<?= esc($row['tests']) ?>
|
||||||
|
</td>
|
||||||
|
<td class="pointercol" data-access="<?= $row['sp_accessnumber'] ?>" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#detailModal">
|
||||||
|
<?= esc($row['odr_cresult_to']) ?>
|
||||||
</td>
|
</td>
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">C/W</td>
|
|
||||||
<td>
|
<td>
|
||||||
<h6>
|
<h6>
|
||||||
<span class="px-3 py-2 badge text-success border border-success bg-success-subtle">
|
<span class="px-3 py-2 badge text-success border border-success bg-success-subtle">
|
||||||
@ -269,77 +299,10 @@
|
|||||||
<a href="#" class="text-primary">Result</a><br>
|
<a href="#" class="text-primary">Result</a><br>
|
||||||
<a href="#" class="text-primary" disabled>Invalidation</a><br>
|
<a href="#" class="text-primary" disabled>Invalidation</a><br>
|
||||||
</td>
|
</td>
|
||||||
<td data-bs-toggle="modal" data-bs-target="#detailModal" class='pointercol bg-warning'>Pending</td>
|
<td class="pointercol <?= esc($class) ?>" data-access="<?= $row['sp_accessnumber'] ?>"
|
||||||
<td>
|
data-bs-toggle="modal" data-bs-target="#detailModal">
|
||||||
<a href="#" class="text-primary">Preview</a>
|
<?= esc($row['stats']) ?>
|
||||||
<hr>
|
</td>
|
||||||
<a href="#" class="text-danger">Print</a> | <a href="#" class="text-danger">Eng</a>
|
|
||||||
<hr>
|
|
||||||
<a href="#" class="text-primary">Pdf</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input type="checkbox" name="printed"> Printed<br>
|
|
||||||
<input type="checkbox" name="hardcopy"> Hardcopy
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">1</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">2025-10-25 11:25</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">TEGUH PUTRA SIE, MR</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">5102723628</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">01251002841</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">PT. PRUDENTIAL LIFE ASSURANCE</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">✶ HERNI SUPRAPTI, Dr</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">
|
|
||||||
(DL), (DBIL), (IBIL), (SGOT), (SGPT), (ALP), (GGT), (ALB), (GLOBU),
|
|
||||||
(CHOL), (TG), (HDL), (LDL), (GLUP), (HBA1C), (UL)
|
|
||||||
</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">C/W</td>
|
|
||||||
<td>
|
|
||||||
<h6>
|
|
||||||
<span class="px-3 py-2 badge text-success border border-success bg-success-subtle">
|
|
||||||
1
|
|
||||||
</span>
|
|
||||||
</h6>
|
|
||||||
<a href="#" class="text-primary">Result</a><br>
|
|
||||||
<a href="#" class="text-primary" disabled>Invalidation</a><br>
|
|
||||||
</td>
|
|
||||||
<td data-bs-toggle="modal" data-bs-target="#detailModal" class='pointercol bg-warning'>Pending</td>
|
|
||||||
<td>
|
|
||||||
<a href="#" class="text-primary">Preview</a>
|
|
||||||
<hr>
|
|
||||||
<a href="#" class="text-danger">Print</a> | <a href="#" class="text-danger">Eng</a>
|
|
||||||
<hr>
|
|
||||||
<a href="#" class="text-primary">Pdf</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input type="checkbox" name="printed"> Printed<br>
|
|
||||||
<input type="checkbox" name="hardcopy"> Hardcopy
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">1</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">2025-10-25 11:25</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">TEGUH PUTRA SIE, MR</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">5102723628</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">01251002841</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">PT. PRUDENTIAL LIFE ASSURANCE</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">✶ HERNI SUPRAPTI, Dr</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">
|
|
||||||
(DL), (DBIL), (IBIL), (SGOT), (SGPT), (ALP), (GGT), (ALB), (GLOBU),
|
|
||||||
(CHOL), (TG), (HDL), (LDL), (GLUP), (HBA1C), (UL)
|
|
||||||
</td>
|
|
||||||
<td class='pointercol' data-bs-toggle="modal" data-bs-target="#detailModal">C/W</td>
|
|
||||||
<td>
|
|
||||||
<h6>
|
|
||||||
<span class="px-3 py-2 badge text-success border border-success bg-success-subtle">
|
|
||||||
2
|
|
||||||
</span>
|
|
||||||
</h6>
|
|
||||||
<a href="#" class="text-primary">Result</a><br>
|
|
||||||
<a href="#" class="text-primary" disabled>Invalidation</a><br>
|
|
||||||
</td>
|
|
||||||
<td data-bs-toggle="modal" data-bs-target="#detailModal" class='pointercol bg-warning'>Pending</td>
|
|
||||||
<td>
|
<td>
|
||||||
<a href="#" class="text-primary">Preview</a>
|
<a href="#" class="text-primary">Preview</a>
|
||||||
<hr>
|
<hr>
|
||||||
@ -352,11 +315,12 @@
|
|||||||
<input type="checkbox" name="hardcopy"> Hardcopy
|
<input type="checkbox" name="hardcopy"> Hardcopy
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Modal Specimen Collection-->
|
<!-- Modal Specimen Collection-->
|
||||||
@ -364,18 +328,16 @@
|
|||||||
<div class="modal-dialog modal-lg modal-dialog-centered">
|
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h1 class="modal-title fw-bold fs-4" id="detailModal">Specimen Collection <span
|
<h1 class="modal-title fw-bold fs-4" id="detailModal">Specimen Collection</h1>
|
||||||
class="text-success">#5111113439</span></h1>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body" id="modalContent">
|
||||||
|
<!-- <div class="row mb-4">
|
||||||
|
|
||||||
<div class="row mb-4">
|
|
||||||
<!-- Kolom kiri -->
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="info-pair d-flex">
|
<div class="info-pair d-flex">
|
||||||
<div class="info-label w-50 fw-bold">Patient Name </div>
|
<div class="info-label w-50 fw-bold">Patient Name </div>
|
||||||
<div class="info-value fw-semibold">: Zaka</div>
|
<div class="info-value fw-semibold">: </div>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-pair d-flex">
|
<div class="info-pair d-flex">
|
||||||
<div class="info-label w-50 fw-bold">Age</div>
|
<div class="info-label w-50 fw-bold">Age</div>
|
||||||
@ -383,7 +345,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Kolom kanan -->
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<div class="info-pair d-flex">
|
<div class="info-pair d-flex">
|
||||||
<div class="info-label w-50 fw-bold">No Lab</div>
|
<div class="info-label w-50 fw-bold">No Lab</div>
|
||||||
@ -395,11 +356,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title fs-4 mb-2"><i class="bi bi-flask-florence-fill"></i> Tube</h5>
|
<h5 class="card-title fs-4 mb-2"><i class="bi bi-flask-florence-fill"></i> Tube</h5>
|
||||||
<!-- <hr> -->
|
|
||||||
<table class="table fs-6 text-center">
|
<table class="table fs-6 text-center">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class=''>
|
<tr class=''>
|
||||||
@ -425,7 +385,8 @@
|
|||||||
<tr class='text-center'>
|
<tr class='text-center'>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<h6 class="p-0 m-0">
|
<h6 class="p-0 m-0">
|
||||||
<i class="bi bi-pencil-square" role="button" onclick="commentValue()"></i>
|
<i class="bi bi-pencil-square" role="button"
|
||||||
|
onclick="commentValue()"></i>
|
||||||
</h6>
|
</h6>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -433,22 +394,140 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- <div class="modal fade" id="detailModal" tabindex="-1" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title fs-5">Specimen Collection</h1>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="modalContent">
|
||||||
|
<p class="text-center text-muted">Klik data untuk melihat detail...</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
|
|
||||||
<?= $this->section('script') ?>
|
<?= $this->section('script') ?>
|
||||||
<script>
|
<script>
|
||||||
// Untuk Koment Value
|
// Untuk Koment Value
|
||||||
function commentValue() {
|
function commentValue() {
|
||||||
const input = prompt("Masukkan Komentar :");
|
const input = prompt("Masukkan Komentar :");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Untuk Detail
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
const modal = document.getElementById('detailModal');
|
||||||
|
const modalContent = document.getElementById('modalContent');
|
||||||
|
document.querySelectorAll('.pointercol').forEach(td => {
|
||||||
|
td.addEventListener('click', async function () {
|
||||||
|
const access = this.dataset.access;
|
||||||
|
modalContent.innerHTML =
|
||||||
|
"<p class='text-center text-muted'>Loading data...</p>";
|
||||||
|
try {
|
||||||
|
// Get API
|
||||||
|
const res = await fetch(
|
||||||
|
`<?=base_url();?>admin/specimenDetail?access=${access}`);
|
||||||
|
const data = await res.json();
|
||||||
|
|
||||||
|
modalContent.innerHTML = `
|
||||||
|
<div class="row mb-4 p-3">
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="info-pair d-flex">
|
||||||
|
<div class="info-label w-25 fw-bold">Patient</div>
|
||||||
|
<div class="info-value">: ${data.patientIdentity.name}</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-pair d-flex">
|
||||||
|
<div class="info-label w-25 fw-bold">Age</div>
|
||||||
|
<div class="info-value">: ${data.patientIdentity.age} years</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-pair d-flex">
|
||||||
|
<div class="info-label w-25 fw-bold">Gender</div>
|
||||||
|
<div class="info-value">: ${data.patientIdentity.gender}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="info-pair d-flex">
|
||||||
|
<div class="info-label w-50 fw-bold">MR#</div>
|
||||||
|
<div class="info-value">: ${data.patientIdentity.rm}</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-pair d-flex">
|
||||||
|
<div class="info-label w-50 fw-bold">KTP</div>
|
||||||
|
<div class="info-value">: ${data.patientIdentity.ktp}</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-pair d-flex">
|
||||||
|
<div class="info-label w-50 fw-bold">Place of Birth</div>
|
||||||
|
<div class="info-value">: ${data.patientIdentity.placeofbirth}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title fs-4 mb-2">
|
||||||
|
<i class="bi bi-flask-florence-fill"></i> Tube
|
||||||
|
</h5>
|
||||||
|
|
||||||
|
<table class="table fs-6 text-start">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class='text-center'>Status</th>
|
||||||
|
<th>Sample Code</th>
|
||||||
|
<th>Sample Name</th>
|
||||||
|
<th>Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
${data.samples.map(s => `
|
||||||
|
<tr>
|
||||||
|
<td class='text-center'>
|
||||||
|
<input type="checkbox" class="form-check-input"
|
||||||
|
${s.colstatus == 1 ? "checked" : ""}
|
||||||
|
disabled
|
||||||
|
>
|
||||||
|
</td>
|
||||||
|
<td>${s.sampcode}</td>
|
||||||
|
<td>${s.name}</td>
|
||||||
|
<td>
|
||||||
|
<button type="button" class="btn btn-success m-0 px-2 py-1" onclick=""><h6 class="p-0 m-0">Coll.</h6></button>
|
||||||
|
<button type="button" class="btn btn-warning m-0 px-2 py-1" onclick=""><h6 class="p-0 m-0">Un-Coll.</h6></button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`).join('')}
|
||||||
|
|
||||||
|
<tr class="text-center">
|
||||||
|
<td colspan="4">
|
||||||
|
<h6 class="p-0 m-0">
|
||||||
|
<i class="bi bi-pencil-square" role="button" onclick="commentValue()"></i>
|
||||||
|
</h6>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
modalContent.innerHTML =
|
||||||
|
"<p class='text-danger text-center'>Gagal memuat data.</p>";
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
Loading…
x
Reference in New Issue
Block a user