- change worker_id choice

- append possibility to stop create order
- change inline keyboard text
This commit is contained in:
2025-07-28 23:45:40 +03:00
parent cbb33f6da8
commit 1148d91598

View File

@@ -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: