HH/docs/STAFF_SEED_COMMAND_UPDATE.md
2026-01-12 12:19:19 +03:00

392 lines
11 KiB
Markdown

# Staff Seed Command Update Documentation
## Overview
The `seed_staff` management command has been updated to integrate with the new Staff user account management system. It now uses the `StaffService` for consistent user account creation and adds new features for email delivery.
## What Changed
### 1. Integration with StaffService
The command now uses the `StaffService` class for all user account operations:
- `StaffService.generate_username()` - For username generation
- `StaffService.generate_password()` - For secure password generation
- `StaffService.create_user_for_staff()` - For user account creation
- `StaffService.get_staff_type_role()` - For proper role assignment
- `StaffService.send_credentials_email()` - For credential email delivery
### 2. Staff Email Field
The command now sets the `email` field on the Staff model:
- Format: `{firstname}.{lastname}@{hospital_code}.sa`
- Example: `mohammed.alsalem@almadina.sa`
- Handles duplicates by using username as fallback
### 3. New `--send-emails` Flag
Added a new command-line flag to send credential emails:
```bash
python manage.py seed_staff --create-users --send-emails
```
When enabled:
- Generates secure random passwords
- Sends credential emails to staff members
- Reports success/failure for each email
### 4. Enhanced Error Handling
The command now includes comprehensive error handling:
- Catches and reports user creation errors
- Catches and reports email sending errors
- Continues processing even if individual operations fail
- Provides clear error messages for debugging
### 5. Role Assignment
User accounts are now created with proper roles:
- All staff types receive the `staff` role
- Role is set using `StaffService.get_staff_type_role()`
- Consistent with the rest of the system
## Usage
### Basic Usage (Staff Profiles Only)
Create staff profiles without user accounts:
```bash
python manage.py seed_staff
```
### Create Staff with User Accounts
Create staff profiles and user accounts:
```bash
python manage.py seed_staff --create-users
```
### Create Staff with User Accounts and Email Delivery
Create staff, user accounts, and send credential emails:
```bash
python manage.py seed_staff --create-users --send-emails
```
### Target Specific Hospital
Create staff for a specific hospital:
```bash
python manage.py seed_staff --hospital-code ALMADINA --create-users
```
### Custom Counts
Specify the number of each staff type:
```bash
python manage.py seed_staff \
--physicians 5 \
--nurses 10 \
--admin-staff 3 \
--create-users
```
### Dry Run
Preview what would be created without making changes:
```bash
python manage.py seed_staff --dry-run --create-users
```
### Clear Existing Staff First
Delete all existing staff before creating new ones:
```bash
python manage.py seed_staff --clear --create-users
```
## Command-Line Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `--hospital-code` | string | all | Target hospital code |
| `--count` | integer | 10 | Number of staff per type |
| `--physicians` | integer | 10 | Number of physicians |
| `--nurses` | integer | 15 | Number of nurses |
| `--admin-staff` | integer | 5 | Number of admin staff |
| `--create-users` | flag | False | Create user accounts for staff |
| `--send-emails` | flag | False | Send credential emails |
| `--clear` | flag | False | Clear existing staff first |
| `--dry-run` | flag | False | Preview without making changes |
## Output Examples
### Without User Accounts
```
============================================================
Staff Data Seeding Command
============================================================
Found 3 hospital(s) to seed staff
Configuration:
Physicians per hospital: 10
Nurses per hospital: 15
Admin staff per hospital: 5
Total staff per hospital: 30
Create user accounts: False
Send credential emails: False
Clear existing: False
Dry run: False
Seeding Physician...
Seeding Nurse...
Seeding Administrative...
============================================================
Summary:
Physicians created: 30
Nurses created: 45
Admin staff created: 15
Total staff created: 90
============================================================
Staff seeding completed successfully!
```
### With User Accounts and Emails
```
============================================================
Staff Data Seeding Command
============================================================
Found 3 hospital(s) to seed staff
Configuration:
Physicians per hospital: 10
Nurses per hospital: 15
Admin staff per hospital: 5
Total staff per hospital: 30
Create user accounts: True
Send credential emails: True
Clear existing: False
Dry run: False
Seeding Physician...
✓ Created user: mohammed.alotaibi (role: staff)
✓ Sent credential email to: mohammed.alotaibi@almadina.sa
✓ Created user: ahmed.aldosari (role: staff)
✓ Sent credential email to: ahmed.aldosari@almadina.sa
...
✓ Created 30 Physician
Seeding Nurse...
✓ Created user: fatimah.alharbi (role: staff)
✓ Sent credential email to: fatimah.alharbi@almadina.sa
...
✓ Created 45 Nurse
Seeding Administrative...
✓ Created user: abdulrahman.almutairi (role: staff)
✓ Sent credential email to: abdulrahman.almutairi@almadina.sa
...
✓ Created 15 Administrative
============================================================
Summary:
Physicians created: 30
Nurses created: 45
Admin staff created: 15
Total staff created: 90
============================================================
Staff seeding completed successfully!
```
### With Errors
```
Seeding Physician...
✓ Created user: mohammed.alotaibi (role: staff)
✓ Sent credential email to: mohammed.alotaibi@almadina.sa
⚠ Failed to send email: SMTP server not configured
✗ Failed to create user for Ahmed Aldosari: Email already exists
✓ Created 29 Physician
```
## Email Requirements
For `--send-emails` to work, the following Django email settings must be configured in `config/settings/base.py`:
```python
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'your-smtp-server.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-email@domain.com'
EMAIL_HOST_PASSWORD = 'your-password'
DEFAULT_FROM_EMAIL = 'noreply@px360.local'
```
Optional setting for login URL in emails:
```python
SITE_URL = 'https://px360.yourdomain.com'
```
If `SITE_URL` is not configured, it defaults to `http://localhost:8000`.
## Data Generation
### Staff Names
- Bilingual (English and Arabic)
- Paired to ensure correspondence between languages
- Gender-appropriate for staff types:
- Nurses: 70% female, 30% male
- Physicians: 60% male, 40% female
- Admin staff: 60% male, 40% female
### Employee IDs
Format: `{TYPE}-{HOSPITAL_CODE}-{RANDOM_NUMBER}`
Examples:
- Physicians: `DR-ALMADINA-12345`
- Nurses: `RN-ALMADINA-23456`
- Admin: `ADM-ALMADINA-34567`
### Usernames
Format: `{firstname}.{lastname}` (lowercase)
Examples:
- `mohammed.alotaibi`
- `fatimah.alharbi`
- `ahmed.aldosari`
Duplicate handling: Appends number if username exists:
- `mohammed.alotaibi2`
- `mohammed.alotaibi3`
### Email Addresses
Format: `{username}@{hospital_code}.sa`
Examples:
- `mohammed.alotaibi@almadina.sa`
- `fatimah.alharbi@riyadh.sa`
### Passwords
- Length: 12 characters
- Characters: Letters, numbers, and special characters
- Generated using `secrets` module for cryptographic security
- Included in credential email
## Testing
### Test Dry Run
```bash
python manage.py seed_staff --dry-run --physicians 1 --nurses 1
```
### Test User Account Creation (No Email)
```bash
python manage.py seed_staff --physicians 1 --nurses 1 --create-users
```
### Test Full Workflow
```bash
python manage.py seed_staff \
--hospital-code ALMADINA \
--physicians 2 \
--nurses 3 \
--admin-staff 1 \
--create-users \
--send-emails
```
### Test Error Handling
The command handles various error scenarios:
- Duplicate usernames
- Email conflicts
- SMTP server not configured
- Missing hospitals or departments
## Best Practices
1. **Use Dry Run First**
Always test with `--dry-run` before running the actual command to preview what will be created.
2. **Start Small**
Begin with small numbers (e.g., `--physicians 1 --nurses 1`) to verify everything works.
3. **Test Email Configuration**
Test email delivery with a single staff member before sending to many:
```bash
python manage.py seed_staff --physicians 1 --create-users --send-emails
```
4. **Backup Data**
Use `--clear` with caution as it deletes all existing staff:
```bash
python manage.py seed_staff --clear --create-users
```
5. **Monitor Logs**
Check the output for:
- ✅ Successful user creations
- ⚠ Email sending warnings
- ✗ Error messages
## Troubleshooting
### Issue: "SMTP server not configured"
**Solution**: Configure email settings in `config/settings/base.py`
### Issue: "Email already exists"
**Solution**: The command automatically handles this by using username as email fallback
### Issue: "Username already exists"
**Solution**: The command automatically appends a number to make the username unique
### Issue: "No hospitals found"
**Solution**: Create hospitals first using the hospital seed command or manually
### Issue: "No departments found"
**Solution**: This is a warning. Staff will be created without departments. Create departments if needed.
## Migration Notes
If you're upgrading from an older version:
1. **Email Field Migration**
The Staff model already has the `email` field, so no migration is needed.
2. **User Account Creation**
Existing staff without user accounts can have accounts created via:
- UI: Staff Detail page → "Create User Account" button
- API: `POST /api/organizations/staff/{id}/create_user_account/`
- Admin: Select staff → "Create user accounts" action
3. **Backward Compatibility**
The command is fully backward compatible. Running without flags creates staff profiles only.
## Related Documentation
- [Staff User Account Implementation](STAFF_USER_ACCOUNT_IMPLEMENTATION.md)
- [Organization Model](ORGANIZATION_MODEL.md)
- [API Endpoints](API_ENDPOINTS.md)
## Future Enhancements
Potential improvements for future versions:
1. **CSV Import**
- Import staff from CSV files
- Support bulk upload with user account creation
2. **Department Assignment**
- Better department matching logic
- Auto-assign based on specialization
3. **Email Templates**
- Customizable email templates per hospital
- Multi-language email support
4. **Progress Tracking**
- Real-time progress updates for large batches
- Percentage complete indicator
5. **Audit Logging**
- Log all seed command executions
- Track who ran the command and when
## Support
For issues or questions:
1. Check the troubleshooting section above
2. Review the Staff User Account Implementation documentation
3. Check Django logs for detailed error messages
4. Ensure all dependencies are installed and configured correctly