fix imports
Some checks failed
continuous-integration/drone/push Build is failing

change sending list of orders
This commit is contained in:
2025-09-26 19:49:03 +03:00
parent 1af9a7b4d9
commit 355f81520c

View File

@@ -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"
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"
) for order in
selected_orders)))
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()
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)
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]