146 lines
4.6 KiB
Markdown
146 lines
4.6 KiB
Markdown
# Complaint Form Fixes Summary
|
|
|
|
## Issue Description
|
|
The patient records were not appearing in the complaint form, and several AJAX endpoints were pointing to incorrect URLs.
|
|
|
|
## Root Causes Identified
|
|
|
|
### 1. Incorrect AJAX Endpoint URLs
|
|
The JavaScript was calling non-existent API endpoints:
|
|
- `/api/departments/` - Does not exist
|
|
- `/complaints/ajax/get-staff-by-department/` - Wrong endpoint name
|
|
- `/api/patients/` - Does not exist
|
|
|
|
### 2. Incorrect API Response Parsing
|
|
JavaScript was expecting data in `results` property, but backend returns different formats:
|
|
- Departments: returns `data.departments`
|
|
- Patients: returns `data.patients`
|
|
- Staff: returns `data.staff`
|
|
|
|
### 3. Missing Classification Section
|
|
The form was missing the Classification section (Category, Subcategory, Source) required by the model.
|
|
|
|
## Fixes Applied
|
|
|
|
### File: `templates/complaints/complaint_form.html`
|
|
|
|
#### 1. Fixed AJAX Endpoint URLs
|
|
|
|
**Before:**
|
|
```javascript
|
|
fetch(`/api/departments/?hospital=${hospitalId}`)
|
|
fetch(`/complaints/ajax/get-staff-by-department/?department_id=${departmentId}`)
|
|
fetch(`/api/patients/?search=${encodeURIComponent(searchTerm)}`)
|
|
```
|
|
|
|
**After:**
|
|
```javascript
|
|
fetch(`/complaints/ajax/departments/?hospital=${hospitalId}`)
|
|
fetch(`/complaints/ajax/physicians/?department_id=${departmentId}`)
|
|
fetch(`/complaints/ajax/search-patients/?q=${encodeURIComponent(searchTerm)}`)
|
|
```
|
|
|
|
#### 2. Fixed Data Response Parsing
|
|
|
|
**Before:**
|
|
```javascript
|
|
data.results.forEach(dept => { ... })
|
|
data.results.forEach(patient => { ... })
|
|
```
|
|
|
|
**After:**
|
|
```javascript
|
|
data.departments.forEach(dept => { ... })
|
|
data.patients.forEach(patient => { ... })
|
|
data.staff.forEach(staff => { ... })
|
|
```
|
|
|
|
#### 3. Added Patient Search Input
|
|
Added a text input and search button for searching patients by MRN or name:
|
|
- Search input field with placeholder
|
|
- Search button with icon
|
|
- Patient select dropdown populated on search
|
|
- Minimum 2 characters required for search
|
|
|
|
#### 4. Added Classification Section
|
|
Added missing form fields:
|
|
- Category dropdown (required)
|
|
- Subcategory dropdown (optional)
|
|
- Source dropdown (required) with options: Email, Phone, Walk-in, Online, Social Media, Third Party, Other
|
|
|
|
#### 5. Improved User Experience
|
|
- Added patient search on Enter key
|
|
- Added patient search on button click
|
|
- Validation for minimum 2 characters for patient search
|
|
- Better error messages for loading failures
|
|
|
|
## URL Configuration
|
|
|
|
All endpoints are correctly configured in `apps/complaints/urls.py`:
|
|
- `/complaints/ajax/departments/` → `get_departments_by_hospital`
|
|
- `/complaints/ajax/physicians/` → `get_staff_by_department`
|
|
- `/complaints/ajax/search-patients/` → `search_patients`
|
|
- `/complaints/public/api/load-categories/` → `api_load_categories`
|
|
|
|
## Backend View Responses
|
|
|
|
### `search_patients` (ui_views.py)
|
|
Returns: `{'patients': [...]}`
|
|
```python
|
|
results = [
|
|
{
|
|
'id': str(p.id),
|
|
'mrn': p.mrn,
|
|
'name': p.get_full_name(),
|
|
'phone': p.phone,
|
|
'email': p.email,
|
|
}
|
|
for p in patients
|
|
]
|
|
return JsonResponse({'patients': results})
|
|
```
|
|
|
|
### `get_staff_by_department` (ui_views.py)
|
|
Returns: `{'staff': [...]}`
|
|
|
|
### `get_departments_by_hospital` (ui_views.py)
|
|
Returns: `{'departments': [...]}`
|
|
|
|
## Testing Instructions
|
|
|
|
1. Navigate to the complaint form: `/complaints/new/`
|
|
2. **Test Hospital Selection**: Select a hospital - departments and categories should load
|
|
3. **Test Department Selection**: Select a department - staff should load
|
|
4. **Test Category Selection**: Select a category - subcategories should load
|
|
5. **Test Patient Search**:
|
|
- Enter at least 2 characters in search field
|
|
- Click search button or press Enter
|
|
- Patient dropdown should populate with matching results
|
|
- Select a patient from the dropdown
|
|
|
|
## Expected Behavior
|
|
|
|
✅ Hospitals load from template context
|
|
✅ Departments load via AJAX when hospital is selected
|
|
✅ Staff/Physicians load via AJAX when department is selected
|
|
✅ Categories load via AJAX when hospital is selected
|
|
✅ Subcategories load via AJAX when category is selected
|
|
✅ Patients search via AJAX when search button is clicked
|
|
✅ All dropdowns populate correctly with data
|
|
✅ Form can be submitted with all required fields filled
|
|
|
|
## Related Files
|
|
|
|
- `apps/complaints/urls.py` - URL patterns
|
|
- `apps/complaints/ui_views.py` - AJAX endpoint views
|
|
- `apps/complaints/models.py` - Complaint model definition
|
|
- `config/urls.py` - Main URL configuration
|
|
|
|
## Notes
|
|
|
|
- Patient search requires minimum 2 characters
|
|
- Patient dropdown populates on focus with initial results if empty
|
|
- All AJAX requests use the correct endpoint URLs
|
|
- Data is properly parsed from backend response format
|
|
- Classification section is complete and functional
|