321 lines
7.8 KiB
Markdown
321 lines
7.8 KiB
Markdown
# Staff Contact Information Population Guide
|
|
|
|
## Overview
|
|
|
|
This guide explains how to populate existing staff records with random email addresses and phone numbers using the `populate_staff_contact` management command.
|
|
|
|
## Command Overview
|
|
|
|
The `populate_staff_contact` command fills in missing contact information for staff records that don't have email addresses or phone numbers.
|
|
|
|
## Usage
|
|
|
|
### Basic Syntax
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact [options]
|
|
```
|
|
|
|
## Command Options
|
|
|
|
| Option | Description | Default |
|
|
|--------|-------------|---------|
|
|
| `--hospital-code` | Target specific hospital code | All hospitals |
|
|
| `--email-only` | Only populate email addresses | Both email and phone |
|
|
| `--phone-only` | Only populate phone numbers | Both email and phone |
|
|
| `--overwrite` | Overwrite existing email/phone | Fill missing only |
|
|
| `--dry-run` | Preview changes without updating database | False |
|
|
|
|
## Examples
|
|
|
|
### 1. Preview Changes (Dry Run)
|
|
|
|
See what will be updated without making changes:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact --dry-run
|
|
```
|
|
|
|
Output:
|
|
```
|
|
============================================================
|
|
Staff Contact Information Populator
|
|
============================================================
|
|
|
|
Target: All hospitals
|
|
Found 15 staff to update
|
|
Email only: False
|
|
Phone only: False
|
|
Overwrite existing: False
|
|
Dry run: True
|
|
|
|
Would update: ABDULAZIZ SALEH ALHAMMADI
|
|
- email: None → abdulaziz.alhammadi@alhammadi.sa
|
|
- phone: None → +966 54 123 456
|
|
Would update: VARGHESE NINAN
|
|
- email: None → varghese.ninan@alhammadi.sa
|
|
- phone: None → +966 57 789 012
|
|
...
|
|
|
|
============================================================
|
|
Summary:
|
|
Total staff processed: 15
|
|
Emails populated: 15
|
|
Phone numbers populated: 15
|
|
Skipped: 0
|
|
============================================================
|
|
|
|
DRY RUN: No changes were made
|
|
```
|
|
|
|
### 2. Populate All Missing Contact Info
|
|
|
|
Fill in missing emails and phone numbers for all staff:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact
|
|
```
|
|
|
|
### 3. Populate for Specific Hospital
|
|
|
|
Only update staff at a specific hospital:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact --hospital-code ALHAMMADI
|
|
```
|
|
|
|
### 4. Only Populate Emails
|
|
|
|
Add email addresses without touching phone numbers:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact --email-only
|
|
```
|
|
|
|
### 5. Only Populate Phone Numbers
|
|
|
|
Add phone numbers without touching emails:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact --phone-only
|
|
```
|
|
|
|
### 6. Overwrite Existing Contact Info
|
|
|
|
Replace existing email and phone numbers with new random values:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact --overwrite
|
|
```
|
|
|
|
## Generated Data Formats
|
|
|
|
### Email Addresses
|
|
|
|
**Format:** `{firstname}.{lastname}@{hospital}.sa`
|
|
|
|
**Examples:**
|
|
- `mohammed.alotaibi@alhammadi.sa`
|
|
- `fatimah.aldosari@alhammadi.sa`
|
|
- `varghese.ninan12@alhammadi.sa` (with random suffix for duplicates)
|
|
|
|
**Domain:** Uses the hospital code (lowercased) as the domain
|
|
|
|
**Uniqueness:** Adds random number suffix (1-999) if email already exists
|
|
|
|
### Phone Numbers
|
|
|
|
**Format:** `+966 5X XXX XXXX` (Saudi mobile format)
|
|
|
|
**Examples:**
|
|
- `+966 50 123 456`
|
|
- `+966 57 789 012`
|
|
- `+966 55 345 678`
|
|
|
|
**Structure:**
|
|
- Country code: +966 (Saudi Arabia)
|
|
- Mobile prefix: 5X (X = random digit 0-9)
|
|
- Number groups: XXX XXX (random 3-digit groups)
|
|
|
|
## How It Works
|
|
|
|
### 1. Query Staff
|
|
|
|
The command queries staff records based on options:
|
|
|
|
- **Without `--overwrite`**: Only finds staff with missing email/phone
|
|
- **With `--overwrite`**: Finds all staff in target scope
|
|
- **With `--hospital-code`**: Filters by specific hospital
|
|
|
|
### 2. Generate Contact Info
|
|
|
|
For each staff member:
|
|
|
|
1. **Email Generation:**
|
|
- Uses `staff.name` if available (original CSV name)
|
|
- Falls back to `first_name` + `last_name`
|
|
- Generates email in format: `{firstname}.{lastname}@{hospital}.sa`
|
|
- Checks for duplicates and adds random suffix if needed
|
|
- Skips staff without name fields
|
|
|
|
2. **Phone Generation:**
|
|
- Generates random Saudi mobile number
|
|
- Format: `+966 5X XXX XXXX`
|
|
- No uniqueness check (phone numbers can be duplicated)
|
|
|
|
### 3. Update Records
|
|
|
|
- Uses database transaction for data integrity
|
|
- Shows progress for each updated staff
|
|
- Displays summary statistics at the end
|
|
|
|
## Best Practices
|
|
|
|
### 1. Always Use Dry Run First
|
|
|
|
Preview changes before applying:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact --dry-run
|
|
```
|
|
|
|
### 2. Back Up Before Overwriting
|
|
|
|
If using `--overwrite`, backup first:
|
|
|
|
```bash
|
|
python manage.py dumpdata organizations.Staff > staff_backup.json
|
|
```
|
|
|
|
### 3. Update in Stages
|
|
|
|
For large datasets, consider updating in stages:
|
|
|
|
```bash
|
|
# Stage 1: Emails only
|
|
python manage.py populate_staff_contact --email-only
|
|
|
|
# Stage 2: Phone numbers only
|
|
python manage.py populate_staff_contact --phone-only
|
|
```
|
|
|
|
### 4. Target Specific Hospitals
|
|
|
|
For multi-tenant systems, update one hospital at a time:
|
|
|
|
```bash
|
|
python manage.py populate_staff_contact --hospital-code HOSPITAL1 --dry-run
|
|
python manage.py populate_staff_contact --hospital-code HOSPITAL1
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Issue: "All staff already have contact information"
|
|
|
|
**Problem:** No staff have missing email/phone fields.
|
|
|
|
**Solution:**
|
|
- Use `--overwrite` to replace existing values
|
|
- Or use `--email-only` or `--phone-only` for specific fields
|
|
|
|
### Issue: "Skipping staff: Missing first/last name"
|
|
|
|
**Problem:** Staff record doesn't have first_name and last_name fields populated.
|
|
|
|
**Solution:**
|
|
- Ensure staff have names before running
|
|
- Or populate names manually first
|
|
- Check if `staff.name` field has data (used as fallback)
|
|
|
|
### Issue: Duplicate Emails
|
|
|
|
**Problem:** Email generation not adding suffix for duplicates.
|
|
|
|
**Solution:**
|
|
- The command automatically handles duplicates
|
|
- Adds random number (1-999) if email exists
|
|
- If you see duplicates, staff may have been added after generation
|
|
|
|
### Issue: Wrong Hospital Domain
|
|
|
|
**Problem:** Emails using wrong hospital code in domain.
|
|
|
|
**Solution:**
|
|
- Verify hospital code in staff.hospital field
|
|
- Use `--hospital-code` to target specific hospital
|
|
- Or manually update hospital assignments first
|
|
|
|
## Output Interpretation
|
|
|
|
### Success Indicators
|
|
|
|
```
|
|
✓ Updated: ABDULAZIZ SALEH ALHAMMADI
|
|
Email: abdulaziz.alhammadi@alhammadi.sa
|
|
Phone: +966 54 123 456
|
|
```
|
|
|
|
### Warning Indicators
|
|
|
|
```
|
|
⚠ Skipping staff 123: Missing first/last name
|
|
```
|
|
|
|
This means the staff record doesn't have name fields required for email generation.
|
|
|
|
### Summary Statistics
|
|
|
|
```
|
|
Summary:
|
|
Total staff processed: 15
|
|
Emails populated: 15
|
|
Phone numbers populated: 15
|
|
Skipped: 0
|
|
```
|
|
|
|
- **Total staff processed:** Number of staff matching query
|
|
- **Emails populated:** Count of emails generated
|
|
- **Phone numbers populated:** Count of phone numbers generated
|
|
- **Skipped:** Staff that couldn't be updated (missing names, etc.)
|
|
|
|
## Integration with Other Commands
|
|
|
|
### After CSV Import
|
|
|
|
Import staff from CSV, then populate contact info:
|
|
|
|
```bash
|
|
# Import staff from CSV
|
|
python manage.py import_staff_csv staff_data.csv --hospital-code ALHAMMADI
|
|
|
|
# Populate contact info for imported staff
|
|
python manage.py populate_staff_contact --hospital-code ALHAMMADI
|
|
```
|
|
|
|
### Before User Account Creation
|
|
|
|
Ensure staff have emails before creating user accounts:
|
|
|
|
```bash
|
|
# Populate emails first
|
|
python manage.py populate_staff_contact --email-only
|
|
|
|
# Then create user accounts
|
|
python manage.py create_staff_users --hospital-code ALHAMMADI
|
|
```
|
|
|
|
## Related Documentation
|
|
|
|
- [Staff Hierarchy Integration](STAFF_HIERARCHY_INTEGRATION.md)
|
|
- [Staff Seeding](STAFF_SEED_COMMAND_UPDATE.md)
|
|
- [User Account Creation](STAFF_USER_ACCOUNT_FEATURE_COMPLETE.md)
|
|
- [CSV Import Guide](STAFF_CSV_IMPORT_GUIDE.md)
|
|
|
|
## Support
|
|
|
|
For issues or questions:
|
|
1. Use `--dry-run` to preview changes
|
|
2. Check staff records have required name fields
|
|
3. Verify hospital codes are correct
|
|
4. Review Django logs for detailed errors
|