pre finish
This commit is contained in:
parent
346433bf6d
commit
6dc1f24bb3
@ -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');
|
||||||
|
|
||||||
|
|||||||
@ -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" ];
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
16
app/Views/admin/modal_unvalidate.php
Normal file
16
app/Views/admin/modal_unvalidate.php
Normal 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>
|
||||||
@ -21,31 +21,67 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function unvalidate(accessnumber,userid) {
|
function unvalidateShow(accessnumber) {
|
||||||
if(confirm("Are you sure?")) {
|
const modalBody = $('#unvalidateModal .modal-body');
|
||||||
fetch(`${BASE_URL}/api/request/validate/${accessnumber}`, {
|
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>');
|
||||||
method: "DELETE",
|
|
||||||
headers: {"Content-Type": "application/json"},
|
$.ajax({
|
||||||
body: JSON.stringify({ userid:`${userid}` })
|
url: `${BASE_URL}/api/request/unvalidate/${accessnumber}`,
|
||||||
}).then(response => {
|
method: 'GET',
|
||||||
console.log("Response:", response);
|
dataType: 'html',
|
||||||
$(`#val1user-${accessnumber}`).text("1 : ");
|
success: function(response) {
|
||||||
$(`#val2user-${accessnumber}`).text("2 : ");
|
modalBody.html(response);
|
||||||
$(`#valBtn-${accessnumber}`).prop('disabled', false);
|
},
|
||||||
$(`#unvalBtn-${accessnumber}`).prop('disabled', false);
|
error: function(xhr, status, error) {
|
||||||
}).catch(error => {
|
console.error("AJAX Error:", status, error);
|
||||||
console.log("Error:", 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>
|
||||||
const cell = document.querySelector(`[data-acc="${accessnumber}"]`);
|
</div>
|
||||||
if(cell){
|
`);
|
||||||
cell.querySelector(".badge").textContent = "0";
|
|
||||||
const btn = cell.querySelector(".invalidate-btn");
|
|
||||||
if (btn) btn.remove();
|
|
||||||
}
|
}
|
||||||
*/
|
});
|
||||||
}
|
}
|
||||||
|
// 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}`, {
|
||||||
|
method: "DELETE",
|
||||||
|
headers: { "Content-Type": "application/json"},
|
||||||
|
body: JSON.stringify( formDataObject )
|
||||||
|
})
|
||||||
|
.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 : ");
|
||||||
|
$(`#val2user-${accessnumber}`).text("2 : ");
|
||||||
|
$(`#valBtn-${accessnumber}`).prop('disabled', false);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error("Fetch Error:", error);
|
||||||
|
alert(`Error unvalidating the request. Details: ${error.message || error}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function validate(accessnumber,userid) {
|
function validate(accessnumber,userid) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user