diff --git a/src/dutylog/application/bot/admin_dialogs/residents_management.py b/src/dutylog/application/bot/admin_dialogs/residents_management.py
index 69aa2f9..b59bb13 100644
--- a/src/dutylog/application/bot/admin_dialogs/residents_management.py
+++ b/src/dutylog/application/bot/admin_dialogs/residents_management.py
@@ -1,13 +1,10 @@
from aiogram import Bot
-from aiogram.enums import ContentType
from aiogram.types import Message, CallbackQuery, InputMediaPhoto
from aiogram.utils.markdown import html_decoration as hd
from aiogram_dialog import Window, DialogManager
from aiogram_dialog.widgets.text import Format, Const
from aiogram_dialog.widgets.kbd import Row, SwitchTo, Button, ScrollingGroup, Select, Group
from aiogram_dialog.widgets.input import MessageInput
-from aiogram_dialog.widgets.media import DynamicMedia
-from aiogram_dialog.api.entities.media import MediaAttachment, MediaId
from magic_filter import F
from dishka import FromDishka
from dishka.integrations.aiogram_dialog import inject
@@ -628,9 +625,23 @@ async def on_transaction_selected(
callback: CallbackQuery,
widget: Select,
dialog_manager: DialogManager,
+ transactions_repository: FromDishka[HoursTransactionsRepository],
item_id: str,
):
dialog_manager.dialog_data["selected_transaction_id"] = int(item_id)
+ tx = await transactions_repository.get_transaction_by_id(int(item_id))
+ if tx:
+ photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
+ if photo_file_ids:
+ bot: Bot = dialog_manager.middleware_data.get("bot")
+ try:
+ if len(photo_file_ids) == 1:
+ await bot.send_photo(callback.message.chat.id, photo_file_ids[0])
+ else:
+ media = [InputMediaPhoto(media=fid) for fid in photo_file_ids]
+ await bot.send_media_group(callback.message.chat.id, media=media)
+ except Exception:
+ pass
await dialog_manager.switch_to(AdminMenuSG.resident_history_detail)
@@ -645,12 +656,12 @@ async def get_transaction_detail_data(
tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
if not tx_id:
- return {"detail_content": "Ошибка: транзакция не выбрана", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не выбрана"}
tx = await transactions_repository.get_transaction_by_id(int(tx_id))
if not tx:
- return {"detail_content": "Ошибка: транзакция не найдена", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не найдена"}
operation = "Начислено" if tx.transaction_type == "increase" else "Списано"
emoji = "+" if tx.transaction_type == "increase" else "−"
@@ -674,50 +685,11 @@ async def get_transaction_detail_data(
📅 Дата: {date_str}{remark_text}{admin_info}
"""
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- photo_media = None
- if photo_file_ids:
- photo_media = MediaAttachment(
- type=ContentType.PHOTO,
- file_id=MediaId(file_id=photo_file_ids[0]),
- )
-
return {
"detail_content": content,
- "photo_media": photo_media,
- "has_multiple_photos": len(photo_file_ids) > 1,
- "photo_count": len(photo_file_ids),
}
-@inject
-async def on_show_all_photos(
- callback: CallbackQuery,
- button: Button,
- dialog_manager: DialogManager,
- transactions_repository: FromDishka[HoursTransactionsRepository],
- **kwargs,
-):
- tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
- if not tx_id:
- return
-
- tx = await transactions_repository.get_transaction_by_id(int(tx_id))
- if not tx:
- return
-
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- if len(photo_file_ids) <= 1:
- return
-
- bot: Bot = kwargs["bot"]
- media = [InputMediaPhoto(media=file_id) for file_id in photo_file_ids]
- try:
- await bot.send_media_group(callback.message.chat.id, media=media)
- except Exception:
- pass
-
-
async def on_search_transactions(
callback: CallbackQuery,
button: Button,
@@ -1140,14 +1112,7 @@ resident_history_window = Window(
)
resident_history_detail_window = Window(
- DynamicMedia("photo_media"),
Format("{detail_content}"),
- Button(
- Format("📷 Все фото ({photo_count})"),
- id="show_all_photos_btn",
- on_click=on_show_all_photos,
- when="has_multiple_photos",
- ),
SwitchTo(
Const("◀️ К списку"),
id="back_to_history_from_detail",
diff --git a/src/dutylog/application/bot/admin_dialogs/rooms_management.py b/src/dutylog/application/bot/admin_dialogs/rooms_management.py
index 63f36f7..298a58a 100644
--- a/src/dutylog/application/bot/admin_dialogs/rooms_management.py
+++ b/src/dutylog/application/bot/admin_dialogs/rooms_management.py
@@ -1,15 +1,12 @@
import json
from aiogram import Bot
-from aiogram.enums import ContentType
from aiogram.exceptions import TelegramBadRequest, TelegramForbiddenError, TelegramRetryAfter
from aiogram.types import Message, CallbackQuery, InputMediaPhoto
from aiogram_dialog import Window, DialogManager
from aiogram_dialog.widgets.text import Format, Const
from aiogram_dialog.widgets.kbd import SwitchTo, Button, ScrollingGroup, Select, Row, Group
from aiogram_dialog.widgets.input import MessageInput
-from aiogram_dialog.widgets.media import DynamicMedia
-from aiogram_dialog.api.entities.media import MediaAttachment, MediaId
from dishka import FromDishka
from dishka.integrations.aiogram_dialog import inject
@@ -509,40 +506,26 @@ async def on_room_transaction_selected(
callback: CallbackQuery,
widget: Select,
dialog_manager: DialogManager,
+ transactions_repository: FromDishka[HoursTransactionsRepository],
item_id: str,
):
dialog_manager.dialog_data["selected_transaction_id"] = int(item_id)
+ tx = await transactions_repository.get_transaction_by_id(int(item_id))
+ if tx:
+ photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
+ if photo_file_ids:
+ bot: Bot = dialog_manager.middleware_data.get("bot")
+ try:
+ if len(photo_file_ids) == 1:
+ await bot.send_photo(callback.message.chat.id, photo_file_ids[0])
+ else:
+ media = [InputMediaPhoto(media=fid) for fid in photo_file_ids]
+ await bot.send_media_group(callback.message.chat.id, media=media)
+ except Exception:
+ pass
await dialog_manager.switch_to(AdminMenuSG.room_history_detail)
-@inject
-async def on_show_room_all_photos(
- callback: CallbackQuery,
- button: Button,
- dialog_manager: DialogManager,
- transactions_repository: FromDishka[HoursTransactionsRepository],
- **kwargs,
-):
- tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
- if not tx_id:
- return
-
- tx = await transactions_repository.get_transaction_by_id(int(tx_id))
- if not tx:
- return
-
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- if len(photo_file_ids) <= 1:
- return
-
- bot: Bot = kwargs["bot"]
- media = [InputMediaPhoto(media=file_id) for file_id in photo_file_ids]
- try:
- await bot.send_media_group(callback.message.chat.id, media=media)
- except Exception:
- pass
-
-
@inject
async def get_room_transaction_detail_data(
dialog_manager: DialogManager,
@@ -553,12 +536,12 @@ async def get_room_transaction_detail_data(
tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
if not tx_id:
- return {"detail_content": "Ошибка: транзакция не выбрана", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не выбрана"}
tx = await transactions_repository.get_transaction_by_id(int(tx_id))
if not tx:
- return {"detail_content": "Ошибка: транзакция не найдена", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не найдена"}
operation = "Начислено" if tx.transaction_type == "increase" else "Списано"
emoji = "+" if tx.transaction_type == "increase" else "−"
@@ -582,19 +565,8 @@ async def get_room_transaction_detail_data(
📅 Дата: {date_str}{remark_text}{admin_info}
"""
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- photo_media = None
- if photo_file_ids:
- photo_media = MediaAttachment(
- type=ContentType.PHOTO,
- file_id=MediaId(file_id=photo_file_ids[0]),
- )
-
return {
"detail_content": content,
- "photo_media": photo_media,
- "has_multiple_photos": len(photo_file_ids) > 1,
- "photo_count": len(photo_file_ids),
}
@@ -837,14 +809,7 @@ room_history_window = Window(
)
room_history_detail_window = Window(
- DynamicMedia("photo_media"),
Format("{detail_content}"),
- Button(
- Format("📷 Все фото ({photo_count})"),
- id="show_room_all_photos_btn",
- on_click=on_show_room_all_photos,
- when="has_multiple_photos",
- ),
SwitchTo(
Const("◀️ К списку"),
id="back_to_room_history_from_detail",
diff --git a/src/dutylog/application/bot/creator_dialogs/transactions_history.py b/src/dutylog/application/bot/creator_dialogs/transactions_history.py
index 1baea96..73697b0 100644
--- a/src/dutylog/application/bot/creator_dialogs/transactions_history.py
+++ b/src/dutylog/application/bot/creator_dialogs/transactions_history.py
@@ -1,13 +1,10 @@
import json
from aiogram import Bot
-from aiogram.enums import ContentType
from aiogram.types import CallbackQuery, InputMediaPhoto
from aiogram_dialog import Window
from aiogram_dialog.widgets.text import Format, Const
from aiogram_dialog.widgets.kbd import SwitchTo, ScrollingGroup, Select, Button
-from aiogram_dialog.widgets.media import DynamicMedia
-from aiogram_dialog.api.entities.media import MediaAttachment, MediaId
from dishka import FromDishka
from dishka.integrations.aiogram_dialog import inject
@@ -76,40 +73,26 @@ async def on_creator_transaction_selected(
callback: CallbackQuery,
widget: Select,
dialog_manager,
+ transactions_repository: FromDishka[HoursTransactionsRepository],
item_id: str,
):
dialog_manager.dialog_data["selected_transaction_id"] = int(item_id)
+ tx = await transactions_repository.get_transaction_by_id(int(item_id))
+ if tx:
+ photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
+ if photo_file_ids:
+ bot: Bot = dialog_manager.middleware_data.get("bot")
+ try:
+ if len(photo_file_ids) == 1:
+ await bot.send_photo(callback.message.chat.id, photo_file_ids[0])
+ else:
+ media = [InputMediaPhoto(media=fid) for fid in photo_file_ids]
+ await bot.send_media_group(callback.message.chat.id, media=media)
+ except Exception:
+ pass
await dialog_manager.switch_to(AdminMenuSG.transactions_history_detail)
-@inject
-async def on_show_creator_all_photos(
- callback: CallbackQuery,
- button: Button,
- dialog_manager,
- transactions_repository: FromDishka[HoursTransactionsRepository],
- **kwargs,
-):
- tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
- if not tx_id:
- return
-
- tx = await transactions_repository.get_transaction_by_id(int(tx_id))
- if not tx:
- return
-
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- if len(photo_file_ids) <= 1:
- return
-
- bot: Bot = kwargs["bot"]
- media = [InputMediaPhoto(media=file_id) for file_id in photo_file_ids]
- try:
- await bot.send_media_group(callback.message.chat.id, media=media)
- except Exception:
- pass
-
-
@inject
async def get_transaction_detail_data(
dialog_manager,
@@ -122,12 +105,12 @@ async def get_transaction_detail_data(
tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
if not tx_id:
- return {"detail_content": "Ошибка: транзакция не выбрана", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не выбрана"}
tx = await transactions_repository.get_transaction_by_id(int(tx_id))
if not tx:
- return {"detail_content": "Ошибка: транзакция не найдена", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не найдена"}
operation = "Начислено" if tx.transaction_type == "increase" else "Списано"
emoji = "+" if tx.transaction_type == "increase" else "−"
@@ -159,19 +142,8 @@ async def get_transaction_detail_data(
📅 Дата: {date_str}{remark_text}
"""
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- photo_media = None
- if photo_file_ids:
- photo_media = MediaAttachment(
- type=ContentType.PHOTO,
- file_id=MediaId(file_id=photo_file_ids[0]),
- )
-
return {
"detail_content": content,
- "photo_media": photo_media,
- "has_multiple_photos": len(photo_file_ids) > 1,
- "photo_count": len(photo_file_ids),
}
@@ -200,14 +172,7 @@ transactions_history_window = Window(
)
transactions_history_detail_window = Window(
- DynamicMedia("photo_media"),
Format("{detail_content}"),
- Button(
- Format("📷 Все фото ({photo_count})"),
- id="show_creator_all_photos_btn",
- on_click=on_show_creator_all_photos,
- when="has_multiple_photos",
- ),
SwitchTo(
Const("◀️ К списку"),
id="back_to_transactions_from_detail",
diff --git a/src/dutylog/application/bot/user_dialogs/user_menu/history.py b/src/dutylog/application/bot/user_dialogs/user_menu/history.py
index 7a6b3ed..9546147 100644
--- a/src/dutylog/application/bot/user_dialogs/user_menu/history.py
+++ b/src/dutylog/application/bot/user_dialogs/user_menu/history.py
@@ -1,11 +1,8 @@
from aiogram import Bot
-from aiogram.enums import ContentType
from aiogram.types import User, CallbackQuery, InputMediaPhoto
from aiogram_dialog import Window
from aiogram_dialog.widgets.text import Format, Const
from aiogram_dialog.widgets.kbd import Back, ScrollingGroup, Select, SwitchTo, Button
-from aiogram_dialog.widgets.media import DynamicMedia
-from aiogram_dialog.api.entities.media import MediaAttachment, MediaId
from dishka import FromDishka
from dishka.integrations.aiogram_dialog import inject
@@ -70,40 +67,26 @@ async def on_user_transaction_selected(
callback: CallbackQuery,
widget: Select,
dialog_manager,
+ transactions_repository: FromDishka[HoursTransactionsRepository],
item_id: str,
):
dialog_manager.dialog_data["selected_transaction_id"] = int(item_id)
+ tx = await transactions_repository.get_transaction_by_id(int(item_id))
+ if tx:
+ photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
+ if photo_file_ids:
+ bot: Bot = dialog_manager.middleware_data.get("bot")
+ try:
+ if len(photo_file_ids) == 1:
+ await bot.send_photo(callback.message.chat.id, photo_file_ids[0])
+ else:
+ media = [InputMediaPhoto(media=fid) for fid in photo_file_ids]
+ await bot.send_media_group(callback.message.chat.id, media=media)
+ except Exception:
+ pass
await dialog_manager.switch_to(MainMenuSG.history_detail)
-@inject
-async def on_show_user_all_photos(
- callback: CallbackQuery,
- button: Button,
- dialog_manager,
- transactions_repository: FromDishka[HoursTransactionsRepository],
- **kwargs,
-):
- tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
- if not tx_id:
- return
-
- tx = await transactions_repository.get_transaction_by_id(int(tx_id))
- if not tx:
- return
-
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- if len(photo_file_ids) <= 1:
- return
-
- bot: Bot = kwargs["bot"]
- media = [InputMediaPhoto(media=file_id) for file_id in photo_file_ids]
- try:
- await bot.send_media_group(callback.message.chat.id, media=media)
- except Exception:
- pass
-
-
@inject
async def get_history_detail_data(
event_from_user: User,
@@ -116,12 +99,12 @@ async def get_history_detail_data(
tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
if not tx_id:
- return {"detail_content": "Ошибка: транзакция не выбрана", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не выбрана"}
tx = await transactions_repository.get_transaction_by_id(int(tx_id))
if not tx:
- return {"detail_content": "Ошибка: транзакция не найдена", "photo_media": None, "has_multiple_photos": False, "photo_count": 0}
+ return {"detail_content": "Ошибка: транзакция не найдена"}
operation = "Начислено" if tx.transaction_type == "increase" else "Списано"
emoji = "+" if tx.transaction_type == "increase" else "−"
@@ -145,19 +128,8 @@ async def get_history_detail_data(
📅 Дата: {date_str}{remark_text}{admin_info}
"""
- photo_file_ids = HoursTransactionsRepository.get_photo_file_ids(tx)
- photo_media = None
- if photo_file_ids:
- photo_media = MediaAttachment(
- type=ContentType.PHOTO,
- file_id=MediaId(file_id=photo_file_ids[0]),
- )
-
return {
"detail_content": content,
- "photo_media": photo_media,
- "has_multiple_photos": len(photo_file_ids) > 1,
- "photo_count": len(photo_file_ids),
}
@@ -182,14 +154,7 @@ history_window = Window(
)
history_detail_window = Window(
- DynamicMedia("photo_media"),
Format("{detail_content}"),
- Button(
- Format("📷 Все фото ({photo_count})"),
- id="show_user_all_photos_btn",
- on_click=on_show_user_all_photos,
- when="has_multiple_photos",
- ),
SwitchTo(
Const("◀️ К списку"),
id="back_to_history_from_detail",