update-po-file

This commit is contained in:
Marwan Alwali 2026-01-05 16:35:55 +03:00
parent c2e614ceb7
commit e0ee8daa8a
7 changed files with 525 additions and 195 deletions

View File

@ -512,7 +512,7 @@ def get_departments_by_hospital(request):
departments = Department.objects.filter( departments = Department.objects.filter(
hospital_id=hospital_id, hospital_id=hospital_id,
status='active' status='active'
).values('id', 'name_en', 'name_ar') ).values('id', 'name', 'name_ar')
return JsonResponse({'departments': list(departments)}) return JsonResponse({'departments': list(departments)})
@ -527,14 +527,14 @@ def get_physicians_by_hospital(request):
physicians = Physician.objects.filter( physicians = Physician.objects.filter(
hospital_id=hospital_id, hospital_id=hospital_id,
status='active' status='active'
).values('id', 'first_name', 'last_name', 'specialty') ).values('id', 'first_name', 'last_name', 'specialization')
# Format physician names # Format physician names
physicians_list = [ physicians_list = [
{ {
'id': str(p['id']), 'id': str(p['id']),
'name': f"Dr. {p['first_name']} {p['last_name']}", 'name': f"Dr. {p['first_name']} {p['last_name']}",
'specialty': p['specialty'] 'specialty': p['specialization']
} }
for p in physicians for p in physicians
] ]

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -116,7 +116,7 @@
<!-- Back Button --> <!-- Back Button -->
<div class="mb-3"> <div class="mb-3">
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary btn-sm"> <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> </a>
</div> </div>
@ -135,18 +135,18 @@
</div> </div>
<p class="mb-2"> <p class="mb-2">
<i class="bi bi-hash me-1"></i> <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> <span class="mx-2">|</span>
<i class="bi bi-person-fill me-1"></i> <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>
<p class="mb-0"> <p class="mb-0">
<i class="bi bi-hospital me-1"></i> <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 %} {% if complaint.department %}
<span class="mx-2">|</span> <span class="mx-2">|</span>
<i class="bi bi-building me-1"></i> <i class="bi bi-building me-1"></i>
<strong>Department:</strong> {{ complaint.department.name_en }} <strong>{{ _("Department") }}:</strong> {{ complaint.department.name_en }}
{% endif %} {% endif %}
</p> </p>
</div> </div>
@ -154,16 +154,16 @@
<div class="sla-countdown {% if complaint.is_overdue %}overdue{% endif %}"> <div class="sla-countdown {% if complaint.is_overdue %}overdue{% endif %}">
<div class="mb-1"> <div class="mb-1">
<i class="bi bi-clock-history me-1"></i> <i class="bi bi-clock-history me-1"></i>
<strong>SLA Deadline</strong> <strong>{{ _("SLA Deadline")}}</strong>
</div> </div>
<h4 class="mb-0">{{ complaint.due_at|date:"M d, Y H:i" }}</h4> <h4 class="mb-0">{{ complaint.due_at|date:"M d, Y H:i" }}</h4>
{% if complaint.is_overdue %} {% if complaint.is_overdue %}
<div class="mt-2"> <div class="mt-2">
<i class="bi bi-exclamation-triangle-fill me-1"></i> <i class="bi bi-exclamation-triangle-fill me-1"></i>
<strong>OVERDUE</strong> <strong>{{ _("OVERDUE") }}</strong>
</div> </div>
{% else %} {% else %}
<small>{{ complaint.due_at|timeuntil }} remaining</small> <small>{{ complaint.due_at|timeuntil }} {{ _("remaining") }}</small>
{% endif %} {% endif %}
</div> </div>
</div> </div>
@ -178,25 +178,25 @@
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link active" id="details-tab" data-bs-toggle="tab" <button class="nav-link active" id="details-tab" data-bs-toggle="tab"
data-bs-target="#details" type="button" role="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> </button>
</li> </li>
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link" id="timeline-tab" data-bs-toggle="tab" <button class="nav-link" id="timeline-tab" data-bs-toggle="tab"
data-bs-target="#timeline" type="button" role="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> </button>
</li> </li>
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link" id="attachments-tab" data-bs-toggle="tab" <button class="nav-link" id="attachments-tab" data-bs-toggle="tab"
data-bs-target="#attachments" type="button" role="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> </button>
</li> </li>
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link" id="actions-tab" data-bs-toggle="tab" <button class="nav-link" id="actions-tab" data-bs-toggle="tab"
data-bs-target="#actions" type="button" role="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> </button>
</li> </li>
</ul> </ul>
@ -211,7 +211,7 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<div class="info-label">Category</div> <div class="info-label">{{ _("Category") }}</div>
<div class="info-value"> <div class="info-value">
<span class="badge bg-secondary">{{ complaint.get_category_display }}</span> <span class="badge bg-secondary">{{ complaint.get_category_display }}</span>
{% if complaint.subcategory %} {% if complaint.subcategory %}
@ -220,25 +220,25 @@
</div> </div>
</div> </div>
<div class="col-md-6"> <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 class="info-value">{{ complaint.get_source_display }}</div>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<div class="info-label">Priority</div> <div class="info-label">{{ _("Priority") }}</div>
<div class="info-value"> <div class="info-value">
<span class="badge bg-info">{{ complaint.get_priority_display }}</span> <span class="badge bg-info">{{ complaint.get_priority_display }}</span>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="info-label">Encounter ID</div> <div class="info-label">{{ _("Encounter ID")}}</div>
<div class="info-value"> <div class="info-value">
{% if complaint.encounter_id %} {% if complaint.encounter_id %}
{{ complaint.encounter_id }} {{ complaint.encounter_id }}
{% else %} {% else %}
<span class="text-muted">N/A</span> <span class="text-muted">{{ _("N/A")}}</span>
{% endif %} {% endif %}
</div> </div>
</div> </div>
@ -247,7 +247,7 @@
{% if complaint.physician %} {% if complaint.physician %}
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-12"> <div class="col-md-12">
<div class="info-label">Physician</div> <div class="info-label">{{ _("Physician") }}</div>
<div class="info-value"> <div class="info-value">
Dr. {{ complaint.physician.first_name }} {{ complaint.physician.last_name }} Dr. {{ complaint.physician.first_name }} {{ complaint.physician.last_name }}
<span class="text-muted">({{ complaint.physician.specialty }})</span> <span class="text-muted">({{ complaint.physician.specialty }})</span>
@ -259,7 +259,7 @@
<hr> <hr>
<div class="mb-3"> <div class="mb-3">
<div class="info-label">Description</div> <div class="info-label">{{ _("Description") }}</div>
<div class="info-value mt-2"> <div class="info-value mt-2">
<p class="mb-0">{{ complaint.description|linebreaks }}</p> <p class="mb-0">{{ complaint.description|linebreaks }}</p>
</div> </div>
@ -268,13 +268,13 @@
{% if complaint.resolution %} {% if complaint.resolution %}
<hr> <hr>
<div class="mb-3"> <div class="mb-3">
<div class="info-label">Resolution</div> <div class="info-label">{{ _("Resolution") }}</div>
<div class="info-value mt-2"> <div class="info-value mt-2">
<div class="alert alert-success"> <div class="alert alert-success">
<p class="mb-2">{{ complaint.resolution|linebreaks }}</p> <p class="mb-2">{{ complaint.resolution|linebreaks }}</p>
<small class="text-muted"> <small class="text-muted">
Resolved by {{ complaint.resolved_by.get_full_name }} {{ _("Resolved by")}} {{ complaint.resolved_by.get_full_name }}
on {{ complaint.resolved_at|date:"M d, Y H:i" }} {{ _("on") }} {{ complaint.resolved_at|date:"M d, Y H:i" }}
</small> </small>
</div> </div>
</div> </div>
@ -285,11 +285,11 @@
<div class="row"> <div class="row">
<div class="col-md-6"> <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 class="info-value">{{ complaint.created_at|date:"M d, Y H:i" }}</div>
</div> </div>
<div class="col-md-6"> <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 class="info-value">{{ complaint.updated_at|date:"M d, Y H:i" }}</div>
</div> </div>
</div> </div>
@ -342,7 +342,7 @@
{% else %} {% else %}
<div class="text-center py-5"> <div class="text-center py-5">
<i class="bi bi-clock-history" style="font-size: 3rem; color: #ccc;"></i> <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> </div>
{% endif %} {% endif %}
</div> </div>
@ -385,7 +385,7 @@
{% else %} {% else %}
<div class="text-center py-5"> <div class="text-center py-5">
<i class="bi bi-paperclip" style="font-size: 3rem; color: #ccc;"></i> <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> </div>
{% endif %} {% endif %}
</div> </div>
@ -413,7 +413,7 @@
</div> </div>
<a href="{% url 'actions:action_detail' action.id %}" <a href="{% url 'actions:action_detail' action.id %}"
class="btn btn-sm btn-outline-primary"> 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> </a>
</div> </div>
</div> </div>
@ -422,7 +422,7 @@
{% else %} {% else %}
<div class="text-center py-5"> <div class="text-center py-5">
<i class="bi bi-lightning" style="font-size: 3rem; color: #ccc;"></i> <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> </div>
{% endif %} {% endif %}
</div> </div>
@ -446,7 +446,7 @@
<label class="form-label">{% trans "Assign To" %}</label> <label class="form-label">{% trans "Assign To" %}</label>
<div class="input-group"> <div class="input-group">
<select name="user_id" class="form-select" required> <select name="user_id" class="form-select" required>
<option value="">Select user...</option> <option value="">{{ _("Select user...")}}</option>
{% for user_obj in assignable_users %} {% for user_obj in assignable_users %}
<option value="{{ user_obj.id }}" <option value="{{ user_obj.id }}"
{% if complaint.assigned_to and complaint.assigned_to.id == user_obj.id %}selected{% endif %}> {% 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" <textarea name="note" class="form-control mb-2" rows="2"
placeholder="{% trans 'Optional note...' %}"></textarea> placeholder="{% trans 'Optional note...' %}"></textarea>
<button type="submit" class="btn btn-primary w-100"> <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> </button>
</form> </form>
<!-- Escalate --> <!-- Escalate -->
<button type="button" class="btn btn-danger w-100" data-bs-toggle="modal" <button type="button" class="btn btn-danger w-100" data-bs-toggle="modal"
data-bs-target="#escalateModal"> 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> </button>
</div> </div>
</div> </div>
@ -498,7 +498,7 @@
<textarea name="note" class="form-control mb-2" rows="3" <textarea name="note" class="form-control mb-2" rows="3"
placeholder="{% trans 'Enter your note...' %}" required></textarea> placeholder="{% trans 'Enter your note...' %}" required></textarea>
<button type="submit" class="btn btn-success w-100"> <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> </button>
</form> </form>
</div> </div>
@ -511,7 +511,7 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="mb-3"> <div class="mb-3">
<div class="info-label">Assigned To</div> <div class="info-label">{{ _("Assigned To")}}</div>
<div class="info-value"> <div class="info-value">
{% if complaint.assigned_to %} {% if complaint.assigned_to %}
{{ complaint.assigned_to.get_full_name }} {{ complaint.assigned_to.get_full_name }}
@ -520,14 +520,14 @@
Assigned {{ complaint.assigned_at|date:"M d, Y H:i" }} Assigned {{ complaint.assigned_at|date:"M d, Y H:i" }}
</small> </small>
{% else %} {% else %}
<span class="text-muted">Unassigned</span> <span class="text-muted">{{ _("Unassigned") }}</span>
{% endif %} {% endif %}
</div> </div>
</div> </div>
{% if complaint.resolved_by %} {% if complaint.resolved_by %}
<div class="mb-3"> <div class="mb-3">
<div class="info-label">Resolved By</div> <div class="info-label">{{ _("Resolved By")}}</div>
<div class="info-value"> <div class="info-value">
{{ complaint.resolved_by.get_full_name }} {{ complaint.resolved_by.get_full_name }}
<br> <br>
@ -540,7 +540,7 @@
{% if complaint.closed_by %} {% if complaint.closed_by %}
<div class="mb-0"> <div class="mb-0">
<div class="info-label">Closed By</div> <div class="info-label">{{ _("Closed By")}}</div>
<div class="info-value"> <div class="info-value">
{{ complaint.closed_by.get_full_name }} {{ complaint.closed_by.get_full_name }}
<br> <br>
@ -561,19 +561,19 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<p class="mb-2"> <p class="mb-2">
<strong>Status:</strong> <strong>{{ _("Status") }}:</strong>
<span class="badge bg-{{ complaint.resolution_survey.status }}"> <span class="badge bg-{{ complaint.resolution_survey.status }}">
{{ complaint.resolution_survey.get_status_display }} {{ complaint.resolution_survey.get_status_display }}
</span> </span>
</p> </p>
{% if complaint.resolution_survey.score %} {% if complaint.resolution_survey.score %}
<p class="mb-2"> <p class="mb-2">
<strong>Score:</strong> {{ complaint.resolution_survey.score }}/100 <strong>{{ _("Score") }}:</strong> {{ complaint.resolution_survey.score }}/100
</p> </p>
{% endif %} {% endif %}
<a href="{% url 'surveys:survey_instance_detail' complaint.resolution_survey.id %}" <a href="{% url 'surveys:survey_instance_detail' complaint.resolution_survey.id %}"
class="btn btn-sm btn-outline-info"> 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> </a>
</div> </div>
</div> </div>
@ -595,7 +595,7 @@
<div class="modal-body"> <div class="modal-body">
<div class="alert alert-warning"> <div class="alert alert-warning">
<i class="bi bi-exclamation-triangle me-2"></i> <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>
<div class="mb-3"> <div class="mb-3">
<label class="form-label">{% trans "Reason for Escalation" %}</label> <label class="form-label">{% trans "Reason for Escalation" %}</label>
@ -606,7 +606,7 @@
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{% trans "Cancel" %}</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{% trans "Cancel" %}</button>
<button type="submit" class="btn btn-danger"> <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> </button>
</div> </div>
</form> </form>

View File

@ -2,7 +2,7 @@
{% load i18n %} {% load i18n %}
{% load static %} {% load static %}
{% block title %}New Complaint - PX360{% endblock %} {% block title %}{{ _("New Complaint")}} - PX360{% endblock %}
{% block extra_css %} {% block extra_css %}
<style> <style>
@ -33,13 +33,13 @@
<!-- Page Header --> <!-- Page Header -->
<div class="mb-4"> <div class="mb-4">
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary btn-sm mb-3"> <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> </a>
<h2 class="mb-1"> <h2 class="mb-1">
<i class="bi bi-plus-circle text-primary me-2"></i> <i class="bi bi-plus-circle text-primary me-2"></i>
Create New Complaint {{ _("Create New Complaint")}}
</h2> </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> </div>
<form method="post" action="{% url 'complaints:complaint_create' %}" id="complaintForm"> <form method="post" action="{% url 'complaints:complaint_create' %}" id="complaintForm">
@ -50,16 +50,16 @@
<!-- Patient Information --> <!-- Patient Information -->
<div class="form-section"> <div class="form-section">
<h5 class="form-section-title"> <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> </h5>
<div class="row"> <div class="row">
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label class="form-label required-field">{% trans "Patient" %}</label> <label class="form-label required-field">{% trans "Patient" %}</label>
<select name="patient_id" class="form-select" id="patientSelect" required> <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> </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>
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
@ -73,14 +73,14 @@
<!-- Organization Information --> <!-- Organization Information -->
<div class="form-section"> <div class="form-section">
<h5 class="form-section-title"> <h5 class="form-section-title">
<i class="bi bi-hospital me-2"></i>Organization <i class="bi bi-hospital me-2"></i>{{ _("Organization") }}
</h5> </h5>
<div class="row"> <div class="row">
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label class="form-label required-field">{% trans "Hospital" %}</label> <label class="form-label required-field">{% trans "Hospital" %}</label>
<select name="hospital_id" class="form-select" id="hospitalSelect" required> <select name="hospital_id" class="form-select" id="hospitalSelect" required>
<option value="">Select hospital...</option> <option value="">{{ _("Select hospital")}}</option>
{% for hospital in hospitals %} {% for hospital in hospitals %}
<option value="{{ hospital.id }}">{{ hospital.name_en }}</option> <option value="{{ hospital.id }}">{{ hospital.name_en }}</option>
{% endfor %} {% endfor %}
@ -90,7 +90,7 @@
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label class="form-label">{% trans "Department" %}</label> <label class="form-label">{% trans "Department" %}</label>
<select name="department_id" class="form-select" id="departmentSelect"> <select name="department_id" class="form-select" id="departmentSelect">
<option value="">Select department...</option> <option value="">{{ _("Select department")}}</option>
</select> </select>
</div> </div>
</div> </div>
@ -99,7 +99,7 @@
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label class="form-label">{% trans "Physician" %}</label> <label class="form-label">{% trans "Physician" %}</label>
<select name="physician_id" class="form-select" id="physicianSelect"> <select name="physician_id" class="form-select" id="physicianSelect">
<option value="">Select physician...</option> <option value="">{{ _("Select physician")}}</option>
</select> </select>
</div> </div>
</div> </div>
@ -108,7 +108,7 @@
<!-- Complaint Details --> <!-- Complaint Details -->
<div class="form-section"> <div class="form-section">
<h5 class="form-section-title"> <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> </h5>
<div class="mb-3"> <div class="mb-3">
@ -127,14 +127,14 @@
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label class="form-label required-field">{% trans "Category" %}</label> <label class="form-label required-field">{% trans "Category" %}</label>
<select name="category" class="form-select" required> <select name="category" class="form-select" required>
<option value="">Select category...</option> <option value="">{{ _("Select category")}}</option>
<option value="clinical_care">Clinical Care</option> <option value="clinical_care">{{ _("Clinical Care")}}</option>
<option value="staff_behavior">Staff Behavior</option> <option value="staff_behavior">{{ _("Staff Behavior")}}</option>
<option value="facility">Facility & Environment</option> <option value="facility">{{ _("Facility & Environment")}}</option>
<option value="wait_time">Wait Time</option> <option value="wait_time">{{ _("Wait Time")}}</option>
<option value="billing">Billing</option> <option value="billing">{{ _("Billing") }}</option>
<option value="communication">Communication</option> <option value="communication">{{ _("Communication") }}</option>
<option value="other">Other</option> <option value="other">{{ _("Other") }}</option>
</select> </select>
</div> </div>
@ -152,47 +152,47 @@
<!-- Classification --> <!-- Classification -->
<div class="form-section"> <div class="form-section">
<h5 class="form-section-title"> <h5 class="form-section-title">
<i class="bi bi-tags me-2"></i>Classification <i class="bi bi-tags me-2"></i>{{ _("Classification") }}
</h5> </h5>
<div class="mb-3"> <div class="mb-3">
<label class="form-label required-field">{% trans "Severity" %}</label> <label class="form-label required-field">{% trans "Severity" %}</label>
<select name="severity" class="form-select" required> <select name="severity" class="form-select" required>
<option value="">Select severity...</option> <option value="">{{ _("Select severity")}}</option>
<option value="low">Low</option> <option value="low">{{ _("Low") }}</option>
<option value="medium" selected>Medium</option> <option value="medium" selected>{{ _("Medium") }}</option>
<option value="high">High</option> <option value="high">{{ _("High") }}</option>
<option value="critical">Critical</option> <option value="critical">{{ _("Critical") }}</option>
</select> </select>
<small class="form-text text-muted"> <small class="form-text text-muted">
Determines SLA deadline {{ _("Determines SLA deadline")}}
</small> </small>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label class="form-label required-field">{% trans "Priority" %}</label> <label class="form-label required-field">{% trans "Priority" %}</label>
<select name="priority" class="form-select" required> <select name="priority" class="form-select" required>
<option value="">Select priority...</option> <option value="">{{ _("Select priority")}}</option>
<option value="low">Low</option> <option value="low">{{ _("Low") }}</option>
<option value="medium" selected>Medium</option> <option value="medium" selected>{{ _("Medium") }}</option>
<option value="high">High</option> <option value="high">{{ _("High") }}</option>
<option value="urgent">Urgent</option> <option value="urgent">{{ _("Urgent") }}</option>
</select> </select>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label class="form-label required-field">{% trans "Source" %}</label> <label class="form-label required-field">{% trans "Source" %}</label>
<select name="source" class="form-select" required> <select name="source" class="form-select" required>
<option value="">Select source...</option> <option value="">{{ _("Select source")}}</option>
<option value="patient">Patient</option> <option value="patient">{{ _("Patient") }}</option>
<option value="family">Family Member</option> <option value="family">{{ _("Family Member")}}</option>
<option value="staff">Staff</option> <option value="staff">{{ _("Staff") }}</option>
<option value="survey">Survey</option> <option value="survey">{{ _("Survey") }}</option>
<option value="social_media">Social Media</option> <option value="social_media">{{ _("Social Media")}}</option>
<option value="call_center">Call Center</option> <option value="call_center">{{ _("Call Center")}}</option>
<option value="moh">Ministry of Health</option> <option value="moh">{{ _("Ministry of Health")}}</option>
<option value="chi">Council of Health Insurance</option> <option value="chi">{{ _("Council of Health Insurance")}}</option>
<option value="other">Other</option> <option value="other">{{ _("Other") }}</option>
</select> </select>
</div> </div>
</div> </div>
@ -200,26 +200,26 @@
<!-- SLA Information --> <!-- SLA Information -->
<div class="alert alert-info"> <div class="alert alert-info">
<h6 class="alert-heading"> <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> </h6>
<p class="mb-0 small"> <p class="mb-0 small">
SLA deadline will be automatically calculated based on severity: {{ _("SLA deadline will be automatically calculated based on severity")}}:
</p> </p>
<ul class="mb-0 mt-2 small"> <ul class="mb-0 mt-2 small">
<li><strong>Critical:</strong> 4 hours</li> <li><strong>{{ _("Critical") }}:</strong> {{ _("4 hours")}}</li>
<li><strong>High:</strong> 24 hours</li> <li><strong>{{ _("High") }}:</strong> {{ _("24 hours")}}</li>
<li><strong>Medium:</strong> 72 hours</li> <li><strong>{{ _("Medium") }}:</strong> {{ _("72 hours")}}</li>
<li><strong>Low:</strong> 168 hours (7 days)</li> <li><strong>{{ _("Low") }}:</strong> {{ _("168 hours (7 days)")}}</li>
</ul> </ul>
</div> </div>
<!-- Action Buttons --> <!-- Action Buttons -->
<div class="d-grid gap-2"> <div class="d-grid gap-2">
<button type="submit" class="btn btn-primary btn-lg"> <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> </button>
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary"> <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> </a>
</div> </div>
</div> </div>

View File

@ -2,7 +2,7 @@
{% load i18n %} {% load i18n %}
{% load static %} {% load static %}
{% block title %}Complaints Console - PX360{% endblock %} {% block title %}{{ _("Complaints Console")}} - PX360{% endblock %}
{% block extra_css %} {% block extra_css %}
<style> <style>
@ -84,14 +84,14 @@
<div> <div>
<h2 class="mb-1"> <h2 class="mb-1">
<i class="bi bi-exclamation-triangle-fill text-warning me-2"></i> <i class="bi bi-exclamation-triangle-fill text-warning me-2"></i>
Complaints Console {{ _("Complaints Console")}}
</h2> </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>
<div> <div>
{% if user.is_px_admin or user.is_hospital_admin %} {% if user.is_px_admin or user.is_hospital_admin %}
<a href="{% url 'complaints:complaint_create' %}" class="btn btn-primary"> <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> </a>
{% endif %} {% endif %}
</div> </div>
@ -165,7 +165,7 @@
<div class="filter-panel" id="filterPanel"> <div class="filter-panel" id="filterPanel">
<div class="d-flex justify-content-between align-items-center mb-3"> <div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0"> <h5 class="mb-0">
<i class="bi bi-funnel me-2"></i>Filters <i class="bi bi-funnel me-2"></i>{{ _("Filters") }}
</h5> </h5>
<button class="btn btn-sm btn-outline-secondary" onclick="toggleFilters()"> <button class="btn btn-sm btn-outline-secondary" onclick="toggleFilters()">
<i class="bi bi-chevron-up" id="filterToggleIcon"></i> <i class="bi bi-chevron-up" id="filterToggleIcon"></i>
@ -187,7 +187,7 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "Status" %}</label> <label class="form-label">{% trans "Status" %}</label>
<select class="form-select" name="status"> <select class="form-select" name="status">
<option value="">All Statuses</option> <option value="">{{ _("All Statuses")}}</option>
{% for value, label in status_choices %} {% for value, label in status_choices %}
<option value="{{ value }}" {% if filters.status == value %}selected{% endif %}> <option value="{{ value }}" {% if filters.status == value %}selected{% endif %}>
{{ label }} {{ label }}
@ -200,11 +200,11 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "Severity" %}</label> <label class="form-label">{% trans "Severity" %}</label>
<select class="form-select" name="severity"> <select class="form-select" name="severity">
<option value="">All Severities</option> <option value="">{{ _("All Severities")}}</option>
<option value="low" {% if filters.severity == 'low' %}selected{% endif %}>Low</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="medium" {% if filters.severity == 'medium' %}selected{% endif %}>{{ _("Medium") }}</option>
<option value="high" {% if filters.severity == 'high' %}selected{% endif %}>High</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="critical" {% if filters.severity == 'critical' %}selected{% endif %}>{{ _("Critical") }}</option>
</select> </select>
</div> </div>
@ -212,11 +212,11 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "Priority" %}</label> <label class="form-label">{% trans "Priority" %}</label>
<select class="form-select" name="priority"> <select class="form-select" name="priority">
<option value="">All Priorities</option> <option value="">{{ _("All Priorities")}}</option>
<option value="low" {% if filters.priority == 'low' %}selected{% endif %}>Low</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="medium" {% if filters.priority == 'medium' %}selected{% endif %}>{{ _("Medium") }}</option>
<option value="high" {% if filters.priority == 'high' %}selected{% endif %}>High</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="urgent" {% if filters.priority == 'urgent' %}selected{% endif %}>{{ _("Urgent") }}</option>
</select> </select>
</div> </div>
@ -224,14 +224,14 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "Category" %}</label> <label class="form-label">{% trans "Category" %}</label>
<select class="form-select" name="category"> <select class="form-select" name="category">
<option value="">All Categories</option> <option value="">{{ _("All Categories")}}</option>
<option value="clinical_care" {% if filters.category == 'clinical_care' %}selected{% endif %}>Clinical Care</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="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="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="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="billing" {% if filters.category == 'billing' %}selected{% endif %}>{{ _("Billing") }}</option>
<option value="communication" {% if filters.category == 'communication' %}selected{% endif %}>Communication</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="other" {% if filters.category == 'other' %}selected{% endif %}>{{ _("Other") }}</option>
</select> </select>
</div> </div>
@ -239,7 +239,7 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "Hospital" %}</label> <label class="form-label">{% trans "Hospital" %}</label>
<select class="form-select" name="hospital"> <select class="form-select" name="hospital">
<option value="">All Hospitals</option> <option value="">{{ _("All Hospitals")}}</option>
{% for hospital in hospitals %} {% for hospital in hospitals %}
<option value="{{ hospital.id }}" {% if filters.hospital == hospital.id|stringformat:"s" %}selected{% endif %}> <option value="{{ hospital.id }}" {% if filters.hospital == hospital.id|stringformat:"s" %}selected{% endif %}>
{{ hospital.name_en }} {{ hospital.name_en }}
@ -252,7 +252,7 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "Department" %}</label> <label class="form-label">{% trans "Department" %}</label>
<select class="form-select" name="department"> <select class="form-select" name="department">
<option value="">All Departments</option> <option value="">{{ _("All Departments")}}</option>
{% for dept in departments %} {% for dept in departments %}
<option value="{{ dept.id }}" {% if filters.department == dept.id|stringformat:"s" %}selected{% endif %}> <option value="{{ dept.id }}" {% if filters.department == dept.id|stringformat:"s" %}selected{% endif %}>
{{ dept.name_en }} {{ dept.name_en }}
@ -265,7 +265,7 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "Assigned To" %}</label> <label class="form-label">{% trans "Assigned To" %}</label>
<select class="form-select" name="assigned_to"> <select class="form-select" name="assigned_to">
<option value="">All Users</option> <option value="">{{ _("All Users")}}</option>
{% for user_obj in assignable_users %} {% for user_obj in assignable_users %}
<option value="{{ user_obj.id }}" {% if filters.assigned_to == user_obj.id|stringformat:"s" %}selected{% endif %}> <option value="{{ user_obj.id }}" {% if filters.assigned_to == user_obj.id|stringformat:"s" %}selected{% endif %}>
{{ user_obj.get_full_name }} {{ user_obj.get_full_name }}
@ -278,7 +278,7 @@
<div class="col-md-4"> <div class="col-md-4">
<label class="form-label">{% trans "SLA Status" %}</label> <label class="form-label">{% trans "SLA Status" %}</label>
<select class="form-select" name="is_overdue"> <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> <option value="true" {% if filters.is_overdue == 'true' %}selected{% endif %}>Overdue Only</option>
</select> </select>
</div> </div>
@ -296,10 +296,10 @@
<div class="mt-3 d-flex gap-2"> <div class="mt-3 d-flex gap-2">
<button type="submit" class="btn btn-primary"> <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> </button>
<a href="{% url 'complaints:complaint_list' %}" class="btn btn-outline-secondary"> <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> </a>
</div> </div>
</form> </form>
@ -315,10 +315,10 @@
</div> </div>
<div class="d-flex gap-2"> <div class="d-flex gap-2">
<button class="btn btn-sm btn-outline-primary" onclick="exportData('csv')"> <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>
<button class="btn btn-sm btn-outline-primary" onclick="exportData('excel')"> <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> </button>
</div> </div>
</div> </div>
@ -358,13 +358,13 @@
</td> </td>
<td> <td>
<strong>{{ complaint.patient.get_full_name }}</strong><br> <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>
<td> <td>
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
{{ complaint.title|truncatewords:8 }} {{ complaint.title|truncatewords:8 }}
{% if complaint.is_overdue %} {% if complaint.is_overdue %}
<span class="overdue-badge">OVERDUE</span> <span class="overdue-badge">{{ _("OVERDUE") }}</span>
{% endif %} {% endif %}
</div> </div>
</td> </td>
@ -388,7 +388,7 @@
{% if complaint.assigned_to %} {% if complaint.assigned_to %}
<small>{{ complaint.assigned_to.get_full_name }}</small> <small>{{ complaint.assigned_to.get_full_name }}</small>
{% else %} {% else %}
<span class="text-muted"><em>Unassigned</em></span> <span class="text-muted"><em>{{ _("Unassigned") }}</em></span>
{% endif %} {% endif %}
</td> </td>
<td> <td>
@ -412,7 +412,7 @@
<tr> <tr>
<td colspan="12" class="text-center py-5"> <td colspan="12" class="text-center py-5">
<i class="bi bi-inbox" style="font-size: 3rem; color: #ccc;"></i> <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> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@ -375,7 +375,7 @@
<div class="action-card mb-4"> <div class="action-card mb-4">
<h6 class="mb-3"><i class="bi bi-link-45deg me-2"></i>{% trans "Linked PX Action" %}</h6> <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> <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" %} <i class="bi bi-arrow-right me-1"></i>{% trans "View Action" %}
</a> </a>
</div> </div>