some icons added

This commit is contained in:
2024-12-24 18:40:10 +09:00
parent d5622f41a2
commit 12e99ca5c2
2 changed files with 104 additions and 65 deletions

View File

@@ -151,55 +151,55 @@ class UserActivityLogAdmin(admin.ModelAdmin):
get_hotel_name.short_description = "Отель" get_hotel_name.short_description = "Отель"
get_room_number.short_description = "Комната" get_room_number.short_description = "Комната"
from .views import import_selected_hotels # from .views import import_selected_hotels
# Регистрируем admin класс для ImportedHotel # # Регистрируем admin класс для ImportedHotel
@admin.register(ImportedHotel) # @admin.register(ImportedHotel)
class ImportedHotelAdmin(admin.ModelAdmin): # class ImportedHotelAdmin(admin.ModelAdmin):
change_list_template = "antifroud/admin/import_hotels.html" # change_list_template = "antifroud/admin/import_hotels.html"
list_display = ("external_id", "display_name", "name", "created", "updated", "imported") # list_display = ("external_id", "display_name", "name", "created", "updated", "imported")
search_fields = ("name", "display_name", "external_id") # search_fields = ("name", "display_name", "external_id")
list_filter = ("name", "display_name", "external_id") # list_filter = ("name", "display_name", "external_id")
actions = ['mark_as_imported', 'delete_selected_hotels_action'] # actions = ['mark_as_imported', 'delete_selected_hotels_action']
def get_urls(self): # def get_urls(self):
# Получаем стандартные URL-адреса и добавляем наши # # Получаем стандартные URL-адреса и добавляем наши
urls = super().get_urls() # urls = super().get_urls()
custom_urls = [ # custom_urls = [
path('import_selected_hotels/', import_selected_hotels, name='antifroud_importedhotels_import_selected_hotels'), # path('import_selected_hotels/', import_selected_hotels, name='antifroud_importedhotels_import_selected_hotels'),
path('delete_selected_hotels/', self.delete_selected_hotels, name='delete_selected_hotels'), # path('delete_selected_hotels/', self.delete_selected_hotels, name='delete_selected_hotels'),
path('delete_hotel/<int:hotel_id>/', self.delete_hotel, name='delete_hotel'), # Изменили на URL параметр # path('delete_hotel/<int:hotel_id>/', self.delete_hotel, name='delete_hotel'), # Изменили на URL параметр
] # ]
return custom_urls + urls # return custom_urls + urls
@transaction.atomic # @transaction.atomic
def delete_selected_hotels(self, request): # def delete_selected_hotels(self, request):
if request.method == 'POST': # if request.method == 'POST':
selected = request.POST.get('selected', '') # selected = request.POST.get('selected', '')
if selected: # if selected:
external_ids = selected.split(',') # external_ids = selected.split(',')
deleted_count, _ = ImportedHotel.objects.filter(external_id__in=external_ids).delete() # deleted_count, _ = ImportedHotel.objects.filter(external_id__in=external_ids).delete()
messages.success(request, f"Удалено отелей: {deleted_count}") # messages.success(request, f"Удалено отелей: {deleted_count}")
else: # else:
messages.warning(request, "Не выбрано ни одного отеля для удаления.") # messages.warning(request, "Не выбрано ни одного отеля для удаления.")
return redirect('admin:antifroud_importedhotel_changelist') # return redirect('admin:antifroud_importedhotel_changelist')
def delete_selected_hotels(self, request, queryset): # def delete_selected_hotels(self, request, queryset):
deleted_count, _ = queryset.delete() # deleted_count, _ = queryset.delete()
self.message_user(request, f'{deleted_count} отелей было удалено.') # self.message_user(request, f'{deleted_count} отелей было удалено.')
delete_selected_hotels.short_description = "Удалить выбранные отели" # delete_selected_hotels.short_description = "Удалить выбранные отели"
def mark_as_imported(self, request, queryset): # def mark_as_imported(self, request, queryset):
updated = queryset.update(imported=True) # updated = queryset.update(imported=True)
self.message_user(request, f"Отмечено как импортированное: {updated}", messages.SUCCESS) # self.message_user(request, f"Отмечено как импортированное: {updated}", messages.SUCCESS)
mark_as_imported.short_description = "Отметить выбранные как импортированные" # mark_as_imported.short_description = "Отметить выбранные как импортированные"
# Метод для удаления одного отеля # # Метод для удаления одного отеля
@transaction.atomic # @transaction.atomic
def delete_hotel(self, request, hotel_id): # def delete_hotel(self, request, hotel_id):
imported_hotel = get_object_or_404(ImportedHotel, id=hotel_id) # imported_hotel = get_object_or_404(ImportedHotel, id=hotel_id)
imported_hotel.delete() # imported_hotel.delete()
messages.success(request, f"Отель {imported_hotel.name} успешно удалён.") # messages.success(request, f"Отель {imported_hotel.name} успешно удалён.")
return redirect('admin:antifroud_importedhotel_changelist') # return redirect('admin:antifroud_importedhotel_changelist')
@admin.register(SyncLog) @admin.register(SyncLog)
@@ -222,4 +222,15 @@ class ViolationLogAdmin(admin.ModelAdmin):
class Meta: class Meta:
model = ViolationLog model = ViolationLog
fields = ['hotel', 'room_number', 'created_at', 'violation_type', 'violation_details', 'detected_at'] fields = ['hotel', 'room_number', 'created_at', 'violation_type', 'violation_details', 'detected_at']
@admin.register(RoomDiscrepancy)
class RoomDiscrepancyAdmin(admin.ModelAdmin):
list_display = ['hotel', 'room_number', 'booking_id','created_at', 'check_in_date_expected','check_in_date_actual','discrepancy_type']
search_fields = ['hotel', 'room_number', 'booking_id','created_at', 'check_in_date_expected','check_in_date_actual','discrepancy_type']
list_filter = ['hotel', 'room_number', 'booking_id','created_at', 'check_in_date_expected','check_in_date_actual','discrepancy_type']
class Meta:
model = RoomDiscrepancy
fields = ['hotel', 'room_number', 'booking_id','created_at', 'check_in_date_expected','check_in_date_actual','discrepancy_type']

View File

@@ -202,26 +202,54 @@ JAZZMIN_SETTINGS = {
"welcome_sign": "Welcome to Touchh Admin", # Приветствие на странице входа "welcome_sign": "Welcome to Touchh Admin", # Приветствие на странице входа
"copyright": "Touchh", # Кастомный текст в футере "copyright": "Touchh", # Кастомный текст в футере
"icons": { "icons": {
"auth": "fas fa-users-cog", # Приложения
"users": "fas fa-user-circle",
"hotels": "fas fa-hotel", "hotels": "fas fa-hotel",
"hotels.hotel": "fas fa-hotel",
"hotels.room":"fas fa-bed",
"hotels.reservation":"fas fa-calendar-week",
"hotels.userhotel":"fas fa-user-shield",
"app_settings": "fas fa-wrench",
"app_settings.telegramsettings":"fab fa-telegram",
"app_settings.emailsettings":"fab fa-at",
"app_settings.localdatabase":"fas fa-database",
"app_settings.globalhotelsettings":"fas fa-hammer",
"app_settings.globalsystemsettings":"fas fa-cogs",
"scheduler": "fas fa-clock", "scheduler": "fas fa-clock",
"pms_integration": "fas fa-sync", "pms_integration": "fas fa-sync",
"antifroud": "fas fa-shield-alt", "antifraud": "fas fa-shield-alt",
"antifroud.externaldbsettings": "fas fa-database", "app_settings": "fas fa-wrench",
# Модели
"hotels.reservation": "fas fa-calendar-check", # Бронирования
"hotels.userhotel": "fas fa-user-shield", # Пользователи отеля
"app_settings.telegramsettings": "fab fa-telegram", # Настройки Telegram
"app_settings.emailsettings": "fas fa-envelope", # Настройки Email
"app_settings.localdatabase": "fas fa-database", # Локальная база данных
"app_settings.globalhotelsettings": "fas fa-tools", # Глобальные настройки отеля
"app_settings.globalsystemsettings": "fas fa-cogs", # Глобальные системные настройки
"antifraud.externaldbsettings": "fas fa-server", # Подключение к внешним базам данных
"antifraud.roomdiscrepancy": "fas fa-exclamation-circle", # Несоответствия в комнатах
"scheduler.scheduledtask": "fas fa-tasks", # Запланированные задачи
"antifraud.violationlog": "fas fa-ban", # Журнал нарушений
"hotels.importedhotel": "fas fa-download", # Импортированные отели
"hotels.synclog": "fas fa-sync-alt", # Журнал синхронизации
"auth": "fas fa-users-cog",
"users": "fas fa-user-circle",
"hotels": "fas fa-hotel",
"hotels.hotel": "fas fa-hotel",
"hotels.room":"fas fa-bed",
"hotels.reservation":"fas fa-calendar-week",
"hotels.userhotel":"fas fa-user-shield",
"app_settings": "fas fa-wrench",
"app_settings.telegramsettings":"fab fa-telegram",
"app_settings.emailsettings":"fab fa-at",
"app_settings.localdatabase":"fas fa-database",
"app_settings.globalhotelsettings":"fas fa-hammer",
"app_settings.globalsystemsettings":"fas fa-cogs",
"scheduler": "fas fa-clock",
"pms_integration": "fas fa-sync",
"antifroud": "fas fa-shield-alt",
"antifroud.externaldbsettings": "fas fa-database",
"antifroud.roomdiscrepancy": "fas fa-user-secret",
"antifroud.violationlog": "fas fa-ban",
"antifroud.importedhotel": "fas fa-download",
"antifroud.synclog": "fas fa-sync-alt",
"antifroud.useractivitylog": "fas fa-qrcode",
},
},
"theme": "sandstone", "theme": "sandstone",
"dark_mode_theme": "darkly", "dark_mode_theme": "darkly",
"footer": { "footer": {
@@ -234,10 +262,10 @@ JAZZMIN_SETTINGS = {
], ],
"show_ui_builder": True, "show_ui_builder": False,
"show_ui_builder_breadcrumbs": True, "show_ui_builder_breadcrumbs": False,
"show_ui_builder_tabs": True, "show_ui_builder_tabs": False,
"show_ui_builder_tabs_breadcrumbs": True, "show_ui_builder_tabs_breadcrumbs": False,
} }