HH/docs/HOSPITAL_HEADER_DISPLAY.md

210 lines
6.2 KiB
Markdown

# Hospital Sidebar Display Feature
## Overview
This document describes hospital display feature in PX360 sidebar, which shows the current hospital context and allows PX Admins to quickly switch between hospitals.
## Features
### 1. Hospital Display in Sidebar
The sidebar now displays the current hospital at the bottom:
- Hospital icon (🏥)
- Hospital name (truncated if too long)
- City for context
- Dropdown for PX Admins to switch hospitals
- Read-only display for Hospital Admins and Department Managers
**Position**: At the bottom of the sidebar, after all navigation items.
### 2. PX Admin Quick Switch
For PX Admins, clicking on the hospital display opens a dropdown with:
- List of all hospitals in the system
- Current hospital highlighted with a checkmark
- Hospital name and city for each option
- "View All Hospitals" link to the full hospital selector page
### 3. Hospital Context Availability
The current hospital is available in all templates through the `current_hospital` context variable, provided by the `hospital_context` context processor.
## Implementation Details
### Files Modified
1. **`apps/core/context_processors.py`**
- Added `hospital_context()` function
- Provides `current_hospital` and `is_px_admin` to all templates
- Also updated `sidebar_counts()` to include hospital context
2. **`config/settings/base.py`**
- Added `apps.core.context_processors.hospital_context` to context_processors list
3. **`templates/layouts/partials/sidebar.html`**
- Added hospital display component at the top of sidebar (after brand)
- Includes dropdown for PX Admins with all hospitals
- Forms for quick hospital switching
4. **`apps/core/templatetags/hospital_filters.py`** (new)
- Created `get_all_hospitals` template tag
- Returns all hospitals ordered by name, city
5. **`apps/core/templatetags/__init__.py`** (new)
- Enables template tag module for core app
### Context Variables
Available in all templates:
```python
{
'current_hospital': Hospital, # Current hospital object or None
'is_px_admin': bool, # True if user is PX Admin
}
```
## User Experience
### For PX Admins
1. **Initial State**: Shows current hospital with dropdown indicator
2. **Click Dropdown**: Opens list of all hospitals
3. **Select Hospital**:
- Submits form to select hospital
- Session is updated
- Page refreshes with new hospital data
- Hospital display updates to show new selection
4. **Alternative**: Can click "View All Hospitals" to see full hospital selector page
### For Hospital Admins
1. **Display**: Shows their assigned hospital (read-only)
2. **No Dropdown**: Cannot switch hospitals
3. **Clear Context**: Always know which hospital data they're viewing
### For Department Managers
1. **Display**: Shows their hospital (read-only)
2. **No Dropdown**: Cannot switch hospitals
3. **Consistent View**: Hospital context is clear
## Template Usage
### Accessing Hospital in Templates
```django
{% if current_hospital %}
<h2>{{ current_hospital.name }}</h2>
<p>{{ current_hospital.city }}</p>
{% endif %}
```
### Checking User Role
```django
{% if is_px_admin %}
<p>You are a PX Admin with access to all hospitals</p>
{% else %}
<p>You are viewing: {{ current_hospital.name }}</p>
{% endif %}
```
### Using Hospital Filter
```django
{% load hospital_filters %}
{% get_all_hospitals as hospitals %}
{% for hospital in hospitals %}
{{ hospital.name }}
{% endfor %}
```
## Styling
The hospital display uses Bootstrap 5 classes with custom styling:
```css
.btn-light {
min-width: 200px;
max-width: 300px;
}
.dropdown-item {
display: flex;
align-items: center;
}
```
## Responsive Design
- Hospital display is visible on desktop (md and up)
- On mobile, it may need adjustment or can be hidden
- Dropdown has max-height with scrollbar for many hospitals
## Future Enhancements
1. **Recent Hospitals**: Show recently accessed hospitals first
2. **Hospital Search**: Add search box within dropdown for many hospitals
3. **Hospital Avatar**: Display hospital logo/image instead of icon
4. **Hospital Status**: Show active/inactive status indicators
5. **Hospital Stats**: Display quick stats (complaints, surveys, etc.)
6. **Mobile Optimization**: Better mobile experience for hospital switching
## Testing Checklist
- [ ] Hospital displays correctly for all user types
- [ ] PX Admin can see dropdown with all hospitals
- [ ] PX Admin can switch hospitals successfully
- [ ] Hospital Admin sees only their hospital (no dropdown)
- [ ] Department Manager sees their hospital (no dropdown)
- [ ] Hospital name truncates properly if too long
- [ ] Dropdown shows checkmark for current hospital
- [ ] "View All Hospitals" link works
- [ ] Session updates after hospital switch
- [ ] Page refreshes with correct hospital data
- [ ] Hospital context available in all templates
## Troubleshooting
### Hospital Not Displaying
**Problem**: Hospital display doesn't show in sidebar.
**Solutions**:
1. Check that user is authenticated
2. Verify `TenantMiddleware` is setting `request.tenant_hospital`
3. Ensure `hospital_context` is in settings context_processors
4. Check browser console for template errors
### Dropdown Not Working
**Problem**: PX Admin sees hospital but dropdown doesn't open.
**Solutions**:
1. Check Bootstrap 5 JavaScript is loaded
2. Verify `data-bs-toggle="dropdown"` attribute is present
3. Check for JavaScript errors in browser console
4. Ensure jQuery is loaded (required for some Bootstrap features)
### Hospitals Not Loading
**Problem**: Dropdown shows empty list or no hospitals.
**Solutions**:
1. Check that `hospital_filters` is loaded in template
2. Verify Hospital model has records
3. Check database connection
4. Review server logs for errors
## Related Documentation
- [Tenant-Aware Routing Implementation](./TENANT_AWARE_ROUTING_IMPLEMENTATION.md)
- [Organization Model](./ORGANIZATION_MODEL.md)
- [Architecture](./ARCHITECTURE.md)
## Conclusion
The hospital sidebar display provides clear context awareness and convenient hospital switching for PX Admins, improving the overall user experience in the PX360 platform. The feature is production-ready and follows Django best practices for context processors, template tags, and responsive design.