37733-vm/core/admin.py
2026-01-24 03:19:24 +00:00

113 lines
4.3 KiB
Python

from django.contrib import admin
from django.urls import path
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.contrib import messages
from django.utils.translation import gettext_lazy as _
from .models import Profile, Truck, Shipment, Bid, Message, WhatsAppConfig, Country, City, TruckType, AppSetting, Banner, HomeSection
from .whatsapp import send_whatsapp_message
@admin.register(Country)
class CountryAdmin(admin.ModelAdmin):
list_display = ('name', 'code', 'is_default')
list_editable = ('is_default',)
@admin.register(City)
class CityAdmin(admin.ModelAdmin):
list_display = ('name', 'country')
list_filter = ('country',)
search_fields = ('name',)
@admin.register(TruckType)
class TruckTypeAdmin(admin.ModelAdmin):
list_display = ('name', 'name_ar')
search_fields = ('name', 'name_ar')
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'role', 'country_code', 'phone_number')
list_filter = ('role',)
search_fields = ('user__username', 'phone_number')
@admin.register(Truck)
class TruckAdmin(admin.ModelAdmin):
list_display = ('display_truck_type', 'model', 'plate_no', 'owner', 'load_capacity')
search_fields = ('plate_no', 'owner__username', 'model')
list_filter = ('truck_type_link', 'is_approved')
@admin.register(Shipment)
class ShipmentAdmin(admin.ModelAdmin):
list_display = ('display_origin', 'display_destination', 'shipper', 'status', 'delivery_date')
list_filter = ('status', 'delivery_date', 'required_truck_type_link')
search_fields = ('origin', 'destination', 'shipper__username', 'description')
@admin.register(Bid)
class BidAdmin(admin.ModelAdmin):
list_display = ('shipment', 'truck_owner', 'amount', 'status')
list_filter = ('status',)
search_fields = ('shipment__description', 'truck_owner__username')
@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
list_display = ('shipment', 'sender', 'timestamp')
search_fields = ('content', 'sender__username')
@admin.register(WhatsAppConfig)
class WhatsAppConfigAdmin(admin.ModelAdmin):
list_display = ('__str__', 'is_active')
def has_add_permission(self, request):
# Only allow one configuration record
if self.model.objects.exists():
return False
return super().has_add_permission(request)
def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('send-test/', self.admin_site.admin_view(self.send_test_message), name='send_test_whatsapp'),
]
return custom_urls + urls
def send_test_message(self, request):
if request.method == 'POST':
phone = request.POST.get('phone')
message = request.POST.get('message')
if phone and message:
success = send_whatsapp_message(phone, message)
if success:
self.message_user(request, _("Test message sent successfully!"))
else:
self.message_user(request, _("Failed to send test message. Check your API credentials and logs."), level=messages.ERROR)
return HttpResponseRedirect("../")
context = dict(
self.admin_site.each_context(request),
title=_("Send Test WhatsApp Message"),
opts=self.model._meta,
)
return render(request, "admin/core/whatsapp_test.html", context)
@admin.register(AppSetting)
class AppSettingAdmin(admin.ModelAdmin):
list_display = ('app_name', 'contact_phone', 'contact_email')
def has_add_permission(self, request):
# Only allow one configuration record
if self.model.objects.exists():
return False
return super().has_add_permission(request)
@admin.register(Banner)
class BannerAdmin(admin.ModelAdmin):
list_display = ('title', 'order', 'is_active', 'created_at')
list_editable = ('order', 'is_active')
search_fields = ('title', 'title_ar', 'subtitle', 'subtitle_ar')
@admin.register(HomeSection)
class HomeSectionAdmin(admin.ModelAdmin):
list_display = ('title', 'section_type', 'order', 'is_active')
list_editable = ('order', 'is_active')
list_filter = ('section_type', 'is_active', 'background_color')
search_fields = ('title', 'title_ar', 'subtitle', 'subtitle_ar', 'content', 'content_ar')