Files
toolbox/api/routers/toolkit.py
T

77 lines
3.1 KiB
Python

from fastapi import APIRouter, Depends
from db.handlers.categories import CategoryHandler
from db.handlers.stock import PlacementHandler, StockHandler
from db.handlers.toolbox import ToolboxHandler
from db.handlers.toolkit import ToolkitHandler
from utils import requestDict, logger
router = APIRouter()
@router.post("/", summary="Запрос остатка инструмента")
async def toolkit_request(
request_data: dict = Depends(requestDict),
):
response = {"status": "error", "data": {}}
logger.info(f"Получение запроса остатка инструмента")
# logger.info(request_data)
toolkitId = request_data.get("body").get("toolkitId")
stocks = await StockHandler.getByToolkitId(toolkitId)
if not stocks:
return response
userId = request_data.get("body").get("userId")
allToolboxes = request_data.get("body").get("allToolboxes")
toolboxes = (
await ToolboxHandler.getByOwner(userId)
if not allToolboxes
else await ToolboxHandler.getAll()
)
if not toolboxes:
return response
toolboxesTitles = {toolbox["id"]: toolbox["title"] for toolbox in toolboxes}
toolboxesOwners = {toolbox["id"]: toolbox["owner_id"] for toolbox in toolboxes}
stocksData = {"count": 0, "toolboxes": {}}
for stock in stocks:
toolboxTitle = toolboxesTitles.get(stock["toolbox_id"], None)
if not toolboxTitle:
continue
stocksData["count"] += stock["quantity"]
if toolboxTitle not in stocksData["toolboxes"]:
stocksData["toolboxes"][toolboxTitle] = {
"count": stock["quantity"],
"placement": stock["placement"],
}
logger.info(stock.keys())
if not toolboxesOwners.get(stock["toolbox_id"]):
stocksData["toolboxes"][toolboxTitle]["id"] = stock["toolbox_id"]
stocksData["toolboxes"][toolboxTitle]["totalCost"] = (
stock["price"] * stock["quantity"]
)
else:
stocksData["toolboxes"][toolboxTitle]["count"] += stock["quantity"]
if not toolboxesOwners.get(stock["toolbox_id"]):
stocksData["toolboxes"][toolboxTitle]["totalCost"] += (
stock["price"] * stock["quantity"]
)
response["status"] = "ok"
response["data"] = stocksData
return response
@router.post("/fill_prepare", summary="Подготовка заполнения ящика")
async def fill_toolbox():
logger.info(f"Подготовка заполнения ящика")
response = {"status": "error"}
toolkits = await ToolkitHandler.getAll()
categories = await CategoryHandler.getAll()
placements = await PlacementHandler.getAll()
if toolkits and categories:
response["status"] = "ok"
response["data"] = {
"toolkits": sorted(toolkits, key=lambda toolkit: toolkit["title"]),
"categories": sorted(categories, key=lambda category: category["title"]),
"placements": [placement.toDict() for placement in placements],
}
return response