diff --git a/antifroud/admin.py b/antifroud/admin.py index 1d6b6294..e8c052f6 100644 --- a/antifroud/admin.py +++ b/antifroud/admin.py @@ -151,55 +151,55 @@ class UserActivityLogAdmin(admin.ModelAdmin): get_hotel_name.short_description = "Отель" get_room_number.short_description = "Комната" -from .views import import_selected_hotels -# Регистрируем admin класс для ImportedHotel -@admin.register(ImportedHotel) -class ImportedHotelAdmin(admin.ModelAdmin): - change_list_template = "antifroud/admin/import_hotels.html" - list_display = ("external_id", "display_name", "name", "created", "updated", "imported") - search_fields = ("name", "display_name", "external_id") - list_filter = ("name", "display_name", "external_id") - actions = ['mark_as_imported', 'delete_selected_hotels_action'] +# from .views import import_selected_hotels +# # Регистрируем admin класс для ImportedHotel +# @admin.register(ImportedHotel) +# class ImportedHotelAdmin(admin.ModelAdmin): +# change_list_template = "antifroud/admin/import_hotels.html" +# list_display = ("external_id", "display_name", "name", "created", "updated", "imported") +# search_fields = ("name", "display_name", "external_id") +# list_filter = ("name", "display_name", "external_id") +# actions = ['mark_as_imported', 'delete_selected_hotels_action'] - def get_urls(self): - # Получаем стандартные URL-адреса и добавляем наши - urls = super().get_urls() - custom_urls = [ - 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_hotel//', self.delete_hotel, name='delete_hotel'), # Изменили на URL параметр - ] - return custom_urls + urls +# def get_urls(self): +# # Получаем стандартные URL-адреса и добавляем наши +# urls = super().get_urls() +# custom_urls = [ +# 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_hotel//', self.delete_hotel, name='delete_hotel'), # Изменили на URL параметр +# ] +# return custom_urls + urls - @transaction.atomic - def delete_selected_hotels(self, request): - if request.method == 'POST': - selected = request.POST.get('selected', '') - if selected: - external_ids = selected.split(',') - deleted_count, _ = ImportedHotel.objects.filter(external_id__in=external_ids).delete() - messages.success(request, f"Удалено отелей: {deleted_count}") - else: - messages.warning(request, "Не выбрано ни одного отеля для удаления.") - return redirect('admin:antifroud_importedhotel_changelist') +# @transaction.atomic +# def delete_selected_hotels(self, request): +# if request.method == 'POST': +# selected = request.POST.get('selected', '') +# if selected: +# external_ids = selected.split(',') +# deleted_count, _ = ImportedHotel.objects.filter(external_id__in=external_ids).delete() +# messages.success(request, f"Удалено отелей: {deleted_count}") +# else: +# messages.warning(request, "Не выбрано ни одного отеля для удаления.") +# return redirect('admin:antifroud_importedhotel_changelist') - def delete_selected_hotels(self, request, queryset): - deleted_count, _ = queryset.delete() - self.message_user(request, f'{deleted_count} отелей было удалено.') - delete_selected_hotels.short_description = "Удалить выбранные отели" +# def delete_selected_hotels(self, request, queryset): +# deleted_count, _ = queryset.delete() +# self.message_user(request, f'{deleted_count} отелей было удалено.') +# delete_selected_hotels.short_description = "Удалить выбранные отели" - def mark_as_imported(self, request, queryset): - updated = queryset.update(imported=True) - self.message_user(request, f"Отмечено как импортированное: {updated}", messages.SUCCESS) - mark_as_imported.short_description = "Отметить выбранные как импортированные" +# def mark_as_imported(self, request, queryset): +# updated = queryset.update(imported=True) +# self.message_user(request, f"Отмечено как импортированное: {updated}", messages.SUCCESS) +# mark_as_imported.short_description = "Отметить выбранные как импортированные" - # Метод для удаления одного отеля - @transaction.atomic - def delete_hotel(self, request, hotel_id): - imported_hotel = get_object_or_404(ImportedHotel, id=hotel_id) - imported_hotel.delete() - messages.success(request, f"Отель {imported_hotel.name} успешно удалён.") - return redirect('admin:antifroud_importedhotel_changelist') +# # Метод для удаления одного отеля +# @transaction.atomic +# def delete_hotel(self, request, hotel_id): +# imported_hotel = get_object_or_404(ImportedHotel, id=hotel_id) +# imported_hotel.delete() +# messages.success(request, f"Отель {imported_hotel.name} успешно удалён.") +# return redirect('admin:antifroud_importedhotel_changelist') @admin.register(SyncLog) @@ -222,4 +222,15 @@ class ViolationLogAdmin(admin.ModelAdmin): class Meta: model = ViolationLog - fields = ['hotel', 'room_number', 'created_at', 'violation_type', 'violation_details', 'detected_at'] \ No newline at end of file + 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'] + \ No newline at end of file diff --git a/touchh/settings.py b/touchh/settings.py index 0f46219f..bcd4a0ef 100644 --- a/touchh/settings.py +++ b/touchh/settings.py @@ -202,26 +202,54 @@ JAZZMIN_SETTINGS = { "welcome_sign": "Welcome to Touchh Admin", # Приветствие на странице входа "copyright": "Touchh", # Кастомный текст в футере "icons": { - "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", + "pms_integration": "fas fa-sync", + "antifraud": "fas fa-shield-alt", + "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", "dark_mode_theme": "darkly", "footer": { @@ -234,10 +262,10 @@ JAZZMIN_SETTINGS = { ], - "show_ui_builder": True, - "show_ui_builder_breadcrumbs": True, - "show_ui_builder_tabs": True, - "show_ui_builder_tabs_breadcrumbs": True, + "show_ui_builder": False, + "show_ui_builder_breadcrumbs": False, + "show_ui_builder_tabs": False, + "show_ui_builder_tabs_breadcrumbs": False, }