create event
This commit is contained in:
52
app/bot/dialogs/flows/new_event/dialogs.py
Normal file
52
app/bot/dialogs/flows/new_event/dialogs.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from aiogram_dialog import Dialog, Window
|
||||
from aiogram_dialog.widgets.input import TextInput
|
||||
from aiogram_dialog.widgets.kbd import Back, Button, Calendar, Cancel
|
||||
from aiogram_dialog.widgets.text import Const, Jinja
|
||||
|
||||
from app.bot.dialogs.templates import event_template
|
||||
|
||||
from .getters import event_data_getter
|
||||
from .handlers import (
|
||||
confirm_creation,
|
||||
input_description,
|
||||
input_end_date,
|
||||
input_start_date,
|
||||
input_title,
|
||||
)
|
||||
from .states import NewEventSG
|
||||
|
||||
new_event_dialog = Dialog(
|
||||
Window(
|
||||
Const("Введите название:"),
|
||||
TextInput(id="title", on_success=input_title),
|
||||
Cancel(Const("❌ Отмена")),
|
||||
state=NewEventSG.input_title,
|
||||
),
|
||||
Window(
|
||||
Const("Введите описание:"),
|
||||
TextInput(id="description", on_success=input_description),
|
||||
Back(Const("◀️ Назад")),
|
||||
state=NewEventSG.input_description,
|
||||
),
|
||||
Window(
|
||||
Const("Выберите дату начала:"),
|
||||
Calendar(id="start_date", on_click=input_start_date),
|
||||
Back(Const("◀️ Назад")),
|
||||
state=NewEventSG.input_start_date,
|
||||
),
|
||||
Window(
|
||||
Const("Выберите дату окончания:"),
|
||||
Calendar(id="end_date", on_click=input_end_date),
|
||||
Back(Const("◀️ Назад")),
|
||||
state=NewEventSG.input_end_date,
|
||||
),
|
||||
Window(
|
||||
Jinja(event_template),
|
||||
Back(Const("◀️ Назад")),
|
||||
Cancel(Const("❌ Отмена")),
|
||||
Button(Const("✅ Создать"), id="cancel", on_click=confirm_creation),
|
||||
state=NewEventSG.confirm_creation,
|
||||
getter=event_data_getter,
|
||||
parse_mode="HTML",
|
||||
),
|
||||
)
|
||||
8
app/bot/dialogs/flows/new_event/getters.py
Normal file
8
app/bot/dialogs/flows/new_event/getters.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from aiogram.types import User
|
||||
from aiogram_dialog import DialogManager
|
||||
|
||||
|
||||
async def event_data_getter(
|
||||
dialog_manager: DialogManager, event_from_user: User, **kwargs
|
||||
):
|
||||
return {"event_obj": dialog_manager.dialog_data["event_obj"]}
|
||||
61
app/bot/dialogs/flows/new_event/handlers.py
Normal file
61
app/bot/dialogs/flows/new_event/handlers.py
Normal file
@@ -0,0 +1,61 @@
|
||||
from datetime import date
|
||||
|
||||
from aiogram.types import CallbackQuery
|
||||
from aiogram_dialog import DialogManager
|
||||
from aiogram_dialog.widgets.input import ManagedTextInput
|
||||
from aiogram_dialog.widgets.kbd import Button, Calendar
|
||||
|
||||
from app.infrastructure.database.crud import create_event
|
||||
|
||||
|
||||
async def input_title(
|
||||
callback: CallbackQuery,
|
||||
widget: ManagedTextInput,
|
||||
manager: DialogManager,
|
||||
text: date,
|
||||
):
|
||||
if "event_obj" not in manager.dialog_data:
|
||||
manager.dialog_data["event_obj"] = {}
|
||||
manager.dialog_data["event_obj"]["title"] = text
|
||||
await manager.next()
|
||||
|
||||
|
||||
async def input_description(
|
||||
callback: CallbackQuery,
|
||||
widget: ManagedTextInput,
|
||||
manager: DialogManager,
|
||||
text: date,
|
||||
):
|
||||
manager.dialog_data["event_obj"]["description"] = text
|
||||
await manager.next()
|
||||
|
||||
|
||||
async def input_start_date(
|
||||
callback: CallbackQuery,
|
||||
widget: Calendar,
|
||||
manager: DialogManager,
|
||||
selected_date: date,
|
||||
):
|
||||
manager.dialog_data["event_obj"]["start_date"] = selected_date
|
||||
await manager.next()
|
||||
|
||||
|
||||
async def input_end_date(
|
||||
callback: CallbackQuery,
|
||||
widget: Calendar,
|
||||
manager: DialogManager,
|
||||
selected_date: date,
|
||||
):
|
||||
manager.dialog_data["event_obj"]["end_date"] = selected_date
|
||||
await manager.next()
|
||||
|
||||
|
||||
async def confirm_creation(
|
||||
callback: CallbackQuery,
|
||||
button: Button,
|
||||
manager: DialogManager,
|
||||
):
|
||||
await create_event(
|
||||
manager.middleware_data["session"], **manager.dialog_data["event_obj"]
|
||||
)
|
||||
await manager.done()
|
||||
9
app/bot/dialogs/flows/new_event/states.py
Normal file
9
app/bot/dialogs/flows/new_event/states.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from aiogram.fsm.state import State, StatesGroup
|
||||
|
||||
|
||||
class NewEventSG(StatesGroup):
|
||||
input_title = State()
|
||||
input_description = State()
|
||||
input_start_date = State()
|
||||
input_end_date = State()
|
||||
confirm_creation = State()
|
||||
Reference in New Issue
Block a user