266 lines
8.2 KiB
Python
266 lines
8.2 KiB
Python
# from appointment.models import Appointment
|
|
from django.contrib import admin
|
|
from . import models
|
|
from django_ledger import models as ledger_models
|
|
from django.contrib import messages
|
|
|
|
# from django_pdf_actions.actions import export_to_pdf_landscape, export_to_pdf_portrait
|
|
# from appointment import models as appointment_models
|
|
from import_export.admin import ExportMixin
|
|
from import_export.resources import ModelResource
|
|
|
|
|
|
# # Define resource class
|
|
# class CarSerieResource(ModelResource):
|
|
# class Meta:
|
|
# model = models.CarSerie
|
|
#
|
|
# # Integrate into Django Admin
|
|
# @admin.register(models.CarSerie)
|
|
# class CarSeriesAdmin(ExportMixin, admin.ModelAdmin):
|
|
# resource_class = CarSerieResource
|
|
|
|
|
|
class CarTrimResource(ModelResource):
|
|
class Meta:
|
|
model = models.CarTrim
|
|
|
|
|
|
@admin.register(models.CarTrim)
|
|
class CarTrimAdmin(ExportMixin, admin.ModelAdmin):
|
|
resource_class = CarTrimResource
|
|
|
|
|
|
admin.site.register(models.Dealer)
|
|
admin.site.register(models.Staff)
|
|
admin.site.register(models.Vendor)
|
|
admin.site.register(models.DealerSettings)
|
|
# admin.site.register(models.SaleQuotation)
|
|
# admin.site.register(models.SaleQuotationCar)
|
|
admin.site.register(models.SaleOrder)
|
|
admin.site.register(models.CustomGroup)
|
|
# admin.site.register(models.CarFinance)
|
|
admin.site.register(models.CarColors)
|
|
admin.site.register(models.CarRegistration)
|
|
admin.site.register(models.CustomCard)
|
|
admin.site.register(models.CarSpecificationValue)
|
|
admin.site.register(models.CarEquipment)
|
|
admin.site.register(models.CarOptionValue)
|
|
admin.site.register(models.ExteriorColors)
|
|
admin.site.register(models.InteriorColors)
|
|
# admin.site.register(models.Subscription)
|
|
# admin.site.register(models.SubscriptionPlan)
|
|
# admin.site.register(models.SubscriptionUser)
|
|
admin.site.register(models.CarLocation)
|
|
admin.site.register(models.CarReservation)
|
|
admin.site.register(models.Organization)
|
|
admin.site.register(models.Representative)
|
|
# admin.site.register(models.CarTrim)
|
|
admin.site.register(models.AdditionalServices)
|
|
admin.site.register(models.Payment)
|
|
admin.site.register(models.VatRate)
|
|
admin.site.register(ledger_models.CustomerModel)
|
|
admin.site.register(ledger_models.VendorModel)
|
|
admin.site.register(ledger_models.ItemModel)
|
|
admin.site.register(ledger_models.ItemTransactionModel)
|
|
admin.site.register(models.Opportunity)
|
|
admin.site.register(models.Notification)
|
|
admin.site.register(models.Lead)
|
|
admin.site.register(models.Activity)
|
|
admin.site.register(models.Schedule)
|
|
admin.site.register(models.Notes)
|
|
admin.site.register(models.UserActivityLog)
|
|
admin.site.register(models.DealersMake)
|
|
admin.site.register(models.ExtraInfo)
|
|
admin.site.register(models.Ticket)
|
|
# admin.site.register(models.UserRegistration)
|
|
|
|
|
|
@admin.register(models.Car)
|
|
class CarAdmin(admin.ModelAdmin):
|
|
search_fields = ("vin",)
|
|
# actions = [export_to_pdf_landscape, export_to_pdf_portrait]
|
|
|
|
|
|
@admin.register(models.CarMake)
|
|
class CarMakeAdmin(admin.ModelAdmin):
|
|
list_display = ("name", "arabic_name", "is_sa_import")
|
|
search_fields = ("name", "arabic_name")
|
|
list_filter = (
|
|
"is_sa_import",
|
|
"name",
|
|
)
|
|
# actions = [export_to_pdf_landscape, export_to_pdf_portrait]
|
|
|
|
class Meta:
|
|
verbose_name = "Car Make"
|
|
ordering = ("name",)
|
|
|
|
|
|
@admin.register(models.CarModel)
|
|
class CarModelAdmin(admin.ModelAdmin):
|
|
list_display = ("name", "arabic_name", "id_car_make", "get_is_sa_import")
|
|
search_fields = ("id_car_model", "name", "arabic_name")
|
|
list_filter = ("id_car_make__is_sa_import", "id_car_make")
|
|
sortable_by = ["name", "arabic_name", "id_car_make"]
|
|
|
|
def get_is_sa_import(self, obj):
|
|
return obj.id_car_make.is_sa_import
|
|
|
|
get_is_sa_import.boolean = True
|
|
get_is_sa_import.short_description = "Is SA Import"
|
|
|
|
class Meta:
|
|
verbose_name = "Car Model"
|
|
ordering = ("name",)
|
|
|
|
|
|
@admin.register(models.CarSerie)
|
|
class CarSeriesAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"name",
|
|
"arabic_name",
|
|
"id_car_model",
|
|
)
|
|
search_fields = ("name",)
|
|
list_filter = (
|
|
"id_car_model__id_car_make__is_sa_import",
|
|
"id_car_model__id_car_make__name",
|
|
)
|
|
|
|
class Meta:
|
|
verbose_name = "Car Series"
|
|
|
|
|
|
# @admin.register(models.CarTrim)
|
|
# class CarTrimAdmin(admin.ModelAdmin):
|
|
# list_display = ('name', 'arabic_name',
|
|
# 'id_car_serie__name',
|
|
# 'id_car_serie__id_car_model__name',
|
|
# 'id_car_serie__id_car_model__id_car_make__name')
|
|
# search_fields = ('name', 'arabic_name', 'id_car_serie__id_car_model__name')
|
|
# list_filter = ('id_car_serie__id_car_model__id_car_make__is_sa_import',
|
|
# 'id_car_serie__id_car_model__id_car_make__name')
|
|
#
|
|
# class Meta:
|
|
# verbose_name = "Car Trim"
|
|
|
|
|
|
@admin.register(models.CarSpecification)
|
|
class CarSpecificationAdmin(admin.ModelAdmin):
|
|
list_display = ("name", "arabic_name", "id_parent")
|
|
search_fields = ("name", "id_parent")
|
|
list_filter = ("id_parent",)
|
|
|
|
class Meta:
|
|
verbose_name = "Car Specification"
|
|
|
|
|
|
@admin.register(models.CarOption)
|
|
class CarOptionAdmin(admin.ModelAdmin):
|
|
list_display = ("name", "arabic_name", "id_parent")
|
|
search_fields = ("name", "id_parent")
|
|
|
|
# list_filter = ('id_parent',)
|
|
class Meta:
|
|
verbose_name = "Car Option"
|
|
|
|
|
|
# @admin.register(models.UserActivityLog)
|
|
# class UserActivityLogAdmin(admin.ModelAdmin):
|
|
# list_display = ('user', 'action', 'timestamp')
|
|
# search_fields = ('user__username', 'action')
|
|
# list_filter = ('timestamp',)
|
|
|
|
# @admin.register(ledger_models.ItemTransactionModel)
|
|
# class ItemTransactionModelAdmin(admin.ModelAdmin):
|
|
|
|
# actions = [export_to_pdf_landscape, export_to_pdf_portrait]
|
|
|
|
|
|
@admin.register(models.UserRegistration)
|
|
class UserRegistrationAdmin(admin.ModelAdmin):
|
|
# Fields to display in the list view
|
|
list_display = [
|
|
"name",
|
|
"arabic_name",
|
|
"email",
|
|
"crn",
|
|
"vrn",
|
|
"phone_number",
|
|
"is_created",
|
|
"created_at",
|
|
]
|
|
|
|
# Filters in the right sidebar
|
|
list_filter = [
|
|
"is_created",
|
|
"created_at",
|
|
]
|
|
|
|
# Searchable fields
|
|
search_fields = ["name", "arabic_name", "email", "crn", "vrn", "phone_number"]
|
|
|
|
# Read-only fields in detail view
|
|
readonly_fields = ["created_at", "updated_at", "is_created", "password"]
|
|
|
|
# Organize form layout
|
|
fieldsets = [
|
|
(
|
|
"Account Information",
|
|
{"fields": ("name", "arabic_name", "email", "phone_number")},
|
|
),
|
|
("Business Details", {"fields": ("crn", "vrn", "address")}),
|
|
(
|
|
"Status",
|
|
{
|
|
"fields": ("is_created", "password", "created_at", "updated_at"),
|
|
"classes": ("collapse",),
|
|
},
|
|
),
|
|
]
|
|
|
|
# Custom action to create accounts
|
|
actions = ["create_dealer_accounts"]
|
|
|
|
@admin.action(description="Create dealer account(s) for selected registrations")
|
|
def create_dealer_accounts(self, request, queryset):
|
|
created_count = 0
|
|
already_created_count = 0
|
|
failed_count = 0
|
|
|
|
for registration in queryset:
|
|
try:
|
|
if not registration.is_created:
|
|
registration.create_account() # Your existing method
|
|
created_count += 1
|
|
else:
|
|
already_created_count += 1
|
|
except Exception as e:
|
|
self.message_user(
|
|
request,
|
|
f"Error creating account for {registration.name}: {str(e)}",
|
|
level=messages.ERROR,
|
|
)
|
|
failed_count += 1
|
|
|
|
# Show summary message
|
|
if created_count > 0:
|
|
self.message_user(
|
|
request,
|
|
f"Successfully created {created_count} account(s).",
|
|
level=messages.SUCCESS,
|
|
)
|
|
if already_created_count > 0:
|
|
self.message_user(
|
|
request,
|
|
f"{already_created_count} registration(s) were already created.",
|
|
level=messages.INFO,
|
|
)
|
|
if failed_count > 0:
|
|
self.message_user(
|
|
request,
|
|
f"Failed to create {failed_count} account(s). Check logs.",
|
|
level=messages.ERROR,
|
|
)
|