plugins development

This commit is contained in:
2024-12-10 10:32:46 +09:00
parent 7889117d6e
commit 8dce756a27
10 changed files with 352 additions and 50 deletions

View File

@@ -75,35 +75,48 @@ async def delete_hotel(update: Update, context):
await query.edit_message_text("Отель не найден.")
from pms_integration.manager import PMSIntegrationManager
from asgiref.sync import sync_to_async
from hotels.models import Hotel
# async def check_pms(update, context):
# query = update.callback_query
# try:
# # Логирование callback_data
# # Получение hotel_id из callback_data
# hotel_id = query.data.split("_")[2]
# print(f"Selected hotel id: {hotel_id}")
# context.user_data["selected_hotel"] = hotel_id
# # Инициализация менеджера PMS
# pms_manager = PMSIntegrationManager(hotel_id=hotel_id)
# print(f"Loaded hotel: {pms_manager.hotel}")
# await pms_manager.load_hotel() # Асинхронная загрузка отеля
# pms_manager.load_plugin() # Загрузка плагина
# print(f"Инициализация PMS менеджера для отеля ID: {hotel_id}")
# # Получение данных
# # Загрузка данных отеля
# await pms_manager.load_hotel()
# print(f"Данные отеля загружены: {pms_manager.hotel}")
# # Загрузка плагина
# pms_manager.load_plugin()
# print(f"Плагин загружен: {pms_manager.plugin}")
# # Получение данных из PMS
# data = pms_manager.fetch_data()
# print(f'PMS_managerПолучено записей: {len(data)}\n\n\n___')
# print(fанные {data}\n\n\n')
# # Логирование
# print(f"Данные получены из PMS: {len(data)} записей")
# # print(f"Полные данные: {data}\n\n\n")
# # Сохранение лога успешной интеграции
# await pms_manager.save_log("success", f"Успешная интеграция с PMS {pms_manager.pms_config.name}.")
# # Ответ пользователю
# await query.edit_message_text(f"Интеграция успешна! Получено {len(data)} записей.")
# # Обработка данных и запись в БД
# await pms_manager.plugin._save_to_db(data, hotel_id=int(hotel_id))
# print(f"Данные успешно сохранены в базу данных.")
# except Exception as e:
# # Логирование ошибок
# # Логирование ошибки
# print(f"Ошибка при выполнении check_pms: {e}")
# if 'pms_manager' in locals() and pms_manager.hotel:
# await pms_manager.save_log("error", str(e))
# await query.edit_message_text(f"❌ Ошибка: {e}")
@@ -112,45 +125,45 @@ async def check_pms(update, context):
query = update.callback_query
try:
# Получение hotel_id из callback_data
# Получение ID отеля из callback_data
hotel_id = query.data.split("_")[2]
print(f"Selected hotel id: {hotel_id}")
context.user_data["selected_hotel"] = hotel_id
# Получение конфигурации отеля и PMS
hotel = await sync_to_async(Hotel.objects.select_related('pms').get)(id=hotel_id)
pms_config = hotel.pms
# Инициализация менеджера PMS
if not pms_config:
await query.edit_message_text("PMS конфигурация не найдена.")
return
# Создаем экземпляр PMSIntegrationManager
pms_manager = PMSIntegrationManager(hotel_id=hotel_id)
print(f"Инициализация PMS менеджера для отеля ID: {hotel_id}")
await sync_to_async(pms_manager.load_hotel)()
await sync_to_async(pms_manager.load_plugin)()
# Загрузка данных отеля
await pms_manager.load_hotel()
print(f"Данные отеля загружены: {pms_manager.hotel}")
# Проверяем, какой способ интеграции использовать
if hasattr(pms_manager.plugin, 'fetch_data'):
# Плагин поддерживает метод fetch_data
data = await sync_to_async(pms_manager.plugin.fetch_data)()
elif pms_config.api_url and pms_config.token:
# Используем прямой запрос к API
from pms_integration.api_client import APIClient
api_client = APIClient(base_url=pms_config.api_url, access_token=pms_config.token)
data = await sync_to_async(api_client.fetch_reservations)()
else:
# Если подходящий способ не найден
await query.edit_message_text("Подходящий способ интеграции с PMS не найден.")
return
# Загрузка плагина
pms_manager.load_plugin()
print(f"Плагин загружен: {pms_manager.plugin}")
# Получение данных из PMS
data = pms_manager.fetch_data()
print(f"Данные получены из PMS: {len(data)} записей")
# print(f"Полные данные: {data}\n\n\n")
# Сохранение лога успешной интеграции
await pms_manager.save_log("success", f"Успешная интеграция с PMS {pms_manager.pms_config.name}.")
# Ответ пользователю
await query.edit_message_text(f"Интеграция успешна! Получено {len(data)} записей.")
# Обработка данных и запись в БД
await pms_manager.plugin._save_to_db(data, hotel_id=int(hotel_id))
print(f"Данные успешно сохранены в базу данных.")
# Сохраняем данные в базу
from bot.utils.database import save_reservations
await sync_to_async(save_reservations)(data)
# Уведомляем об успешной интеграции
await query.edit_message_text(f"Интеграция PMS {pms_config.name} завершена успешно.")
except Exception as e:
# Логирование ошибки
print(f"Ошибка при выполнении check_pms: {e}")
if 'pms_manager' in locals() and pms_manager.hotel:
await pms_manager.save_log("error", str(e))
await query.edit_message_text(f"❌ Ошибка: {e}")
# Обрабатываем и логируем ошибки
await query.edit_message_text(f"Ошибка: {str(e)}")
async def setup_rooms(update: Update, context):
"""Настроить номера отеля."""