change sending list of orders
This commit is contained in:
@@ -1,25 +1,19 @@
|
||||
import asyncio
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
from pathlib import Path
|
||||
from aiogram import Router, Bot, F
|
||||
from aiogram.filters import CommandStart, Command
|
||||
from aiogram.filters import Command
|
||||
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 sqlalchemy import select
|
||||
from loguru import logger
|
||||
from filters import IsAdmin
|
||||
from keyboards import create_inline_kb, commands, button_create
|
||||
from keyboards import create_inline_kb, button_create
|
||||
from database import async_session_, Order, Worker
|
||||
from FSM import SearchForm, OrderForm
|
||||
|
||||
orders_router = Router()
|
||||
|
||||
# orders_router.message.filter()
|
||||
|
||||
order_operation_base = {"add_order_photo": "Добавить фото",
|
||||
"get_order_photo": "Получить фото",
|
||||
"get_order_components": "Получить список комплектующих",
|
||||
@@ -27,7 +21,7 @@ order_operation_base = {"add_order_photo": "Добавить фото",
|
||||
}
|
||||
order_operation_update = {"add_order_documentation": "Добавить документацию"}
|
||||
|
||||
order_main = {"find_orders": "Найти заказ"}
|
||||
order_main = {"find_orders": "Найти заказ", "create_order": "Создать заказ"}
|
||||
order_main_update = {"create_order": "Создать заказ"}
|
||||
|
||||
find_order_params = {"search_by_name": "Поиск по названию", "search_by_description": "Поиск по описанию ",
|
||||
@@ -36,9 +30,9 @@ find_order_params = {"search_by_name": "Поиск по названию", "sear
|
||||
|
||||
@orders_router.message(Command(commands="orders"))
|
||||
async def orders_menu(message: Message):
|
||||
order_main_upd = order_main_update if await IsAdmin()(message) else {}
|
||||
await message.answer(text="Доступные действия с заказами:",
|
||||
reply_markup=create_inline_kb(width=1, **order_main, **order_main_upd))
|
||||
reply_markup=create_inline_kb(width=1, **order_main))
|
||||
await message.delete()
|
||||
|
||||
|
||||
@orders_router.callback_query(lambda x: x.data.startswith("create_order"))
|
||||
@@ -69,10 +63,6 @@ async def get_order_customer(callback: CallbackQuery, state: FSMContext):
|
||||
await state.set_state(OrderForm.customer)
|
||||
|
||||
|
||||
# @orders_router.callback_query(OrderForm.counterparty)
|
||||
# async def get_order_customer(message: Message, state: FSMContext):
|
||||
#
|
||||
|
||||
@orders_router.message(OrderForm.customer)
|
||||
async def order_description(message: Message, state: FSMContext):
|
||||
await message.answer("Введите описание заказа в виде ключевых слов (АВР, ПСС, НКУ и т.д.) )")
|
||||
@@ -119,13 +109,18 @@ async def search_by_item(message: Message, state: FSMContext):
|
||||
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}", f"Описание: {order.description or "Отсутствует"}"
|
||||
f"Заказ: №{order.id}\n"
|
||||
f"Заказчик: {order.customer}\n"
|
||||
) for order in
|
||||
selected_orders)))
|
||||
await message.answer(text="Список найденных заказов: ")
|
||||
sent_messages = []
|
||||
for order in selected_orders:
|
||||
sent_messages.append(await message.answer(text=f"Номер заказа: {order.id}\n"
|
||||
f"Заказчик: {order.customer}\n"
|
||||
f"Статус: {order.status_id}\n"
|
||||
f"Дата отгрузки: {order.end_work}\n"
|
||||
f"Дата создания: {order.created_at}\n"
|
||||
f"Описание: {order.description}",
|
||||
reply_markup=create_inline_kb(width=1, **{
|
||||
f"show_order_{order.id}": f"Заказ: №{order.id}"})))
|
||||
await state.update_data(sent_messages=sent_messages)
|
||||
await state.update_data(search_result=selected_orders)
|
||||
await state.set_state(SearchForm.search_result)
|
||||
else:
|
||||
@@ -133,8 +128,8 @@ async def search_by_item(message: Message, state: FSMContext):
|
||||
await state.clear()
|
||||
|
||||
|
||||
@orders_router.callback_query(SearchForm.search_result)
|
||||
async def show_order(callback: CallbackQuery, state: FSMContext):
|
||||
@orders_router.callback_query(SearchForm.search_result and (lambda x: "show_order_" in x.data))
|
||||
async def show_order(callback: CallbackQuery, state: FSMContext, bot: Bot):
|
||||
order_id = int(re.search(r"(\d+)", callback.data).group())
|
||||
|
||||
try:
|
||||
@@ -145,7 +140,7 @@ async def show_order(callback: CallbackQuery, state: FSMContext):
|
||||
except Exception as err:
|
||||
logger.warning(err)
|
||||
|
||||
order_operation_upd = order_operation_update if await IsAdmin()(callback) else {}
|
||||
order = next(filter(lambda item: order_id == item.id, await state.get_value("search_result")), None)
|
||||
|
||||
if order:
|
||||
await callback.message.answer(text=f"Номер заказа: {order.id}\n"
|
||||
@@ -159,17 +154,18 @@ async def show_order(callback: CallbackQuery, state: FSMContext):
|
||||
(f"{clbk}_{order.id}", text) for clbk, text in order_operation_base.items()))
|
||||
)
|
||||
|
||||
await callback.message.delete()
|
||||
await state.clear()
|
||||
for message in SearchForm.sent_messages:
|
||||
await bot.delete_message(chat_id=callback.message.chat.id, message_id=message.message_id)
|
||||
await state.clear()
|
||||
|
||||
|
||||
@orders_router.callback_query(lambda x: x.data.startswith("get_order_photo"))
|
||||
async def send_order_photos(callback: CallbackQuery, bot: Bot):
|
||||
order_id = callback.data.split("_")[-1]
|
||||
media_item: Path
|
||||
media_group = []
|
||||
os.makedirs(Path(f"./photos/{order_id}/"), exist_ok=True)
|
||||
media_path = Path(f"./photos/{order_id}/").iterdir()
|
||||
order_photos_path = Path(f"/app/photos/{order_id}/")
|
||||
os.makedirs(order_photos_path, exist_ok=True)
|
||||
media_path = order_photos_path.iterdir()
|
||||
if not (media_item := next(media_path, None)):
|
||||
text = f"Фото по заказу \"{order_id}\" отсутствуют "
|
||||
else:
|
||||
@@ -177,7 +173,7 @@ async def send_order_photos(callback: CallbackQuery, bot: Bot):
|
||||
f"")
|
||||
await bot.send_message(chat_id=callback.from_user.id, text=text)
|
||||
while media_item or media_group:
|
||||
if len(media_group) == 10 or (media_group and not media_item):
|
||||
if len(media_group) == 10 or not media_item:
|
||||
await bot.send_media_group(chat_id=callback.from_user.id, media=media_group)
|
||||
media_group.clear()
|
||||
if media_item:
|
||||
@@ -188,8 +184,10 @@ async def send_order_photos(callback: CallbackQuery, bot: Bot):
|
||||
logger.error(f"Ошибка при обработке {media_path}: {err}")
|
||||
|
||||
media_item = next(media_path, None)
|
||||
await asyncio.sleep(600)
|
||||
await callback.message.delete()
|
||||
try:
|
||||
await callback.message.delete()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
@orders_router.callback_query(lambda x: x.data.startswith("add_order_photo"))
|
||||
@@ -204,7 +202,7 @@ async def reply_for_photo(callback: CallbackQuery, bot: Bot):
|
||||
F.reply_to_message)
|
||||
async def add_order_photo(message: Message, bot: Bot):
|
||||
order_id = re.search(r"(\d+)", message.reply_to_message.text).group()
|
||||
order_photos_path = f"/app/photos/{order_id}/"
|
||||
order_photos_path = Path(f"/app/photos/{order_id}/")
|
||||
os.makedirs(order_photos_path, exist_ok=True)
|
||||
|
||||
item = message.video or message.photo[-1]
|
||||
|
||||
Reference in New Issue
Block a user