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:
DevSoftTech Server 2026-06-07 11:38:18 +05:30
parent d923dc6c29
commit 328de6279d
4 changed files with 77 additions and 3 deletions

View File

@ -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');

View File

@ -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 [];
}

View File

@ -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'])) {

View File

@ -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>