From c80faeb665cb104b07708692f99e3e5ba80c4206 Mon Sep 17 00:00:00 2001 From: kolo Date: Tue, 17 Mar 2026 20:27:30 +0300 Subject: [PATCH] update --- .../bot/admin_dialogs/admin_menu_dialog.py | 8 - .../bot/admin_dialogs/rooms_management.py | 176 +----------------- .../application/bot/user_dialogs/states.py | 4 - .../hours_transactions_repository.py | 26 --- 4 files changed, 9 insertions(+), 205 deletions(-) diff --git a/src/dutylog/application/bot/admin_dialogs/admin_menu_dialog.py b/src/dutylog/application/bot/admin_dialogs/admin_menu_dialog.py index e64cece..4c99eca 100644 --- a/src/dutylog/application/bot/admin_dialogs/admin_menu_dialog.py +++ b/src/dutylog/application/bot/admin_dialogs/admin_menu_dialog.py @@ -38,13 +38,9 @@ from dutylog.application.bot.admin_dialogs.rooms_management import ( room_history_window, room_delete_confirm_window, room_add_hours_select_window, - room_remove_hours_select_window, room_add_hours_custom_window, - room_remove_hours_custom_window, room_add_hours_remark_window, - room_remove_hours_remark_window, room_add_hours_confirm_window, - room_remove_hours_confirm_window, create_room_select_floor_window, create_room_input_window, create_room_confirm_window, @@ -106,13 +102,9 @@ admin_menu_dialog = Dialog( room_history_window, room_delete_confirm_window, room_add_hours_select_window, - room_remove_hours_select_window, room_add_hours_custom_window, - room_remove_hours_custom_window, room_add_hours_remark_window, - room_remove_hours_remark_window, room_add_hours_confirm_window, - room_remove_hours_confirm_window, create_room_select_floor_window, create_room_input_window, create_room_confirm_window, diff --git a/src/dutylog/application/bot/admin_dialogs/rooms_management.py b/src/dutylog/application/bot/admin_dialogs/rooms_management.py index 0180f13..9433f78 100644 --- a/src/dutylog/application/bot/admin_dialogs/rooms_management.py +++ b/src/dutylog/application/bot/admin_dialogs/rooms_management.py @@ -257,14 +257,6 @@ async def on_room_add_hours_click( await dialog_manager.switch_to(AdminMenuSG.room_add_hours_select) -async def on_room_remove_hours_click( - callback: CallbackQuery, - button: Button, - dialog_manager: DialogManager, -): - await dialog_manager.switch_to(AdminMenuSG.room_remove_hours_select) - - async def get_room_hours_select_data(**kwargs): hours_options = [ (5, "5"), (10, "10"), (15, "15"), (20, "20"), @@ -282,11 +274,7 @@ async def on_room_hours_selected( item_id: str, ): dialog_manager.dialog_data["selected_hours"] = int(item_id) - - if dialog_manager.current_context().state == AdminMenuSG.room_add_hours_select: - await dialog_manager.switch_to(AdminMenuSG.room_add_hours_remark) - else: - await dialog_manager.switch_to(AdminMenuSG.room_remove_hours_remark) + await dialog_manager.switch_to(AdminMenuSG.room_add_hours_remark) async def on_room_custom_hours_click( @@ -294,10 +282,7 @@ async def on_room_custom_hours_click( button: Button, dialog_manager: DialogManager, ): - if dialog_manager.current_context().state == AdminMenuSG.room_add_hours_select: - await dialog_manager.switch_to(AdminMenuSG.room_add_hours_custom) - else: - await dialog_manager.switch_to(AdminMenuSG.room_remove_hours_custom) + await dialog_manager.switch_to(AdminMenuSG.room_add_hours_custom) async def on_room_custom_hours_input( @@ -316,11 +301,7 @@ async def on_room_custom_hours_input( return dialog_manager.dialog_data["selected_hours"] = hours - - if dialog_manager.current_context().state == AdminMenuSG.room_add_hours_custom: - await dialog_manager.switch_to(AdminMenuSG.room_add_hours_remark) - else: - await dialog_manager.switch_to(AdminMenuSG.room_remove_hours_remark) + await dialog_manager.switch_to(AdminMenuSG.room_add_hours_remark) except ValueError: await message.answer("⚠️ Пожалуйста, введите корректное число") @@ -335,10 +316,7 @@ async def on_room_remark_input( else: dialog_manager.dialog_data["remark"] = None - if dialog_manager.current_context().state == AdminMenuSG.room_add_hours_remark: - await dialog_manager.switch_to(AdminMenuSG.room_add_hours_confirm) - else: - await dialog_manager.switch_to(AdminMenuSG.room_remove_hours_confirm) + await dialog_manager.switch_to(AdminMenuSG.room_add_hours_confirm) async def on_room_skip_remark( @@ -347,11 +325,7 @@ async def on_room_skip_remark( dialog_manager: DialogManager, ): dialog_manager.dialog_data["remark"] = None - - if dialog_manager.current_context().state == AdminMenuSG.room_add_hours_remark: - await dialog_manager.switch_to(AdminMenuSG.room_add_hours_confirm) - else: - await dialog_manager.switch_to(AdminMenuSG.room_remove_hours_confirm) + await dialog_manager.switch_to(AdminMenuSG.room_add_hours_confirm) async def get_room_hours_confirm_data( @@ -411,60 +385,6 @@ async def on_room_add_hours_confirm( await dialog_manager.switch_to(AdminMenuSG.room_info) -@inject -async def on_room_remove_hours_confirm( - callback: CallbackQuery, - button: Button, - dialog_manager: DialogManager, - transactions_repository: FromDishka[HoursTransactionsRepository], - rooms_repository: FromDishka[RoomsRepository], - residents_repository: FromDishka[ResidentsRepository], - users_repository: FromDishka[UsersRepository], - **kwargs, -): - bot: Bot = dialog_manager.middleware_data.get("bot") - - room_id = dialog_manager.dialog_data.get("selected_room_id") - hours = dialog_manager.dialog_data.get("selected_hours") - remark = dialog_manager.dialog_data.get("remark") - admin_id = callback.from_user.id - - if room_id and hours: - residents = await residents_repository.get_residents_by_room(room_id) - - for resident in residents: - if resident.active_hours < hours: - await callback.answer( - f"⚠️ Недостаточно часов! У резидента {resident.real_name or 'без имени'} только {resident.active_hours} неотработанных ч, а вы пытаетесь отнять {hours} ч", - show_alert=True - ) - await dialog_manager.switch_to(AdminMenuSG.room_info) - return - - results = await transactions_repository.remove_hours_from_room( - room_id=room_id, - amount=hours, - admin_id=admin_id, - remark=remark, - ) - - for transaction, resident in results: - if resident and resident.user_entity: - user = await users_repository.get_user_by_id(resident.user_entity) - if user: - try: - remark_text = f"\n💬 {remark}" if remark else "" - await bot.send_message( - user.id, - f"
📢 Уведомление
\n\n" - f"С вашей комнаты списано -{hours} ч{remark_text}" - ) - except (TelegramBadRequest, TelegramForbiddenError, TelegramRetryAfter): - pass - - await dialog_manager.switch_to(AdminMenuSG.room_info) - - async def on_room_hours_cancel( callback: CallbackQuery, button: Button, @@ -603,17 +523,10 @@ rooms_list_window = Window( room_info_window = Window( Format("{info_content}"), - Row( - Button( - Const("Добавить часы"), - id="room_add_hours_btn", - on_click=on_room_add_hours_click, - ), - Button( - Const("Отнять часы"), - id="room_remove_hours_btn", - on_click=on_room_remove_hours_click, - ), + Button( + Const("Добавить часы"), + id="room_add_hours_btn", + on_click=on_room_add_hours_click, ), Button( Const("📜 История"), @@ -678,32 +591,6 @@ room_add_hours_select_window = Window( getter=get_room_hours_select_data, ) -room_remove_hours_select_window = Window( - Const("
Отнять часы у комнаты
\n\nВыберите количество часов:"), - Group( - Select( - Format("{item[1]} ч"), - id="room_hours_select_remove", - item_id_getter=lambda x: x[0], - items="hours_options", - on_click=on_room_hours_selected, - ), - width=4, - ), - Button( - Const("✏️ Ввести свое количество"), - id="room_custom_hours_remove_btn", - on_click=on_room_custom_hours_click, - ), - SwitchTo( - Const("◀️ Отмена"), - id="cancel_room_remove_hours", - state=AdminMenuSG.room_info, - ), - state=AdminMenuSG.room_remove_hours_select, - getter=get_room_hours_select_data, -) - room_add_hours_custom_window = Window( Const("
✏️ Добавить часы
\n\nВведите количество часов:"), MessageInput(on_room_custom_hours_input), @@ -715,17 +602,6 @@ room_add_hours_custom_window = Window( state=AdminMenuSG.room_add_hours_custom, ) -room_remove_hours_custom_window = Window( - Const("
✏️ Отнять часы
\n\nВведите количество часов:"), - MessageInput(on_room_custom_hours_input), - SwitchTo( - Const("◀️ Отмена"), - id="cancel_room_custom_remove", - state=AdminMenuSG.room_remove_hours_select, - ), - state=AdminMenuSG.room_remove_hours_custom, -) - room_add_hours_remark_window = Window( Const("
💬 Примечание
\n\nВведите примечание к операции (или пропустите):"), MessageInput(on_room_remark_input), @@ -742,22 +618,6 @@ room_add_hours_remark_window = Window( state=AdminMenuSG.room_add_hours_remark, ) -room_remove_hours_remark_window = Window( - Const("
💬 Примечание
\n\nВведите примечание к операции (или пропустите):"), - MessageInput(on_room_remark_input), - Button( - Const("⏭ Пропустить"), - id="skip_room_remove_remark", - on_click=on_room_skip_remark, - ), - SwitchTo( - Const("◀️ Отмена"), - id="cancel_room_remove_remark", - state=AdminMenuSG.room_info, - ), - state=AdminMenuSG.room_remove_hours_remark, -) - room_add_hours_confirm_window = Window( Format("
Подтверждение
\n\nВы уверены, что хотите добавить {hours} часов?{remark_text}"), Row( @@ -776,24 +636,6 @@ room_add_hours_confirm_window = Window( getter=get_room_hours_confirm_data, ) -room_remove_hours_confirm_window = Window( - Format("
Подтверждение
\n\nВы уверены, что хотите отнять {hours} часов?{remark_text}"), - Row( - Button( - Const("✅ Да"), - id="confirm_room_remove_hours", - on_click=on_room_remove_hours_confirm, - ), - Button( - Const("❌ Нет"), - id="cancel_room_remove_hours_confirm", - on_click=on_room_hours_cancel, - ), - ), - state=AdminMenuSG.room_remove_hours_confirm, - getter=get_room_hours_confirm_data, -) - create_room_select_floor_window = Window( Format("{content}"), Group( diff --git a/src/dutylog/application/bot/user_dialogs/states.py b/src/dutylog/application/bot/user_dialogs/states.py index 6613c1e..464f3dc 100644 --- a/src/dutylog/application/bot/user_dialogs/states.py +++ b/src/dutylog/application/bot/user_dialogs/states.py @@ -45,13 +45,9 @@ class AdminMenuSG(StatesGroup): room_history = State() room_delete_confirm = State() room_add_hours_select = State() - room_remove_hours_select = State() room_add_hours_custom = State() - room_remove_hours_custom = State() room_add_hours_remark = State() room_add_hours_confirm = State() - room_remove_hours_remark = State() - room_remove_hours_confirm = State() create_room_select_floor = State() create_room_input = State() create_room_confirm = State() diff --git a/src/dutylog/infrastructure/database/repositories/hours_transactions_repository.py b/src/dutylog/infrastructure/database/repositories/hours_transactions_repository.py index cfca573..e9ed92b 100644 --- a/src/dutylog/infrastructure/database/repositories/hours_transactions_repository.py +++ b/src/dutylog/infrastructure/database/repositories/hours_transactions_repository.py @@ -139,7 +139,6 @@ class HoursTransactionsRepository: is_active: bool = True, remark: str | None = None, ) -> list[tuple[HoursTransaction, Resident | None]]: - """Начисляет часы всем резидентам комнаты с флагом per_room=True""" residents = await self.residents_dao.get_by_room(room_id) results = [] @@ -156,31 +155,7 @@ class HoursTransactionsRepository: return results - async def remove_hours_from_room( - self, - room_id: int, - amount: int, - admin_id: int | None = None, - remark: str | None = None, - ) -> list[tuple[HoursTransaction, Resident | None]]: - """Списывает часы у всех резидентов комнаты с флагом per_room=True""" - residents = await self.residents_dao.get_by_room(room_id) - results = [] - - for resident in residents: - result = await self.move_hours_to_completed( - resident_id=resident.id, - amount=amount, - admin_id=admin_id, - remark=remark, - per_room=True, - ) - results.append(result) - - return results - async def get_room_transactions(self, room_id: int) -> list[HoursTransaction]: - """Получает все транзакции резидентов комнаты с флагом per_room=True""" residents = await self.residents_dao.get_by_room(room_id) all_transactions = [] @@ -189,6 +164,5 @@ class HoursTransactionsRepository: room_transactions = [t for t in transactions if t.per_room] all_transactions.extend(room_transactions) - # Сортируем по дате создания all_transactions.sort(key=lambda t: t.created_at, reverse=True) return all_transactions