mirror of
https://github.com/koloideal/DutyLog.git
synced 2026-06-10 10:25:29 +03:00
update
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user