склади и инструмент готовы

This commit is contained in:
2025-12-07 19:36:28 +03:00
parent 54bf21d52d
commit 65a3bc1671
65 changed files with 3485 additions and 115 deletions
+80
View File
@@ -0,0 +1,80 @@
from fastapi import APIRouter, Depends, Request
from db.handlers.categories import CategoryHandler
from utils import render, requestDict, logger
from .user import router as user
from .stocks import router as stocks
router = APIRouter()
router.include_router(user, prefix="/user", tags=["user"])
router.include_router(stocks, prefix="/stocks", tags=["stocks"])
@router.get("/")
async def main_page(request: Request):
return await render(request)
@router.post("/")
async def post_requests(
request_data: dict = Depends(requestDict),
):
from db.handlers.records import ServiceRecordsHandler, StocksRecordsHandler
from db.handlers.toolbox import ToolboxHandler
from db.handlers.toolkit import ToolkitHandler
from db.handlers.user import UserHandler
reqData = {
"tab": request_data.get("body").get("tabId"),
"userData": request_data.get("body").get("cookiesData").get("userData"),
"accessData": request_data.get("body").get("cookiesData").get("accessData"),
}
resultData = {"status": "error", "data": {}}
logger.info(f"Получение данных для вкладки {reqData.get('tab')}")
match reqData.get("tab"):
case "toolbox":
if reqData.get("accessData").get("view_all_toolboxes", False):
toolbox = await ToolboxHandler.getAll()
else:
toolbox = await ToolboxHandler.getByOwner(
reqData.get("userData").get("id")
)
if toolbox:
resultData["status"] = "ok"
resultData["data"] = toolbox
case "requests":
requests = await StocksRecordsHandler.get(reqData.get("userData").get("id"))
if isinstance(requests, list):
resultData["status"] = "ok"
resultData["data"] = requests
case "toolkits":
toolkits = await ToolkitHandler.getAll()
categories = await CategoryHandler.getAll()
if toolkits:
resultData["status"] = "ok"
resultData["data"] = {
"toolkits": toolkits,
"categories": categories,
}
case "jurnal_toolkits":
jurnal_toolkits = await StocksRecordsHandler.get()
if jurnal_toolkits:
resultData["status"] = "ok"
resultData["data"] = jurnal_toolkits
case "jurnal_service":
jurnal_service = await ServiceRecordsHandler.get()
if jurnal_service:
resultData["status"] = "ok"
resultData["data"] = jurnal_service
case "users":
users = await UserHandler.getAll()
if users:
for user in users:
user.pop("hashed_password")
resultData["status"] = "ok"
resultData["data"] = users
case _:
pass
return resultData
Binary file not shown.
Binary file not shown.
Binary file not shown.
+149
View File
@@ -0,0 +1,149 @@
from fastapi import APIRouter, Depends
from db.handlers.actions import StocksActions
from db.handlers.categories import CategoryHandler
from db.handlers.records import StocksRecordsHandler
from db.handlers.stock import StockHandler
from db.handlers.toolbox import ToolboxHandler
from db.handlers.toolkit import ToolkitHandler
from utils import requestDict, logger
router = APIRouter()
@router.post("/")
async def post_requests(
request_data: dict = Depends(requestDict),
):
toolboxId = request_data.get("body").get("toolboxId")
logger.info(f"Получение инструментов для тулбокса {toolboxId}")
response = {"status": "error", "data": {}}
stocksData = await StockHandler.getByToolboxId(toolboxId)
if not stocksData:
return response
toolkitsIds = set(stock["toolkit_id"] for stock in stocksData)
toolkitsData = await ToolkitHandler.getSeveral(list(toolkitsIds))
if not toolkitsData:
return response
categoriesIds = set(toolkit["category_id"] for toolkit in toolkitsData)
categoriesData = await CategoryHandler.getSeveral(list(categoriesIds))
if not categoriesData:
return response
response["status"] = "ok"
response["data"] = {
"stocks": stocksData,
"toolkits": toolkitsData,
"categories": categoriesData,
}
return response
@router.post("/action", summary="Запрос на перемещение инструмента")
async def post_requests(
request_data: dict = Depends(requestDict),
):
action = request_data.get("body").get("action").get("operation")
logger.info(f"Получение запроса на перемещение ({action}) инструмента")
userId = request_data.get("body").get("userData").get("id")
sourceTollboxId = (
request_data.get("body").get("action").get("selectedItem").get("toolboxId")
)
toolkitId = request_data.get("body").get("action").get("selectedItem").get("id")
quantity = request_data.get("body").get("action").get("quantity")
price = round(
request_data.get("body").get("action").get("selectedItem").get("totalCost")
/ request_data.get("body").get("action").get("selectedItem").get("available"),
2,
)
reason = request_data.get("body").get("action").get("comment")
resonse = {"status": "error"}
match action:
case "writeoff":
result = await StocksActions.movingRequest(
"Списание",
toolkitId,
sourceTollboxId,
None,
quantity,
reason,
userId,
price,
)
if result:
resonse["status"] = "ok"
case "get":
targetTollboxId = await ToolboxHandler.getIdByOwner(userId)
result = await StocksActions.takeToolkit(
sourceTollboxId,
targetTollboxId,
toolkitId,
quantity,
reason,
userId,
price,
)
if result:
resonse["status"] = "ok"
case "return":
targetTollboxId = await StocksRecordsHandler.getOriginalToolboxId(
toolkitId, sourceTollboxId
)
if targetTollboxId:
result = await StocksActions.movingRequest(
"Возврат",
toolkitId,
sourceTollboxId,
targetTollboxId,
quantity,
reason,
userId,
price,
)
if result:
resonse["status"] = "ok"
return resonse
@router.post("/toolkit", 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}
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"],
}
else:
stocksData["toolboxes"][toolboxTitle]["count"] += stock["quantity"]
response["status"] = "ok"
response["data"] = stocksData
logger.info(response)
return response
+44
View File
@@ -0,0 +1,44 @@
from fastapi import APIRouter, Depends, Request
from db.handlers.access import AccessLevelHandler
from db.handlers.user import UserHandler
from utils import requestDict, logger, render
router = APIRouter()
@router.get("/", name="userInfo", summary="Получение информации о пользователе")
async def get_user():
return
@router.post("/")
async def create_user():
return
@router.get("/login", name="Authentication", summary="Авторизация пользователя")
async def authenticationPage(request: Request):
return await render(request)
@router.post("/login")
async def authentication(
request_data: dict = Depends(requestDict),
):
resultData = {"status": "error", "user": {}, "access": {}}
login = request_data.get("body").get("login", None)
password = request_data.get("body").get("password", None)
if not login or not password:
logger.error("Не указан логин или пароль")
return resultData
userData = await UserHandler.auth(login, password)
if not userData:
return resultData
accessData = await AccessLevelHandler.get(userData["access_level_id"])
if not accessData:
return resultData
resultData["status"] = "ok"
resultData["user"] = userData
resultData["access"] = accessData
return resultData