Fix: Disable auto-generation of discharge templates + add manual creation button
ISSUE: Templates auto-regenerate when deleted User deletes template ID 3, page reload creates template ID 4 automatically ROOT CAUSE: ensureDefaultDischargeTemplateSeeded() called on EVERY page load - discharge_templates() method called it on every view - getDischargeTemplateRows() called it on every discharge PDF generation - When count=0, it auto-inserted default templates - Made it impossible to delete all templates SOLUTION: Changed to manual opt-in template creation 1. Removed auto-seeding calls: - Setting/Template::discharge_templates() - removed ensureDefaultDischargeTemplateSeeded() - Ipd_discharge::getDischargeTemplateRows() - removed ensureDefaultDischargeTemplateSeeded() - Both now only call ensureDischargeTemplateTable() (structure check only) 2. Added manual template creation: - New 'Create Default Templates' button shown when table is empty - New endpoint: discharge_templates_seed() - creates defaults on demand - Route: POST /setting/template/discharge_templates_seed - Button confirms before creating, shows success message, reloads page 3. Preserved seeding functions: - ensureDefaultDischargeTemplateSeeded() kept but not auto-called - Can be manually triggered via new button - Creates 'Default Discharge Template' and 'NABH Compliant Discharge Summary' BEHAVIOR NOW: - Users can delete ALL templates - they stay deleted - Empty table shows helpful message with creation button - Templates only created when user explicitly requests them - No more surprise template regeneration TESTING: - Delete all templates - Page reloads showing empty table with button - Click 'Create Default Templates' - 2 templates created (ID 1 and 2)
This commit is contained in:
parent
d923dc6c29
commit
328de6279d
|
|
@ -873,6 +873,7 @@ $routes->post('Lab_Admin/pathology_master_add_component', 'Setting\Template::pat
|
|||
$routes->get('Lab_Admin/pathology_bridge_debug', 'Setting\Template::pathologyBridgeDebug');
|
||||
|
||||
$routes->match(['get', 'post'], 'setting/template/discharge_templates', 'Setting\Template::discharge_templates');
|
||||
$routes->post('setting/template/discharge_templates_seed', 'Setting\Template::discharge_templates_seed');
|
||||
$routes->get('setting/template/discharge_template_get/(:num)', 'Setting\Template::discharge_template_get/$1');
|
||||
$routes->match(['get', 'post'], 'setting/template/discharge_templates/delete/(:num)', 'Setting\Template::discharge_template_delete/$1');
|
||||
$routes->match(['get', 'post'], 'setting/template/ipd_document_templates', 'Setting\Template::ipd_document_templates');
|
||||
|
|
|
|||
|
|
@ -272,7 +272,9 @@ class Ipd_discharge extends BaseController
|
|||
|
||||
private function getDischargeTemplateRows(): array
|
||||
{
|
||||
$this->ensureDefaultDischargeTemplateSeeded();
|
||||
// Ensure table structure exists, but don't auto-seed templates
|
||||
// This allows users to delete all templates without them auto-regenerating
|
||||
$this->ensureDischargeTemplateTable();
|
||||
if (! $this->db->tableExists('ipd_discharge_templates')) {
|
||||
return [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2804,7 +2804,9 @@ HTML;
|
|||
return $resp;
|
||||
}
|
||||
|
||||
$this->ensureDefaultDischargeTemplateSeeded();
|
||||
// Ensure table structure exists, but don't auto-seed templates
|
||||
// This allows users to delete all templates without them auto-regenerating
|
||||
$this->ensureDischargeTemplateTable();
|
||||
|
||||
$notice = '';
|
||||
$noticeType = 'success';
|
||||
|
|
@ -2966,6 +2968,27 @@ HTML;
|
|||
]);
|
||||
}
|
||||
|
||||
public function discharge_templates_seed()
|
||||
{
|
||||
if ($resp = $this->requireAnyPermission(['template.discharge'])) {
|
||||
return $resp;
|
||||
}
|
||||
|
||||
// Manually seed default templates (on user request)
|
||||
$this->ensureDefaultDischargeTemplateSeeded();
|
||||
|
||||
if ($this->request->isAJAX()) {
|
||||
return $this->response->setJSON([
|
||||
'update' => 1,
|
||||
'error_text' => 'Default templates created successfully.',
|
||||
'csrfName' => csrf_token(),
|
||||
'csrfHash' => csrf_hash(),
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->to(base_url('setting/template/discharge_templates'));
|
||||
}
|
||||
|
||||
public function discharge_template_delete(int $id)
|
||||
{
|
||||
if ($resp = $this->requireAnyPermission(['template.discharge'])) {
|
||||
|
|
|
|||
|
|
@ -181,7 +181,15 @@ $status = (int) ($edit['status'] ?? 1);
|
|||
</thead>
|
||||
<tbody>
|
||||
<?php if (empty($rows)): ?>
|
||||
<tr><td colspan="5" class="text-center text-muted">No templates found.</td></tr>
|
||||
<tr>
|
||||
<td colspan="5" class="text-center py-4">
|
||||
<div class="text-muted mb-2">No templates found.</div>
|
||||
<button type="button" class="btn btn-sm btn-outline-primary" id="btn_create_defaults">
|
||||
<i class="fas fa-plus-circle"></i> Create Default Templates
|
||||
</button>
|
||||
<div class="small text-muted mt-2">Creates "Default Discharge Template" and "NABH Compliant Discharge Summary"</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php else: ?>
|
||||
<?php foreach ($rows as $row): ?>
|
||||
<tr>
|
||||
|
|
@ -665,5 +673,45 @@ $status = (int) ($edit['status'] ?? 1);
|
|||
openDischargeUrl('<?= site_url('Ipd_discharge/show_discharge') ?>', ipdId, 1);
|
||||
});
|
||||
}
|
||||
|
||||
// Handle "Create Default Templates" button
|
||||
var createDefaultsBtn = document.getElementById('btn_create_defaults');
|
||||
if (createDefaultsBtn) {
|
||||
createDefaultsBtn.addEventListener('click', function () {
|
||||
if (!window.confirm('Create 2 default discharge templates?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
var formData = new FormData();
|
||||
formData.append('<?= csrf_token() ?>', '<?= csrf_hash() ?>');
|
||||
formData.append('action', 'seed_defaults');
|
||||
|
||||
fetch('<?= base_url('setting/template/discharge_templates_seed') ?>', {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
headers: {
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
}
|
||||
})
|
||||
.then(function (res) { return res.json(); })
|
||||
.then(function (data) {
|
||||
updateCsrfToken(data);
|
||||
if (!data || parseInt(data.update || 0, 10) !== 1) {
|
||||
setNotice('danger', (data && data.error_text) ? data.error_text : 'Failed to create templates.');
|
||||
return;
|
||||
}
|
||||
|
||||
setNotice('success', data.error_text || 'Default templates created successfully.');
|
||||
|
||||
// Reload page to show new templates
|
||||
setTimeout(function() {
|
||||
window.location.reload();
|
||||
}, 500);
|
||||
})
|
||||
.catch(function () {
|
||||
setNotice('danger', 'Network error while creating templates.');
|
||||
});
|
||||
});
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user