осталось немного дописать инициализацию БД и переходим к API

This commit is contained in:
2025-12-03 08:49:27 +03:00
parent f3213c696f
commit f378de38da
8 changed files with 98 additions and 27 deletions
+7 -1
View File
@@ -5,6 +5,7 @@ from .categories import *
from .stock import *
from .toolkit import *
from .records import *
from .actions import *
class InitializeDatabase:
@@ -17,6 +18,7 @@ class InitializeDatabase:
self.toolkitHandler = ToolkitHandler()
self.stocksRecordHandler = StocksRecordsHandler()
self.servicesRecordHandler = ServiceRecordsHandler()
self.actionsHandler = StocksActions()
async def initialize(self):
await self.accessHandler.initialize()
@@ -24,7 +26,7 @@ class InitializeDatabase:
await self.toolboxHandler.initialize()
await self.categoryHandler.initialize()
await self.toolkitHandler.initialize()
await self.stockHandler.initialize()
await self.actionsHandler.initialize()
__all__ = [
@@ -36,4 +38,8 @@ __all__ = [
"ToolkitHandler",
"StocksRecords",
"ServicesRecords",
"StocksRecordsHandler",
"ServiceRecordsHandler",
"StocksActions",
"InitializeDatabase",
]
+1
View File
@@ -146,6 +146,7 @@ class AccessLevelHandler:
"available_own_toolbox": True,
},
}
logger.info("Инициализация уровней доступа")
for accessLevel in baseAcessLevels.values():
await self.add(**accessLevel)
+77 -21
View File
@@ -40,11 +40,21 @@ class StocksActions:
reason=reason,
quantity=quantity,
price=price,
return_record_id=True,
)
logger.info(
f"Оприходование инструмента {toolkit_id} на складе {toolbox_id} прошло {'успешно' if recorded else 'не успешно'}"
)
return recorded
if recorded:
accepted = await StocksRecordsHandler.accept(
recorded, user_id, None, quantity, price
)
if not accepted:
logger.error(
f"Принятие записи о оприходовании инструмента {toolkit_id} на складе {toolbox_id} не удалось"
)
return accepted
return False
async def moving(
action: str,
@@ -74,7 +84,7 @@ class StocksActions:
return False
totalTakeQuantity = 0
writeDownLIst = []
writeDownList = []
for stock in availability:
if quantity == totalTakeQuantity:
@@ -99,7 +109,7 @@ class StocksActions:
)
if not target_toolbox_id:
writeDownLIst.append(
writeDownList.append(
{
"id": sourceEdit["id"],
"quantity": takeQuantity,
@@ -169,45 +179,45 @@ class StocksActions:
logger.info(
f"{action} инструмента {toolkit_id} со склада {source_toolbox_id} на склад {target_toolbox_id} прошло успешно"
)
return True if target_toolbox_id else writeDownLIst
return True if target_toolbox_id else writeDownList
async def writeDownRequest(
async def movingRequest(
action: str,
toolkit_id: int,
toolbox_id: int,
source_toolbox_id: int,
target_toolbox_id: int,
quantity: int,
reason: str,
user_id: int,
price: int = 0,
return_record_id: bool = False,
):
logger.info(
f"Запрос на списание инструмента {toolkit_id} со склада {toolbox_id} в количестве {quantity} по цене {price} ..."
f"Запрос на {action} инструмента {toolkit_id} со склада {source_toolbox_id} в количестве {quantity} по цене {price} ..."
)
recorded = await StocksRecordsHandler.add(
action="Списание",
action=action,
source_stock_id=None,
target_stock_id=None,
source_toolbox_id=toolbox_id,
target_toolbox_id=None,
source_toolbox_id=source_toolbox_id,
target_toolbox_id=target_toolbox_id,
toolkit_id=toolkit_id,
init_user_id=user_id,
reason=reason,
quantity=quantity,
price=price,
return_record_id=return_record_id,
)
logger.info(
f"Запрос на списание инструмента {toolkit_id} со склада {toolbox_id} в количестве {quantity} по цене {price} {'успешно завершен' if recorded else 'завершен с ошибкой'}"
f"Запрос на {action} инструмента {toolkit_id} со склада {source_toolbox_id} в количестве {quantity} по цене {price} {'успешно завершен' if recorded else 'завершен с ошибкой'}"
)
return recorded
async def writeDownAcceptance(self, record_id: int, user_id: int):
logger.info(f"Принятие записи о списании инструмента {record_id} ...")
async def movingAcceptance(self, record_id: int, user_id: int):
logger.info(f"Принятие записи о движении инструмента {record_id} ...")
writeDownARecord = await StocksRecordsHandler.getById(record_id, True)
if not writeDownARecord:
return False
if writeDownARecord.action != "Списание":
logger.error(
f"Запись {record_id} не является записью о списании инструмента"
)
logger.error(f"Запись {record_id} не найдена")
return False
if writeDownARecord.accepted_at is not None:
logger.error(f"Запись {record_id} уже была принята")
@@ -222,7 +232,7 @@ class StocksActions:
reason=writeDownARecord.reason,
)
if not stocksMovements:
logger.error(f"Ошибка при списании инструмента")
logger.error(f"Ошибка при {writeDownARecord.action} инструмента")
return False
accept = await StocksRecordsHandler.accept(
@@ -266,11 +276,57 @@ class StocksActions:
totalRecordsIds.append(recorded)
logger.info(
f"Записи {', '.join(map(str, totalRecordsIds))} о списании инструмента успешно приняты {user_id}"
f"Записи {', '.join(map(str, totalRecordsIds))} о {writeDownARecord.action} инструмента успешно приняты {user_id}"
)
return True
# TODO Дописать возврат на склад
async def takeToolkit(
self,
source_toolbox_id: int,
target_toolbox_id: int,
toolkit_id: int,
quantity: int,
reason: str,
user_id: int,
price: int = 0,
):
logger.info(
f"Формирование запроса на получение инструмента {toolkit_id} на склад {target_toolbox_id} со склада {source_toolbox_id} в количестве {quantity} ..."
)
takeRequest = await self.movingRequest(
action="Получение",
source_toolbox_id=source_toolbox_id,
target_toolbox_id=target_toolbox_id,
toolkit_id=toolkit_id,
quantity=quantity,
user_id=user_id,
reason=reason,
price=price,
return_record_id=True,
)
if not takeRequest:
logger.error(
f"Формирование запроса на получение инструмента {toolkit_id} не удалось"
)
return False
logger.info(
f"Формирование запроса на получение инструмента {toolkit_id} успешно завершено"
)
logger.info(
f"Принятие запроса {takeRequest} на получение инструмента {toolkit_id} ..."
)
accepted = await self.movingAcceptance(takeRequest, user_id)
if not accepted:
logger.error(
f"Принятие запроса {takeRequest} на получение инструмента {toolkit_id} не удалось"
)
return False
logger.info(
f"Принятие запроса {takeRequest} на получение инструмента {toolkit_id} успешно завершено"
)
return True
async def initialize():
# TODO прописать наполнение общих складов, получение на личные, возвраты и списания.
# Не все запросы на возвраты и списания нужно принять автоматически, нужно оставить несколько для демонстрации
pass
+1
View File
@@ -85,6 +85,7 @@ class CategoryHandler:
{"title": "Слесарка", "description": "Инструмент для слесарного цеха"},
]
logger.info("Создание базовых категорий")
for categoryData in baseCategories:
await CategoryHandler.add(categoryData)
-3
View File
@@ -110,6 +110,3 @@ class StockHandler:
f"Запись об остатках {stockInfo} успешно обновлена, изменены данные: {kwargs.keys()}"
)
return editedStock.toDict()
async def initialize():
pass
+9 -1
View File
@@ -1,7 +1,7 @@
from utils import logger
from db import CRUD
from db.schemas import Toolbox
from sqlalchemy import select
from sqlalchemy import or_, select
from db.handlers import ServiceRecordsHandler
@@ -70,6 +70,13 @@ class ToolboxHandler:
return {}
return toolbox.toDict()
async def getByOwner(ownerId: int) -> list:
query = select(Toolbox).where(
or_(Toolbox.owner_id == ownerId, Toolbox.owner_id == None)
)
toolboxes = await CRUD.read(query, True)
return [toolbox.toDict() for toolbox in toolboxes] if toolboxes else []
async def delete(toolboxId: int, user_id: int = None):
query = select(Toolbox).where(Toolbox.id == toolboxId)
toolbox = await CRUD.read(query)
@@ -106,6 +113,7 @@ class ToolboxHandler:
},
]
logger.info("Создание базовых тулбоксов")
for toolboxData in baseToolsboxes:
await ToolboxHandler.add(toolboxData)
+1
View File
@@ -158,6 +158,7 @@ class ToolkitHandler:
async def initialize(self):
from .categories import CategoryHandler
logger.info("Инициализация инструментов")
categoriesList = await CategoryHandler.getAll()
categories = {category["title"]: category["id"] for category in categoriesList}
+2 -1
View File
@@ -185,6 +185,7 @@ class UserHandler:
async def initialize(self):
from .access import AccessLevelHandler
logger.info("Инициализация пользователей")
accessLevelsList = await AccessLevelHandler.getAll()
acessLevels = {
accessLevel["title"]: accessLevel["id"] for accessLevel in accessLevelsList
@@ -218,5 +219,5 @@ class UserHandler:
for user in baseUsers.values():
await self.add(user)
logger.info("Инициализация модуля пользователей завершена")
logger.info("Инициализация пользователей завершена")
return