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 new master
$routes->get('/admin', 'AdminPages::LISRequests');
$routes->get('/admin/LISRequests', 'AdminPages::LISRequests');
$routes->get('/admin', 'AdminPages::HISRequests');
$routes->get('/admin/HISRequests', 'AdminPages::HISRequests');
$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/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();
$date1 = $this->request->getPost('date1');
$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
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);
$results = $query->getResultArray();
/*
$response = [
'status' => 200,
'error' => null,
'message' => 'Data received successfully!',
'data' => [
'date1' => $date1,
'date2' => $date2,
],
];
*/
return $this->respond([
'data' => $results
]);
}
public function HISMessages_index() {
$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([
'data' => $results
]);
}
}

View File

@ -4,8 +4,11 @@ namespace App\Controllers;
class AdminPages extends BaseController {
public function LISRequests() {
return view('admin/LISRequests');
public function HISRequests() {
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="card bg-light">
<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">
<div class="col-auto">
<label for="startDate" class="col-form-label">Date</label>
@ -28,13 +28,13 @@
</form>
<div class='table-responsive'>
<table class='table' id='dataTable'>
<table class='table table-striped table-bordered' id='dataTable'>
<thead>
<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>
</thead>
<tbody>
<tbody id='tbody'>
</tbody>
</table>
</div>
@ -49,14 +49,10 @@ $('#date1').val(curDate);
$('#date2').val(curDate);
function searchRequests() {
const url = '<?=base_url('');?>admin/api/HISRequests';
const form = document.getElementById('myForm');
const formData = new FormData(form);
const tableBody = document.getElementById('dataTable').getElementsByTagName('tbody')[0];
tableBody.innerHTML = '';
let url = '<?=base_url('');?>admin/api/LISRequests';
fetch(url, {
method: 'POST',
body: formData
@ -64,23 +60,24 @@ function searchRequests() {
if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); }
return response.json();
}).then(data => {
$("#dataTable").DataTable().destroy();
$("#tbody").html("");
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>`;
tableBody.insertAdjacentHTML('beforeend', row);
})
const row = `<tr>
<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>
<?= $this->endSection() ?>

View File

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