diff --git a/src/dutylog/application/bot/user_dialogs/main_menu_dialog.py b/src/dutylog/application/bot/user_dialogs/main_menu_dialog.py index 7072d79..833cf01 100644 --- a/src/dutylog/application/bot/user_dialogs/main_menu_dialog.py +++ b/src/dutylog/application/bot/user_dialogs/main_menu_dialog.py @@ -1,11 +1,13 @@ from aiogram.types import User from aiogram_dialog import Dialog, Window, DialogManager -from aiogram_dialog.widgets.text import Format +from aiogram_dialog.widgets.text import Format, Const +from aiogram_dialog.widgets.kbd import SwitchTo, Back from dishka import FromDishka from dishka.integrations.aiogram_dialog import inject from dutylog.application.bot.user_dialogs.states import MainMenuSG from dutylog.infrastructure.database.repositories.users_repository import UsersRepository +from dutylog.infrastructure.database.repositories.hours_transactions_repository import HoursTransactionsRepository from dutylog.infrastructure.utils.config import Config @@ -40,9 +42,9 @@ async def get_main_menu_data( ⏰ Ваши часы дежурств -
🟢 Неотработанные часы: {user.active_hours} ч -━━━━━━━━━━━━━━━ -🔴 Неактивные часы: {user.inactive_hours} ч
+
🟢 Отработанные часы: {user.active_hours} ч +━━━━━━━━━━━━━━━━ +🔴 Неотработанные часы: {user.inactive_hours} ч
""" else: content = f""" @@ -53,13 +55,63 @@ async def get_main_menu_data( Добро пожаловать в систему учета дежурств! """ - return {"content": content} + return { + "content": content, + "is_regular_user": not is_admin and not is_creator, + } + + +@inject +async def get_history_data( + dialog_manager: DialogManager, + event_from_user: User, + transactions_repository: FromDishka[HoursTransactionsRepository], + **kwargs, +): + transactions = await transactions_repository.get_user_history(event_from_user.id) + last_10 = transactions[:10] + + if not last_10: + history_text = """ +
📜 История операций
+ +История операций пуста +""" + else: + history_lines = [] + for tx in last_10: + emoji = "➕" if tx.transaction_type == "increase" else "➖" + date_str = tx.created_at.strftime("%d.%m.%Y %H:%M") + history_lines.append( + f"{emoji} {tx.amount} ч • {date_str}" + ) + + history_text = f""" +
📜 История операций
+ +{"".join(f"{line}\n" for line in history_lines)} +Показаны последние 10 операций +""" + + return {"history_content": history_text} main_menu_dialog = Dialog( Window( Format("{content}"), + SwitchTo( + Const("📜 История"), + id="history_btn", + state=MainMenuSG.history, + when="is_regular_user", + ), state=MainMenuSG.main, getter=get_main_menu_data, ), + Window( + Format("{history_content}"), + Back(Const("◀️ Назад")), + state=MainMenuSG.history, + getter=get_history_data, + ), ) diff --git a/src/dutylog/application/bot/user_dialogs/states.py b/src/dutylog/application/bot/user_dialogs/states.py index 29f1dd3..9cd54db 100644 --- a/src/dutylog/application/bot/user_dialogs/states.py +++ b/src/dutylog/application/bot/user_dialogs/states.py @@ -3,3 +3,4 @@ from aiogram.fsm.state import State, StatesGroup class MainMenuSG(StatesGroup): main = State() + history = State()