55 lines
2.7 KiB
Python
55 lines
2.7 KiB
Python
from app.settings_cache import SettingsCache
|
|
from app.conversation import get_or_create_user, get_template_rendered
|
|
from app.fsm import BotState, FSM
|
|
from app.keyboards.inline import build_main_menu_buttons
|
|
|
|
|
|
async def handle_sla_status(bot, user_data: dict, db, max_api):
|
|
max_user_id = user_data["user_id"]
|
|
text = user_data.get("text", "").strip()
|
|
|
|
if FSM.get_state(max_user_id) != BotState.FEATURE_SLA_STATUS:
|
|
FSM.set_state(max_user_id, BotState.FEATURE_SLA_STATUS)
|
|
await max_api.send_message(max_user_id,
|
|
"🔍 **Проверка SLA статуса**\n\n"
|
|
"Укажите номер или название объекта."
|
|
)
|
|
return
|
|
|
|
if not text:
|
|
await max_api.send_message(max_user_id, "Укажите номер или название объекта.")
|
|
return
|
|
|
|
from app.integrations.portal_db import get_object_by_name_or_id, get_sla_for_object, get_last_incident_for_object, get_active_tasks_for_object
|
|
obj = await get_object_by_name_or_id(db, text)
|
|
if not obj:
|
|
await max_api.send_message(max_user_id, "Объект не найден.")
|
|
FSM.transition(max_user_id, "done")
|
|
buttons = build_main_menu_buttons()
|
|
menu_text = await get_template_rendered(db, "main_menu")
|
|
await max_api.send_message_with_keyboard(max_user_id, menu_text, buttons)
|
|
return
|
|
|
|
sla = await get_sla_for_object(db, obj.id)
|
|
if not sla:
|
|
text = await get_template_rendered(db, "sla_not_found")
|
|
await max_api.send_message(max_user_id, text)
|
|
else:
|
|
level_map = {"start": "Базовый", "business": "Оптимальный", "enterprise": "Максимальный"}
|
|
last_incident = await get_last_incident_for_object(db, obj.id)
|
|
open_tasks = await get_active_tasks_for_object(db, obj.id)
|
|
last_visit = last_incident.created_at.strftime("%d.%m.%Y") if last_incident else "—"
|
|
tasks_count = len(open_tasks)
|
|
text = await get_template_rendered(db, "sla_found",
|
|
object_name=obj.name,
|
|
service_level=level_map.get(sla.service_level, sla.service_level),
|
|
status=sla.status,
|
|
price=sla.sla_price_monthly or 0)
|
|
text += f"\n📅 Последний визит: {last_visit}\n📋 Открытых задач: {tasks_count}"
|
|
await max_api.send_message(max_user_id, text, format="markdown")
|
|
|
|
FSM.transition(max_user_id, "done")
|
|
buttons = build_main_menu_buttons()
|
|
menu_text = await get_template_rendered(db, "main_menu")
|
|
await max_api.send_message_with_keyboard(max_user_id, menu_text, buttons)
|