bottleneckcrm/backend/seed.md
Ashwin Kumar c2b29afdf8
1.0 (#567)
1.0
2025-12-06 23:10:54 +05:30

4 KiB

Seed Data Script

Management command to generate realistic test data for development and testing.

Quick Start

cd backend
source venv/bin/activate

# Basic usage (creates 1 org with default counts)
python manage.py seed_data --email admin@example.com

Full Options

python manage.py seed_data \
    --email admin@example.com \     # Required: Admin user email
    --orgs 2 \                      # Number of orgs (default: 1)
    --users-per-org 5 \             # Users per org (default: 3)
    --leads 50 \                    # Leads per org (default: 20)
    --accounts 20 \                 # Accounts per org (default: 10)
    --contacts 30 \                 # Contacts per org (default: 15)
    --opportunities 15 \            # Opportunities per org (default: 10)
    --cases 10 \                    # Cases per org (default: 5)
    --tasks 25 \                    # Tasks per org (default: 10)
    --teams 3 \                     # Teams per org (default: 2)
    --tags 10 \                     # Tags per org (default: 5)
    --seed 42 \                     # Random seed for reproducibility
    --password mypassword \         # Password for new users (default: testpass123)
    --clear \                       # Clear existing CRM data before seeding
    --no-input                      # Skip confirmation prompts

Examples

# Create 2 organizations with lots of data
python manage.py seed_data --email admin@example.com --orgs 2 --leads 100 --accounts 50

# Reproducible seeding (same data every time)
python manage.py seed_data --email admin@example.com --seed 42

# Clear all CRM data and reseed
python manage.py seed_data --email admin@example.com --clear --no-input

# Minimal data for quick testing
python manage.py seed_data --email admin@example.com --leads 5 --accounts 3 --contacts 5 --opportunities 3 --cases 2 --tasks 5

Features

  • Realistic data - Uses Faker library for names, companies, emails, addresses, etc.
  • Weighted status distributions - Simulates realistic data:
    • Leads: 40% assigned, 30% in process, 15% converted, 10% recycled, 5% closed
    • Opportunities: 20% each open stage, 10% closed won, 10% closed lost
    • Cases: 40% new, 25% assigned, 20% pending, 10% closed, 5% rejected
    • Tasks: 30% new, 40% in progress, 30% completed
  • Proper relationships:
    • Accounts linked to contacts
    • Opportunities linked to accounts
    • Cases linked to accounts
    • Tasks linked to ONE parent (account/opportunity/case/lead)
    • Leads optionally linked to contacts
  • M2M assignments - Each entity gets:
    • 1-2 assigned profiles
    • 0-1 team (70% chance)
    • 0-3 tags (60% chance)
  • Multi-tenancy - Admin user gets profile in ALL created orgs
  • Reproducible - Use --seed for deterministic data generation

Clear Data Behavior

When using --clear:

  • Deletes: Tasks, Cases, Opportunities, Leads, Accounts, Contacts, Teams, Tags
  • Preserves: Users, Profiles, Organizations

This allows you to reseed CRM data without losing user accounts.

Sample Output

$ python manage.py seed_data --email admin@test.com --orgs 2 --seed 42

Seeding CRM database...
Using seed: 42

--- Organization 1/2 ---
  Created org: Acme Corporation (USD, US)
  Created 4 profiles (1 admin, 3 users)
  Created 2 teams
  Created 5 tags
  Created 15 contacts
  Created 10 accounts
  Created 20 leads
  Created 10 opportunities
  Created 5 cases
  Created 10 tasks

--- Organization 2/2 ---
  Created org: Global Tech Inc (EUR, DE)
  Created 4 profiles (1 admin, 3 users)
  Created 2 teams
  Created 5 tags
  Created 15 contacts
  Created 10 accounts
  Created 20 leads
  Created 10 opportunities
  Created 5 cases
  Created 10 tasks

Seeding complete!

Summary:
  Organizations: 2
  Users: 7
  Profiles: 8
  Teams: 4
  Tags: 10
  Contacts: 30
  Accounts: 20
  Leads: 40
  Opportunities: 20
  Cases: 10
  Tasks: 20

Total time: 1.22 seconds

Dependencies

The script requires the faker package (already in requirements.txt):

pip install faker