Files
2025-12-21 19:02:40 +03:00

108 lines
4.6 KiB
Python

from datetime import date, datetime, time
from sqlalchemy import func, select
from db import CRUD
from db.handlers.records import ServiceRecordsHandler
from db.schemas.orders import Orders
from utils.loggers import logger
class OrdersHandler:
@staticmethod
async def new(user_id: int, order: str):
try:
await Orders(customer_id=user_id, customer_comment=order).save()
await ServiceRecordsHandler.add(
user_id,
{f"Добавлен заказ": f"{order}"},
)
except Exception as e:
logger.error(f"Ошибка создания заказа: {str(e)}")
return {"errorMessage": f"Ошибка создания заказа: {str(e)}"}
return {"status": "ok"}
@staticmethod
async def get_all_by_consumer(
user_id: int, startDate: date, endDate: date, toDict: bool = True
):
try:
startDate = datetime.combine(startDate, time.min)
endDate = datetime.combine(endDate, time.max)
query = (
select(Orders)
.where(
Orders.customer_id == user_id,
Orders.created_at.between(startDate, endDate),
)
.order_by(Orders.created_at.asc())
)
orders = await CRUD.read(query, True)
ordresList = [order.toDict() for order in orders] if toDict else orders
return {"orders": ordresList}
except Exception as e:
logger.error(f"Ошибка получения заказов: {str(e)}")
return {"errorMessage": f"Ошибка получения заказов: {str(e)}"}
@staticmethod
async def get_all(startDate: date, endDate: date, toDict: bool = True):
try:
startDate = datetime.combine(startDate, time.min)
endDate = datetime.combine(endDate, time.max)
query = (
select(Orders)
.where(
Orders.created_at.between(startDate, endDate),
)
.order_by(Orders.created_at.asc())
)
orders = await CRUD.read(query, True)
ordresList = [order.toDict() for order in orders] if toDict else orders
return {"orders": ordresList}
except Exception as e:
logger.error(f"Ошибка получения заказов: {str(e)}")
return {"errorMessage": f"Ошибка получения заказов: {str(e)}"}
@staticmethod
async def countNew():
try:
query = select(func.count(Orders.id)).where(Orders.status == "new")
return {"orders": await CRUD.read(query)}
except Exception as e:
logger.error(f"Ошибка получения количества заказов: {str(e)}")
return {"errorMessage": f"Ошибка получения количества заказов: {str(e)}"}
@staticmethod
async def get(order_id: int, toDict: bool = False):
try:
order = await CRUD.read(select(Orders).where(Orders.id == order_id))
return order.toDict() if toDict else order
except Exception as e:
logger.error(f"Ошибка получения заказа: {str(e)}")
return {"errorMessage": f"Ошибка получения заказа: {str(e)}"}
@staticmethod
async def update(
order_id: int, user_id: int, status: str = None, comment: str = None
):
try:
if status is None and comment is None:
logger.error("Не указан статус и комментарий")
return {"errorMessage": "Не указан статус и комментарий"}
order = await OrdersHandler.get(order_id)
if not order or isinstance(order, dict):
logger.error("Заказ не найден")
return {"errorMessage": "Заказ не найден"}
changeData = {"executor_id": user_id}
if status:
changeData["status"] = status
if comment:
changeData["executor_comment"] = comment
await order.edit(**changeData)
await ServiceRecordsHandler.add(
user_id,
{f"Обновлен заказ": f"{order.customer_comment}"},
)
except Exception as e:
logger.error(f"Ошибка обновления заказа: {str(e)}")
return {"errorMessage": f"Ошибка обновления заказа: {str(e)}"}
return {"status": "ok"}