45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
from django.contrib import admin
|
|
# Register your models here.
|
|
from .manager import PluginLoader
|
|
from django.http import HttpResponseRedirect
|
|
from django.urls import path
|
|
from django.utils.html import format_html
|
|
from django.shortcuts import render
|
|
from django import forms
|
|
from pms_integration.models import PMSConfiguration, PMSIntegrationLog
|
|
|
|
|
|
class PMSConfigurationForm(forms.ModelForm):
|
|
class Meta:
|
|
model = PMSConfiguration
|
|
fields = '__all__'
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
# Загружаем доступные плагины
|
|
plugins = PluginLoader.load_plugins()
|
|
plugin_choices = [(plugin_name, plugin_name) for plugin_name in plugins.keys()]
|
|
self.fields['plugin_name'] = forms.ChoiceField(choices=plugin_choices, required=False)
|
|
|
|
@admin.register(PMSConfiguration)
|
|
class PMSConfigurationAdmin(admin.ModelAdmin):
|
|
form = PMSConfigurationForm
|
|
list_display = ('name', 'plugin_name', 'created_at')
|
|
search_fields = ('name', 'plugin_name')
|
|
ordering = ('-created_at',)
|
|
|
|
def save_model(self, request, obj, form, change):
|
|
# Проверка на наличие плагина
|
|
plugins = PluginLoader.load_plugins()
|
|
if obj.plugin_name and obj.plugin_name not in plugins.keys():
|
|
raise ValueError(f"Выберите корректный плагин. '{obj.plugin_name}' нет среди допустимых значений.")
|
|
super().save_model(request, obj, form, change)
|
|
|
|
|
|
@admin.register(PMSIntegrationLog)
|
|
class PMSIntegrationLogAdmin(admin.ModelAdmin):
|
|
list_display = ('hotel', 'checked_at', 'status', 'message')
|
|
search_fields = ('hotel__name', 'status', 'message')
|
|
list_filter = ('status', 'checked_at')
|
|
ordering = ('-checked_at',)
|