12 KiB
Source User Base Layout Implementation
Overview
Created a specialized base layout for Source Users (Call Center Agents, etc.) that provides a focused, streamlined interface since these users only create complaints and inquiries.
What Was Created ✅
1. New Base Layout: templates/layouts/source_user_base.html
Purpose: Simplified base layout specifically designed for Source Users who only need to:
- View their dashboard
- Create complaints
- Create inquiries
- View their created complaints
- View their created inquiries
Features:
- ✅ Same Al Hammadi theme and styling as main base
- ✅ Simplified sidebar with focused navigation
- ✅ Mobile-responsive with offcanvas support
- ✅ RTL support for Arabic
- ✅ Same topbar with hospital selector
- ✅ User menu in topbar (change password, logout)
- ✅ All the same CSS variables and design system
2. Updated Template: templates/px_sources/source_user_dashboard.html
Changes:
- Changed extends from
layouts/base.htmltolayouts/source_user_base.html
Simplified Sidebar Structure
What Source Users See:
┌─────────────────────────┐
│ PX360 │
├─────────────────────────┤
│ 🏠 Dashboard │
├─────────────────────────┤
│ ⚠️ Create Complaint│
│ ⚠️ Create Inquiry │
├─────────────────────────┤
│ 📋 My Complaints │ [badge: count]
│ 📝 My Inquiries │ [badge: count]
├─────────────────────────┤
│ 🚪 Logout │
└─────────────────────────┘
What's Removed (Compared to Full Admin):
No longer visible:
- ❌ Command Center
- ❌ Feedback module
- ❌ Appreciation module
- ❌ Observations
- ❌ PX Actions
- ❌ Patient Journeys
- ❌ Surveys
- ❌ Physicians
- ❌ Staff management
- ❌ Organizations
- ❌ Call Center (interactions)
- ❌ Social Media
- ❌ PX Sources management
- ❌ References
- ❌ Standards
- ❌ Analytics
- ❌ QI Projects
- ❌ Settings (Provisional users, Configuration)
- ❌ Profile settings page
Still visible:
- ✅ Dashboard (Source User focused)
- ✅ Create Complaint
- ✅ Create Inquiry
- ✅ My Complaints
- ✅ My Inquiries
- ✅ Change Password (in topbar menu)
- ✅ Logout
Fixes Applied 🔧
URL Name Fixes:
- ✅ Removed non-existent
accounts:profileURL references - ✅ Replaced with
accounts:password_changefor password management - ✅ Removed duplicate content at end of file
- ✅ Cleaned up mobile offcanvas navigation
Before:
<!-- Profile Settings -->
<li class="nav-item">
<a class="nav-link" href="{% url 'accounts:profile' %}">
<i class="bi bi-person-gear"></i>{% trans "Settings" %}
</a>
</li>
After:
<!-- Logout -->
<li class="nav-item">
<a class="nav-link" href="{% url 'accounts:logout' %}">
<i class="bi bi-box-arrow-right"></i>{% trans "Logout" %}
</a>
</li>
User menu in topbar now provides:
- Change Password
- Logout
Navigation Flow
Source User Workflows:
1. Login → Redirected to Source User Dashboard
↓
2. Dashboard → View statistics for their source
↓
3. Create Complaint → File new patient complaint
↓
4. Create Inquiry → File new patient inquiry
↓
5. My Complaints → View all complaints they created
↓
6. My Inquiries → View all inquiries they created
↓
7. Topbar menu → Change password or logout
Backend Integration Requirements
Context Variables Needed
The new source user base layout expects these context variables:
Dashboard View (apps/px_sources/ui_views.py - SourceUserDashboardView)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
source = self.get_source() # Get current source user's source
# Count complaints created by this source user
context['my_complaint_count'] = Complaint.objects.filter(
source=source,
created_by=self.request.user
).count()
# Count inquiries created by this source user
context['my_inquiry_count'] = Inquiry.objects.filter(
source=source,
created_by=self.request.user
).count()
return context
URL Names Used
The sidebar uses these URL names for active state detection:
| Navigation | URL Name | View/URL |
|---|---|---|
| Dashboard | source_user_dashboard |
px_sources:source_user_dashboard |
| Create Complaint | complaint_create |
complaints:complaint_create |
| Create Inquiry | inquiry_create |
complaints:inquiry_create |
| My Complaints | complaint_list |
complaints:complaint_list |
| My Inquiries | inquiry_list |
complaints:inquiry_list |
| Change Password | password_change |
accounts:password_change |
| Logout | logout |
accounts:logout |
Template Hierarchy
Full Admin Users (PX Admins, Hospital Admins, etc.)
layouts/base.html
├── Full sidebar with all modules
├── All navigation options
└── Full functionality
Source Users
layouts/source_user_base.html
├── Simplified sidebar (6 items only)
├── Focused on complaints/inquiries
└── Data isolation (only see their own data)
Benefits
For Source Users:
✅ Focused Interface - Only see what they need ✅ Less Confusion - No irrelevant modules ✅ Faster Navigation - Fewer clicks to get to tasks ✅ Clear Purpose - Dashboard focused on their role ✅ Better Training - Easier to teach new agents ✅ Reduced Errors - Can't accidentally access wrong areas ✅ Simplified Settings - Only password change in topbar menu
For System:
✅ Role-Based UI - Different layouts for different roles ✅ Security by Design - Users only see appropriate sections ✅ Maintainable - Separate layouts easier to maintain ✅ Scalable - Easy to add more specialized layouts ✅ Consistent Theme - Same Al Hammadi branding
Testing Checklist
UI Testing:
- Verify sidebar shows only 6 navigation items
- Verify Dashboard link is active on source user dashboard
- Verify Create Complaint link works
- Verify Create Inquiry link works
- Verify My Complaints badge shows correct count
- Verify My Inquiries badge shows correct count
- Verify Logout works
- Verify Change Password in topbar menu works
- Verify mobile responsive with offcanvas
- Verify RTL support for Arabic
Data Isolation Testing:
- Verify My Complaints shows ONLY complaints created by this source user
- Verify My Inquiries shows ONLY inquiries created by this source user
- Verify badges show correct counts
- Verify no access to other users' data
URL Testing:
- All sidebar links resolve correctly
- No NoReverseMatch errors
- User menu in topbar works correctly
- Mobile offcanvas navigation works
Other Templates to Update
These templates should also use source_user_base.html:
Complaint/Inquiry Creation Forms:
<!-- templates/complaints/complaint_form.html -->
<!-- templates/complaints/inquiry_form.html -->
{% extends "layouts/source_user_base.html" %}
Source User Forms:
<!-- templates/px_sources/source_user_form.html -->
<!-- templates/px_sources/source_user_confirm_delete.html -->
{% extends "layouts/source_user_base.html" %}
Future Enhancements
Potential Improvements:
-
Source-Specific Branding
- Show source name/color in sidebar
- Customize branding per source type
-
Quick Actions Enhancement
- Add "Create Complaint" button directly in sidebar
- Add "Create Inquiry" button directly in sidebar
-
Performance Dashboard
- Add statistics for source user's performance
- Show average response time
- Show complaint resolution rate
-
Training Mode
- Add tooltips to guide new users
- Add walkthrough for first-time users
-
Keyboard Shortcuts
- Add shortcuts for common actions
- C = Create Complaint
- I = Create Inquiry
Comparison: Full vs Source User Base
| Feature | Full Admin Base | Source User Base |
|---|---|---|
| Sidebar Items | 30+ items | 6 items |
| Navigation Depth | Multi-level | Single-level |
| Admin Settings | Yes | No |
| Profile Page | Yes | No (only password change in topbar) |
| Hospital Selector | Dropdown | Dropdown |
| User Menu | Topbar | Topbar (password + logout) |
| Mobile Offcanvas | Yes | Yes |
| RTL Support | Yes | Yes |
| Theme | Al Hammadi | Al Hammadi |
| Responsive | Yes | Yes |
File Structure
templates/
├── layouts/
│ ├── base.html # Full admin base layout
│ ├── source_user_base.html # NEW: Source user base layout
│ └── partials/
│ ├── sidebar.html # Full sidebar
│ ├── topbar.html # Shared topbar
│ ├── breadcrumbs.html # Shared breadcrumbs
│ └── flash_messages.html # Shared flash messages
└── px_sources/
└── source_user_dashboard.html # UPDATED: Now uses source_user_base.html
Security Considerations
Data Isolation:
- ✅ Source users see sidebar with ONLY their relevant navigation
- ✅ Cannot access admin-only areas (settings, analytics, etc.)
- ✅ Cannot see other users' complaints/inquiries
- ✅ Limited to create/view own data only
Role-Based Access:
- ✅ Simplified UI reinforces role boundaries
- ✅ Reduces accidental access to restricted areas
- ✅ Clear separation between admin and operational users
Implementation Notes
Why Separate Base Layout?
- Clear Role Separation - Different layouts for different roles
- Maintainability - Changes to admin UI don't affect source users
- Performance - Simpler sidebar = faster rendering
- User Experience - Focused interface = better productivity
- Security - UI reinforces backend permissions
Reusability:
Shared Components:
- ✅
layouts/partials/topbar.html- Same topbar used - ✅
layouts/partials/breadcrumbs.html- Shared breadcrumbs - ✅
layouts/partials/flash_messages.html- Shared messages - ✅ CSS variables - Same design system
- ✅ Theme - Same Al Hammadi branding
Unique Components:
- ✅ Sidebar - Different navigation for different roles
Troubleshooting
Common Issues:
NoReverseMatch Error:
- ✅ Fixed: Removed
accounts:profileURL references - ✅ Solution: Use
accounts:password_changefor password management
Missing Context Variables:
- Issue: Badges showing 0 or not updating
- Solution: Ensure
my_complaint_countandmy_inquiry_countare in context
Styling Issues:
- Issue: Sidebar doesn't match full admin
- Solution: Ensure CSS variables are properly defined
Implementation Date: January 12, 2026 Status: ✅ Complete - Base layout created, dashboard updated, URL issues fixed
Completed:
- ✅ Created specialized base layout for source users
- ✅ Updated source user dashboard to use new base
- ✅ Fixed URL name issues (removed profile, kept password_change)
- ✅ Cleaned up duplicate content
- ✅ Documentation created
Next Steps:
- Test source user dashboard in browser
- Update other source user templates to use new base
- Add context variables in backend views
- User acceptance testing with actual source users