This commit is contained in:
2026-03-04 01:43:20 +03:00
parent 9b004c3a86
commit e796a5bfdd
10 changed files with 179 additions and 610 deletions
@@ -22,6 +22,7 @@ from dutylog.infrastructure.database.repositories.room_hours_transactions_reposi
from dutylog.infrastructure.database.repositories.users_repository import (
UsersRepository,
)
from dutylog.infrastructure.utils.datetime import msk_now
async def on_rooms_click(
@@ -533,6 +534,56 @@ async def on_delete_room_cancel(
await dialog_manager.switch_to(AdminMenuSG.room_info)
@inject
async def get_room_history_data(
dialog_manager: DialogManager,
rooms_repository: FromDishka[RoomsRepository],
room_transactions_repository: FromDishka[RoomHoursTransactionsRepository],
**kwargs,
):
room_id = dialog_manager.dialog_data.get("selected_room_id")
if not room_id:
return {"history_content": "Ошибка: комната не выбрана"}
room = await rooms_repository.get_room_by_id(room_id)
if not room:
return {"history_content": "Ошибка: комната не найдена"}
transactions = await room_transactions_repository.get_room_history(room_id)
transactions_sorted = sorted(transactions, key=lambda x: x.created_at)
last_10 = transactions_sorted[-10:]
if not last_10:
history_text = f"""
<blockquote>📜 <b>История операций</b></blockquote>
<b>Комната:</b> {room.number}
<i>История операций пуста</i>
"""
else:
history_text = f"""
<blockquote>📜 <b>История операций</b></blockquote>
<b>Комната:</b> {room.number}
"""
for tx in last_10:
operation = "Начислено" if tx.transaction_type == "increase" else "Списано"
emoji = "+" if tx.transaction_type == "increase" else ""
msk_time = tx.created_at.astimezone(msk_now().tzinfo).replace(tzinfo=None)
date_str = msk_time.strftime("%d.%m.%Y %H:%M")
remark_text = f"\n💬 <i>{tx.remark}</i>" if tx.remark else ""
history_text += f"<blockquote><b>{operation}</b> {emoji}<code>{tx.amount}</code> ч\n📅 {date_str}{remark_text}</blockquote>\n"
return {"history_content": history_text}
rooms_select_floor_window = Window(
Format("{content}"),
Group(
@@ -596,6 +647,11 @@ room_info_window = Window(
on_click=on_room_remove_hours_click,
),
),
Button(
Const("📜 История"),
id="room_history_btn",
on_click=lambda c, b, m: m.switch_to(AdminMenuSG.room_history),
),
Button(
Const("🗑 Удалить комнату"),
id="delete_room_btn",
@@ -819,3 +875,14 @@ create_room_confirm_window = Window(
state=AdminMenuSG.create_room_confirm,
getter=get_create_room_confirm_data,
)
room_history_window = Window(
Format("{history_content}"),
SwitchTo(
Const("◀️ Назад"),
id="back_to_room_info",
state=AdminMenuSG.room_info,
),
state=AdminMenuSG.room_history,
getter=get_room_history_data,
)