62 lines
2 KiB
Python
62 lines
2 KiB
Python
"""Обработчик главного меню."""
|
||
from maxapi.dispatcher import Router
|
||
from maxapi.filters import F
|
||
from maxapi.types.updates.message_callback import MessageCallback
|
||
from maxapi.context import BaseContext
|
||
|
||
from bot.keyboards import main_menu_kb
|
||
from bot.send_helper import bot_reply
|
||
from database.connection import get_db
|
||
from database.queries.intradesk import (
|
||
count_active_tasks_for_local_org,
|
||
count_tasks_for_local_org,
|
||
)
|
||
from database.queries.organizations import get_organization
|
||
|
||
router = Router(router_id="menu")
|
||
|
||
|
||
async def build_main_menu_text(bot_user: dict) -> str:
|
||
"""Формирует текст главного меню с именем объекта и статистикой заявок."""
|
||
org_id = bot_user.get("org_id")
|
||
org_name: str | None = None
|
||
|
||
if org_id:
|
||
org = await get_organization(org_id)
|
||
org_name = org["name"] if org else None
|
||
|
||
lines: list[str] = []
|
||
if org_name:
|
||
lines.append(f"🏢 {org_name}")
|
||
else:
|
||
lines.append("🏠 Главное меню")
|
||
|
||
if org_id:
|
||
db = get_db()
|
||
total = await count_tasks_for_local_org(db, org_id)
|
||
active = await count_active_tasks_for_local_org(db, org_id)
|
||
|
||
if total == 0:
|
||
lines.append("Заявок пока нет.")
|
||
else:
|
||
lines.append(f"Заявок: {total} (активных: {active})")
|
||
|
||
lines.append("\nВыберите действие:")
|
||
return "\n".join(lines)
|
||
|
||
|
||
@router.message_callback(F.callback.payload == "main_menu")
|
||
async def cb_main_menu(
|
||
event: MessageCallback, context: BaseContext, bot_user: dict
|
||
) -> None:
|
||
await context.set_state(None)
|
||
await event.answer(notification="")
|
||
|
||
text = await build_main_menu_text(bot_user)
|
||
await bot_reply(
|
||
event,
|
||
text=text,
|
||
attachments=[main_menu_kb()],
|
||
user_id=bot_user["max_user_id"],
|
||
chat_id=event.message.recipient.chat_id if event.message else None,
|
||
)
|