billing: add ABHA create/verify tab in patient billing view and update IPD panel package; add hospital logo image

This commit is contained in:
DevSoftTech Server 2026-05-08 10:48:43 +05:30
parent 3c4dff6285
commit eac78b7014
3 changed files with 206 additions and 7 deletions

View File

@ -1,4 +1,18 @@
<!-- Main content -->
<style>
/* Hide browser autocomplete suggestions */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus {
-webkit-box-shadow: 0 0 0 1000px white inset !important;
box-shadow: 0 0 0 1000px white inset !important;
}
/* Hide autocomplete dropdown suggestions */
input:autofill {
background-color: white !important;
}
</style>
<section class="content">
<div class="row">
<div class="col-md-12">
@ -21,6 +35,11 @@
data-bs-target="#lastopd" type="button" role="tab" aria-controls="lastopd"
aria-selected="false" data-url="<?= base_url('billing/patient/search_opd') ?>">Last OPDs</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="abha-tab" data-bs-toggle="tab"
data-bs-target="#abha" type="button" role="tab" aria-controls="abha"
aria-selected="false">ABHA Create/Verify</button>
</li>
</ul>
<div class="tab-content pt-2" id="patientTabsContent">
<div class="tab-pane fade" id="nperson" role="tabpanel" aria-labelledby="nperson-tab">
@ -243,11 +262,127 @@
</span>
</div>
</form>
<div id="search_loading" class="alert alert-info mt-2" style="display:none;">
<span class="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>
<span id="search_loading_text">Searching...</span>
</div>
<div class="searchresult"></div>
</div>
<div class="tab-pane fade" id="lastopd" role="tabpanel" aria-labelledby="lastopd-tab">
</div>
<div class="tab-pane fade" id="abha" role="tabpanel" aria-labelledby="abha-tab">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-body">
<h6 class="card-title">ABHA Number Create and Verify</h6>
<p class="text-muted">Create and verify your unique health identification number</p>
<ul class="nav nav-tabs" id="abhaSubTabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="abha-create-tab" data-bs-toggle="tab"
data-bs-target="#abha-create" type="button" role="tab" aria-controls="abha-create"
aria-selected="true">Create ABHA</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="abha-verify-tab" data-bs-toggle="tab"
data-bs-target="#abha-verify" type="button" role="tab" aria-controls="abha-verify"
aria-selected="false">Verify ABHA</button>
</li>
</ul>
<div class="tab-content pt-3" id="abhaSubTabsContent">
<div class="tab-pane fade show active" id="abha-create" role="tabpanel" aria-labelledby="abha-create-tab">
<form id="abha_create_form" class="needs-validation" novalidate>
<?= csrf_field() ?>
<div class="row">
<div class="col-md-6">
<div class="form-group mb-3">
<label class="form-label">Aadhaar Number</label>
<input type="text" class="form-control" id="abha_create_aadhaar"
name="aadhaar" placeholder="12-digit Aadhaar" required
data-inputmask='"mask": "9999-9999-9999"' data-mask>
</div>
</div>
<div class="col-md-6">
<div class="form-group mb-3">
<label class="form-label">Mobile Number</label>
<input type="text" class="form-control" id="abha_create_mobile"
name="mobile" placeholder="10-digit Mobile" required
data-inputmask='"mask": "9999999999"' data-mask>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group mb-3">
<label class="form-label">Full Name</label>
<input type="text" class="form-control" id="abha_create_name"
name="full_name" placeholder="Patient Full Name" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group mb-3">
<label class="form-label">Gender</label>
<select class="form-select" id="abha_create_gender" name="gender" required>
<option value="">Select Gender</option>
<option value="M">Male</option>
<option value="F">Female</option>
<option value="O">Other</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group mb-3">
<label class="form-label">Date of Birth</label>
<input type="date" class="form-control" id="abha_create_dob"
name="dob" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button type="submit" class="btn btn-primary">Generate OTP & Create ABHA</button>
</div>
</div>
</form>
</div>
<div class="tab-pane fade" id="abha-verify" role="tabpanel" aria-labelledby="abha-verify-tab">
<form id="abha_verify_form" class="needs-validation" novalidate>
<?= csrf_field() ?>
<div class="row">
<div class="col-md-6">
<div class="form-group mb-3">
<label class="form-label">ABHA Number / Health ID</label>
<input type="text" class="form-control" id="abha_verify_number"
name="abha_number" placeholder="ABHA Number" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group mb-3">
<label class="form-label">Aadhaar or Mobile</label>
<input type="text" class="form-control" id="abha_verify_mobile"
name="mobile_aadhaar" placeholder="Enter Mobile or Aadhaar" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button type="submit" class="btn btn-success">Verify ABHA</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@ -274,9 +409,21 @@
$('form.form2').on('submit', function(form) {
form.preventDefault();
var searchBtn = $('form.form2 button[type="submit"]');
var loadingDiv = $('#search_loading');
// Show loading indicator and disable button
loadingDiv.show();
searchBtn.prop('disabled', true);
searchBtn.text('Searching...');
$.post('<?= base_url('billing/patient/search') ?>', $('form.form2').serialize(), function(data) {
$('div.searchresult').html(data);
$('#example1').DataTable();
// Hide loading indicator and re-enable button
loadingDiv.hide();
searchBtn.prop('disabled', false);
searchBtn.text('Go!');
});
});
@ -377,6 +524,10 @@
});
$("#input_name")
.on("focus", function() {
// Suppress browser autocomplete suggestions
$(this).removeAttr('readonly').off('mousedown.autocomplete');
})
// don't navigate away from the field on tab when selecting an item
.on("keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB &&
@ -515,7 +666,7 @@
function onchange_title() {
var d = $('#cbo_title').val();
if (d == "Mr." || d == "Master" || d == "Baby Boy") {
if (d == "Mr." || d == "Master" || d == "Baby Boy" || d == "Mohd.") {
$("#options_gender1").prop("checked", true);
} else {
$("#options_gender2").prop("checked", true);

View File

@ -12,6 +12,45 @@ $ayushmanButtonClass = $isAyushmanCase ? 'accordion-button' : 'accordion-button
$ayushmanChecklistItems = $ayushman_checklist_items ?? [];
?>
<style>
/* Select2 - match Bootstrap form-select-sm sizing */
#package_list_id + .select2-container .select2-selection--single {
height: calc(1.5em + 0.5rem + 2px);
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
border: 1px solid #ced4da;
border-radius: 0.25rem;
}
#package_list_id + .select2-container .select2-selection--single .select2-selection__rendered {
line-height: calc(1.5em + 0.5rem);
padding-left: 0.4rem;
color: #212529;
}
#package_list_id + .select2-container .select2-selection--single .select2-selection__arrow {
height: calc(1.5em + 0.5rem);
top: 0;
}
#package_list_id + .select2-container--open .select2-selection--single {
border-color: #86b7fe;
outline: 0;
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
}
.select2-dropdown {
border: 1px solid #ced4da;
border-radius: 0.25rem;
font-size: 0.875rem;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
border: 1px solid #ced4da;
border-radius: 0.2rem;
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
}
.select2-results__option--highlighted {
background-color: #0d6efd !important;
}
</style>
<div class="card border-top border-3 border-danger">
<div class="card-header">
<strong>IPD Package</strong>
@ -110,7 +149,7 @@ $ayushmanChecklistItems = $ayushman_checklist_items ?? [];
<div class="row g-2">
<div class="col-md-12">
<label class="form-label">Package Name</label>
<select class="form-select form-select-sm" id="package_list_id" onchange="ipdPackageSetRate()">
<select class="form-select form-select-sm select2" id="package_list_id" onchange="ipdPackageSetRate()" style="width:100%">
<option value="">Select</option>
<?php foreach ($package_list ?? [] as $row) : ?>
<?php $displayAmount = (float) ($row->amount1 ?? $row->Pakage_Min_Amount ?? 0); ?>
@ -277,10 +316,6 @@ $ayushmanChecklistItems = $ayushman_checklist_items ?? [];
</div>
</div>
</div>
<?php else : ?>
<div class="alert alert-light border mt-3 mb-0">
Ayushman Bharat treatment search is shown automatically for cases where insurance or scheme contains Ayushman or PMJAY.
</div>
<?php endif; ?>
</div>
</div>
@ -332,6 +367,19 @@ $ayushmanChecklistItems = $ayushman_checklist_items ?? [];
var ipdAyushmanClaimSheetUrl = '<?= site_url('billing/ipd/panel/' . $ipdId . '/ayushman/claim-sheet') ?>';
var ipdAyushmanResults = {};
// Initialize Select2 on package list select
(function initPackageSelect2() {
if (window.jQuery && $.fn && $.fn.select2) {
$('#package_list_id').select2({
placeholder: 'Search package...',
allowClear: true,
width: '100%'
}).on('select2:select select2:clear', function() {
ipdPackageSetRate();
});
}
})();
function normalizeText(value) {
return String(value || '')
.toLowerCase()

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB