').text(label).html() + '';
+ });
+ $select.html(html);
+ }
+
+ function loadDischargeDoseMasters() {
+ $.get('= base_url('Opd_prescription/rx_group_dose_masters') ?>', function(data) {
+ doseMasterCache = {
+ dose: (data && data.dose) ? data.dose : [],
+ when: (data && data.when) ? data.when : [],
+ freq: (data && data.freq) ? data.freq : [],
+ where: (data && data.where) ? data.where : []
+ };
+
+ renderSelectOptions($('#discharge_dosage'), doseMasterCache.dose, 'Dose');
+ renderSelectOptions($('#discharge_dosage_when'), doseMasterCache.when, 'When');
+ renderSelectOptions($('#discharge_dosage_freq'), doseMasterCache.freq, 'Frequency');
+ renderSelectOptions($('#discharge_dose_where'), doseMasterCache.where, 'Route');
+ }, 'json').fail(function() {
+ setMedicineStatus('Unable to load dose masters.', 'error');
+ });
+ }
+
+ // Load dose masters on init
+ loadDischargeDoseMasters();
+
+ // Handle medicine autocomplete with full suggestions
+ var dischargeMedInput = section.querySelector('#discharge_med_name');
+ var dischargeMedSuggest = section.querySelector('#discharge_med_suggest');
+ var dischargeMedType = section.querySelector('#discharge_med_type');
+
+ if (dischargeMedInput) {
+ dischargeMedInput.addEventListener('input', function() {
+ var q = String(dischargeMedInput.value || '').trim();
+ if (q.length < 2) {
+ return;
+ }
+
+ $.get('= base_url('Opd_prescription/rx_group_medicine_suggest') ?>?q=' + encodeURIComponent(q), function(data) {
+ var rows = (data && data.rows) ? data.rows : [];
+ var html = '';
+ rows.forEach(function(row) {
+ var name = String(row.med_name || '').trim();
+ if (name === '') {
+ return;
+ }
+ html += '
';
+ });
+ if (dischargeMedSuggest) {
+ dischargeMedSuggest.innerHTML = html;
+ }
+ }, 'json');
+ });
+
+ dischargeMedInput.addEventListener('change', function() {
+ var value = String(dischargeMedInput.value || '').trim();
+ if (value === '' || !dischargeMedSuggest) {
+ return;
+ }
+
+ // Find matching option and fill type if empty
+ var options = dischargeMedSuggest.querySelectorAll('option');
+ options.forEach(function(opt) {
+ if (opt.value === value && dischargeMedType && dischargeMedType.value.trim() === '') {
+ var type = opt.getAttribute('data-type') || '';
+ if (type) {
+ dischargeMedType.value = type;
+ }
+ }
+ });
+ });
+ }
+
+ // Handle quick buttons
+ section.querySelectorAll('.discharge-quick-btn').forEach(function(btn) {
+ btn.addEventListener('click', function() {
+ var targetId = String(btn.getAttribute('data-fill-target') || '').trim();
+ var value = String(btn.getAttribute('data-fill-value') || '').trim();
+ var target = targetId ? section.querySelector('#' + targetId) : null;
+ if (target) {
+ if (target.tagName.toLowerCase() === 'select') {
+ // For select elements, set the value or add it if needed
+ target.value = value;
+ } else {
+ target.value = value;
+ }
+ target.focus();
+ }
+ });
+ });
+
+ // Handle Add/Update button
+ var btnAddMed = section.querySelector('#btn_discharge_med_add');
+ if (btnAddMed && btnAddMed.dataset.bound !== '1') {
+ btnAddMed.dataset.bound = '1';
+ btnAddMed.addEventListener('click', function() {
+ var medName = $('#discharge_med_name').val().trim();
+ var medType = $('#discharge_med_type').val().trim();
+ var dosage = $('#discharge_dosage').val();
+ var dosageWhen = $('#discharge_dosage_when').val();
+ var dosageFreq = $('#discharge_dosage_freq').val();
+ var noOfDays = $('#discharge_no_of_days').val().trim();
+ var qty = $('#discharge_qty').val().trim();
+ var doseWhere = $('#discharge_dose_where').val();
+ var remark = $('#discharge_remark').val().trim();
+
+ if (medName === '') {
+ setMedicineStatus('Please enter medicine name.', 'error');
+ $('#discharge_med_name').focus();
+ return;
+ }
+
+ // Build dose plan label from IDs
+ var dosePlan = '';
+ if (dosage) {
+ var doseRow = doseMasterCache.dose.find(function(r) { return String(r.id) === dosage; });
+ dosePlan += (doseRow ? doseRow.label : dosage) + ' ';
+ }
+ if (dosageWhen) {
+ var whenRow = doseMasterCache.when.find(function(r) { return String(r.id) === dosageWhen; });
+ dosePlan += (whenRow ? whenRow.label : dosageWhen) + ' ';
+ }
+ if (dosageFreq) {
+ var freqRow = doseMasterCache.freq.find(function(r) { return String(r.id) === dosageFreq; });
+ dosePlan += (freqRow ? freqRow.label : dosageFreq) + ' ';
+ }
+ if (doseWhere) {
+ var whereRow = doseMasterCache.where.find(function(r) { return String(r.id) === doseWhere; });
+ dosePlan += (whereRow ? whereRow.label : doseWhere) + ' ';
+ }
+ dosePlan += noOfDays;
+ dosePlan = dosePlan.trim();
+
+ // Add row to table
+ var tbody = section.querySelector('#discharge_medicine_tbody');
+ if (!tbody) {
+ return;
+ }
+
+ // Remove "No medicine added" row if present
+ var emptyRow = tbody.querySelector('tr td[colspan="9"]');
+ if (emptyRow) {
+ emptyRow.closest('tr').remove();
+ }
+
+ var tr = document.createElement('tr');
+ tr.innerHTML = '
' + $(' ').text(medName).html() + ' | '
+ + '
' + $(' ').text(medType).html() + ' | '
+ + '
' + $(' ').text(dosage).html() + ' | '
+ + '
' + $(' ').text(dosageWhen).html() + ' | '
+ + '
' + $(' ').text(dosageFreq).html() + ' | '
+ + '
' + $(' ').text(noOfDays).html() + ' | '
+ + '
' + $(' ').text(qty).html() + ' | '
+ + '
' + $(' ').text(remark).html() + ' | '
+ + '
| ';
+ tbody.appendChild(tr);
+
+ // Clear form
+ $('#discharge_med_name, #discharge_med_type, #discharge_no_of_days, #discharge_qty, #discharge_remark').val('');
+ $('#discharge_dosage, #discharge_dosage_when, #discharge_dosage_freq, #discharge_dose_where').val('');
+ $('#discharge_med_name').focus();
+
+ setMedicineStatus('Medicine added to list. Remember to save discharge form.', 'success');
+
+ // Bind remove button
+ tr.querySelector('.btn-remove-discharge-med').addEventListener('click', function() {
+ tr.remove();
+ if (tbody.children.length === 0) {
+ tbody.innerHTML = '
| No medicine added |
';
+ }
+ setMedicineStatus('Medicine removed from list.', 'info');
+ });
+ });
+ }
+
+ // Handle Reset button
+ var btnResetMed = section.querySelector('#btn_discharge_med_reset');
+ if (btnResetMed && btnResetMed.dataset.bound !== '1') {
+ btnResetMed.dataset.bound = '1';
+ btnResetMed.addEventListener('click', function() {
+ if (confirm('Remove all medicines from the list?')) {
+ var tbody = section.querySelector('#discharge_medicine_tbody');
+ if (tbody) {
+ tbody.innerHTML = '
| No medicine added |
';
+ }
+ setMedicineStatus('All medicines removed.', 'info');
+ }
+ });
+ }
}
function syncEditorValues() {