119 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# <your_app>/management/commands/seed_dealership.py
import json, random, string, decimal
from django.core.management.base import BaseCommand
from django.test import Client
from django.contrib.auth import get_user_model
from plans.models import Order, PlanPricing, AbstractOrder, UserPlan, BillingInfo,Plan
from inventory.tasks import create_user_dealer
from inventory import models # adjust import to your app
from django_q.tasks import async_task
User = get_user_model()
class Command(BaseCommand):
help = "Seed a full dealership via the real signup & downstream views"
def add_arguments(self, parser):
parser.add_argument('--count', type=int, default=1, help='Number of dealers to seed')
def handle(self, *args, **opts):
count = opts['count']
client = Client() # lives inside management command
for n in range(5, 7):
self.stdout.write(f"🚗 Seeding dealer #{n}")
self._create_dealer(client, n)
# self._create_cars(client, n)
# self._create_customers_and_sales(client, n)
self.stdout.write(self.style.SUCCESS(f"✅ Dealer #{n} ready"))
# ----------------------------------------------------------
# 1. Sign-up via the real view
# ----------------------------------------------------------
def _create_dealer(self, client, n):
payload = {
"email": f"dealer{n}@example.com",
"password": "Password123",
"confirm_password": "Password123",
"name": f"Dealer #{n}",
"arabic_name": f"تاجر {n}",
"phone_number": "+96651234567",
"crn": f"CRN{n}000",
"vrn": f"VRN{n}000",
"address": f"Street {n}, Riyadh",
}
dealer = create_user_dealer(payload['email'], payload['password'], payload['name'], payload['arabic_name'], payload['phone_number'], payload['crn'], payload['vrn'], payload['address'])
user = dealer.user
self._assign_random_plan(user)
self._services(dealer)
# resp = client.post(
# "/en/signup/", # adjust URL if necessary
# data=json.dumps(payload),
# content_type="application/json",
# )
# if resp.status_code != 200:
# raise Exception(f"Signup failed: {resp.content}")
# # Log in
client.login(email=payload["email"], password=payload["password"])
return payload["email"]
def _assign_random_plan(self,user):
"""
Pick a random Plan and create + initialize a UserPlan for the user.
"""
plans = Plan.objects.all()
if not plans.exists():
raise ValueError("No plans found please create at least one Plan record.")
plan = random.choice(plans)
user_plan, created = UserPlan.objects.get_or_create(
user=user,
defaults={'plan': plan, 'active': True}
)
if created:
user_plan.initialize()
return user_plan
def _services(self,dealer):
additional_services = [
{
"name": "Vehicle registration transfer assistance",
"arabic_name": "مساعدة في نقل ملكية السيارة",
"price": decimal.Decimal(random.randrange(100, 1000)),
"description": "This is service 1",
},
{
"name": "Paperwork collection",
"arabic_name": "جمع الأوراق",
"price": decimal.Decimal(random.randrange(100, 1000)),
"description": "This is service 2",
},
{
"name": "Inspection and test drives",
"arabic_name": "فحص وقيادة تجريبية",
"price": decimal.Decimal(random.randrange(100, 1000)),
"description": "This is service 3",
},
{
"name": "Shipping and transportation",
"arabic_name": "شحن ونقل",
"price": decimal.Decimal(random.randrange(100, 1000)),
"description": "This is service 4",
},
]
for additional_service in additional_services:
models.AdditionalServices.objects.create(
name=additional_service["name"],
arabic_name=additional_service["arabic_name"],
price=additional_service["price"],
description=additional_service["description"],
dealer=dealer,
uom="Unit"
)