- change worker_id choice
- append possibility to stop create order - change inline keyboard text
This commit is contained in:
@@ -4,10 +4,11 @@ from pathlib import Path
|
|||||||
import re
|
import re
|
||||||
from aiogram import Router, Bot, F
|
from aiogram import Router, Bot, F
|
||||||
from aiogram.filters import CommandStart, Command
|
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.exceptions import AiogramError
|
||||||
from aiogram.fsm.state import State, StatesGroup
|
from aiogram.fsm.state import State, StatesGroup
|
||||||
from aiogram.fsm.context import FSMContext
|
from aiogram.fsm.context import FSMContext
|
||||||
|
|
||||||
from sqlalchemy import select, insert
|
from sqlalchemy import select, insert
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from filters import IsAdmin
|
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"))
|
@orders_router.callback_query(lambda x: x.data.startswith("create_order"))
|
||||||
async def get_order_worker_id(callback: CallbackQuery, state: FSMContext):
|
async def get_order_worker_id(callback: CallbackQuery, state: FSMContext):
|
||||||
await state.set_state(OrderForm.worker_id)
|
await state.set_state(OrderForm.worker_id)
|
||||||
await callback.message.answer("Введите id сборщика который будет собирать заказ:",
|
async with async_session_() as session:
|
||||||
reply_markup=create_inline_kb(**{f"{callback.from_user.id}": "Ввести мой id"}))
|
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()
|
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)
|
@orders_router.callback_query(OrderForm.worker_id)
|
||||||
async def get_order_counterparty(message: Message | CallbackQuery, state: FSMContext):
|
async def get_order_customer(callback: CallbackQuery, state: FSMContext):
|
||||||
if isinstance(message, Message):
|
worker_tg_id = int(re.search(r"(\d+)", callback.data).group())
|
||||||
worker_id = int(message.text)
|
await callback.message.answer("Введите данные заказчика ",
|
||||||
msg = message
|
reply_markup=button_create(["❌ Прервать создание заказа"]))
|
||||||
else:
|
await callback.message.delete()
|
||||||
worker_id = int(message.data)
|
await state.update_data(worker_id=worker_tg_id)
|
||||||
msg = message.message
|
|
||||||
await msg.answer("Введите данные заказчика ")
|
|
||||||
await msg.delete()
|
|
||||||
await state.update_data(worker_id=worker_id)
|
|
||||||
await state.set_state(OrderForm.customer)
|
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)
|
@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.answer("Введите описание заказа в виде ключевых слов (АВР, ПСС, НКУ и т.д.) )")
|
||||||
|
await message.delete()
|
||||||
await state.update_data(customer=message.text)
|
await state.update_data(customer=message.text)
|
||||||
await state.set_state(OrderForm.description)
|
await state.set_state(OrderForm.description)
|
||||||
|
|
||||||
@@ -99,7 +108,7 @@ async def create_order(message: Message, state: FSMContext):
|
|||||||
session.add(Order(**order_))
|
session.add(Order(**order_))
|
||||||
|
|
||||||
await state.clear()
|
await state.clear()
|
||||||
await message.answer("Заказ успешно создан ")
|
await message.answer("Заказ успешно создан ", reply_markup=ReplyKeyboardRemove())
|
||||||
|
|
||||||
|
|
||||||
@orders_router.callback_query(lambda x: x.data == "find_orders")
|
@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:
|
async with async_session_() as local_session:
|
||||||
search_opt = await state.get_value("search_option")
|
search_opt = await state.get_value("search_option")
|
||||||
col = getattr(Order, search_opt)
|
col = getattr(Order, search_opt)
|
||||||
await message.answer(message.text)
|
|
||||||
result = await local_session.execute(
|
result = await local_session.execute(
|
||||||
select(Order).where(col.ilike(f"%{message.text}%") if search_opt != "id" else col == int(message.text)))
|
select(Order).where(col.ilike(f"%{message.text}%") if search_opt != "id" else col == int(message.text)))
|
||||||
selected_orders = result.scalars().all()
|
selected_orders = result.scalars().all()
|
||||||
|
|
||||||
if selected_orders:
|
if selected_orders:
|
||||||
await message.answer(text="Список заказов", reply_markup=create_inline_kb(width=1, **dict(
|
await message.answer(text="Список найденных заказов: ",
|
||||||
(f"show_order_{order.id}", order.description or "Отсутствует") for order in selected_orders)))
|
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.update_data(search_result=selected_orders)
|
||||||
await state.set_state(SearchForm.search_result)
|
await state.set_state(SearchForm.search_result)
|
||||||
else:
|
else:
|
||||||
|
Reference in New Issue
Block a user