392 lines
11 KiB
Markdown
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
|