update-po-file
This commit is contained in:
parent
c2e614ceb7
commit
e0ee8daa8a
@ -512,7 +512,7 @@ def get_departments_by_hospital(request):
|
||||
departments = Department.objects.filter(
|
||||
hospital_id=hospital_id,
|
||||
status='active'
|
||||
).values('id', 'name_en', 'name_ar')
|
||||
).values('id', 'name', 'name_ar')
|
||||
|
||||
return JsonResponse({'departments': list(departments)})
|
||||
|
||||
@ -527,14 +527,14 @@ def get_physicians_by_hospital(request):
|
||||
physicians = Physician.objects.filter(
|
||||
hospital_id=hospital_id,
|
||||
status='active'
|
||||
).values('id', 'first_name', 'last_name', 'specialty')
|
||||
).values('id', 'first_name', 'last_name', 'specialization')
|
||||
|
||||
# Format physician names
|
||||
physicians_list = [
|
||||
{
|
||||
'id': str(p['id']),
|
||||
'name': f"Dr. {p['first_name']} {p['last_name']}",
|
||||
'specialty': p['specialty']
|
||||
'specialty': p['specialization']
|
||||
}
|
||||
for p in physicians
|
||||
]
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -116,7 +116,7 @@
|
||||
<!-- Back Button -->
|
||||
<div class="mb-3">
|
||||
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary btn-sm">
|
||||
<i class="bi bi-arrow-left me-1"></i> Back to Complaints
|
||||
<i class="bi bi-arrow-left me-1"></i> {{ _("Back to Complaints")}}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@ -135,18 +135,18 @@
|
||||
</div>
|
||||
<p class="mb-2">
|
||||
<i class="bi bi-hash me-1"></i>
|
||||
<strong>ID:</strong> {{ complaint.id|slice:":8" }}
|
||||
<strong>{{ _("ID") }}:</strong> {{ complaint.id|slice:":8" }}
|
||||
<span class="mx-2">|</span>
|
||||
<i class="bi bi-person-fill me-1"></i>
|
||||
<strong>Patient:</strong> {{ complaint.patient.get_full_name }} (MRN: {{ complaint.patient.mrn }})
|
||||
<strong>{{ _("Patient") }}:</strong> {{ complaint.patient.get_full_name }} ({{ _("MRN") }}: {{ complaint.patient.mrn }})
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
<i class="bi bi-hospital me-1"></i>
|
||||
<strong>Hospital:</strong> {{ complaint.hospital.name_en }}
|
||||
<strong>{{ _("Hospital") }}:</strong> {{ complaint.hospital.name_en }}
|
||||
{% if complaint.department %}
|
||||
<span class="mx-2">|</span>
|
||||
<i class="bi bi-building me-1"></i>
|
||||
<strong>Department:</strong> {{ complaint.department.name_en }}
|
||||
<strong>{{ _("Department") }}:</strong> {{ complaint.department.name_en }}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
@ -154,16 +154,16 @@
|
||||
<div class="sla-countdown {% if complaint.is_overdue %}overdue{% endif %}">
|
||||
<div class="mb-1">
|
||||
<i class="bi bi-clock-history me-1"></i>
|
||||
<strong>SLA Deadline</strong>
|
||||
<strong>{{ _("SLA Deadline")}}</strong>
|
||||
</div>
|
||||
<h4 class="mb-0">{{ complaint.due_at|date:"M d, Y H:i" }}</h4>
|
||||
{% if complaint.is_overdue %}
|
||||
<div class="mt-2">
|
||||
<i class="bi bi-exclamation-triangle-fill me-1"></i>
|
||||
<strong>OVERDUE</strong>
|
||||
<strong>{{ _("OVERDUE") }}</strong>
|
||||
</div>
|
||||
{% else %}
|
||||
<small>{{ complaint.due_at|timeuntil }} remaining</small>
|
||||
<small>{{ complaint.due_at|timeuntil }} {{ _("remaining") }}</small>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@ -178,25 +178,25 @@
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="details-tab" data-bs-toggle="tab"
|
||||
data-bs-target="#details" type="button" role="tab">
|
||||
<i class="bi bi-info-circle me-1"></i> Details
|
||||
<i class="bi bi-info-circle me-1"></i> {{ _("Details") }}
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="timeline-tab" data-bs-toggle="tab"
|
||||
data-bs-target="#timeline" type="button" role="tab">
|
||||
<i class="bi bi-clock-history me-1"></i> Timeline ({{ timeline.count }})
|
||||
<i class="bi bi-clock-history me-1"></i> {{ _("Timeline") }} ({{ timeline.count }})
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="attachments-tab" data-bs-toggle="tab"
|
||||
data-bs-target="#attachments" type="button" role="tab">
|
||||
<i class="bi bi-paperclip me-1"></i> Attachments ({{ attachments.count }})
|
||||
<i class="bi bi-paperclip me-1"></i> {{ _("Attachments") }} ({{ attachments.count }})
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="actions-tab" data-bs-toggle="tab"
|
||||
data-bs-target="#actions" type="button" role="tab">
|
||||
<i class="bi bi-lightning-fill me-1"></i> PX Actions ({{ px_actions.count }})
|
||||
<i class="bi bi-lightning-fill me-1"></i> {{ _("PX Actions")}} ({{ px_actions.count }})
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
@ -211,7 +211,7 @@
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6">
|
||||
<div class="info-label">Category</div>
|
||||
<div class="info-label">{{ _("Category") }}</div>
|
||||
<div class="info-value">
|
||||
<span class="badge bg-secondary">{{ complaint.get_category_display }}</span>
|
||||
{% if complaint.subcategory %}
|
||||
@ -220,25 +220,25 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="info-label">Source</div>
|
||||
<div class="info-label">{{ _("Source") }}</div>
|
||||
<div class="info-value">{{ complaint.get_source_display }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-6">
|
||||
<div class="info-label">Priority</div>
|
||||
<div class="info-label">{{ _("Priority") }}</div>
|
||||
<div class="info-value">
|
||||
<span class="badge bg-info">{{ complaint.get_priority_display }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="info-label">Encounter ID</div>
|
||||
<div class="info-label">{{ _("Encounter ID")}}</div>
|
||||
<div class="info-value">
|
||||
{% if complaint.encounter_id %}
|
||||
{{ complaint.encounter_id }}
|
||||
{% else %}
|
||||
<span class="text-muted">N/A</span>
|
||||
<span class="text-muted">{{ _("N/A")}}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
@ -247,7 +247,7 @@
|
||||
{% if complaint.physician %}
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-12">
|
||||
<div class="info-label">Physician</div>
|
||||
<div class="info-label">{{ _("Physician") }}</div>
|
||||
<div class="info-value">
|
||||
Dr. {{ complaint.physician.first_name }} {{ complaint.physician.last_name }}
|
||||
<span class="text-muted">({{ complaint.physician.specialty }})</span>
|
||||
@ -259,7 +259,7 @@
|
||||
<hr>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class="info-label">Description</div>
|
||||
<div class="info-label">{{ _("Description") }}</div>
|
||||
<div class="info-value mt-2">
|
||||
<p class="mb-0">{{ complaint.description|linebreaks }}</p>
|
||||
</div>
|
||||
@ -268,13 +268,13 @@
|
||||
{% if complaint.resolution %}
|
||||
<hr>
|
||||
<div class="mb-3">
|
||||
<div class="info-label">Resolution</div>
|
||||
<div class="info-label">{{ _("Resolution") }}</div>
|
||||
<div class="info-value mt-2">
|
||||
<div class="alert alert-success">
|
||||
<p class="mb-2">{{ complaint.resolution|linebreaks }}</p>
|
||||
<small class="text-muted">
|
||||
Resolved by {{ complaint.resolved_by.get_full_name }}
|
||||
on {{ complaint.resolved_at|date:"M d, Y H:i" }}
|
||||
{{ _("Resolved by")}} {{ complaint.resolved_by.get_full_name }}
|
||||
{{ _("on") }} {{ complaint.resolved_at|date:"M d, Y H:i" }}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
@ -285,11 +285,11 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="info-label">Created</div>
|
||||
<div class="info-label">{{ _("Created") }}</div>
|
||||
<div class="info-value">{{ complaint.created_at|date:"M d, Y H:i" }}</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="info-label">Last Updated</div>
|
||||
<div class="info-label">{{ _("Last Updated")}}</div>
|
||||
<div class="info-value">{{ complaint.updated_at|date:"M d, Y H:i" }}</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -342,7 +342,7 @@
|
||||
{% else %}
|
||||
<div class="text-center py-5">
|
||||
<i class="bi bi-clock-history" style="font-size: 3rem; color: #ccc;"></i>
|
||||
<p class="text-muted mt-3">No timeline entries yet</p>
|
||||
<p class="text-muted mt-3">{{ _("No timeline entries yet")}}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@ -385,7 +385,7 @@
|
||||
{% else %}
|
||||
<div class="text-center py-5">
|
||||
<i class="bi bi-paperclip" style="font-size: 3rem; color: #ccc;"></i>
|
||||
<p class="text-muted mt-3">No attachments</p>
|
||||
<p class="text-muted mt-3">{{ _("No attachments")}}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@ -413,7 +413,7 @@
|
||||
</div>
|
||||
<a href="{% url 'actions:action_detail' action.id %}"
|
||||
class="btn btn-sm btn-outline-primary">
|
||||
View <i class="bi bi-arrow-right ms-1"></i>
|
||||
{{ _("View") }} <i class="bi bi-arrow-right ms-1"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@ -422,7 +422,7 @@
|
||||
{% else %}
|
||||
<div class="text-center py-5">
|
||||
<i class="bi bi-lightning" style="font-size: 3rem; color: #ccc;"></i>
|
||||
<p class="text-muted mt-3">No PX actions created yet</p>
|
||||
<p class="text-muted mt-3">{{ _("No PX actions created yet")}}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@ -446,7 +446,7 @@
|
||||
<label class="form-label">{% trans "Assign To" %}</label>
|
||||
<div class="input-group">
|
||||
<select name="user_id" class="form-select" required>
|
||||
<option value="">Select user...</option>
|
||||
<option value="">{{ _("Select user...")}}</option>
|
||||
{% for user_obj in assignable_users %}
|
||||
<option value="{{ user_obj.id }}"
|
||||
{% if complaint.assigned_to and complaint.assigned_to.id == user_obj.id %}selected{% endif %}>
|
||||
@ -474,14 +474,14 @@
|
||||
<textarea name="note" class="form-control mb-2" rows="2"
|
||||
placeholder="{% trans 'Optional note...' %}"></textarea>
|
||||
<button type="submit" class="btn btn-primary w-100">
|
||||
<i class="bi bi-arrow-repeat me-1"></i> Update Status
|
||||
<i class="bi bi-arrow-repeat me-1"></i> {{ _("Update Status")}}
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<!-- Escalate -->
|
||||
<button type="button" class="btn btn-danger w-100" data-bs-toggle="modal"
|
||||
data-bs-target="#escalateModal">
|
||||
<i class="bi bi-exclamation-triangle me-1"></i> Escalate
|
||||
<i class="bi bi-exclamation-triangle me-1"></i> {{ _("Escalate") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -498,7 +498,7 @@
|
||||
<textarea name="note" class="form-control mb-2" rows="3"
|
||||
placeholder="{% trans 'Enter your note...' %}" required></textarea>
|
||||
<button type="submit" class="btn btn-success w-100">
|
||||
<i class="bi bi-plus-circle me-1"></i> Add Note
|
||||
<i class="bi bi-plus-circle me-1"></i> {{ _("Add Note")}}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
@ -511,7 +511,7 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<div class="info-label">Assigned To</div>
|
||||
<div class="info-label">{{ _("Assigned To")}}</div>
|
||||
<div class="info-value">
|
||||
{% if complaint.assigned_to %}
|
||||
{{ complaint.assigned_to.get_full_name }}
|
||||
@ -520,14 +520,14 @@
|
||||
Assigned {{ complaint.assigned_at|date:"M d, Y H:i" }}
|
||||
</small>
|
||||
{% else %}
|
||||
<span class="text-muted">Unassigned</span>
|
||||
<span class="text-muted">{{ _("Unassigned") }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if complaint.resolved_by %}
|
||||
<div class="mb-3">
|
||||
<div class="info-label">Resolved By</div>
|
||||
<div class="info-label">{{ _("Resolved By")}}</div>
|
||||
<div class="info-value">
|
||||
{{ complaint.resolved_by.get_full_name }}
|
||||
<br>
|
||||
@ -540,7 +540,7 @@
|
||||
|
||||
{% if complaint.closed_by %}
|
||||
<div class="mb-0">
|
||||
<div class="info-label">Closed By</div>
|
||||
<div class="info-label">{{ _("Closed By")}}</div>
|
||||
<div class="info-value">
|
||||
{{ complaint.closed_by.get_full_name }}
|
||||
<br>
|
||||
@ -561,19 +561,19 @@
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="mb-2">
|
||||
<strong>Status:</strong>
|
||||
<strong>{{ _("Status") }}:</strong>
|
||||
<span class="badge bg-{{ complaint.resolution_survey.status }}">
|
||||
{{ complaint.resolution_survey.get_status_display }}
|
||||
</span>
|
||||
</p>
|
||||
{% if complaint.resolution_survey.score %}
|
||||
<p class="mb-2">
|
||||
<strong>Score:</strong> {{ complaint.resolution_survey.score }}/100
|
||||
<strong>{{ _("Score") }}:</strong> {{ complaint.resolution_survey.score }}/100
|
||||
</p>
|
||||
{% endif %}
|
||||
<a href="{% url 'surveys:survey_instance_detail' complaint.resolution_survey.id %}"
|
||||
class="btn btn-sm btn-outline-info">
|
||||
View Survey <i class="bi bi-arrow-right ms-1"></i>
|
||||
{{ _("View Survey")}} <i class="bi bi-arrow-right ms-1"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@ -595,7 +595,7 @@
|
||||
<div class="modal-body">
|
||||
<div class="alert alert-warning">
|
||||
<i class="bi bi-exclamation-triangle me-2"></i>
|
||||
This will escalate the complaint to higher management.
|
||||
{{ _("This will escalate the complaint to higher management")}}.
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">{% trans "Reason for Escalation" %}</label>
|
||||
@ -606,7 +606,7 @@
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{% trans "Cancel" %}</button>
|
||||
<button type="submit" class="btn btn-danger">
|
||||
<i class="bi bi-exclamation-triangle me-1"></i> Escalate
|
||||
<i class="bi bi-exclamation-triangle me-1"></i> {{ _("Escalate") }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}New Complaint - PX360{% endblock %}
|
||||
{% block title %}{{ _("New Complaint")}} - PX360{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<style>
|
||||
@ -33,13 +33,13 @@
|
||||
<!-- Page Header -->
|
||||
<div class="mb-4">
|
||||
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary btn-sm mb-3">
|
||||
<i class="bi bi-arrow-left me-1"></i> Back to Complaints
|
||||
<i class="bi bi-arrow-left me-1"></i> {{ _("Back to Complaints")}}
|
||||
</a>
|
||||
<h2 class="mb-1">
|
||||
<i class="bi bi-plus-circle text-primary me-2"></i>
|
||||
Create New Complaint
|
||||
{{ _("Create New Complaint")}}
|
||||
</h2>
|
||||
<p class="text-muted mb-0">File a new patient complaint with SLA tracking</p>
|
||||
<p class="text-muted mb-0">{{ _("File a new patient complaint with SLA tracking")}}</p>
|
||||
</div>
|
||||
|
||||
<form method="post" action="{% url 'complaints:complaint_create' %}" id="complaintForm">
|
||||
@ -50,16 +50,16 @@
|
||||
<!-- Patient Information -->
|
||||
<div class="form-section">
|
||||
<h5 class="form-section-title">
|
||||
<i class="bi bi-person-fill me-2"></i>Patient Information
|
||||
<i class="bi bi-person-fill me-2"></i>{{ _("Patient Information")}}
|
||||
</h5>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label required-field">{% trans "Patient" %}</label>
|
||||
<select name="patient_id" class="form-select" id="patientSelect" required>
|
||||
<option value="">Search and select patient...</option>
|
||||
<option value="">{{ _("Search and select patient")}}</option>
|
||||
</select>
|
||||
<small class="form-text text-muted">Search by MRN or name</small>
|
||||
<small class="form-text text-muted">{{ _("Search by MRN or name")}}</small>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
@ -73,14 +73,14 @@
|
||||
<!-- Organization Information -->
|
||||
<div class="form-section">
|
||||
<h5 class="form-section-title">
|
||||
<i class="bi bi-hospital me-2"></i>Organization
|
||||
<i class="bi bi-hospital me-2"></i>{{ _("Organization") }}
|
||||
</h5>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label required-field">{% trans "Hospital" %}</label>
|
||||
<select name="hospital_id" class="form-select" id="hospitalSelect" required>
|
||||
<option value="">Select hospital...</option>
|
||||
<option value="">{{ _("Select hospital")}}</option>
|
||||
{% for hospital in hospitals %}
|
||||
<option value="{{ hospital.id }}">{{ hospital.name_en }}</option>
|
||||
{% endfor %}
|
||||
@ -90,7 +90,7 @@
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">{% trans "Department" %}</label>
|
||||
<select name="department_id" class="form-select" id="departmentSelect">
|
||||
<option value="">Select department...</option>
|
||||
<option value="">{{ _("Select department")}}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -99,7 +99,7 @@
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">{% trans "Physician" %}</label>
|
||||
<select name="physician_id" class="form-select" id="physicianSelect">
|
||||
<option value="">Select physician...</option>
|
||||
<option value="">{{ _("Select physician")}}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -108,7 +108,7 @@
|
||||
<!-- Complaint Details -->
|
||||
<div class="form-section">
|
||||
<h5 class="form-section-title">
|
||||
<i class="bi bi-file-text me-2"></i>Complaint Details
|
||||
<i class="bi bi-file-text me-2"></i>{{ _("Complaint Details")}}
|
||||
</h5>
|
||||
|
||||
<div class="mb-3">
|
||||
@ -127,14 +127,14 @@
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label required-field">{% trans "Category" %}</label>
|
||||
<select name="category" class="form-select" required>
|
||||
<option value="">Select category...</option>
|
||||
<option value="clinical_care">Clinical Care</option>
|
||||
<option value="staff_behavior">Staff Behavior</option>
|
||||
<option value="facility">Facility & Environment</option>
|
||||
<option value="wait_time">Wait Time</option>
|
||||
<option value="billing">Billing</option>
|
||||
<option value="communication">Communication</option>
|
||||
<option value="other">Other</option>
|
||||
<option value="">{{ _("Select category")}}</option>
|
||||
<option value="clinical_care">{{ _("Clinical Care")}}</option>
|
||||
<option value="staff_behavior">{{ _("Staff Behavior")}}</option>
|
||||
<option value="facility">{{ _("Facility & Environment")}}</option>
|
||||
<option value="wait_time">{{ _("Wait Time")}}</option>
|
||||
<option value="billing">{{ _("Billing") }}</option>
|
||||
<option value="communication">{{ _("Communication") }}</option>
|
||||
<option value="other">{{ _("Other") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -152,47 +152,47 @@
|
||||
<!-- Classification -->
|
||||
<div class="form-section">
|
||||
<h5 class="form-section-title">
|
||||
<i class="bi bi-tags me-2"></i>Classification
|
||||
<i class="bi bi-tags me-2"></i>{{ _("Classification") }}
|
||||
</h5>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label required-field">{% trans "Severity" %}</label>
|
||||
<select name="severity" class="form-select" required>
|
||||
<option value="">Select severity...</option>
|
||||
<option value="low">Low</option>
|
||||
<option value="medium" selected>Medium</option>
|
||||
<option value="high">High</option>
|
||||
<option value="critical">Critical</option>
|
||||
<option value="">{{ _("Select severity")}}</option>
|
||||
<option value="low">{{ _("Low") }}</option>
|
||||
<option value="medium" selected>{{ _("Medium") }}</option>
|
||||
<option value="high">{{ _("High") }}</option>
|
||||
<option value="critical">{{ _("Critical") }}</option>
|
||||
</select>
|
||||
<small class="form-text text-muted">
|
||||
Determines SLA deadline
|
||||
{{ _("Determines SLA deadline")}}
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label required-field">{% trans "Priority" %}</label>
|
||||
<select name="priority" class="form-select" required>
|
||||
<option value="">Select priority...</option>
|
||||
<option value="low">Low</option>
|
||||
<option value="medium" selected>Medium</option>
|
||||
<option value="high">High</option>
|
||||
<option value="urgent">Urgent</option>
|
||||
<option value="">{{ _("Select priority")}}</option>
|
||||
<option value="low">{{ _("Low") }}</option>
|
||||
<option value="medium" selected>{{ _("Medium") }}</option>
|
||||
<option value="high">{{ _("High") }}</option>
|
||||
<option value="urgent">{{ _("Urgent") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label required-field">{% trans "Source" %}</label>
|
||||
<select name="source" class="form-select" required>
|
||||
<option value="">Select source...</option>
|
||||
<option value="patient">Patient</option>
|
||||
<option value="family">Family Member</option>
|
||||
<option value="staff">Staff</option>
|
||||
<option value="survey">Survey</option>
|
||||
<option value="social_media">Social Media</option>
|
||||
<option value="call_center">Call Center</option>
|
||||
<option value="moh">Ministry of Health</option>
|
||||
<option value="chi">Council of Health Insurance</option>
|
||||
<option value="other">Other</option>
|
||||
<option value="">{{ _("Select source")}}</option>
|
||||
<option value="patient">{{ _("Patient") }}</option>
|
||||
<option value="family">{{ _("Family Member")}}</option>
|
||||
<option value="staff">{{ _("Staff") }}</option>
|
||||
<option value="survey">{{ _("Survey") }}</option>
|
||||
<option value="social_media">{{ _("Social Media")}}</option>
|
||||
<option value="call_center">{{ _("Call Center")}}</option>
|
||||
<option value="moh">{{ _("Ministry of Health")}}</option>
|
||||
<option value="chi">{{ _("Council of Health Insurance")}}</option>
|
||||
<option value="other">{{ _("Other") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -200,26 +200,26 @@
|
||||
<!-- SLA Information -->
|
||||
<div class="alert alert-info">
|
||||
<h6 class="alert-heading">
|
||||
<i class="bi bi-info-circle me-2"></i>SLA Information
|
||||
<i class="bi bi-info-circle me-2"></i>{{ _("SLA Information")}}
|
||||
</h6>
|
||||
<p class="mb-0 small">
|
||||
SLA deadline will be automatically calculated based on severity:
|
||||
{{ _("SLA deadline will be automatically calculated based on severity")}}:
|
||||
</p>
|
||||
<ul class="mb-0 mt-2 small">
|
||||
<li><strong>Critical:</strong> 4 hours</li>
|
||||
<li><strong>High:</strong> 24 hours</li>
|
||||
<li><strong>Medium:</strong> 72 hours</li>
|
||||
<li><strong>Low:</strong> 168 hours (7 days)</li>
|
||||
<li><strong>{{ _("Critical") }}:</strong> {{ _("4 hours")}}</li>
|
||||
<li><strong>{{ _("High") }}:</strong> {{ _("24 hours")}}</li>
|
||||
<li><strong>{{ _("Medium") }}:</strong> {{ _("72 hours")}}</li>
|
||||
<li><strong>{{ _("Low") }}:</strong> {{ _("168 hours (7 days)")}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Action Buttons -->
|
||||
<div class="d-grid gap-2">
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<i class="bi bi-check-circle me-2"></i>Create Complaint
|
||||
<i class="bi bi-check-circle me-2"></i>{{ _("Create Complaint")}}
|
||||
</button>
|
||||
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary">
|
||||
<i class="bi bi-x-circle me-2"></i>Cancel
|
||||
<i class="bi bi-x-circle me-2"></i>{{ _("Cancel") }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Complaints Console - PX360{% endblock %}
|
||||
{% block title %}{{ _("Complaints Console")}} - PX360{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<style>
|
||||
@ -84,14 +84,14 @@
|
||||
<div>
|
||||
<h2 class="mb-1">
|
||||
<i class="bi bi-exclamation-triangle-fill text-warning me-2"></i>
|
||||
Complaints Console
|
||||
{{ _("Complaints Console")}}
|
||||
</h2>
|
||||
<p class="text-muted mb-0">Manage and track patient complaints with SLA monitoring</p>
|
||||
<p class="text-muted mb-0">{{ _("Manage and track patient complaints with SLA monitoring")}}</p>
|
||||
</div>
|
||||
<div>
|
||||
{% if user.is_px_admin or user.is_hospital_admin %}
|
||||
<a href="{% url 'complaints:complaint_create' %}" class="btn btn-primary">
|
||||
<i class="bi bi-plus-circle me-1"></i> New Complaint
|
||||
<i class="bi bi-plus-circle me-1"></i> {{ _("New Complaint")}}
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
@ -165,7 +165,7 @@
|
||||
<div class="filter-panel" id="filterPanel">
|
||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||
<h5 class="mb-0">
|
||||
<i class="bi bi-funnel me-2"></i>Filters
|
||||
<i class="bi bi-funnel me-2"></i>{{ _("Filters") }}
|
||||
</h5>
|
||||
<button class="btn btn-sm btn-outline-secondary" onclick="toggleFilters()">
|
||||
<i class="bi bi-chevron-up" id="filterToggleIcon"></i>
|
||||
@ -187,7 +187,7 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "Status" %}</label>
|
||||
<select class="form-select" name="status">
|
||||
<option value="">All Statuses</option>
|
||||
<option value="">{{ _("All Statuses")}}</option>
|
||||
{% for value, label in status_choices %}
|
||||
<option value="{{ value }}" {% if filters.status == value %}selected{% endif %}>
|
||||
{{ label }}
|
||||
@ -200,11 +200,11 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "Severity" %}</label>
|
||||
<select class="form-select" name="severity">
|
||||
<option value="">All Severities</option>
|
||||
<option value="low" {% if filters.severity == 'low' %}selected{% endif %}>Low</option>
|
||||
<option value="medium" {% if filters.severity == 'medium' %}selected{% endif %}>Medium</option>
|
||||
<option value="high" {% if filters.severity == 'high' %}selected{% endif %}>High</option>
|
||||
<option value="critical" {% if filters.severity == 'critical' %}selected{% endif %}>Critical</option>
|
||||
<option value="">{{ _("All Severities")}}</option>
|
||||
<option value="low" {% if filters.severity == 'low' %}selected{% endif %}>{{ _("Low") }}</option>
|
||||
<option value="medium" {% if filters.severity == 'medium' %}selected{% endif %}>{{ _("Medium") }}</option>
|
||||
<option value="high" {% if filters.severity == 'high' %}selected{% endif %}>{{ _("High") }}</option>
|
||||
<option value="critical" {% if filters.severity == 'critical' %}selected{% endif %}>{{ _("Critical") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -212,11 +212,11 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "Priority" %}</label>
|
||||
<select class="form-select" name="priority">
|
||||
<option value="">All Priorities</option>
|
||||
<option value="low" {% if filters.priority == 'low' %}selected{% endif %}>Low</option>
|
||||
<option value="medium" {% if filters.priority == 'medium' %}selected{% endif %}>Medium</option>
|
||||
<option value="high" {% if filters.priority == 'high' %}selected{% endif %}>High</option>
|
||||
<option value="urgent" {% if filters.priority == 'urgent' %}selected{% endif %}>Urgent</option>
|
||||
<option value="">{{ _("All Priorities")}}</option>
|
||||
<option value="low" {% if filters.priority == 'low' %}selected{% endif %}>{{ _("Low") }}</option>
|
||||
<option value="medium" {% if filters.priority == 'medium' %}selected{% endif %}>{{ _("Medium") }}</option>
|
||||
<option value="high" {% if filters.priority == 'high' %}selected{% endif %}>{{ _("High") }}</option>
|
||||
<option value="urgent" {% if filters.priority == 'urgent' %}selected{% endif %}>{{ _("Urgent") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -224,14 +224,14 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "Category" %}</label>
|
||||
<select class="form-select" name="category">
|
||||
<option value="">All Categories</option>
|
||||
<option value="clinical_care" {% if filters.category == 'clinical_care' %}selected{% endif %}>Clinical Care</option>
|
||||
<option value="staff_behavior" {% if filters.category == 'staff_behavior' %}selected{% endif %}>Staff Behavior</option>
|
||||
<option value="facility" {% if filters.category == 'facility' %}selected{% endif %}>Facility & Environment</option>
|
||||
<option value="wait_time" {% if filters.category == 'wait_time' %}selected{% endif %}>Wait Time</option>
|
||||
<option value="billing" {% if filters.category == 'billing' %}selected{% endif %}>Billing</option>
|
||||
<option value="communication" {% if filters.category == 'communication' %}selected{% endif %}>Communication</option>
|
||||
<option value="other" {% if filters.category == 'other' %}selected{% endif %}>Other</option>
|
||||
<option value="">{{ _("All Categories")}}</option>
|
||||
<option value="clinical_care" {% if filters.category == 'clinical_care' %}selected{% endif %}>{{ _("Clinical Care")}}</option>
|
||||
<option value="staff_behavior" {% if filters.category == 'staff_behavior' %}selected{% endif %}>{{ _("Staff Behavior")}}</option>
|
||||
<option value="facility" {% if filters.category == 'facility' %}selected{% endif %}>{{ _("Facility & Environment")}}</option>
|
||||
<option value="wait_time" {% if filters.category == 'wait_time' %}selected{% endif %}>{{ _("Wait Time")}}</option>
|
||||
<option value="billing" {% if filters.category == 'billing' %}selected{% endif %}>{{ _("Billing") }}</option>
|
||||
<option value="communication" {% if filters.category == 'communication' %}selected{% endif %}>{{ _("Communication") }}</option>
|
||||
<option value="other" {% if filters.category == 'other' %}selected{% endif %}>{{ _("Other") }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -239,7 +239,7 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "Hospital" %}</label>
|
||||
<select class="form-select" name="hospital">
|
||||
<option value="">All Hospitals</option>
|
||||
<option value="">{{ _("All Hospitals")}}</option>
|
||||
{% for hospital in hospitals %}
|
||||
<option value="{{ hospital.id }}" {% if filters.hospital == hospital.id|stringformat:"s" %}selected{% endif %}>
|
||||
{{ hospital.name_en }}
|
||||
@ -252,7 +252,7 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "Department" %}</label>
|
||||
<select class="form-select" name="department">
|
||||
<option value="">All Departments</option>
|
||||
<option value="">{{ _("All Departments")}}</option>
|
||||
{% for dept in departments %}
|
||||
<option value="{{ dept.id }}" {% if filters.department == dept.id|stringformat:"s" %}selected{% endif %}>
|
||||
{{ dept.name_en }}
|
||||
@ -265,7 +265,7 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "Assigned To" %}</label>
|
||||
<select class="form-select" name="assigned_to">
|
||||
<option value="">All Users</option>
|
||||
<option value="">{{ _("All Users")}}</option>
|
||||
{% for user_obj in assignable_users %}
|
||||
<option value="{{ user_obj.id }}" {% if filters.assigned_to == user_obj.id|stringformat:"s" %}selected{% endif %}>
|
||||
{{ user_obj.get_full_name }}
|
||||
@ -278,7 +278,7 @@
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">{% trans "SLA Status" %}</label>
|
||||
<select class="form-select" name="is_overdue">
|
||||
<option value="">All</option>
|
||||
<option value="">{{ _("All") }}</option>
|
||||
<option value="true" {% if filters.is_overdue == 'true' %}selected{% endif %}>Overdue Only</option>
|
||||
</select>
|
||||
</div>
|
||||
@ -296,10 +296,10 @@
|
||||
|
||||
<div class="mt-3 d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-search me-1"></i> Apply Filters
|
||||
<i class="bi bi-search me-1"></i> {{ _("Apply Filters")}}
|
||||
</button>
|
||||
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary">
|
||||
<i class="bi bi-x-circle me-1"></i> Clear
|
||||
<i class="bi bi-x-circle me-1"></i> {{ _("Clear") }}
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
@ -315,10 +315,10 @@
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<button class="btn btn-sm btn-outline-primary" onclick="exportData('csv')">
|
||||
<i class="bi bi-file-earmark-spreadsheet me-1"></i> Export CSV
|
||||
<i class="bi bi-file-earmark-spreadsheet me-1"></i> {{ _("Export CSV")}}
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-primary" onclick="exportData('excel')">
|
||||
<i class="bi bi-file-earmark-excel me-1"></i> Export Excel
|
||||
<i class="bi bi-file-earmark-excel me-1"></i> {{ _("Export Excel")}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -358,13 +358,13 @@
|
||||
</td>
|
||||
<td>
|
||||
<strong>{{ complaint.patient.get_full_name }}</strong><br>
|
||||
<small class="text-muted">MRN: {{ complaint.patient.mrn }}</small>
|
||||
<small class="text-muted">{{ _("MRN") }}: {{ complaint.patient.mrn }}</small>
|
||||
</td>
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
{{ complaint.title|truncatewords:8 }}
|
||||
{% if complaint.is_overdue %}
|
||||
<span class="overdue-badge">OVERDUE</span>
|
||||
<span class="overdue-badge">{{ _("OVERDUE") }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</td>
|
||||
@ -388,7 +388,7 @@
|
||||
{% if complaint.assigned_to %}
|
||||
<small>{{ complaint.assigned_to.get_full_name }}</small>
|
||||
{% else %}
|
||||
<span class="text-muted"><em>Unassigned</em></span>
|
||||
<span class="text-muted"><em>{{ _("Unassigned") }}</em></span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
@ -412,7 +412,7 @@
|
||||
<tr>
|
||||
<td colspan="12" class="text-center py-5">
|
||||
<i class="bi bi-inbox" style="font-size: 3rem; color: #ccc;"></i>
|
||||
<p class="text-muted mt-3">No complaints found</p>
|
||||
<p class="text-muted mt-3">{{ _("No complaints found")}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
@ -375,7 +375,7 @@
|
||||
<div class="action-card mb-4">
|
||||
<h6 class="mb-3"><i class="bi bi-link-45deg me-2"></i>{% trans "Linked PX Action" %}</h6>
|
||||
<p class="small mb-2">{{ px_action.title|truncatewords:10 }}</p>
|
||||
<a href="{% url 'px_action_center:action_detail' px_action.id %}" class="btn btn-sm">
|
||||
<a href="{% url 'actions:action_detail' px_action.id %}" class="btn btn-sm">
|
||||
<i class="bi bi-arrow-right me-1"></i>{% trans "View Action" %}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user