248 lines
11 KiB
Python
248 lines
11 KiB
Python
import datetime
|
|
from time import sleep
|
|
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.services import decodevin
|
|
from inventory.tasks import create_user_dealer
|
|
from inventory.models import AdditionalServices, Car, CarColors, CarFinance, CarMake, CustomGroup, Customer, Dealer, ExteriorColors, InteriorColors, Lead, UnitOfMeasure,Vendor,Staff
|
|
from django_ledger.models import PurchaseOrderModel,ItemTransactionModel,ItemModel,EntityModel
|
|
from django_q.tasks import async_task
|
|
from faker import Faker
|
|
from appointment.models import Appointment, AppointmentRequest, Service, StaffMember
|
|
|
|
User = get_user_model()
|
|
fake = Faker()
|
|
|
|
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):
|
|
dealers = Dealer.objects.all()
|
|
|
|
for dealer in dealers:
|
|
# self._create_random_po(dealer)
|
|
# self._create_random_vendors(dealer)
|
|
# self._create_random_staff(dealer)
|
|
# self._create_random_cars(dealer)
|
|
# self._create_random_customers(dealer)
|
|
# self._create_randome_services(dealer)
|
|
self._create_random_lead(dealer)
|
|
|
|
|
|
# dealer = Dealer.objects.get(name="Dealer #6")
|
|
# coa_model = dealer.entity.get_default_coa()
|
|
# inventory_account = dealer.entity.get_all_accounts().get(name="Inventory (Cars)")
|
|
# uom = dealer.entity.get_uom_all().get(name="Unit")
|
|
# item = dealer.entity.create_item_inventory(coa_model=coa_model,inventory_account=inventory_account,uom_model=uom,item_type=ItemModel.ITEM_TYPE_MATERIAL, name=f"Test item {random.randint(1,9999)}")
|
|
# item = ItemTransactionModel.objects.create(item_name=f"Test item {random.randint(1,9999)}", entity=dealer.entity)
|
|
# po = PurchaseOrderModel.objects.first()
|
|
|
|
self.stdout.write(self.style.SUCCESS(f"✅ PO created for {dealers}"))
|
|
|
|
def _create_random_po(self, dealer):
|
|
for i in range(random.randint(1,70)):
|
|
try:
|
|
e: EntityModel = dealer.entity
|
|
e.create_purchase_order(po_title=f"Test PO {random.randint(1,9999)}-{i}")
|
|
except Exception as e:
|
|
pass
|
|
|
|
def _create_random_vendors(self, dealer):
|
|
for i in range(random.randint(1,50)):
|
|
try:
|
|
name = fake.name()
|
|
n = random.randint(1,9999)
|
|
phone = f"05678{random.randint(0,9)}{random.randint(0,9)}{random.randint(0,9)}{random.randint(0,9)}{random.randint(0,9)}"
|
|
Vendor.objects.create(dealer=dealer, name=f"{name}{n}", arabic_name=f"{name}{n}", email=f"{name}{n}@tenhal.sa", phone_number=phone,crn=f"CRN {n}", vrn=f"VRN {n}", address=f"Address {fake.address()}",contact_person=f"Contact Person {name}{n}")
|
|
except Exception as e:
|
|
pass
|
|
|
|
def _create_random_staff(self, dealer):
|
|
for i in range(5):
|
|
name = f"{fake.name()}{i}"
|
|
email = fake.email()
|
|
password = "Tenhal@123"
|
|
user = User.objects.create_user(username=email, email=email, password=password)
|
|
user.is_staff = True
|
|
user.save()
|
|
|
|
staff_member = StaffMember.objects.create(user=user)
|
|
services = Service.objects.all()
|
|
for service in services:
|
|
staff_member.services_offered.add(service)
|
|
|
|
staff = Staff.objects.create(dealer=dealer,staff_member=staff_member,name=name,arabic_name=name,phone_number=fake.phone_number(),active=True)
|
|
|
|
groups = CustomGroup.objects.filter(dealer=dealer)
|
|
random_group = random.choice(list(groups))
|
|
staff.add_group(random_group.group)
|
|
# for i in range(random.randint(1,15)):
|
|
# n = random.randint(1,9999)
|
|
# phone = f"05678{random.randint(1,9999)}{random.randint(1,9999)}{random.randint(1,9999)}{random.randint(1,9999)}{random.randint(1,9999)}"
|
|
# Vendor.objects.create(dealer=dealer, name=f"{fake.name}", arabic_name=f"{fake.first_name_female()} {fake.last_name_female()}", email=f"vendor{n}@test.com", phone_number=phone,crn=f"CRN {n}", vrn=f"VRN {n}", address=f"Address {fake.address()}",contact_person=f"Contact Person {n}")
|
|
|
|
def _create_random_cars(self,dealer):
|
|
vendors = Vendor.objects.filter(dealer=dealer).all()
|
|
|
|
vin_list = [
|
|
"1B3ES56C13D120225",
|
|
"1GB4KYC86FF131536",
|
|
"1HSHXAHR15J136217",
|
|
"1G1ZT52845F231124",
|
|
"1J4GK48K43W721617",
|
|
"JTDBE32K430163717",
|
|
"1J4FA69S05P331572",
|
|
"2FMGK5D86EBD28496",
|
|
"KNADE243696530337",
|
|
"1N4AL21EX8N499928",
|
|
"1N4AL21E49N400571",
|
|
"1G2NW12E54C145398",
|
|
]
|
|
for vin in vin_list:
|
|
try:
|
|
for _ in range(random.randint(1,2)):
|
|
vin = f"{vin[:-4]}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}{random.randint(0, 9)}"
|
|
result = decodevin(vin)
|
|
make = CarMake.objects.get(name=result["maker"])
|
|
model = make.carmodel_set.filter(name__contains=result["model"]).first()
|
|
if not model or model == "":
|
|
model = random.choice(make.carmodel_set.all())
|
|
year = result["modelYear"]
|
|
serie = random.choice(model.carserie_set.all())
|
|
trim = random.choice(serie.cartrim_set.all())
|
|
vendor = random.choice(vendors)
|
|
print(make, model, serie, trim, vendor,vin)
|
|
car = Car.objects.create(
|
|
vin=vin,
|
|
id_car_make=make,
|
|
id_car_model=model,
|
|
id_car_serie=serie,
|
|
id_car_trim=trim,
|
|
vendor=vendor,
|
|
year=(int(year) or 2025),
|
|
receiving_date=datetime.datetime.now(),
|
|
dealer=dealer,
|
|
mileage=0,
|
|
)
|
|
print(car)
|
|
CarFinance.objects.create(
|
|
car=car, cost_price=random.randint(10000, 100000), selling_price=0,marked_price=random.randint(10000, 100000)+random.randint(2000, 7000)
|
|
)
|
|
CarColors.objects.create(
|
|
car=car,
|
|
interior=random.choice(InteriorColors.objects.all()),
|
|
exterior=random.choice(ExteriorColors.objects.all()),
|
|
)
|
|
print(make, model, serie, trim)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
def _create_random_customers(self,dealer):
|
|
for i in range(random.randint(1,60)):
|
|
try:
|
|
c = Customer(
|
|
dealer=dealer,
|
|
title="MR",
|
|
first_name=fake.name(),
|
|
last_name=fake.last_name(),
|
|
gender="m",
|
|
email=fake.email(),
|
|
phone_number=fake.phone_number(),
|
|
address=fake.address(),
|
|
national_id=random.randint(1000000000, 9999999999),
|
|
)
|
|
c.create_user_model()
|
|
c.create_customer_model()
|
|
c.save()
|
|
except Exception as e:
|
|
pass
|
|
|
|
def _create_randome_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",
|
|
},
|
|
]
|
|
uom = UnitOfMeasure.EACH
|
|
for additional_service in additional_services:
|
|
AdditionalServices.objects.create(
|
|
name=additional_service["name"],
|
|
arabic_name=additional_service["arabic_name"],
|
|
price=additional_service["price"],
|
|
description=additional_service["description"],
|
|
dealer=dealer,
|
|
uom=uom
|
|
)
|
|
|
|
|
|
def _create_random_lead(self,dealer):
|
|
for i in range(random.randint(1,60)):
|
|
try:
|
|
first_name = fake.name()
|
|
last_name = fake.last_name()
|
|
email = fake.email()
|
|
phone = fake.phone_number()
|
|
address = fake.address()
|
|
staff = random.choice(Staff.objects.filter(dealer=dealer))
|
|
|
|
make = random.choice(CarMake.objects.all())
|
|
model = random.choice(make.carmodel_set.all())
|
|
lead = Lead.objects.create(
|
|
dealer=dealer,
|
|
first_name=first_name,
|
|
last_name=last_name,
|
|
email=email,
|
|
phone_number=phone,
|
|
address=address,
|
|
lead_type="customer",
|
|
id_car_make=make,
|
|
id_car_model=model,
|
|
source="website",
|
|
channel="website",
|
|
staff=staff
|
|
)
|
|
c = Customer(
|
|
dealer=dealer,
|
|
title="MR",
|
|
first_name=first_name,
|
|
last_name=last_name,
|
|
gender="m",
|
|
email=email,
|
|
phone_number=phone,
|
|
address=address,
|
|
national_id=random.randint(1000000000, 9999999999),
|
|
)
|
|
c.create_user_model()
|
|
c.create_customer_model()
|
|
c.save()
|
|
lead.customer = c
|
|
lead.save()
|
|
except Exception as e:
|
|
pass |