from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update from asgiref.sync import sync_to_async from hotels.models import Hotel, UserHotel from users.models import User async def manage_hotels(update: Update, context): """Отображение списка отелей, связанных с пользователем.""" query = update.callback_query await query.answer() user_id = query.from_user.id user = await sync_to_async(User.objects.filter(chat_id=user_id).first)() if not user: await query.edit_message_text("Вы не зарегистрированы в системе.") return user_hotels = await sync_to_async(list)( UserHotel.objects.filter(user=user).select_related("hotel") ) if not user_hotels: await query.edit_message_text("У вас нет связанных отелей.") return keyboard = [ [InlineKeyboardButton(f"🏨 {hotel.hotel.name}", callback_data=f"hotel_{hotel.hotel.id}")] for hotel in user_hotels ] reply_markup = InlineKeyboardMarkup(keyboard) await query.edit_message_text("Выберите отель:", reply_markup=reply_markup) async def hotel_actions(update: Update, context): """Обработчик действий для выбранного отеля.""" query = update.callback_query await query.answer() hotel_id = int(query.data.split("_")[1]) hotel = await sync_to_async(Hotel.objects.filter(id=hotel_id).first)() if not hotel: await query.edit_message_text("Отель не найден.") return keyboard = [ [InlineKeyboardButton("🗑️ Удалить отель", callback_data=f"delete_hotel_{hotel_id}")], [InlineKeyboardButton("🔗 Проверить интеграцию с PMS", callback_data=f"check_pms_{hotel_id}")], [InlineKeyboardButton("🛏️ Настроить номера", callback_data=f"setup_rooms_{hotel_id}")], [InlineKeyboardButton("🏠 Главная", callback_data="main_menu")], [InlineKeyboardButton("🔙 Назад", callback_data="back")], ] reply_markup = InlineKeyboardMarkup(keyboard) await query.edit_message_text(f"Управление отелем: {hotel.name}", reply_markup=reply_markup) async def delete_hotel(update: Update, context): """Удаление отеля.""" query = update.callback_query await query.answer() hotel_id = int(query.data.split("_")[2]) hotel = await sync_to_async(Hotel.objects.filter(id=hotel_id).first)() if hotel: hotel_name = hotel.name await sync_to_async(hotel.delete)() await query.edit_message_text(f"Отель {hotel_name} успешно удалён.") else: await query.edit_message_text("Отель не найден.") async def check_pms(update: Update, context): """Проверить интеграцию с PMS.""" query = update.callback_query await query.answer() hotel_id = int(query.data.split("_")[2]) hotel = await sync_to_async(Hotel.objects.select_related('api', 'pms').get)(id=hotel_id) if not hotel: await query.edit_message_text("Отель не найден.") return api_name = hotel.api.name if hotel.api else "Не настроен" pms_name = hotel.pms.name if hotel.pms else "Не указана" status_message = f"Отель: {hotel.name}\nPMS система: {pms_name}\nAPI: {api_name}" await query.edit_message_text(status_message) async def setup_rooms(update: Update, context): """Настроить номера отеля.""" query = update.callback_query await query.answer() hotel_id = int(query.data.split("_")[2]) hotel = await sync_to_async(Hotel.objects.filter(id=hotel_id).first)() if not hotel: await query.edit_message_text("Отель не найден.") return await query.edit_message_text(f"Настройка номеров для отеля: {hotel.name}") async def get_users_for_hotel(hotel_id): """Получение пользователей, зарегистрированных в отеле с правами управления через бота.""" users = await sync_to_async(list)( User.objects.filter(user_hotels__hotel_id=hotel_id, user_hotels__role__in=["admin", "manager"]).distinct() ) return users