pre finish

This commit is contained in:
mahdahar 2025-11-26 10:18:06 +07:00
parent 346433bf6d
commit 6dc1f24bb3
5 changed files with 126 additions and 29 deletions

View File

@ -47,7 +47,9 @@ $routes->get('/dummypage', 'Home::dummyPage');
// ------------------------------------------------------For API------------------------------------------------------ // // ------------------------------------------------------For API------------------------------------------------------ //
// $routes->get('/api/dashboard', 'ApiDashboard::index'); // $routes->get('/api/dashboard', 'ApiDashboard::index');
$routes->get('api/request/unvalidate/(:any)', 'Request::showUnval/$1');
$routes->get('api/request/validate/(:any)', 'Request::show/$1'); $routes->get('api/request/validate/(:any)', 'Request::show/$1');
$routes->post('api/request/validate/(:any)', 'Request::val/$1'); $routes->post('api/request/validate/(:any)', 'Request::val/$1');
$routes->delete('api/request/validate/(:any)', 'Request::unval/$1'); $routes->delete('api/request/validate/(:any)', 'Request::unval/$1');

View File

@ -21,12 +21,18 @@ class Request extends BaseController {
return view('admin/modal_request',$data); return view('admin/modal_request',$data);
} }
public function showUnval($accessnumber) {
$data['accessnumber'] = $accessnumber;
return view('admin/modal_unvalidate',$data);
}
public function unval($accessnumber) { public function unval($accessnumber) {
$input = $this->request->getJSON(true); $input = $this->request->getJSON(true);
$userid = $input['userid']; $userid = $input['userid'];
$comment = $input['comment'];
$db = db_connect(); $db = db_connect();
$sql = "update GDC_CMOD.dbo.CM_REQUESTS set ISVAL1=0, VAL1USER=null, VAL1DATE=null, $sql = "update GDC_CMOD.dbo.CM_REQUESTS set ISVAL1=0, VAL1USER=null, VAL1DATE=null, ISVAL2=0, VAL2USER=null, VAL2DATE=null,
ISVAL2=0, VAL2USER=null, VAL2DATE=null where ACCESSNUMBER='$accessnumber'"; PENDINGTEXT='$comment', PENDINGUSER='$userid', PENDINGDATE=GETDATE() where ACCESSNUMBER='$accessnumber'";
$db->query($sql); $db->query($sql);
$data = ['status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber" ]; $data = ['status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber" ];

View File

@ -58,6 +58,9 @@
<button class='btn btn-sm btn-outline-success' data-type='success'><?=$counter['complete'];?> <small>Complete</small></button> <button class='btn btn-sm btn-outline-success' data-type='success'><?=$counter['complete'];?> <small>Complete</small></button>
<button class='btn btn-sm btn-dark' data-type='dark'><?=$counter['total'];?> <small>Total</small></button> <button class='btn btn-sm btn-dark' data-type='dark'><?=$counter['total'];?> <small>Total</small></button>
</div> </div>
<div class="col-1">
<button id="filterValBtn" class='btn btn-sm btn-outline-primary' onclick="filterVal('<?=session('userid');?>')"> <small>Validate</small></button>
</div>
</div> </div>
<div class="table table-responsive-scroll"> <div class="table table-responsive-scroll">
@ -126,7 +129,7 @@
<?php if($row['val'] != 2) { ?> <?php if($row['val'] != 2) { ?>
<tr> <tr>
<td> <td>
<button id='unvalBtn-<?=$accessnumber;?>' class='btn btn-xs btn-outline-secondary px-1 py-0 mb-1' onclick="unvalidate(<?=$row['sp_accessnumber'];?>,'<?=session('userid');?>?>')"><i class="bi bi-arrow-counterclockwise"></i></button> <button id='unvalBtn-<?=$accessnumber;?>' class='btn btn-xs btn-outline-secondary px-1 py-0 mb-1' onclick="unvalidateShow(<?=$row['sp_accessnumber'];?>)" data-bs-toggle="modal" data-bs-target="#unvalidateModal"><i class="bi bi-arrow-counterclockwise"></i></button>
<button id='valBtn-<?=$accessnumber;?>' class='btn btn-xs btn-outline-success px-1 py-0 mb-1' onclick="validateShow(<?=$row['sp_accessnumber'];?>)" data-bs-toggle="modal" data-bs-target="#validateModal"><i class="bi bi-check-lg"></i></button> <button id='valBtn-<?=$accessnumber;?>' class='btn btn-xs btn-outline-success px-1 py-0 mb-1' onclick="validateShow(<?=$row['sp_accessnumber'];?>)" data-bs-toggle="modal" data-bs-target="#validateModal"><i class="bi bi-check-lg"></i></button>
</td> </td>
</tr> </tr>
@ -169,7 +172,7 @@
</div> </div>
</div> </div>
<div class="modal fade" id="unvalidateModal" aria-hidden="true" aria-labelledby="validateModal" tabindex="-1"> <div class="modal fade" id="unvalidateModal" aria-hidden="true" aria-labelledby="unvalidateModal" tabindex="-1">
<div class="modal-dialog modal-xl modal-dialog-centered"> <div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content"> <div class="modal-content">
<div class="modal-body" id="unvalidateModalContent"> </div> <div class="modal-body" id="unvalidateModalContent"> </div>
@ -222,9 +225,43 @@
regex = vals.join('|'); regex = vals.join('|');
table.column(0).search(regex, true, false).draw(); table.column(0).search(regex, true, false).draw();
}); });
}); });
// Select the column by index (1) and apply a search that excludes "Test"
// The regex: ^((?!Test).)*$
// - ^...$ anchors the start and end
// - (?!Test) is a negative lookahead, failing the match if "Test" is found
function filterVal(userid) {
var currentSearch = table.column(9).search();
if (currentSearch.includes(userid)) {
table.column(9).search( '' ).draw();
$("#filterValBtn").removeClass(`btn-primary`).addClass(`btn-outline-primary`);
} else {
table.column(9).search( `^((?!${userid}).)*$`, true, false ).draw();
$("#filterValBtn").removeClass(`btn-outline-primary`).addClass(`btn-primary`);
}
}
function unvalidate(accessnumber,userid) {
if(confirm("Are you sure?")) {
fetch(`${BASE_URL}/api/request/validate/${accessnumber}`, {
method: "DELETE",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({ userid:`${userid}` })
}).then(response => {
console.log("Response:", response);
$(`#val1user-${accessnumber}`).text("1 : ");
$(`#val2user-${accessnumber}`).text("2 : ");
$(`#valBtn-${accessnumber}`).prop('disabled', false);
$(`#unvalBtn-${accessnumber}`).prop('disabled', false);
}).catch(error => {
console.log("Error:", error);
});
}
}
const BASE_URL = "<?= base_url(); ?>"; const BASE_URL = "<?= base_url(); ?>";
</script> </script>
<script src="<?=base_url('js/admin/specimen.js');?>"></script> <script src="<?=base_url('js/admin/specimen.js');?>"></script>

View File

@ -0,0 +1,16 @@
<form id='unValForm'>
<div class="row mb-2">
<h4>Unvalidate <?=$accessnumber;?></h4>
</div>
<div class="row m-2">
<input type='hidden' name='accessnumber' value='<?=$accessnumber;?>'>
<input type='hidden' name='userid' value='<?=session('userid');?>'>
<textarea class='form-control' name='comment' placeholder="Note ..." rows='5'></textarea>
</div>
<div class='row mb-2 mx-2'>
<div class='col text-end'>
<button class='btn btn-xs btn-warning' onclick="event.preventDefault();unvalidateRequest('unValForm', <?=$accessnumber;?>);">Un-Validate</button>
</div>
</div>
</form>

View File

@ -21,30 +21,66 @@
}); });
} }
function unvalidate(accessnumber,userid) { function unvalidateShow(accessnumber) {
if(confirm("Are you sure?")) { const modalBody = $('#unvalidateModal .modal-body');
modalBody.html('<div class="text-center py-5"><div class="spinner-border text-primary" role="status"><span class="visually-hidden">Loading...</span></div><p class="mt-2">Fetching verification details for #' + accessnumber + '...</p></div>');
$.ajax({
url: `${BASE_URL}/api/request/unvalidate/${accessnumber}`,
method: 'GET',
dataType: 'html',
success: function(response) {
modalBody.html(response);
},
error: function(xhr, status, error) {
console.error("AJAX Error:", status, error);
modalBody.html(`
<div class="alert alert-danger" role="alert">
<strong>Error loading content:</strong> Could not retrieve verification details.
<p class="mt-1 mb-0"><small>Details: ${error}</small></p>
</div>
`);
}
});
}
// Function to convert form data into a simple object
function formToObject(formElement) {
const data = new FormData(formElement);
const obj = {};
for (const [key, value] of data.entries()) {
obj[key] = value;
}
return obj;
}
// Function to handle the DELETE request
function unvalidateRequest(formId, accessnumber) {
const formElement = document.getElementById(formId);
if (confirm("Are you sure you want to unvalidate this request?")) {
var formDataObject = formToObject(formElement);
fetch(`${BASE_URL}/api/request/validate/${accessnumber}`, { fetch(`${BASE_URL}/api/request/validate/${accessnumber}`, {
method: "DELETE", method: "DELETE",
headers: {"Content-Type": "application/json"}, headers: { "Content-Type": "application/json"},
body: JSON.stringify({ userid:`${userid}` }) body: JSON.stringify( formDataObject )
}).then(response => { })
console.log("Response:", response); .then(response => {
if (!response.ok) { return response.json().then(err => { throw err; }); }
return response.json();
})
.then(data => {
$(`#unvalidateModal`).modal('hide');
console.log("Success Response:", data);
$(`#val1user-${accessnumber}`).text("1 : "); $(`#val1user-${accessnumber}`).text("1 : ");
$(`#val2user-${accessnumber}`).text("2 : "); $(`#val2user-${accessnumber}`).text("2 : ");
$(`#valBtn-${accessnumber}`).prop('disabled', false); $(`#valBtn-${accessnumber}`).prop('disabled', false);
$(`#unvalBtn-${accessnumber}`).prop('disabled', false); })
}).catch(error => { .catch(error => {
console.log("Error:", error); console.error("Fetch Error:", error);
alert(`Error unvalidating the request. Details: ${error.message || error}`);
}); });
/*
const cell = document.querySelector(`[data-acc="${accessnumber}"]`);
if(cell){
cell.querySelector(".badge").textContent = "0";
const btn = cell.querySelector(".invalidate-btn");
if (btn) btn.remove();
}
*/
} }
} }