creating admin page

This commit is contained in:
mahdahar 2025-04-17 12:58:07 +07:00
parent 10412f2f93
commit fee085a5c5
6 changed files with 164 additions and 52 deletions

View File

@ -23,10 +23,8 @@ $routes->get('/api/results_preview/(:any)', 'API_TM::results_preview/$1');
// send oc // send oc
// send new master // send new master
$routes->get('/admin', 'AdminPages::LISRequests'); $routes->get('/admin', 'AdminPages::HISRequests');
$routes->get('/admin/LISRequests', 'AdminPages::LISRequests');
$routes->get('/admin/HISRequests', 'AdminPages::HISRequests'); $routes->get('/admin/HISRequests', 'AdminPages::HISRequests');
$routes->get('/admin/HISMessages', 'AdminPages::HISMessages'); $routes->get('/admin/HISMessages', 'AdminPages::HISMessages');
$routes->post('/admin/api/LISRequests', 'API_Admin::LISRequests_index');
$routes->post('/admin/api/HISRequests', 'API_Admin::HISRequests_index'); $routes->post('/admin/api/HISRequests', 'API_Admin::HISRequests_index');
$routes->post('/admin/api/HISMessages', 'API_Admin::HISMessages_index'); $routes->post('/admin/api/HISMessages', 'API_Admin::HISMessages_index');

View File

@ -9,30 +9,42 @@ class API_Admin extends ResourceController {
} }
public function LISRequests_index() { public function HISRequests_index() {
$db = \Config\Database::connect(); $db = \Config\Database::connect();
$date1 = $this->request->getPost('date1'); $date1 = $this->request->getPost('date1');
$date2 = $this->request->getPost('date2'); $date2 = $this->request->getPost('date2');
$sql = "select r.SP_ACCESSNUMBER, r.HOSTORDERNUMBER, r.SP_HOSPNUMBER, r.SP_LOCCODE, p.PATNUMBER, p.FIRSTNAME, p.NAME from SP_REQUESTS r $sql = "select r.SP_ACCESSNUMBER, r.HOSTORDERNUMBER, PATNUMBER=right(p.PATNUMBER,8), p.FIRSTNAME, p.NAME, tr.*,
STUFF(
( select ', '+ SP_TESTCODE from SP_TESTS
where SP_ACCESSNUMBER=r.SP_ACCESSNUMBER and DEPTH=0
FOR XML PATH('')
), 1, 1, ''
) AS TESTS
from cmod.dbo.CM_TM_REQUESTS tr
left join SP_REQUESTS r on r.HOSTORDERNUMBER=tr.REFFID
left join PATIENTS p on p.PATID=r.PATID left join PATIENTS p on p.PATID=r.PATID
where r.COLLECTIONDATE between '2025-03-17 00:00' and '2025-03-17 23:59'"; where tr.REQDATE between '".$date1."T00:00' and '".$date2."T23:59'
order by tr.REQDATE";
$query = $db->query($sql); $query = $db->query($sql);
$results = $query->getResultArray(); $results = $query->getResultArray();
/*
$response = [ return $this->respond([
'status' => 200, 'data' => $results
'error' => null, ]);
'message' => 'Data received successfully!', }
'data' => [
'date1' => $date1, public function HISMessages_index() {
'date2' => $date2, $db = \Config\Database::connect();
], $date1 = $this->request->getPost('date1');
]; $date2 = $this->request->getPost('date2');
*/
$sql = "select LOGID, BODY, LOGDATE from cmod.dbo.CM_TM_LOGS where LOGDATE between '$date1 00:00' and '$date2 23:59'";
$query = $db->query($sql);
$results = $query->getResultArray();
return $this->respond([ return $this->respond([
'data' => $results 'data' => $results
]); ]);
} }
} }

View File

@ -4,8 +4,11 @@ namespace App\Controllers;
class AdminPages extends BaseController { class AdminPages extends BaseController {
public function LISRequests() { public function HISRequests() {
return view('admin/LISRequests'); return view('admin/HISRequests');
} }
public function HISMessages() {
return view('admin/HISMessages');
}
} }

View File

@ -0,0 +1,99 @@
<?= $this->extend('admin/layout') ?>
<?= $this->section('content') ?>
<div class='container-fluid'>
<div class="card bg-light">
<div class="card-body">
<h5 class="card-title">Messages</h5>
<form class="row g-2 align-items-center" id="myForm">
<div class="col-auto">
<label for="startDate" class="col-form-label">Date</label>
</div>
<div class="col-auto">
<input type="date" class="form-control form-control-sm" id="date1" name='date1'>
</div>
<div class="col-auto">
<span>-</span>
</div>
<div class="col-auto">
<input type="date" class="form-control form-control-sm" id="date2" name='date2'>
</div>
<div class="col-auto">
<button type="button" class="btn btn-sm btn-primary" onclick='searchMessages()'>Search</button>
</div>
</form>
<div class='table-responsive'>
<table class='table table-striped table-bordered' id='dataTable'>
<thead>
<tr>
<th>#</th> <th>Messages</th> <th>Action</th>
</tr>
</thead>
<tbody id='tbody'>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?= $this->endSection() ?>
<?= $this->section('script') ?>
<script>
let curDate = new Date().toJSON().slice(0, 10);
$('#date1').val(curDate);
$('#date2').val(curDate);
function searchMessages() {
const url = '<?=base_url('');?>admin/api/HISMessages';
const form = document.getElementById('myForm');
const formData = new FormData(form);
fetch(url, {
method: 'POST',
body: formData
}).then(response => {
if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); }
return response.json();
}).then(data => {
$("#dataTable").DataTable().destroy();
$("#tbody").html("");
let i = 1;
data.data.forEach(item => {
const row = `<tr>
<td>LogID : <b>${item.LOGID}</b><br />${item.LOGDATE}</td>
<td><a href="#" class="show-more" onclick='showmore(this)'>Show More</a> <span class='text-limit'>${item.BODY}</span> </td>
<td></td>
</tr>`;
$("#tbody").append(row);
});
$('#dataTable').DataTable({
"pageLength": 20,
"lengthMenu": [10, 20, 50, 100]
});
});
}
function showmore(element) {
event.preventDefault();
const limitedTextSpan = element.nextElementSibling;
console.log(limitedTextSpan.style.whiteSpace);
if (limitedTextSpan.style.whiteSpace == 'nowrap' || limitedTextSpan.style.whiteSpace == '') {
limitedTextSpan.style.whiteSpace = 'normal';
limitedTextSpan.style.overflow = 'visible';
element.textContent = 'Show Less';
console.log('show less');
} else {
limitedTextSpan.style.whiteSpace = 'nowrap';
limitedTextSpan.style.overflow = 'hidden';
element.textContent = 'Show More';
console.log('show more');
}
}
</script>
<?= $this->endSection() ?>

View File

@ -4,7 +4,7 @@
<div class='container-fluid'> <div class='container-fluid'>
<div class="card bg-light"> <div class="card bg-light">
<div class="card-body"> <div class="card-body">
<h5 class="card-title">LIS Requests</h5> <h5 class="card-title">Requests</h5>
<form class="row g-2 align-items-center" id="myForm"> <form class="row g-2 align-items-center" id="myForm">
<div class="col-auto"> <div class="col-auto">
<label for="startDate" class="col-form-label">Date</label> <label for="startDate" class="col-form-label">Date</label>
@ -28,13 +28,13 @@
</form> </form>
<div class='table-responsive'> <div class='table-responsive'>
<table class='table' id='dataTable'> <table class='table table-striped table-bordered' id='dataTable'>
<thead> <thead>
<tr> <tr>
<th>Access#</th> <th>Pat#</th> <th>PatName</th> <th>Loc</th> <th>ID#</th> <th>Pat#</th> <th>PatName</th> <th>Loc</th> <th>Test</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody id='tbody'>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -49,14 +49,10 @@ $('#date1').val(curDate);
$('#date2').val(curDate); $('#date2').val(curDate);
function searchRequests() { function searchRequests() {
const url = '<?=base_url('');?>admin/api/HISRequests';
const form = document.getElementById('myForm'); const form = document.getElementById('myForm');
const formData = new FormData(form); const formData = new FormData(form);
const tableBody = document.getElementById('dataTable').getElementsByTagName('tbody')[0];
tableBody.innerHTML = '';
let url = '<?=base_url('');?>admin/api/LISRequests';
fetch(url, { fetch(url, {
method: 'POST', method: 'POST',
body: formData body: formData
@ -64,23 +60,24 @@ function searchRequests() {
if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); }
return response.json(); return response.json();
}).then(data => { }).then(data => {
$("#dataTable").DataTable().destroy();
$("#tbody").html("");
data.data.forEach(item => { data.data.forEach(item => {
const row = `<tr> <td>${item.SP_ACCESSNUMBER}<br/>HON : ${item.HOSTORDERNUMBER}</td> <td>${item.name}</td> <td>${item.price}</td> </tr>`; const row = `<tr>
tableBody.insertAdjacentHTML('beforeend', row); <td class='text-nowrap'>Access# : ${item.SP_ACCESSNUMBER}<br/>Reff# : ${item.REFFID} | Visit : ${item.REQNUMBER}</td>
}) <td>${item.PATNUMBER}</td>
<td>${item.FIRSTNAME} ${item.NAME}</td>
<td>${item.LOC}</td>
<td>${item.TESTS}</td>
</tr>`;
$("#tbody").append(row);
});
$('#dataTable').DataTable({
"pageLength": 20,
"lengthMenu": [10, 20, 50, 100]
});
}); });
/*
data.forEach(rowData => {
const row = tableBody.insertRow();
for (const key in rowData) {
if (rowData.hasOwnProperty(key)) {
const cell = row.insertCell();
cell.textContent = rowData[key];
}
}
});
});
*/
} }
</script> </script>
<?= $this->endSection() ?> <?= $this->endSection() ?>

View File

@ -4,14 +4,18 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CMOD-Rest Administrator</title> <title>CMOD-Rest Administrator</title>
<link href="assets/bootstrap.min.css" rel="stylesheet" /> <link href="<?=base_url();?>assets/bootstrap.min.css" rel="stylesheet" />
<script src="assets/bootstrap.bundle.min.js"></script> <link href="<?=base_url();?>assets/datatables.min.css" rel="stylesheet">
<script src="assets/jquery-3.7.1.slim.min.js"></script> <script src="<?=base_url();?>assets/jquery-3.7.1.slim.min.js"></script>
<link href="assets/datatables.min.css" rel="stylesheet"> <script src="<?=base_url();?>assets/bootstrap.bundle.min.js"></script>
<script src="assets/datatables.min.js"></script> <script src="<?=base_url();?>assets/datatables.min.js"></script>
<style> <style>
html {font-size:11px;}
.nav-link, .navbar-brand { color:white; } .nav-link, .navbar-brand { color:white; }
a:hover { background-color:white;color:black; } a:hover { background-color:white;color:black; }
/* HIS Messages */
.text-limit { display: block; max-width: 600px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
</style> </style>
</head> </head>
<body class='bg-secondary'> <body class='bg-secondary'>
@ -19,9 +23,8 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="collapse navbar-collapse" id="navbarNav"> <div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav"> <ul class="navbar-nav">
<li class="nav-item"> <a class="nav-link" href="#">LIS Requests</a> </li> <li class="nav-item"> <a class="nav-link" href="<?=base_url();?>admin/HISRequests">HIS Requests</a> </li>
<li class="nav-item"> <a class="nav-link" href="#">HIS Requests</a> </li> <li class="nav-item"> <a class="nav-link" href="<?=base_url();?>admin/HISMessages">HIS Messages</a> </li>
<li class="nav-item"> <a class="nav-link" href="#">HIS Messages</a> </li>
</ul> </ul>
</div> </div>
<div class="navbar-brand" href="#">CMOD-Rest Administrator</div> <div class="navbar-brand" href="#">CMOD-Rest Administrator</div>