hospital-management/templates/radiology/series/imaging_series_confirm_delete.html
Marwan Alwali 0c980b4706 update
2025-08-13 19:41:02 +03:00

442 lines
20 KiB
HTML

{% extends 'base.html' %}
{% load static %}
{% block title %}Delete Imaging Series - {{ series.series_description|default:"Series" }} - Hospital Management{% endblock %}
{% block content %}
<div class="content">
<div class="container-fluid">
<!-- Page Header -->
<div class="row">
<div class="col-12">
<div class="page-header">
<div class="page-title">
<h4>Delete Imaging Series</h4>
<h6>Confirm deletion of Series {{ series.series_number }}</h6>
</div>
<div class="page-btn">
<a href="{% url 'radiology:imaging_series_detail' series.pk %}" class="btn btn-secondary">
<i class="fas fa-arrow-left me-1"></i>Back to Series
</a>
</div>
</div>
</div>
</div>
<!-- Warning Alert -->
<div class="row mb-4">
<div class="col-12">
<div class="alert alert-danger" role="alert">
<div class="d-flex align-items-center">
<i class="fas fa-exclamation-triangle fa-2x me-3"></i>
<div>
<h5 class="alert-heading mb-1">Warning: Permanent Deletion</h5>
<p class="mb-0">This action cannot be undone. All associated images and data will be permanently deleted.</p>
</div>
</div>
</div>
</div>
</div>
<!-- Series Information -->
<div class="row mb-4">
<div class="col-12">
<div class="card border-danger">
<div class="card-header bg-danger text-white">
<h5 class="card-title mb-0">
<i class="fas fa-layer-group me-2"></i>Series to be Deleted
</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<div class="info-group">
<label class="form-label">Series Number:</label>
<p class="fw-bold">{{ series.series_number }}</p>
</div>
<div class="info-group">
<label class="form-label">Series Description:</label>
<p>{{ series.series_description|default:"No description" }}</p>
</div>
<div class="info-group">
<label class="form-label">Protocol Name:</label>
<p>{{ series.protocol_name|default:"N/A" }}</p>
</div>
<div class="info-group">
<label class="form-label">Modality:</label>
<p><span class="badge bg-primary">{{ series.get_modality_display }}</span></p>
</div>
</div>
<div class="col-md-6">
<div class="info-group">
<label class="form-label">Series Instance UID:</label>
<p class="text-monospace small">{{ series.series_instance_uid }}</p>
</div>
<div class="info-group">
<label class="form-label">Series Date:</label>
<p>{{ series.series_date|date:"F d, Y" }}</p>
</div>
<div class="info-group">
<label class="form-label">Series Time:</label>
<p>{{ series.series_time|time:"H:i:s" }}</p>
</div>
<div class="info-group">
<label class="form-label">Number of Images:</label>
<p class="fw-bold text-danger">{{ series.number_of_images|default:0 }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Study Context -->
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="card-title">
<i class="fas fa-folder-open me-2"></i>Study Context
</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-3">
<div class="info-group">
<label class="form-label">Patient:</label>
<p class="fw-bold">{{ series.study.patient.get_full_name }}</p>
</div>
</div>
<div class="col-md-3">
<div class="info-group">
<label class="form-label">Study Description:</label>
<p>{{ series.study.study_description }}</p>
</div>
</div>
<div class="col-md-3">
<div class="info-group">
<label class="form-label">Accession Number:</label>
<p>{{ series.study.accession_number }}</p>
</div>
</div>
<div class="col-md-3">
<div class="info-group">
<label class="form-label">Study Date:</label>
<p>{{ series.study.study_date|date:"M d, Y" }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Impact Analysis -->
<div class="row mb-4">
<div class="col-12">
<div class="card border-warning">
<div class="card-header bg-warning">
<h5 class="card-title mb-0">
<i class="fas fa-exclamation-circle me-2"></i>Deletion Impact Analysis
</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<h6 class="text-danger">Data to be Deleted:</h6>
<ul class="list-unstyled">
<li><i class="fas fa-times text-danger me-2"></i>{{ series.number_of_images|default:0 }} DICOM images</li>
<li><i class="fas fa-times text-danger me-2"></i>Series metadata and technical parameters</li>
<li><i class="fas fa-times text-danger me-2"></i>Associated annotations and measurements</li>
<li><i class="fas fa-times text-danger me-2"></i>Processing history and logs</li>
{% if series.reports.exists %}
<li><i class="fas fa-times text-danger me-2"></i>{{ series.reports.count }} associated report(s)</li>
{% endif %}
</ul>
</div>
<div class="col-md-6">
<h6 class="text-info">What will remain:</h6>
<ul class="list-unstyled">
<li><i class="fas fa-check text-success me-2"></i>Parent study will remain intact</li>
<li><i class="fas fa-check text-success me-2"></i>Other series in the study</li>
<li><i class="fas fa-check text-success me-2"></i>Patient information</li>
<li><i class="fas fa-check text-success me-2"></i>Study-level reports</li>
</ul>
</div>
</div>
{% if blocking_conditions %}
<div class="alert alert-danger mt-3">
<h6 class="alert-heading">
<i class="fas fa-ban me-2"></i>Deletion Blocked
</h6>
<p class="mb-2">This series cannot be deleted due to the following conditions:</p>
<ul class="mb-0">
{% for condition in blocking_conditions %}
<li>{{ condition }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
</div>
</div>
</div>
</div>
<!-- Alternative Actions -->
{% if not blocking_conditions %}
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="card-title">
<i class="fas fa-lightbulb me-2"></i>Alternative Actions
</h5>
</div>
<div class="card-body">
<p class="text-muted mb-3">Consider these alternatives before permanently deleting the series:</p>
<div class="row">
<div class="col-md-6">
<div class="alternative-action">
<h6><i class="fas fa-archive text-warning me-2"></i>Archive Series</h6>
<p class="text-muted">Move the series to archive storage instead of deleting</p>
<button class="btn btn-outline-warning btn-sm" onclick="archiveSeries()">
<i class="fas fa-archive me-1"></i>Archive Instead
</button>
</div>
</div>
<div class="col-md-6">
<div class="alternative-action">
<h6><i class="fas fa-download text-info me-2"></i>Backup First</h6>
<p class="text-muted">Download a backup before deletion</p>
<a href="{% url 'radiology:imaging_series_download' series.pk %}"
class="btn btn-outline-info btn-sm">
<i class="fas fa-download me-1"></i>Download Backup
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endif %}
<!-- Confirmation Form -->
{% if not blocking_conditions %}
<div class="row">
<div class="col-12">
<div class="card border-danger">
<div class="card-header bg-danger text-white">
<h5 class="card-title mb-0">
<i class="fas fa-trash me-2"></i>Confirm Deletion
</h5>
</div>
<div class="card-body">
<form method="post" id="delete-form">
{% csrf_token %}
<div class="form-group mb-3">
<label class="form-label">
<strong>Type "DELETE" to confirm:</strong>
</label>
<input type="text" class="form-control" id="confirmation-input"
placeholder="Type DELETE to confirm deletion" required>
<small class="form-text text-muted">
This confirmation is required to prevent accidental deletion.
</small>
</div>
<div class="form-group mb-3">
<label class="form-label">Reason for Deletion:</label>
<select class="form-select" name="deletion_reason" required>
<option value="">Select a reason...</option>
<option value="duplicate">Duplicate series</option>
<option value="poor_quality">Poor image quality</option>
<option value="wrong_patient">Wrong patient</option>
<option value="technical_error">Technical error</option>
<option value="patient_request">Patient request</option>
<option value="other">Other</option>
</select>
</div>
<div class="form-group mb-4">
<label class="form-label">Additional Notes:</label>
<textarea class="form-control" name="deletion_notes" rows="3"
placeholder="Optional: Provide additional details about the deletion..."></textarea>
</div>
<div class="form-check mb-4">
<input class="form-check-input" type="checkbox" id="confirm-understanding" required>
<label class="form-check-label" for="confirm-understanding">
<strong>I understand that this action is permanent and cannot be undone</strong>
</label>
</div>
<div class="d-flex justify-content-between align-items-center">
<div class="action-buttons">
<a href="{% url 'radiology:imaging_series_detail' series.pk %}"
class="btn btn-secondary me-2">
<i class="fas fa-times me-1"></i>Cancel
</a>
<button type="button" class="btn btn-outline-warning me-2" onclick="archiveSeries()">
<i class="fas fa-archive me-1"></i>Archive Instead
</button>
</div>
<div class="danger-actions">
<button type="submit" class="btn btn-danger" id="delete-btn" disabled>
<i class="fas fa-trash me-1"></i>Permanently Delete Series
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{% else %}
<!-- Blocked Deletion Actions -->
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body text-center">
<i class="fas fa-ban fa-3x text-danger mb-3"></i>
<h5 class="text-danger">Deletion Not Allowed</h5>
<p class="text-muted">This series cannot be deleted due to the conditions listed above.</p>
<a href="{% url 'radiology:imaging_series_detail' series.pk %}" class="btn btn-primary">
<i class="fas fa-arrow-left me-1"></i>Return to Series
</a>
</div>
</div>
</div>
</div>
{% endif %}
</div>
</div>
<script>
$(document).ready(function() {
// Enable delete button only when conditions are met
$('#confirmation-input, #confirm-understanding').on('input change', function() {
validateForm();
});
// Form submission validation
$('#delete-form').on('submit', function(e) {
if (!validateForm()) {
e.preventDefault();
alert('Please complete all required fields and confirmations.');
} else {
if (!confirm('Are you absolutely sure you want to permanently delete this imaging series? This action cannot be undone.')) {
e.preventDefault();
}
}
});
});
function validateForm() {
const confirmationText = $('#confirmation-input').val().trim().toUpperCase();
const confirmationChecked = $('#confirm-understanding').is(':checked');
const reasonSelected = $('select[name="deletion_reason"]').val();
const isValid = confirmationText === 'DELETE' && confirmationChecked && reasonSelected;
$('#delete-btn').prop('disabled', !isValid);
if (isValid) {
$('#delete-btn').removeClass('btn-outline-danger').addClass('btn-danger');
} else {
$('#delete-btn').removeClass('btn-danger').addClass('btn-outline-danger');
}
return isValid;
}
function archiveSeries() {
if (confirm('Archive this series instead of deleting it?')) {
// AJAX call to archive series
$.ajax({
url: '{% url "radiology:imaging_series_archive" series.pk %}',
method: 'POST',
data: {
'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()
},
success: function(response) {
alert('Series has been archived successfully.');
window.location.href = '{% url "radiology:imaging_series_list" series.study.pk %}';
},
error: function() {
alert('Error archiving series. Please try again.');
}
});
}
}
</script>
<style>
.info-group {
margin-bottom: 15px;
}
.info-group .form-label {
font-weight: 600;
color: #495057;
margin-bottom: 5px;
}
.info-group p {
margin-bottom: 0;
color: #6c757d;
}
.alternative-action {
padding: 15px;
border: 1px solid #e9ecef;
border-radius: 5px;
margin-bottom: 15px;
}
.alternative-action h6 {
margin-bottom: 10px;
}
.alternative-action p {
margin-bottom: 10px;
font-size: 14px;
}
.action-buttons .btn {
margin-right: 10px;
}
.danger-actions {
margin-left: auto;
}
#delete-btn:disabled {
opacity: 0.6;
cursor: not-allowed;
}
/* Mobile Responsive */
@media (max-width: 768px) {
.d-flex.justify-content-between {
flex-direction: column;
gap: 15px;
}
.action-buttons {
display: flex;
flex-direction: column;
gap: 10px;
}
.action-buttons .btn {
margin-right: 0;
}
}
</style>
{% endblock %}