102 lines
3.8 KiB
Python
102 lines
3.8 KiB
Python
import random
|
|
from faker import Faker
|
|
from django.core.management.base import BaseCommand
|
|
from django.contrib.auth import get_user_model
|
|
from core.models import Customer, Lead, Opportunity, ContactHistory, Tenant
|
|
|
|
User = get_user_model()
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Seeds the database with sample customers, leads, opportunities, and contact histories.'
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write("Starting database seeding...")
|
|
|
|
faker = Faker()
|
|
|
|
# Clean up existing data
|
|
Tenant.objects.all().delete()
|
|
User.objects.filter(is_superuser=False).delete()
|
|
Customer.objects.all().delete()
|
|
Lead.objects.all().delete()
|
|
Opportunity.objects.all().delete()
|
|
ContactHistory.objects.all().delete()
|
|
|
|
self.stdout.write("Cleared existing data.")
|
|
|
|
# Create sample tenants
|
|
tenants = []
|
|
for _ in range(3):
|
|
tenant = Tenant.objects.create(name=faker.company())
|
|
tenants.append(tenant)
|
|
self.stdout.write(f"Created {len(tenants)} sample tenants.")
|
|
|
|
# Create sample users
|
|
users = []
|
|
for _ in range(5):
|
|
email = faker.email()
|
|
# Avoid creating a user that might already exist
|
|
if not User.objects.filter(email=email).exists():
|
|
user = User.objects.create_user(email=email, password='password123')
|
|
users.append(user)
|
|
|
|
if not users:
|
|
# If all generated users already existed, create one with a predictable email
|
|
user = User.objects.create_user(email='testuser@example.com', password='password123')
|
|
users.append(user)
|
|
|
|
|
|
self.stdout.write(f"Created {len(users)} sample users.")
|
|
|
|
# Create sample customers
|
|
customers = []
|
|
for _ in range(150):
|
|
customer = Customer.objects.create(
|
|
name=faker.company(),
|
|
email=faker.unique.email(),
|
|
phone=faker.phone_number(),
|
|
status=random.choice(['Active', 'Inactive', 'Prospective']),
|
|
tenant=random.choice(tenants),
|
|
created_by=random.choice(users),
|
|
updated_by=random.choice(users),
|
|
)
|
|
customers.append(customer)
|
|
|
|
self.stdout.write(f"Created {len(customers)} sample customers.")
|
|
|
|
# Create related objects
|
|
for customer in customers:
|
|
# Create contact history
|
|
for _ in range(random.randint(0, 5)):
|
|
ContactHistory.objects.create(
|
|
customer=customer,
|
|
user=random.choice(users),
|
|
note=faker.sentence(),
|
|
interaction_type=random.choice(['Call', 'Email', 'Meeting']),
|
|
)
|
|
|
|
# Create leads
|
|
leads = []
|
|
for _ in range(random.randint(0, 3)):
|
|
lead = Lead.objects.create(
|
|
customer=customer,
|
|
source=random.choice(['Web', 'Referral', 'Partner']),
|
|
status=random.choice(['New', 'Contacted', 'Qualified']),
|
|
assigned_to=random.choice(users),
|
|
)
|
|
leads.append(lead)
|
|
|
|
# Create opportunities
|
|
if leads:
|
|
for _ in range(random.randint(0, 2)):
|
|
Opportunity.objects.create(
|
|
lead=random.choice(leads),
|
|
value=faker.pydecimal(left_digits=5, right_digits=2, positive=True),
|
|
stage=random.choice(['Prospecting', 'Proposal', 'Negotiation', 'Closed Won', 'Closed Lost']),
|
|
probability=random.uniform(0.1, 0.9),
|
|
close_date=faker.future_date(),
|
|
)
|
|
|
|
|
|
self.stdout.write("Seeding complete.")
|