# /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(6, 9): 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" )