35955-vm/core/management/commands/seed_customers.py
Flatlogic Bot 7be9310a96 v1.1
2025-11-23 01:09:28 +00:00

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.")