feat: warehouse places accounting

This commit is contained in:
2025-05-07 09:53:17 +04:00
parent 36ddf7d6a7
commit 42ce73dd6a
20 changed files with 889 additions and 1 deletions

View File

@@ -27,3 +27,4 @@ from .board import board_router
from .status import status_router
from .card_tag import card_tag_router
from .chat import chat_router
from .warehouse_management import wms_router

View File

@@ -0,0 +1,150 @@
from io import BytesIO
from fastapi import APIRouter, Depends, Response
from backend.dependecies import WmsSessionDependency
from generators.warehouse_place_qr_code_generator import WarehousePlaceQRCodeGenerator
from schemas.warehouse_management import *
from services.auth import authorized_user
from services.warehouse_management import WmsService
wms_router = APIRouter(
prefix="/wms",
tags=["wms"],
)
# region Place types
@wms_router.get(
'/place-type',
operation_id='get_place_types',
response_model=GetPlaceTypesResponse,
dependencies=[Depends(authorized_user)],
)
async def get_place_types(
session: WmsSessionDependency,
):
return await WmsService(session).get_place_types()
@wms_router.get(
'/place-type/flat/{parent_place_type_id}',
operation_id='get_flat_place_types',
response_model=GetFlatPlaceTypesResponse,
dependencies=[Depends(authorized_user)],
)
async def get_flat_place_types(
session: WmsSessionDependency,
parent_place_type_id: int,
):
return await WmsService(session).get_flat_place_types(parent_place_type_id)
@wms_router.post(
'/place-type',
operation_id='create_place_type',
response_model=CreatePlaceTypeResponse,
dependencies=[Depends(authorized_user)],
)
async def create_place_type(
session: WmsSessionDependency,
request: CreatePlaceTypeRequest,
):
return await WmsService(session).create_place_type(request)
@wms_router.patch(
'/place-type',
operation_id='edit_place_type',
response_model=EditPlaceTypeResponse,
dependencies=[Depends(authorized_user)],
)
async def edit_place_type(
session: WmsSessionDependency,
request: EditPlaceTypeRequest,
):
return await WmsService(session).edit_place_type(request)
@wms_router.delete(
'/place-type/{place_type_id}',
operation_id='delete_place_type',
response_model=DeletePlaceTypeResponse,
dependencies=[Depends(authorized_user)],
)
async def delete_place_type(
session: WmsSessionDependency,
place_type_id: int,
):
return await WmsService(session).delete_place_type(place_type_id)
# endregion
# region Places
@wms_router.get(
'/place',
operation_id='get_places',
response_model=GetPlacesResponse,
dependencies=[Depends(authorized_user)],
)
async def get_places(
session: WmsSessionDependency,
):
return await WmsService(session).get_places()
@wms_router.post(
'/place',
operation_id='create_place',
response_model=CreatePlaceResponse,
dependencies=[Depends(authorized_user)],
)
async def create_place(
session: WmsSessionDependency,
request: CreatePlaceRequest,
):
return await WmsService(session).create_place(request)
@wms_router.patch(
'/place',
operation_id='edit_place',
response_model=EditPlaceResponse,
dependencies=[Depends(authorized_user)],
)
async def edit_place(
session: WmsSessionDependency,
request: EditPlaceRequest,
):
return await WmsService(session).edit_place(request)
@wms_router.delete(
'/place/{place_id}',
operation_id='delete_place',
response_model=DeletePlaceResponse,
dependencies=[Depends(authorized_user)],
)
async def delete_place(
session: WmsSessionDependency,
place_id: int,
):
return await WmsService(session).delete_place(place_id)
@wms_router.get(
"/place/pdf/{place_id}/{is_short}",
operation_id="get_place_qr_code_pdf",
)
async def generate_place_qr_code_pdf(
session: WmsSessionDependency,
place_id: int,
is_short: bool = False,
):
pdf_file: BytesIO = await WarehousePlaceQRCodeGenerator(session).generate(place_id, is_short)
return Response(pdf_file.getvalue(), media_type="application/pdf")
# endregion