Fix discharge medicine autocomplete and auto-fill - use OPD medicine_search endpoint
- Change from rx_group_medicine_suggest to Opd_prescription/medicine_search endpoint - Match OPD Consult Form data source and behavior - Auto-fill Type, Dose, When, Frequency, Route, Days, Qty, and Remark from medicine master - Add ensureDoseOption helper to handle current values not in dropdown list - Store medicine rows for auto-fill on selection - Improved user experience with comprehensive auto-complete
This commit is contained in:
parent
ee5b29f688
commit
66b5e1b6a5
|
|
@ -4107,6 +4107,7 @@ $allergyStatusNoKnown = in_array($allergyStatusNormalized, ['no known drug aller
|
||||||
var dischargeMedInput = section.querySelector('#discharge_med_name');
|
var dischargeMedInput = section.querySelector('#discharge_med_name');
|
||||||
var dischargeMedSuggest = section.querySelector('#discharge_med_suggest');
|
var dischargeMedSuggest = section.querySelector('#discharge_med_suggest');
|
||||||
var dischargeMedType = section.querySelector('#discharge_med_type');
|
var dischargeMedType = section.querySelector('#discharge_med_type');
|
||||||
|
var dischargeMedSuggestRows = [];
|
||||||
|
|
||||||
if (dischargeMedInput) {
|
if (dischargeMedInput) {
|
||||||
dischargeMedInput.addEventListener('input', function() {
|
dischargeMedInput.addEventListener('input', function() {
|
||||||
|
|
@ -4115,15 +4116,16 @@ $allergyStatusNoKnown = in_array($allergyStatusNormalized, ['no known drug aller
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$.get('<?= base_url('Opd_prescription/rx_group_medicine_suggest') ?>?q=' + encodeURIComponent(q), function(data) {
|
$.get('<?= base_url('Opd_prescription/medicine_search') ?>?q=' + encodeURIComponent(q) + '&scope=active&limit=10', function(data) {
|
||||||
var rows = (data && data.rows) ? data.rows : [];
|
var rows = (data && data.rows) ? data.rows : [];
|
||||||
|
dischargeMedSuggestRows = rows;
|
||||||
var html = '';
|
var html = '';
|
||||||
rows.forEach(function(row) {
|
rows.forEach(function(row) {
|
||||||
var name = String(row.med_name || '').trim();
|
var name = String(row.med_name || '').trim();
|
||||||
if (name === '') {
|
if (name === '') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
html += '<option value="' + $('<div>').text(name).html() + '" data-type="' + $('<div>').text(row.med_type || '').html() + '" data-id="' + (row.med_id || 0) + '"></option>';
|
html += '<option value="' + $('<div>').text(name).html() + '" data-type="' + $('<div>').text(row.med_type || '').html() + '" data-id="' + (row.id || 0) + '"></option>';
|
||||||
});
|
});
|
||||||
if (dischargeMedSuggest) {
|
if (dischargeMedSuggest) {
|
||||||
dischargeMedSuggest.innerHTML = html;
|
dischargeMedSuggest.innerHTML = html;
|
||||||
|
|
@ -4132,24 +4134,82 @@ $allergyStatusNoKnown = in_array($allergyStatusNormalized, ['no known drug aller
|
||||||
});
|
});
|
||||||
|
|
||||||
dischargeMedInput.addEventListener('change', function() {
|
dischargeMedInput.addEventListener('change', function() {
|
||||||
var value = String(dischargeMedInput.value || '').trim();
|
var value = String(dischargeMedInput.value || '').trim().toUpperCase();
|
||||||
if (value === '' || !dischargeMedSuggest) {
|
if (value === '') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find matching option and fill type if empty
|
// Find matching medicine and auto-fill all fields
|
||||||
var options = dischargeMedSuggest.querySelectorAll('option');
|
var matched = null;
|
||||||
options.forEach(function(opt) {
|
dischargeMedSuggestRows.forEach(function(row) {
|
||||||
if (opt.value === value && dischargeMedType && dischargeMedType.value.trim() === '') {
|
if (String(row.med_name || '').trim().toUpperCase() === value) {
|
||||||
var type = opt.getAttribute('data-type') || '';
|
matched = row;
|
||||||
if (type) {
|
|
||||||
dischargeMedType.value = type;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (matched) {
|
||||||
|
// Auto-fill Type
|
||||||
|
if (dischargeMedType && dischargeMedType.value.trim() === '') {
|
||||||
|
dischargeMedType.value = String(matched.med_type || '').trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-fill dose fields if they have values
|
||||||
|
var dosageSelect = section.querySelector('#discharge_dosage');
|
||||||
|
var whenSelect = section.querySelector('#discharge_dosage_when');
|
||||||
|
var freqSelect = section.querySelector('#discharge_dosage_freq');
|
||||||
|
var whereSelect = section.querySelector('#discharge_dose_where');
|
||||||
|
var daysInput = section.querySelector('#discharge_no_of_days');
|
||||||
|
var qtyInput = section.querySelector('#discharge_qty');
|
||||||
|
var remarkInput = section.querySelector('#discharge_remark');
|
||||||
|
|
||||||
|
if (matched.dosage && dosageSelect && dosageSelect.value === '') {
|
||||||
|
ensureDoseOption(dosageSelect, matched.dosage);
|
||||||
|
dosageSelect.value = matched.dosage;
|
||||||
|
}
|
||||||
|
if (matched.dosage_when && whenSelect && whenSelect.value === '') {
|
||||||
|
ensureDoseOption(whenSelect, matched.dosage_when);
|
||||||
|
whenSelect.value = matched.dosage_when;
|
||||||
|
}
|
||||||
|
if (matched.dosage_freq && freqSelect && freqSelect.value === '') {
|
||||||
|
ensureDoseOption(freqSelect, matched.dosage_freq);
|
||||||
|
freqSelect.value = matched.dosage_freq;
|
||||||
|
}
|
||||||
|
if (matched.dosage_where && whereSelect && whereSelect.value === '') {
|
||||||
|
ensureDoseOption(whereSelect, matched.dosage_where);
|
||||||
|
whereSelect.value = matched.dosage_where;
|
||||||
|
}
|
||||||
|
if (matched.no_of_days && daysInput && daysInput.value === '') {
|
||||||
|
daysInput.value = String(matched.no_of_days || '').trim();
|
||||||
|
}
|
||||||
|
if (matched.qty && qtyInput && qtyInput.value === '') {
|
||||||
|
qtyInput.value = String(matched.qty || '').trim();
|
||||||
|
}
|
||||||
|
if (matched.remark && remarkInput && remarkInput.value === '') {
|
||||||
|
remarkInput.value = String(matched.remark || '').trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ensureDoseOption(select, value) {
|
||||||
|
value = (value || '').toString().trim();
|
||||||
|
if (!value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var exists = false;
|
||||||
|
$(select).find('option').each(function() {
|
||||||
|
if ($(this).val() === value) {
|
||||||
|
exists = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!exists) {
|
||||||
|
$(select).append('<option value="' + $('<div>').text(value).html() + '">' + $('<div>').text(value + ' (Current)').html() + '</option>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle quick buttons
|
// Handle quick buttons
|
||||||
section.querySelectorAll('.discharge-quick-btn').forEach(function(btn) {
|
section.querySelectorAll('.discharge-quick-btn').forEach(function(btn) {
|
||||||
btn.addEventListener('click', function() {
|
btn.addEventListener('click', function() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user