1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00

Починка статусов в ботов2

This commit is contained in:
MoonTestUse1
2024-12-26 04:08:18 +06:00
parent 00128d21a0
commit 40607aefe2

View File

@@ -12,3 +12,58 @@ async def start_bot():
await dp.start_polling(bot, skip_updates=True) await dp.start_polling(bot, skip_updates=True)
finally: finally:
await bot.session.close() await bot.session.close()
from aiogram import Bot, Dispatcher, types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from sqlalchemy.orm import Session
from ..database import get_db
from .. import models
# Создаем обработчик нажатия кнопки
@dp.callback_query_handler(lambda c: c.data.startswith('status_'))
async def process_status_button(callback_query: types.CallbackQuery):
try:
# Получаем ID заявки и новый статус из callback_data
_, request_id, new_status = callback_query.data.split('_')
request_id = int(request_id)
# Получаем сессию базы данных
db = next(get_db())
# Обновляем статус в базе данных
request = db.query(models.Request).filter(models.Request.id == request_id).first()
if request:
request.status = new_status
db.commit()
# Обновляем сообщение в боте
await callback_query.message.edit_text(
f"Заявка №{request_id}\nСтатус: {new_status}",
reply_markup=get_updated_keyboard(request_id, new_status)
)
# Отправляем уведомление о успешном обновлении
await callback_query.answer("Статус успешно обновлен!")
else:
await callback_query.answer("Заявка не найдена!", show_alert=True)
except Exception as e:
print(f"Error in process_status_button: {e}")
await callback_query.answer("Произошла ошибка при обновлении статуса", show_alert=True)
def get_updated_keyboard(request_id: int, current_status: str) -> InlineKeyboardMarkup:
keyboard = InlineKeyboardMarkup()
if current_status != "in_progress":
keyboard.add(InlineKeyboardButton(
"В работе",
callback_data=f"status_{request_id}_in_progress"
))
if current_status != "completed":
keyboard.add(InlineKeyboardButton(
"Завершено",
callback_data=f"status_{request_id}_completed"
))
return keyboard