573 lines
14 KiB
Markdown
573 lines
14 KiB
Markdown
# Staff Hierarchy Integration - Complete Summary
|
|
|
|
## Executive Summary
|
|
|
|
The PX360 system now includes comprehensive support for importing, storing, and visualizing staff hierarchy data from CSV files. This document provides a complete overview of the integration process and available features.
|
|
|
|
## Your Data Structure
|
|
|
|
### CSV Format
|
|
```
|
|
Staff ID,Name,Location,Department,Section,Subsection,AlHammadi Job Title,Country,Gender,Manager
|
|
4,ABDULAZIZ SALEH ALHAMMADI,Nuzha,Senior Management Offices,COO Office,,Chief Operating Officer,Saudi Arabia,Male,2 - MOHAMMAD SALEH AL HAMMADI
|
|
1049,VARGHESE NINAN,Nuzha,Human Resource ,Employee Relations,,Porter,India,Male,1053 - MAJID SALEM SAEED ALNAHDI
|
|
1053,MAJID SALEM SAEED ALNAHDI,Nuzha,Human Resource ,Administration,,Human Resources Manager ,Saudi Arabia,Male,2 - MOHAMMAD SALEH AL HAMMADI
|
|
```
|
|
|
|
### Data Mapping
|
|
|
|
| CSV Field | PX360 Field | Notes |
|
|
|-----------|-------------|-------|
|
|
| Staff ID | `employee_id` | Unique identifier (required) |
|
|
| Name | `first_name`, `last_name` | Split into first/last name |
|
|
| Location | ❌ Not stored | Physical location |
|
|
| Department | `department` | Department name (lookup/create) |
|
|
| Section | ❌ Not stored | Sub-department |
|
|
| Subsection | ❌ Not stored | Further subdivision |
|
|
| AlHammadi Job Title | `job_title` | Job title |
|
|
| Country | ❌ Not stored | Country |
|
|
| Gender | ❌ Not stored | Gender |
|
|
| Manager | `report_to` | Manager ID (extracted from "ID - NAME") |
|
|
|
|
### Manager Field Parsing
|
|
|
|
**Format:** `"ID - NAME"`
|
|
|
|
**Example:** `2 - MOHAMMAD SALEH AL HAMMADI`
|
|
|
|
**System Behavior:**
|
|
1. Extracts ID: `2`
|
|
2. Looks up Staff record with `employee_id = "2"`
|
|
3. Sets `report_to` field to that Staff record
|
|
4. Creates hierarchical relationship
|
|
|
|
## Integration Architecture
|
|
|
|
### 1. Data Storage
|
|
|
|
**Model:** `apps.organizations.models.Staff`
|
|
|
|
**Key Hierarchy Fields:**
|
|
```python
|
|
employee_id = CharField(unique=True) # From CSV "Staff ID"
|
|
first_name = CharField() # From CSV "Name" (first part)
|
|
last_name = CharField() # From CSV "Name" (last part)
|
|
job_title = CharField() # From CSV "AlHammadi Job Title"
|
|
department = ForeignKey(Department) # From CSV "Department"
|
|
report_to = ForeignKey('self') # From CSV "Manager" (ID part)
|
|
```
|
|
|
|
**Relationship:** `report_to` creates self-referential foreign key for hierarchy
|
|
|
|
### 2. Data Import
|
|
|
|
**Command:** `python manage.py import_staff_csv path/to/file.csv`
|
|
|
|
**Location:** `apps/organizations/management/commands/import_staff_csv.py`
|
|
|
|
**Process:**
|
|
1. Read CSV file
|
|
2. Parse each row
|
|
3. Extract manager ID from Manager field
|
|
4. Create/update Staff records
|
|
5. Set `report_to` relationships
|
|
6. Validate data integrity
|
|
|
|
### 3. Hierarchy Visualization Options
|
|
|
|
The system provides **two** visualization approaches:
|
|
|
|
#### Option A: HTML-Based Hierarchy (Original)
|
|
|
|
**URL:** `/organizations/staff/hierarchy/`
|
|
|
|
**Characteristics:**
|
|
- Server-side rendering
|
|
- Static tree structure
|
|
- Page reloads for interactions
|
|
- Print-friendly
|
|
- Good for reports
|
|
|
|
**Technology:** Django templates + Bootstrap
|
|
|
|
**Documentation:** `docs/STAFF_HIERARCHY_VIEW.md`
|
|
|
|
#### Option B: D3.js Interactive Hierarchy ⭐ NEW
|
|
|
|
**URL:** `/organizations/staff/hierarchy/d3/`
|
|
|
|
**Characteristics:**
|
|
- Client-side rendering
|
|
- Interactive tree visualization
|
|
- Instant interactions (no reloads)
|
|
- Multiple layouts
|
|
- Zoom & pan
|
|
- Rich interactivity
|
|
|
|
**Technology:** D3.js v7.9.0 + JavaScript
|
|
|
|
**Documentation:** `docs/D3_HIERARCHY_INTEGRATION.md`
|
|
|
|
## Complete Workflow
|
|
|
|
### Step 1: Prepare Data
|
|
|
|
1. Ensure CSV has correct headers
|
|
2. Verify all Manager IDs exist in Staff ID column
|
|
3. Check department names are consistent
|
|
4. Save as UTF-8 encoded CSV
|
|
|
|
### Step 2: Import Data
|
|
|
|
```bash
|
|
# Option 1: Use import command
|
|
python manage.py import_staff_csv sample_staff_data.csv
|
|
|
|
# Option 2: Use Django Admin
|
|
# Navigate to /admin/organizations/staff/
|
|
# Use import feature
|
|
|
|
# Option 3: Manual entry
|
|
# Navigate to /organizations/staff/create/
|
|
# Enter data manually
|
|
```
|
|
|
|
### Step 3: Verify Data
|
|
|
|
```python
|
|
# Check import
|
|
from apps.organizations.models import Staff
|
|
|
|
# Count staff
|
|
print(f"Total staff: {Staff.objects.count()}")
|
|
|
|
# Check top managers
|
|
print(f"Top managers: {Staff.objects.filter(report_to__isnull=True).count()}")
|
|
|
|
# Check specific staff
|
|
staff = Staff.objects.get(employee_id="4")
|
|
print(f"{staff.first_name} reports to {staff.report_to}")
|
|
print(f"Direct reports: {staff.direct_reports.count()}")
|
|
```
|
|
|
|
### Step 4: Visualize Hierarchy
|
|
|
|
#### HTML-Based View
|
|
```
|
|
URL: /organizations/staff/hierarchy/
|
|
- See tree structure
|
|
- Click to expand/collapse (page reloads)
|
|
- Search by name or ID
|
|
- Filter by hospital/department
|
|
```
|
|
|
|
#### D3.js Interactive View
|
|
```
|
|
URL: /organizations/staff/hierarchy/d3/
|
|
- Interactive tree visualization
|
|
- Click to expand/collapse (instant)
|
|
- Three layouts: horizontal, vertical, radial
|
|
- Zoom and pan support
|
|
- Real-time search
|
|
- Node sizing options
|
|
- Tooltips with details
|
|
- Double-click to view staff details
|
|
```
|
|
|
|
## Feature Comparison
|
|
|
|
| Feature | HTML | D3.js |
|
|
|---------|------|-------|
|
|
| **Rendering** | Server-side | Client-side |
|
|
| **Interactivity** | Basic (reload) | High (instant) |
|
|
| **Layouts** | 1 fixed | 3 switchable |
|
|
| **Zoom/Pan** | ❌ | ✅ |
|
|
| **Animations** | ❌ | ✅ |
|
|
| **Tooltips** | ❌ | ✅ |
|
|
| **Search** | Server-side | Client-side |
|
|
| **Export** | ✅ Print | Limited |
|
|
| **Best For** | Reports | Exploration |
|
|
|
|
## Technical Implementation
|
|
|
|
### 1. Import Command
|
|
|
|
**File:** `apps/organizations/management/commands/import_staff_csv.py`
|
|
|
|
**Key Functions:**
|
|
- `handle()`: Main command entry point
|
|
- `parse_manager()`: Extract ID from "ID - NAME" format
|
|
- `create_or_update_staff()`: Create/update staff records
|
|
- `create_department()`: Auto-create departments
|
|
- `set_manager_relationship()`: Set `report_to` field
|
|
|
|
### 2. Hierarchy API
|
|
|
|
**File:** `apps/organizations/views.py`
|
|
|
|
**Endpoint:** `/organizations/api/staff/hierarchy/`
|
|
|
|
**Method:** GET
|
|
|
|
**Parameters:**
|
|
- `hospital` (optional): Filter by hospital
|
|
- `department` (optional): Filter by department
|
|
|
|
**Response:** JSON hierarchy tree with statistics
|
|
|
|
### 3. D3 Visualization
|
|
|
|
**File:** `templates/organizations/staff_hierarchy_d3.html`
|
|
|
|
**Key Components:**
|
|
- `fetchHierarchyData()`: Fetch data from API
|
|
- `update()`: Render/update visualization
|
|
- `diagonal()`: Create curved links
|
|
- `click()`: Toggle node expansion
|
|
- `getNodeRadius()`: Calculate node sizes
|
|
|
|
**Features:**
|
|
- Three tree layouts (horizontal, vertical, radial)
|
|
- Zoom and pan behavior
|
|
- Search with auto-navigation
|
|
- Expand/collapse animations
|
|
- Responsive sizing
|
|
|
|
## Documentation Structure
|
|
|
|
### Integration Guides
|
|
|
|
1. **STAFF_HIERARCHY_IMPORT_GUIDE.md**
|
|
- How to import CSV data
|
|
- Data mapping details
|
|
- Troubleshooting import issues
|
|
- Usage examples
|
|
|
|
2. **D3_HIERARCHY_INTEGRATION.md**
|
|
- D3.js implementation details
|
|
- Features and capabilities
|
|
- User guide
|
|
- Customization options
|
|
- Troubleshooting
|
|
|
|
3. **STAFF_HIERARCHY_VIEW.md** (existing)
|
|
- HTML-based hierarchy view
|
|
- Original implementation
|
|
|
|
### Code Documentation
|
|
|
|
- **apps/organizations/models.py** - Staff model definition
|
|
- **apps/organizations/views.py** - API endpoint
|
|
- **apps/organizations/ui_views.py** - View functions
|
|
- **apps/organizations/urls.py** - URL routing
|
|
- **templates/organizations/staff_hierarchy.html** - HTML view
|
|
- **templates/organizations/staff_hierarchy_d3.html** - D3 view
|
|
- **apps/organizations/management/commands/import_staff_csv.py** - Import command
|
|
|
|
## Quick Start
|
|
|
|
### Import Your Data
|
|
|
|
```bash
|
|
# 1. Prepare CSV file
|
|
# Ensure format matches your example
|
|
|
|
# 2. Import data
|
|
python manage.py import_staff_csv your_staff_data.csv
|
|
|
|
# 3. Verify import
|
|
python manage.py shell
|
|
>>> from apps.organizations.models import Staff
|
|
>>> Staff.objects.count()
|
|
>>> Staff.objects.filter(report_to__isnull=True).count()
|
|
```
|
|
|
|
### View Hierarchy
|
|
|
|
#### HTML-Based View
|
|
```
|
|
1. Navigate to: /organizations/staff/hierarchy/
|
|
2. See tree structure with top-level managers
|
|
3. Click to expand/collapse nodes
|
|
4. Use search to find specific staff
|
|
5. Filter by hospital/department
|
|
```
|
|
|
|
#### D3 Interactive View
|
|
```
|
|
1. Navigate to: /organizations/staff/hierarchy/d3/
|
|
2. See interactive chart
|
|
3. Click nodes to expand/collapse
|
|
4. Use mouse wheel to zoom
|
|
5. Drag to pan
|
|
6. Search for staff (auto-navigate)
|
|
7. Change layout from dropdown
|
|
8. Adjust node sizes from dropdown
|
|
9. Double-click nodes for details
|
|
```
|
|
|
|
## Example Data Flow
|
|
|
|
### CSV Import
|
|
|
|
```
|
|
CSV Row:
|
|
Staff ID: 1053
|
|
Name: MAJID SALEM SAEED ALNAHDI
|
|
Manager: 2 - MOHAMMAD SALEH AL HAMMADI
|
|
Job Title: Human Resources Manager
|
|
Department: Human Resource
|
|
|
|
↓ Import Command
|
|
|
|
Staff Record Created:
|
|
employee_id: "1053"
|
|
first_name: "MAJID SALEM SAEED"
|
|
last_name: "ALNAHDI"
|
|
job_title: "Human Resources Manager"
|
|
report_to: Staff.objects.get(employee_id="2")
|
|
|
|
↓ Hierarchy Built
|
|
|
|
Tree Structure:
|
|
Mohammad Saleh Al Hammadi (ID: 2)
|
|
└── Majid Salem Saeed Alnahdi (ID: 1053)
|
|
└── Varghese Ninan (ID: 1049)
|
|
```
|
|
|
|
### D3 Visualization
|
|
|
|
```
|
|
API Request: GET /organizations/api/staff/hierarchy/
|
|
|
|
↓
|
|
|
|
Query Database:
|
|
- Get all staff (filtered by permissions)
|
|
- Build hierarchy tree
|
|
- Calculate team sizes
|
|
- Compute statistics
|
|
|
|
↓
|
|
|
|
Return JSON:
|
|
{
|
|
"hierarchy": [...],
|
|
"statistics": {...}
|
|
}
|
|
|
|
↓
|
|
|
|
D3.js Renders:
|
|
- Interactive tree chart
|
|
- With zoom, pan, search
|
|
- Multiple layout options
|
|
- Smooth animations
|
|
```
|
|
|
|
## Common Use Cases
|
|
|
|
### 1. View Entire Organization
|
|
|
|
**D3 View:** `/organizations/staff/hierarchy/d3/`
|
|
- Click "Expand All"
|
|
- See complete organization structure
|
|
- Use zoom/pan to navigate
|
|
- Good for understanding full hierarchy
|
|
|
|
### 2. Find Specific Staff Member
|
|
|
|
**D3 View:** `/organizations/staff/hierarchy/d3/`
|
|
- Type name or ID in search box
|
|
- Press Enter
|
|
- Chart auto-navigates to staff
|
|
- Node highlighted in red
|
|
- Instant feedback
|
|
|
|
### 3. Print Hierarchy Report
|
|
|
|
**HTML View:** `/organizations/staff/hierarchy/`
|
|
- Expand desired sections
|
|
- Use browser print (Ctrl/Cmd + P)
|
|
- Static layout prints well
|
|
- Good for reports
|
|
|
|
### 4. Analyze Team Structure
|
|
|
|
**D3 View:** `/organizations/staff/hierarchy/d3/`
|
|
- Set node size to "Team Size"
|
|
- Larger nodes = more direct reports
|
|
- Identify managers with large teams
|
|
- Spot potential bottlenecks
|
|
|
|
### 5. Compare Departments
|
|
|
|
**D3 View:** `/organizations/staff/hierarchy/d3/`
|
|
- Use department filter (if available)
|
|
- Switch between departments
|
|
- Compare hierarchy structures
|
|
- Identify organizational patterns
|
|
|
|
## Troubleshooting
|
|
|
|
### Import Issues
|
|
|
|
**Problem:** "Manager ID not found"
|
|
- **Solution:** Ensure manager IDs exist in Staff ID column
|
|
- **Check:** Import managers before their reports
|
|
|
|
**Problem:** "Department not found"
|
|
- **Solution:** Create departments first, or let import auto-create
|
|
- **Check:** Department name spelling
|
|
|
|
### Hierarchy Issues
|
|
|
|
**Problem:** Wrong relationships
|
|
- **Solution:** Verify `report_to` field in database
|
|
- **Check:** Manager IDs in CSV match Staff IDs
|
|
|
|
**Problem:** Staff missing from hierarchy
|
|
- **Solution:** Check staff status is "active"
|
|
- **Check:** Verify hospital/department permissions
|
|
- **Check:** RBAC settings
|
|
|
|
### D3 View Issues
|
|
|
|
**Problem:** Chart not loading
|
|
- **Solution:** Check browser console for errors
|
|
- **Check:** API endpoint is accessible
|
|
- **Check:** D3.js CDN is reachable
|
|
|
|
**Problem:** Search not working
|
|
- **Solution:** Verify staff exist in hierarchy
|
|
- **Check:** JavaScript console for errors
|
|
- **Try:** Full name instead of partial
|
|
|
|
## Best Practices
|
|
|
|
### Data Quality
|
|
1. ✅ Use consistent Staff IDs
|
|
2. ✅ Complete manager chains
|
|
3. ✅ Standardized department names
|
|
4. ✅ Valid job titles
|
|
|
|
### Hierarchy Structure
|
|
1. ✅ Clear reporting lines
|
|
2. ✅ Avoid circular references
|
|
3. ✅ Reasonable depth (5-10 levels)
|
|
4. ✅ Appropriate span of control (5-15 direct reports)
|
|
|
|
### Visualization
|
|
1. ✅ Use D3 for exploration and analysis
|
|
2. ✅ Use HTML for printing and reports
|
|
3. ✅ Filter large hierarchies
|
|
4. ✅ Choose appropriate layout for your needs
|
|
|
|
## API Reference
|
|
|
|
### Hierarchy API
|
|
|
|
**Endpoint:** `/organizations/api/staff/hierarchy/`
|
|
|
|
**Method:** GET
|
|
|
|
**Parameters:**
|
|
- `hospital` (optional): Filter by hospital ID
|
|
- `department` (optional): Filter by department ID
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"hierarchy": [
|
|
{
|
|
"id": "uuid",
|
|
"name": "Full Name",
|
|
"employee_id": "EMP123",
|
|
"job_title": "Job Title",
|
|
"hospital": "Hospital Name",
|
|
"department": "Department Name",
|
|
"status": "active",
|
|
"staff_type": "type",
|
|
"team_size": 5,
|
|
"children": [...]
|
|
}
|
|
],
|
|
"statistics": {
|
|
"total_staff": 100,
|
|
"top_managers": 3
|
|
}
|
|
}
|
|
```
|
|
|
|
## Future Enhancements
|
|
|
|
### Potential Additions
|
|
|
|
1. **Export Features**
|
|
- Export D3 chart as PNG/SVG
|
|
- Export as PDF
|
|
- Download hierarchy data as JSON
|
|
|
|
2. **Advanced Filtering**
|
|
- Filter by staff type
|
|
- Filter by status
|
|
- Multi-criteria filters
|
|
|
|
3. **Additional Visualizations**
|
|
- Sunburst chart
|
|
- Treemap
|
|
- Force-directed graph
|
|
|
|
4. **Analytics Dashboard**
|
|
- Hierarchy depth analysis
|
|
- Span of control metrics
|
|
- Bottleneck identification
|
|
- Organizational health metrics
|
|
|
|
5. **Collaboration Features**
|
|
- Shareable hierarchy links
|
|
- Embed in reports
|
|
- Compare hierarchies over time
|
|
|
|
## Support and Resources
|
|
|
|
### Documentation
|
|
- **Import Guide:** `docs/STAFF_HIERARCHY_IMPORT_GUIDE.md`
|
|
- **D3 Integration:** `docs/D3_HIERARCHY_INTEGRATION.md`
|
|
- **HTML View:** `docs/STAFF_HIERARCHY_VIEW.md`
|
|
|
|
### Code Files
|
|
- **Import Command:** `apps/organizations/management/commands/import_staff_csv.py`
|
|
- **API:** `apps/organizations/views.py` - `StaffViewSet.hierarchy()`
|
|
- **Views:** `apps/organizations/ui_views.py`
|
|
- **Templates:** `templates/organizations/staff_hierarchy*.html`
|
|
|
|
### External Resources
|
|
- **D3.js:** https://d3js.org/
|
|
- **D3 Tree:** https://github.com/d3/d3-hierarchy/tree
|
|
|
|
## Summary
|
|
|
|
The PX360 system now provides a complete solution for:
|
|
|
|
✅ **Importing** staff data with hierarchy from CSV
|
|
✅ **Storing** hierarchical relationships using `report_to` field
|
|
✅ **Visualizing** hierarchies in two powerful ways:
|
|
- HTML-based (static, print-friendly)
|
|
- D3.js-based (interactive, feature-rich)
|
|
|
|
**Choose the right visualization for your needs:**
|
|
- **HTML View:** For reports, printing, simple viewing
|
|
- **D3 View:** For exploration, analysis, interactive use
|
|
|
|
**Access your hierarchy visualizations:**
|
|
- HTML: `/organizations/staff/hierarchy/`
|
|
- D3: `/organizations/staff/hierarchy/d3/`
|
|
|
|
**Import your data:**
|
|
```bash
|
|
python manage.py import_staff_csv your_staff_data.csv
|
|
```
|
|
|
|
The system is ready to handle your staff hierarchy data with powerful visualization capabilities!
|