mirror of
https://github.com/koloideal/DutyLog.git
synced 2026-08-08 18:11:14 +03:00
add transaction deletion for creator: delete button in detail window, confirmation window, delete_transaction repo method
This commit is contained in:
@@ -85,6 +85,7 @@ from dutylog.application.bot.creator_dialogs.admins_management import (
|
||||
from dutylog.application.bot.creator_dialogs.transactions_history import (
|
||||
transactions_history_window,
|
||||
transactions_history_detail_window,
|
||||
transactions_history_delete_confirm_window,
|
||||
)
|
||||
|
||||
|
||||
@@ -151,4 +152,5 @@ admin_menu_dialog = Dialog(
|
||||
add_admin_confirm_window,
|
||||
transactions_history_window,
|
||||
transactions_history_detail_window,
|
||||
transactions_history_delete_confirm_window,
|
||||
)
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
from dutylog.application.bot.creator_dialogs.transactions_history import (
|
||||
transactions_history_window,
|
||||
transactions_history_detail_window,
|
||||
transactions_history_delete_confirm_window,
|
||||
)
|
||||
|
||||
__all__ = ["transactions_history_window", "transactions_history_detail_window"]
|
||||
__all__ = [
|
||||
"transactions_history_window",
|
||||
"transactions_history_detail_window",
|
||||
"transactions_history_delete_confirm_window",
|
||||
]
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
from aiogram import Bot
|
||||
from aiogram.enums import ContentType
|
||||
from aiogram.types import CallbackQuery, InputMediaPhoto
|
||||
from aiogram_dialog import Window
|
||||
from aiogram_dialog import Window, DialogManager
|
||||
from aiogram_dialog.widgets.text import Format, Const
|
||||
from aiogram_dialog.widgets.kbd import SwitchTo, ScrollingGroup, Select, Button
|
||||
from aiogram_dialog.widgets.kbd import SwitchTo, ScrollingGroup, Select, Button, Row
|
||||
from aiogram_dialog.widgets.media import DynamicMedia
|
||||
from aiogram_dialog.api.entities.media import MediaAttachment, MediaId
|
||||
from magic_filter import F
|
||||
@@ -112,6 +112,29 @@ async def on_creator_transaction_selected(
|
||||
await dialog_manager.switch_to(AdminMenuSG.transactions_history_detail)
|
||||
|
||||
|
||||
@inject
|
||||
async def on_delete_transaction_click(
|
||||
callback: CallbackQuery,
|
||||
button: Button,
|
||||
dialog_manager: DialogManager,
|
||||
):
|
||||
await dialog_manager.switch_to(AdminMenuSG.transactions_history_delete_confirm)
|
||||
|
||||
|
||||
@inject
|
||||
async def on_delete_transaction_confirm(
|
||||
callback: CallbackQuery,
|
||||
button: Button,
|
||||
dialog_manager: DialogManager,
|
||||
transactions_repository: FromDishka[HoursTransactionsRepository],
|
||||
):
|
||||
tx_id = dialog_manager.dialog_data.get("selected_transaction_id")
|
||||
if tx_id:
|
||||
await transactions_repository.delete_transaction(int(tx_id))
|
||||
await callback.answer("✅ Транзакция удалена", show_alert=True)
|
||||
await dialog_manager.switch_to(AdminMenuSG.transactions_history)
|
||||
|
||||
|
||||
@inject
|
||||
async def get_transaction_detail_data(
|
||||
dialog_manager,
|
||||
@@ -209,6 +232,13 @@ transactions_history_window = Window(
|
||||
transactions_history_detail_window = Window(
|
||||
DynamicMedia("photo_media"),
|
||||
Format("{detail_content}", when=F["detail_content"]),
|
||||
Row(
|
||||
Button(
|
||||
Const("🗑 Удалить"),
|
||||
id="delete_transaction_btn",
|
||||
on_click=on_delete_transaction_click,
|
||||
),
|
||||
),
|
||||
SwitchTo(
|
||||
Const("◀️ К списку"),
|
||||
id="back_to_transactions_from_detail",
|
||||
@@ -217,3 +247,20 @@ transactions_history_detail_window = Window(
|
||||
state=AdminMenuSG.transactions_history_detail,
|
||||
getter=get_transaction_detail_data,
|
||||
)
|
||||
|
||||
transactions_history_delete_confirm_window = Window(
|
||||
Const("<blockquote>🗑 <b>Удаление транзакции</b></blockquote>\n\n⚠️ Вы уверены, что хотите удалить эту транзакцию?\nЭто действие нельзя отменить."),
|
||||
Row(
|
||||
Button(
|
||||
Const("✅ Да, удалить"),
|
||||
id="confirm_delete_transaction_btn",
|
||||
on_click=on_delete_transaction_confirm,
|
||||
),
|
||||
),
|
||||
SwitchTo(
|
||||
Const("◀️ Назад"),
|
||||
id="back_to_transaction_detail",
|
||||
state=AdminMenuSG.transactions_history_detail,
|
||||
),
|
||||
state=AdminMenuSG.transactions_history_delete_confirm,
|
||||
)
|
||||
|
||||
@@ -73,6 +73,7 @@ class AdminMenuSG(StatesGroup):
|
||||
add_admin_confirm = State()
|
||||
transactions_history = State()
|
||||
transactions_history_detail = State()
|
||||
transactions_history_delete_confirm = State()
|
||||
|
||||
|
||||
class CreatorMenuSG(StatesGroup):
|
||||
|
||||
@@ -144,6 +144,9 @@ class HoursTransactionsRepository:
|
||||
) -> HoursTransaction | None:
|
||||
return await self.transactions_dao.get_by_id(transaction_id)
|
||||
|
||||
async def delete_transaction(self, transaction_id: int) -> None:
|
||||
await self.transactions_dao.delete(transaction_id)
|
||||
|
||||
async def get_by_period(self, start_date, end_date) -> list[HoursTransaction]:
|
||||
return await self.transactions_dao.get_by_period(start_date, end_date)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user