haikal/inventory/admin.py
2025-09-24 11:07:31 +03:00

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,
)