заказы
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,98 @@
|
||||
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"}
|
||||
@@ -25,6 +25,8 @@ def handleToolkitImage(imageData, title: str):
|
||||
|
||||
|
||||
class ToolkitHandler:
|
||||
|
||||
@staticmethod
|
||||
async def add(toolkitData: dict, user_id: int = None):
|
||||
title = toolkitData.get("title", None)
|
||||
if not title:
|
||||
@@ -71,6 +73,7 @@ class ToolkitHandler:
|
||||
await ServiceRecordsHandler.add(user_id, {"Добавлен инструмент": toolkitData})
|
||||
return newToolkit.toDict()
|
||||
|
||||
@staticmethod
|
||||
async def updateMovindDate(toolkitId: int):
|
||||
toolkit = await CRUD.read(select(Toolkit).where(Toolkit.id == toolkitId))
|
||||
if not toolkit:
|
||||
@@ -82,6 +85,7 @@ class ToolkitHandler:
|
||||
return False
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
async def updateRefillDate(toolkitId: int):
|
||||
logger.info(f"Обновление даты пополнения инструмента {toolkitId}...")
|
||||
toolkit = await CRUD.read(select(Toolkit).where(Toolkit.id == toolkitId))
|
||||
@@ -94,12 +98,14 @@ class ToolkitHandler:
|
||||
return False
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
async def hideToolkit(userId: int, toolkitId: int, hidden: bool = True):
|
||||
logger.info(
|
||||
f"{'Скрытие' if hidden else 'Отображение'} инструмента {toolkitId}..."
|
||||
)
|
||||
return await ToolkitHandler.edit(userId, id=toolkitId, hidden=hidden)
|
||||
|
||||
@staticmethod
|
||||
async def edit(user_id: int, **kwargs):
|
||||
title = kwargs.get("title", None)
|
||||
toolkitId = kwargs.pop("id")
|
||||
@@ -165,11 +171,13 @@ class ToolkitHandler:
|
||||
)
|
||||
return editedToolkit.toDict()
|
||||
|
||||
@staticmethod
|
||||
async def getAll():
|
||||
query = select(Toolkit)
|
||||
toolkits = await CRUD.read(query, True)
|
||||
return [toolkit.toDict() for toolkit in toolkits] if toolkits else []
|
||||
|
||||
@staticmethod
|
||||
async def get(toolkitId: int):
|
||||
query = select(Toolkit).where(Toolkit.id == toolkitId)
|
||||
toolkit = await CRUD.read(query)
|
||||
@@ -183,16 +191,19 @@ class ToolkitHandler:
|
||||
logger.info(data)
|
||||
return data
|
||||
|
||||
@staticmethod
|
||||
async def getSeveral(toolkitIds: list[int]) -> list[dict]:
|
||||
query = select(Toolkit).where(Toolkit.id.in_(toolkitIds))
|
||||
toolkits = await CRUD.read(query, True)
|
||||
return [toolkit.toDict() for toolkit in toolkits] if toolkits else []
|
||||
|
||||
@staticmethod
|
||||
async def checkCatogoryUse(category_id: int):
|
||||
query = select(Toolkit).where(Toolkit.category_id == category_id)
|
||||
toolkit = await CRUD.read(query)
|
||||
return True if toolkit else False
|
||||
|
||||
@staticmethod
|
||||
async def delete(toolkitId: int, user_id: int = None):
|
||||
movements = await StockHandler.checkToolkitExists(toolkitId)
|
||||
if movements:
|
||||
@@ -217,6 +228,7 @@ class ToolkitHandler:
|
||||
)
|
||||
return {"status": "ok"} if result else {"errorMessage": "Инструмент не удален"}
|
||||
|
||||
@staticmethod
|
||||
async def addComment(toolkitId: int, user_id: int, comment: str):
|
||||
logger.info(f"Добавление комментария к инструменту {toolkitId}...")
|
||||
logger.info(f"Комментарий: {comment}")
|
||||
@@ -236,6 +248,7 @@ class ToolkitHandler:
|
||||
logger.info(f"Комментарий к инструменту {toolkit.title} успешно добавлен")
|
||||
return {"status": "ok"}
|
||||
|
||||
@staticmethod
|
||||
async def initialize():
|
||||
from .categories import CategoryHandler
|
||||
|
||||
|
||||
@@ -4,13 +4,17 @@ from .toolkit import *
|
||||
from .categories import *
|
||||
from .toolbox import *
|
||||
from .stock import *
|
||||
|
||||
from .records import *
|
||||
from .orders import *
|
||||
|
||||
__all__ = [
|
||||
"User",
|
||||
"Access",
|
||||
"Toolbox",
|
||||
"Category",
|
||||
"Stock",
|
||||
"AccessLevel",
|
||||
"Toolkit",
|
||||
"Category",
|
||||
"Toolbox",
|
||||
"Stock",
|
||||
"StocksRecords",
|
||||
"ServicesRecords",
|
||||
"Orders",
|
||||
]
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,30 @@
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Text
|
||||
from db import CRUD, Base
|
||||
import utils
|
||||
|
||||
|
||||
class Orders(Base):
|
||||
__tablename__ = "orders"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
customer_id = Column(Integer, ForeignKey("users.id"))
|
||||
executor_id = Column(Integer, ForeignKey("users.id"), nullable=True)
|
||||
customer_comment = Column(Text, nullable=False)
|
||||
executor_comment = Column(String, nullable=True)
|
||||
status = Column(String, default="new")
|
||||
created_at = Column(DateTime, default=datetime.now)
|
||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
for key, value in kwargs.items():
|
||||
setattr(self, key, value)
|
||||
|
||||
def toDict(self):
|
||||
return utils.toDict(self)
|
||||
|
||||
async def save(self):
|
||||
return await CRUD.create(self, refresh=True)
|
||||
|
||||
async def edit(self, **kwargs):
|
||||
return await CRUD.update(Orders, self.id, **kwargs)
|
||||
Reference in New Issue
Block a user