bnovo plugin

scheduller
This commit is contained in:
2024-12-10 20:07:23 +09:00
parent 8dce756a27
commit 806c611cc7
38 changed files with 1301 additions and 277 deletions

View File

@@ -8,53 +8,34 @@ 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__"
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Загружаем доступные плагины
plugins = PluginLoader.load_plugins()
self.fields['plugin_name'].choices = [(plugin, plugin) for plugin in plugins.keys()]
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', 'check_plugins_button')
search_fields = ('name', 'description')
list_filter = ('created_at',)
list_display = ('name', 'plugin_name', 'created_at')
search_fields = ('name', 'plugin_name')
ordering = ('-created_at',)
def get_urls(self):
"""Добавляем URL для проверки плагинов."""
urls = super().get_urls()
custom_urls = [
path("check-plugins/", self.check_plugins, name="check-plugins"),
]
return custom_urls + urls
def check_plugins(self, request):
"""Проверка и отображение плагинов."""
def save_model(self, request, obj, form, change):
# Проверка на наличие плагина
plugins = PluginLoader.load_plugins()
plugin_details = [
{"name": plugin_name, "doc": plugins[plugin_name].__doc__ or "Нет документации"}
for plugin_name in plugins
]
context = {
"title": "Проверка плагинов",
"plugin_details": plugin_details,
}
return render(request, "admin/check_plugins.html", context)
def check_plugins_button(self, obj):
"""Добавляем кнопку для проверки плагинов."""
return format_html(
'<a class="button" href="{}">Проверить плагины</a>',
"/admin/pms_integration/pmsconfiguration/check-plugins/",
)
check_plugins_button.short_description = "Проверить плагины"
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')