show all photos immediately on transaction detail, remove All Photos button, fix bot KeyError

This commit is contained in:
2026-07-15 00:59:23 +03:00
parent 6d5608343a
commit ccd06c99b0
4 changed files with 64 additions and 204 deletions
@@ -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(
📅 <b>Дата:</b> {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",