mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
"""Handlers for callback queries"""
|
||
from aiogram import Router, types
|
||
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||
from sqlalchemy.orm import Session
|
||
from ...database import get_db
|
||
from ... import models
|
||
from ..config import RequestStatus
|
||
|
||
router = Router()
|
||
|
||
@router.callback_query(lambda c: c.data and c.data.startswith('status_'))
|
||
async def process_status_button(callback_query: types.CallbackQuery):
|
||
"""
|
||
Handle status update button clicks.
|
||
Updates request status in database and updates message in Telegram.
|
||
"""
|
||
try:
|
||
# Parse callback data
|
||
_, request_id, new_status = callback_query.data.split('_')
|
||
request_id = int(request_id)
|
||
|
||
# Get database session
|
||
db = next(get_db())
|
||
|
||
# Update request status
|
||
request = db.query(models.Request).filter(models.Request.id == request_id).first()
|
||
if request:
|
||
request.status = new_status
|
||
db.commit()
|
||
|
||
# Update message in Telegram
|
||
await callback_query.message.edit_text(
|
||
f"Заявка №{request_id}\n"
|
||
f"Статус: {new_status}\n"
|
||
f"Описание: {request.description}",
|
||
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:
|
||
"""Create keyboard with status update buttons"""
|
||
keyboard = InlineKeyboardMarkup(inline_keyboard=[])
|
||
|
||
if current_status != RequestStatus.IN_PROGRESS:
|
||
keyboard.inline_keyboard.append([
|
||
InlineKeyboardButton(
|
||
text="В работе",
|
||
callback_data=f"status_{request_id}_{RequestStatus.IN_PROGRESS}"
|
||
)
|
||
])
|
||
|
||
if current_status != RequestStatus.COMPLETED:
|
||
keyboard.inline_keyboard.append([
|
||
InlineKeyboardButton(
|
||
text="Завершено",
|
||
callback_data=f"status_{request_id}_{RequestStatus.COMPLETED}"
|
||
)
|
||
])
|
||
|
||
return keyboard |