From ea28bfa8378c4a87efba69dbc738d7ee91a0d188 Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Sun, 9 Aug 2026 13:45:50 +0530 Subject: [PATCH] Improve discharge medication template output Render class-only discharge medication tables with salt and medicine advice, and persist generic salt data from medicine search. --- app/Controllers/Ipd_discharge.php | 48 ++++++++++++++-------- app/Controllers/Opd_prescription.php | 6 ++- app/Views/billing/ipd/discharge_create.php | 23 ++++++++++- 3 files changed, 57 insertions(+), 20 deletions(-) diff --git a/app/Controllers/Ipd_discharge.php b/app/Controllers/Ipd_discharge.php index 4df034a..9c5743c 100644 --- a/app/Controllers/Ipd_discharge.php +++ b/app/Controllers/Ipd_discharge.php @@ -2668,36 +2668,35 @@ class Ipd_discharge extends BaseController $drugRows = $this->byIpdRows('ipd_discharge_drug', ['drug_name', 'drug_dose', 'drug_day'], 'id ASC', $ipdId); if (! empty($drugRows)) { - $html = '

Discharge Medications

    '; + $html = '

    Discharge Medications

    ' + . '' + . '' + . ''; foreach ($drugRows as $row) { $drugName = trim((string) ($row['drug_name'] ?? '')); if ($drugName === '') { continue; } - $line = esc($drugName); $dose = trim((string) ($row['drug_dose'] ?? '')); $days = trim((string) ($row['drug_day'] ?? '')); - if ($dose !== '') { - $line .= ' ' . esc($dose) . ''; - } - if ($days !== '') { - $line .= ' [' . esc($days) . ' days]'; - } - - $html .= '
  1. ' . $line . '
  2. '; + $html .= '' + . '' + . '' + . '' + . '' + . ''; } - $html .= ''; + $html .= '
    Medicine NameDosageQtyDay
    ' . esc($drugName) . '' . esc($dose) . '' . esc($days) . '
    '; $sections[] = $html; } else { - $medRows = $this->byIpdRows('ipd_discharge_prescrption_prescribed', ['med_name', 'med_type', 'dosage', 'dosage_when', 'dosage_freq', 'qty', 'no_of_days', 'remark'], 'id ASC', $ipdId); + $medRows = $this->byIpdRows('ipd_discharge_prescrption_prescribed', ['med_name', 'med_salt', 'med_type', 'dosage', 'dosage_when', 'dosage_freq', 'qty', 'no_of_days', 'remark'], 'id ASC', $ipdId); if (! empty($medRows)) { $html = '

    Discharge Medications

    ' - . '' + . '
    ' . '' . ''; - $sr = 1; foreach ($medRows as $row) { $medName = trim((string) ($row['med_name'] ?? '')); if ($medName === '') { @@ -2729,13 +2728,23 @@ class Ipd_discharge extends BaseController if ($composition !== '') { $html .= '
    Composition : ' . esc($composition) . ''; } + $advice = trim((string) ($row['remark'] ?? '')); + if ($advice !== '') { + $html .= '
    Medicine Advice: ' . esc($advice) . ''; + } $html .= '' . '' . '' . '' . ''; - $sr++; + + $saltName = trim((string) ($row['med_salt'] ?? '')); + if ($saltName !== '') { + $html .= '' + . '' + . ''; + } } $html .= '
    Medicine NameDosageQtyDay
    ' . ($dosageDisplay !== '' ? esc($dosageDisplay) : '-') . '' . esc((string) ($row['qty'] ?? '')) . '' . esc((string) ($row['no_of_days'] ?? '')) . '
    ' . esc($saltName) . '
    '; $sections[] = $html; @@ -5902,6 +5911,7 @@ class Ipd_discharge extends BaseController $day = trim((string) ($this->request->getPost('new_drug_day') ?? '')); $qty = trim((string) ($this->request->getPost('new_drug_qty') ?? '')); $remark = trim((string) ($this->request->getPost('new_drug_remark') ?? '')); + $salt = trim((string) ($this->request->getPost('new_drug_salt') ?? '')); $editId = (int) ($this->request->getPost('drug_edit_id') ?? 0); $editSource = strtolower(trim((string) ($this->request->getPost('drug_edit_source') ?? 'legacy'))); @@ -5912,6 +5922,7 @@ class Ipd_discharge extends BaseController if ($editSource === 'legacy' && $legacyDrugTable !== null && $this->tableHasColumns($legacyDrugTable, ['id', 'ipd_id'])) { $update = [ 'med_name' => $name, + 'med_salt' => $salt, 'med_type' => $type, 'dosage' => $dose, 'dosage_when' => $when, @@ -5971,6 +5982,7 @@ class Ipd_discharge extends BaseController 'ipd_id' => $ipdId, 'med_id' => 0, 'med_name' => $name, + 'med_salt' => $salt, 'med_type' => $type, 'dosage' => $dose, 'dosage_when' => $when, @@ -6067,6 +6079,7 @@ class Ipd_discharge extends BaseController 'ipd_id' => $ipdId, 'med_id' => (int) ($row['med_id'] ?? 0), 'med_name' => $medName, + 'med_salt' => trim((string) ($row['med_salt'] ?? $row['genericname'] ?? '')), 'med_type' => trim((string) ($row['med_type'] ?? '')), 'dosage' => trim((string) ($row['dosage'] ?? '')), 'dosage_when' => trim((string) ($row['dosage_when'] ?? '')), @@ -6075,7 +6088,6 @@ class Ipd_discharge extends BaseController 'no_of_days' => trim((string) ($row['no_of_days'] ?? '')), 'qty' => trim((string) ($row['qty'] ?? '')), 'remark' => trim((string) ($row['remark'] ?? '')), - 'genericname' => trim((string) ($row['genericname'] ?? '')), 'update_by' => $userLabel, ]; if ($this->db->fieldExists('order_id', $legacyDrugTable)) { @@ -6799,9 +6811,9 @@ class Ipd_discharge extends BaseController $diagnosisRows = $this->byIpdRows('ipd_discharge_diagnosis', ['id', 'comp_report', 'comp_remark'], 'id ASC', $ipdId); $courseRows = $this->byIpdRows('ipd_discharge_course', ['id', 'comp_report', 'comp_remark'], 'id ASC', $ipdId); $drugRows = $this->byIpdRows('ipd_discharge_drug', ['id', 'drug_name', 'drug_dose', 'drug_day'], 'id ASC', $ipdId); - $legacyDrugRows = $this->byIpdRows('ipd_discharge_prescrption_prescribed', ['id', 'med_name', 'med_type', 'dosage', 'dosage_when', 'dosage_freq', 'no_of_days', 'qty', 'remark'], 'id ASC', $ipdId); + $legacyDrugRows = $this->byIpdRows('ipd_discharge_prescrption_prescribed', ['id', 'med_name', 'med_salt', 'med_type', 'dosage', 'dosage_when', 'dosage_freq', 'no_of_days', 'qty', 'remark'], 'id ASC', $ipdId); if (empty($legacyDrugRows)) { - $legacyDrugRows = $this->byIpdRows('ipd_discharge_prescription_prescribed', ['id', 'med_name', 'med_type', 'dosage', 'dosage_when', 'dosage_freq', 'no_of_days', 'qty', 'remark'], 'id ASC', $ipdId); + $legacyDrugRows = $this->byIpdRows('ipd_discharge_prescription_prescribed', ['id', 'med_name', 'med_salt', 'med_type', 'dosage', 'dosage_when', 'dosage_freq', 'no_of_days', 'qty', 'remark'], 'id ASC', $ipdId); } // Load dose master maps for label display diff --git a/app/Controllers/Opd_prescription.php b/app/Controllers/Opd_prescription.php index 317976b..115c622 100644 --- a/app/Controllers/Opd_prescription.php +++ b/app/Controllers/Opd_prescription.php @@ -8174,6 +8174,7 @@ class Opd_prescription extends BaseController $daysField = $this->resolveFirstField($fields, ['no_of_days']); $qtyField = $this->resolveFirstField($fields, ['qty']); $remarkField = $this->resolveFirstField($fields, ['remark']); + $saltField = $this->resolveFirstField($fields, ['genericname', 'salt_name']); if ($idField === null || $nameField === null) { return $this->response->setJSON(['rows' => []]); @@ -8204,9 +8205,12 @@ class Opd_prescription extends BaseController if ($remarkField !== null) { $select .= ',' . $remarkField . ' as remark'; } + if ($saltField !== null) { + $select .= ',' . $saltField . ' as med_salt'; + } $userId = (int) ($this->getCurrentUserId() ?? 0); - $cacheKey = 'medicine_search_v2_' . md5(json_encode([ + $cacheKey = 'medicine_search_v4_' . md5(json_encode([ 'q' => strtoupper($q), 'scope' => $scope, 'user' => $userId, diff --git a/app/Views/billing/ipd/discharge_create.php b/app/Views/billing/ipd/discharge_create.php index 2279635..60d8eb2 100644 --- a/app/Views/billing/ipd/discharge_create.php +++ b/app/Views/billing/ipd/discharge_create.php @@ -111,6 +111,7 @@ if (! empty($legacyDrugRows)) { 'id' => (int) ($row['id'] ?? 0), 'source' => 'legacy', 'med_name' => (string) ($row['med_name'] ?? ''), + 'med_salt' => (string) ($row['med_salt'] ?? ''), 'med_type' => (string) ($row['med_type'] ?? ''), 'dosage' => $doseLabel !== '' ? $doseLabel : (string) ($row['dosage'] ?? ''), 'dosage_when' => $whenLabel !== '' ? $whenLabel : (string) ($row['dosage_when'] ?? ''), @@ -129,6 +130,7 @@ if (! empty($legacyDrugRows)) { 'id' => (int) ($row['id'] ?? 0), 'source' => 'classic', 'med_name' => (string) ($row['drug_name'] ?? ''), + 'med_salt' => '', 'med_type' => '', 'dosage' => (string) ($row['drug_dose'] ?? ''), 'dosage_when' => '', @@ -1266,6 +1268,7 @@ $historyFields = [ data-id="" data-source="" data-med-name="" + data-med-salt="" data-med-type="" data-dose-id="" data-dose-when-id="" @@ -1301,6 +1304,7 @@ $historyFields = [ +
    @@ -4198,6 +4202,9 @@ $historyFields = [ if (section.querySelector('#discharge_med_id')) { section.querySelector('#discharge_med_id').value = String(matched.id || '0'); } + if (section.querySelector('#discharge_med_salt')) { + section.querySelector('#discharge_med_salt').value = String(matched.med_salt || '').trim(); + } // Auto-fill type if empty if (dischargeMedType && dischargeMedType.value.trim() === '') { dischargeMedType.value = String(matched.med_type || '').trim(); @@ -4222,6 +4229,9 @@ $historyFields = [ if (section.querySelector('#discharge_med_id')) { section.querySelector('#discharge_med_id').value = '0'; } + if (section.querySelector('#discharge_med_salt')) { + section.querySelector('#discharge_med_salt').value = ''; + } return; } @@ -4239,6 +4249,9 @@ $historyFields = [ if (section.querySelector('#discharge_med_id')) { section.querySelector('#discharge_med_id').value = String(matched.id || '0'); } + if (section.querySelector('#discharge_med_salt')) { + section.querySelector('#discharge_med_salt').value = String(matched.med_salt || '').trim(); + } // Auto-fill Type if (dischargeMedType && dischargeMedType.value.trim() === '') { @@ -4285,6 +4298,9 @@ $historyFields = [ if (section.querySelector('#discharge_med_id')) { section.querySelector('#discharge_med_id').value = '0'; } + if (section.querySelector('#discharge_med_salt')) { + section.querySelector('#discharge_med_salt').value = ''; + } } }); } @@ -4554,6 +4570,7 @@ $historyFields = [ var rowSource = String($(this).data('source') || row.data('row-source') || 'legacy').trim() || 'legacy'; var medName = String($(this).data('med-name') || row.find('td:eq(1)').text() || '').trim(); + var medSalt = String($(this).data('med-salt') || '').trim(); var medType = String($(this).data('med-type') || row.find('td:eq(0)').text() || '').trim(); var doseId = String($(this).data('dose-id') || '').trim(); var whenId = String($(this).data('dose-when-id') || '').trim(); @@ -4568,6 +4585,7 @@ $historyFields = [ $('#discharge_med_item_id').val(rowId > 0 ? rowId : 0); $('#discharge_med_item_source').val(rowSource); $('#discharge_med_name').val(medName); + $('#discharge_med_salt').val(medSalt); $('#discharge_med_type').val(medType); if (doseId !== '' && doseId !== '0') { @@ -4638,6 +4656,7 @@ $historyFields = [ btnAddMed.dataset.bound = '1'; btnAddMed.addEventListener('click', function() { var medName = $('#discharge_med_name').val().trim(); + var medSalt = $('#discharge_med_salt').val().trim(); var medType = $('#discharge_med_type').val().trim(); var dosage = $('#discharge_dosage').val(); var dosageWhen = $('#discharge_dosage_when').val(); @@ -4706,6 +4725,7 @@ $historyFields = [ drug_edit_id: editRowId, drug_edit_source: editRowSource, new_drug_name: medName, + new_drug_salt: medSalt, new_drug_type: medType, new_drug_dose: dosage, new_drug_when: dosageWhen, @@ -4781,6 +4801,7 @@ $historyFields = [ var editBtn = targetRow.querySelector('.btn-edit-discharge-med'); if (editBtn) { editBtn.setAttribute('data-med-name', medName); + editBtn.setAttribute('data-med-salt', medSalt); editBtn.setAttribute('data-med-type', medType); editBtn.setAttribute('data-dose-id', dosage || ''); editBtn.setAttribute('data-dose-when-id', dosageWhen || ''); @@ -4795,7 +4816,7 @@ $historyFields = [ } // Clear form - $('#discharge_med_name, #discharge_med_type, #discharge_no_of_days, #discharge_qty, #discharge_remark').val(''); + $('#discharge_med_name, #discharge_med_salt, #discharge_med_type, #discharge_no_of_days, #discharge_qty, #discharge_remark').val(''); $('#discharge_dosage, #discharge_dosage_when, #discharge_dosage_freq, #discharge_dose_where').val(''); resetMedicineFormState(); $('#discharge_med_name').focus();