mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
Починка статусов в ботов
This commit is contained in:
@@ -1,81 +1,54 @@
|
||||
# from logging import getLogger
|
||||
# from aiogram import Bot, Dispatcher, types
|
||||
# from aiogram.filters import CommandStart
|
||||
# from sqlalchemy.orm import Session
|
||||
# from .database import get_db
|
||||
# from .crud import requests
|
||||
# from .utils.telegram import STATUS_LABELS, create_status_keyboard, format_request_message
|
||||
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
|
||||
|
||||
# # Initialize logger
|
||||
# logger = getLogger(__name__)
|
||||
# Создаем обработчик нажатия кнопки
|
||||
@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)
|
||||
|
||||
# # Initialize bot and dispatcher
|
||||
# bot = Bot(token="7677506032:AAHEqNUr1lIUfNVbLwaWIaPeKKShsCyz3eo")
|
||||
# dp = Dispatcher()
|
||||
# Получаем сессию базы данных
|
||||
db = next(get_db())
|
||||
|
||||
# @dp.callback_query(lambda c: c.data and c.data.startswith('status_'))
|
||||
# async def process_status_update(callback: types.CallbackQuery):
|
||||
# """Handle status update button clicks"""
|
||||
# try:
|
||||
# # Parse callback data using underscore as separator
|
||||
# parts = callback.data.split('_')
|
||||
# logger.info(f"Parsed callback parts: {parts}")
|
||||
# Обновляем статус в базе данных
|
||||
request = db.query(models.Request).filter(models.Request.id == request_id).first()
|
||||
if request:
|
||||
request.status = new_status
|
||||
db.commit()
|
||||
|
||||
# if len(parts) < 3:
|
||||
# logger.warning(f"Invalid callback data format: {parts}")
|
||||
# return
|
||||
# Обновляем сообщение в боте
|
||||
await callback_query.message.edit_text(
|
||||
f"Заявка №{request_id}\nСтатус: {new_status}",
|
||||
reply_markup=get_updated_keyboard(request_id, new_status)
|
||||
)
|
||||
|
||||
# request_id = int(parts[1])
|
||||
# # Handle 'in_progress' case where we have an extra underscore
|
||||
# new_status = '_'.join(parts[2:]) if len(parts) > 3 else parts[2]
|
||||
# Отправляем уведомление о успешном обновлении
|
||||
await callback_query.answer("Статус успешно обновлен!")
|
||||
else:
|
||||
await callback_query.answer("Заявка не найдена!", show_alert=True)
|
||||
|
||||
# logger.info(f"Processing status update: request_id={request_id}, new_status={new_status}")
|
||||
except Exception as e:
|
||||
print(f"Error in process_status_button: {e}")
|
||||
await callback_query.answer("Произошла ошибка при обновлении статуса", show_alert=True)
|
||||
|
||||
# # Get database session
|
||||
# db = next(get_db())
|
||||
def get_updated_keyboard(request_id: int, current_status: str) -> InlineKeyboardMarkup:
|
||||
keyboard = InlineKeyboardMarkup()
|
||||
|
||||
# try:
|
||||
# # Update request status in database
|
||||
# updated_request = requests.update_request_status(db, request_id, new_status)
|
||||
# if not updated_request:
|
||||
# logger.warning(f"Request not found: {request_id}")
|
||||
# await callback.answer("Заявка не найдена", show_alert=True)
|
||||
# return
|
||||
if current_status != "in_progress":
|
||||
keyboard.add(InlineKeyboardButton(
|
||||
"В работе",
|
||||
callback_data=f"status_{request_id}_in_progress"
|
||||
))
|
||||
|
||||
# # Update message with new status
|
||||
# new_message = format_request_message(updated_request)
|
||||
# new_keyboard = create_status_keyboard(request_id, new_status)
|
||||
if current_status != "completed":
|
||||
keyboard.add(InlineKeyboardButton(
|
||||
"Завершено",
|
||||
callback_data=f"status_{request_id}_completed"
|
||||
))
|
||||
|
||||
# await callback.message.edit_text(
|
||||
# text=new_message,
|
||||
# parse_mode="HTML",
|
||||
# reply_markup=new_keyboard
|
||||
# )
|
||||
|
||||
# await callback.answer(f"Статус обновлен: {STATUS_LABELS[new_status]}")
|
||||
# logger.info(f"Successfully updated request {request_id} to status {new_status}")
|
||||
|
||||
# except ValueError as e:
|
||||
# logger.error(f"Value error while updating status: {e}")
|
||||
# await callback.answer(str(e), show_alert=True)
|
||||
# finally:
|
||||
# db.close()
|
||||
|
||||
# except Exception as e:
|
||||
# logger.error(f"Error processing callback: {e}", exc_info=True)
|
||||
# await callback.answer("Произошла ошибка при обновлении статуса", show_alert=True)
|
||||
|
||||
# @dp.message(CommandStart())
|
||||
# async def start_command(message: types.Message):
|
||||
# """Handle /start command"""
|
||||
# await message.answer(
|
||||
# "👋 Привет! Я бот технической поддержки.\n"
|
||||
# "Я буду отправлять уведомления о новых заявках и позволю менять их статус."
|
||||
# )
|
||||
|
||||
# async def start_bot():
|
||||
# """Start the bot"""
|
||||
# try:
|
||||
# await dp.start_polling(bot)
|
||||
# finally:
|
||||
# await bot.session.close()
|
||||
return keyboard
|
Reference in New Issue
Block a user