diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 4994e18..8810f0a 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -555,6 +555,7 @@ $routes->get('Opd_prescription/rx_group_medicine_list/(:num)', 'Opd_prescription $routes->get('Opd_prescription/rx_group_medicine_get/(:num)', 'Opd_prescription::rx_group_medicine_get/$1'); $routes->post('Opd_prescription/rx_group_medicine_save/(:num)', 'Opd_prescription::rx_group_medicine_save/$1'); $routes->post('Opd_prescription/rx_group_medicine_remove/(:num)', 'Opd_prescription::rx_group_medicine_remove/$1'); +$routes->post('Opd_prescription/rx_group_delete/(:num)', 'Opd_prescription::rx_group_delete/$1'); $routes->get('Opd_prescription/rx_group_medicine_suggest', 'Opd_prescription::rx_group_medicine_suggest'); $routes->get('Opd_prescription/rx_group_generic_suggest', 'Opd_prescription::rx_group_generic_suggest'); $routes->get('Opd_prescription/rx_group_dose_masters', 'Opd_prescription::rx_group_dose_masters'); diff --git a/app/Controllers/Opd_prescription.php b/app/Controllers/Opd_prescription.php index 8441c37..8588f02 100644 --- a/app/Controllers/Opd_prescription.php +++ b/app/Controllers/Opd_prescription.php @@ -1778,6 +1778,41 @@ class Opd_prescription extends BaseController return $this->response->setJSON(['update' => 1, 'error_text' => 'Rx group medicine removed']); } + public function rx_group_delete(int $rxId) + { + if (! $this->request->isAJAX()) { + return $this->response->setStatusCode(400)->setJSON(['update' => 0, 'error_text' => 'Invalid request']); + } + + $rxId = max(0, $rxId); + if ($rxId <= 0) { + return $this->response->setJSON(['update' => 0, 'error_text' => 'Invalid Rx-Group ID']); + } + + if (! $this->db->tableExists('opd_prescription_template')) { + return $this->response->setJSON(['update' => 0, 'error_text' => 'Rx group table not found']); + } + + // Delete linked medicines first + $medTable = $this->findExistingTable(['opd_prescrption_prescribed_template', 'opd_prescription_prescribed_template']); + if ($medTable !== null) { + $medFields = $this->db->getFieldNames($medTable); + $fkField = $this->resolveFirstField($medFields, ['opd_prescription_template_id', 'rx_group_id', 'template_id']); + if ($fkField !== null) { + $this->db->table($medTable)->where($fkField, $rxId)->delete(); + } + } + + $this->db->table('opd_prescription_template')->where('id', $rxId)->delete(); + + return $this->response->setJSON([ + 'update' => 1, + 'error_text' => 'Rx-Group deleted', + 'csrfName' => csrf_token(), + 'csrfHash' => csrf_hash(), + ]); + } + public function rx_group_medicine_suggest() { $q = trim((string) $this->request->getGet('q')); diff --git a/app/Views/billing/opd_rx_group_workspace.php b/app/Views/billing/opd_rx_group_workspace.php index cd1d1cf..64b5f40 100644 --- a/app/Views/billing/opd_rx_group_workspace.php +++ b/app/Views/billing/opd_rx_group_workspace.php @@ -9,7 +9,7 @@
- +
Rx-Group NameAccessAction
Rx-Group NameAccessAction
No data
@@ -168,6 +168,7 @@ + '' + nameHtml + '' + '' + accessHtml + '' + '' + + '' + ''); }); }); @@ -205,6 +206,23 @@ loadOne($(this).data('id') || 0); }); + $(document).off('click' + evtNs, '.btn-rx-delete').on('click' + evtNs, '.btn-rx-delete', function() { + var id = parseInt($(this).data('id') || '0', 10); + var name = ($(this).data('name') || '').toString(); + if (id <= 0) { return; } + if (!window.confirm('Delete Rx-Group "' + name + '" and all its medicines? This cannot be undone.')) { return; } + apiPost('/' + id, {}, function(data) { + if ((data.update || 0) != 1) { + setMsg('err', data.error_text || 'Unable to delete Rx-Group'); + return; + } + var currentId = parseInt($('#rx_id').val() || '0', 10); + if (currentId === id) { clearForm(); } + setMsg('ok', 'Rx-Group "' + name + '" deleted.'); + loadList(); + }); + }); + $(document).off('click' + evtNs, '#btn_new_rx_group').on('click' + evtNs, '#btn_new_rx_group', function() { clearForm(); setMsg('normal', 'New Rx-Group mode');