Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class OrderSG(StatesGroup):
- city = State()
- operator = State()
- tariff = State()
- async def get_data(dialog_manager: DialogManager, **kwargs):
- selected_city = dialog_manager.context.data("city_id", None)
- selected_operator = dialog_manager.context.data("operator_id", None)
- selected_tariff = dialog_manager.context.data("tariff_id", None)
- cities = [(city.name, city.id) for city in await City.query.gino.all()]
- operators = [(t_operator.name, t_operator.id) for t_operator in await Operator.query.gino.all()]
- if selected_operator is not None:
- tariffs = await Tariff.query.where(Tariff.operator_id == selected_operator).gino.all()
- tariffs_list = [(tariff.name, tariff.id) for tariff in tariffs]
- else:
- tariffs_list = []
- return {
- "cities": cities,
- "operators": operators,
- "tariffs": tariffs_list
- }
- async def on_cancel(query: CallbackQuery, button: Button, manager: DialogManager):
- ...
- async def on_city_selected(c: ChatEvent, select: Select, manager: DialogManager, item_id: str):
- ...
- async def on_operator_selected(c: ChatEvent, select: Select, manager: DialogManager, item_id: str):
- ...
- async def on_tariff_changed(c: ChatEvent, select: Select, manager: DialogManager, item_id: str):
- await c.message.edit_text(f"Selected: {item_id}")
- async def on_tariff_selected(c: ChatEvent, select: Select, manager: DialogManager, item_id: str):
- ...
- back_button = Back(Const(_("⬅️ Назад")))
- cancel_button = Button(Const(_("❌ Отмена")), id="cancel", on_click=on_cancel)
- select_city = Select(
- Format("{item[0]}"),
- id="s_cities",
- item_id_getter=operator.itemgetter(1),
- items="cities",
- on_click=on_city_selected,
- )
- select_operator = Select(
- Format("{item[0]}"),
- id="s_operators",
- item_id_getter=operator.itemgetter(1),
- items="operators",
- on_click=on_operator_selected,
- )
- select_tariff = Radio(
- Format("🔘 {item[0]}"),
- Format("⚪️ {item[0]}"),
- id="s_tariffs",
- item_id_getter=operator.itemgetter(1),
- items="tariffs",
- on_state_changed=on_tariff_changed,
- )
- window_city = Window(
- Const(_("Выберите ваш город")),
- Column(
- select_city
- ),
- Row(
- cancel_button
- ),
- state=OrderSG.city,
- getter=get_data,
- )
- window_operator = Window(
- Const(_("Выберите оператора")),
- Column(
- select_operator
- ),
- Row(
- back_button,
- cancel_button,
- ),
- state=OrderSG.operator,
- getter=get_data,
- )
- window_tariffs = Window(
- Const(_("Выберите тариф")),
- Column(
- select_tariff
- ),
- Row(
- back_button,
- cancel_button
- ),
- state=OrderSG.tariff,
- getter=get_data,
- )
- dialog = Dialog(
- window_city,
- window_operator,
- window_tariffs
- )
- registry.register(dialog)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement