заказы

This commit is contained in:
2025-12-21 03:45:02 +03:00
parent 83ecf65abf
commit 546c70cbcd
15 changed files with 862 additions and 38 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
+98
View File
@@ -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"}
+13
View File
@@ -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
+9 -5
View File
@@ -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.
+30
View File
@@ -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)