99 lines
4.3 KiB
Python
99 lines
4.3 KiB
Python
from datetime import date, datetime, time
|
|
from sqlalchemy import func, select
|
|
from db import CRUD
|
|
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()
|
|
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)
|
|
except Exception as e:
|
|
logger.error(f"Ошибка обновления заказа: {str(e)}")
|
|
return {"errorMessage": f"Ошибка обновления заказа: {str(e)}"}
|
|
return {"status": "ok"}
|