Files
Touchh/pms_integration/admin.py
trevor 806c611cc7 bnovo plugin
scheduller
2024-12-10 20:07:23 +09:00

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