diff --git a/app/handlers/orders.py b/app/handlers/orders.py index 96d56f2..fb4c89e 100644 --- a/app/handlers/orders.py +++ b/app/handlers/orders.py @@ -4,10 +4,11 @@ from pathlib import Path import re from aiogram import Router, Bot, F from aiogram.filters import CommandStart, Command -from aiogram.types import Message, CallbackQuery, FSInputFile, InputMediaPhoto, InputMediaVideo +from aiogram.types import Message, CallbackQuery, FSInputFile, InputMediaPhoto, InputMediaVideo, ReplyKeyboardRemove from aiogram.exceptions import AiogramError from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.context import FSMContext + from sqlalchemy import select, insert from loguru import logger from filters import IsAdmin @@ -60,22 +61,29 @@ async def orders_menu(message: Message): @orders_router.callback_query(lambda x: x.data.startswith("create_order")) async def get_order_worker_id(callback: CallbackQuery, state: FSMContext): await state.set_state(OrderForm.worker_id) - await callback.message.answer("Введите id сборщика который будет собирать заказ:", - reply_markup=create_inline_kb(**{f"{callback.from_user.id}": "Ввести мой id"})) + async with async_session_() as session: + async with session.begin(): + result = await session.execute(select(Worker.name, Worker.telegram_id)) + workers = result.all() + await callback.message.answer("Введите сборщика ответственного за заказ:", + reply_markup=create_inline_kb( + **{f"set_worker_in_order_{tg_id}": name for name, tg_id in workers})) await callback.message.delete() +@orders_router.message(F.text == "❌ Прервать создание заказа") +async def order_description(message: Message, state: FSMContext): + await state.clear() + await message.answer("Создание заказа прервано", reply_markup=ReplyKeyboardRemove()) + + @orders_router.callback_query(OrderForm.worker_id) -async def get_order_counterparty(message: Message | CallbackQuery, state: FSMContext): - if isinstance(message, Message): - worker_id = int(message.text) - msg = message - else: - worker_id = int(message.data) - msg = message.message - await msg.answer("Введите данные заказчика ") - await msg.delete() - await state.update_data(worker_id=worker_id) +async def get_order_customer(callback: CallbackQuery, state: FSMContext): + worker_tg_id = int(re.search(r"(\d+)", callback.data).group()) + await callback.message.answer("Введите данные заказчика ", + reply_markup=button_create(["❌ Прервать создание заказа"])) + await callback.message.delete() + await state.update_data(worker_id=worker_tg_id) await state.set_state(OrderForm.customer) @@ -84,8 +92,9 @@ async def get_order_counterparty(message: Message | CallbackQuery, state: FSMCon # @orders_router.message(OrderForm.customer) -async def create_order(message: Message, state: FSMContext): +async def order_description(message: Message, state: FSMContext): await message.answer("Введите описание заказа в виде ключевых слов (АВР, ПСС, НКУ и т.д.) )") + await message.delete() await state.update_data(customer=message.text) await state.set_state(OrderForm.description) @@ -99,7 +108,7 @@ async def create_order(message: Message, state: FSMContext): session.add(Order(**order_)) await state.clear() - await message.answer("Заказ успешно создан ") + await message.answer("Заказ успешно создан ", reply_markup=ReplyKeyboardRemove()) @orders_router.callback_query(lambda x: x.data == "find_orders") @@ -123,13 +132,18 @@ async def search_by_item(message: Message, state: FSMContext): async with async_session_() as local_session: search_opt = await state.get_value("search_option") col = getattr(Order, search_opt) - await message.answer(message.text) result = await local_session.execute( select(Order).where(col.ilike(f"%{message.text}%") if search_opt != "id" else col == int(message.text))) selected_orders = result.scalars().all() + if selected_orders: - await message.answer(text="Список заказов", reply_markup=create_inline_kb(width=1, **dict( - (f"show_order_{order.id}", order.description or "Отсутствует") for order in selected_orders))) + await message.answer(text="Список найденных заказов: ", + reply_markup=create_inline_kb(width=1, **dict( + (f"show_order_{order.id}", f"Описание: {order.description or "Отсутствует"}" + f"Заказ: №{order.id}\n" + f"Заказчик: {order.customer}\n" + ) for order in + selected_orders))) await state.update_data(search_result=selected_orders) await state.set_state(SearchForm.search_result) else: