89 lines
3.1 KiB
Python
89 lines
3.1 KiB
Python
from sqlalchemy import select
|
|
from db.schemas import Stock
|
|
from utils import logger
|
|
|
|
|
|
def filterQuantity(stocksData, filtered):
|
|
def filterStock(stock):
|
|
if stock.quantity > 0:
|
|
return stock
|
|
else:
|
|
return False
|
|
|
|
if isinstance(stocksData, list):
|
|
if len(stocksData) == 0:
|
|
return []
|
|
stocksData.sort(key=lambda stock: stock.created_at)
|
|
filteredStocks = (
|
|
list(filter(filterStock, stocksData)) if filtered else stocksData
|
|
)
|
|
return [stock.toDict() for stock in filteredStocks] if filteredStocks else []
|
|
else:
|
|
stock = filterStock(stocksData) if filtered else stocksData
|
|
if stock:
|
|
return stock.toDict()
|
|
else:
|
|
return {}
|
|
|
|
|
|
class StockHandler:
|
|
async def add(**kwargs):
|
|
newStock = await Stock(**kwargs).save()
|
|
logger.info(
|
|
f"Новая запись об инструменте {newStock.toolkit_data.title} на складе {newStock.toolbox_data.title} успешно создана"
|
|
)
|
|
return newStock.toDict()
|
|
|
|
async def getAll(filtered: bool = True):
|
|
from db import CRUD
|
|
|
|
stocks = await CRUD.read(select(Stock), all=True)
|
|
return filterQuantity(stocks, filtered)
|
|
|
|
async def get(stockId: int, filtered: bool = True):
|
|
from db import CRUD
|
|
|
|
stock = await CRUD.read(select(Stock).where(Stock.id == stockId))
|
|
if not stock:
|
|
logger.error("Запись об остатках не найдена")
|
|
return {}
|
|
return filterQuantity(stock, filtered)
|
|
|
|
async def getByToolboxId(toolboxId: int, filtered: bool = True):
|
|
from db import CRUD
|
|
|
|
query = select(Stock).where(Stock.toolbox_id == toolboxId)
|
|
stocks = await CRUD.read(query, True)
|
|
return filterQuantity(stocks, filtered)
|
|
|
|
async def getByToolkitId(toolkitId: int, filtered: bool = True):
|
|
from db import CRUD
|
|
|
|
query = select(Stock).where(Stock.toolkit_id == toolkitId)
|
|
stocks = await CRUD.read(query, True)
|
|
return filterQuantity(stocks, filtered)
|
|
|
|
async def edit(stockId: int, **kwargs):
|
|
from db import CRUD
|
|
|
|
stock = await CRUD.read(select(Stock).where(Stock.id == stockId))
|
|
if not stock:
|
|
logger.error("Запись об остатках не найдена")
|
|
return {}
|
|
try:
|
|
stockInfo = f"инструмента {stock.toolkit_data.title} на складе {stock.toolbox_data.title}"
|
|
editedStock = await stock.edit(**kwargs)
|
|
except Exception as e:
|
|
logger.error(f"Ошибка обновления записи об остатках: {str(e)}")
|
|
return {}
|
|
if not editedStock:
|
|
logger.error("Запись об остатках не обновлена")
|
|
return {}
|
|
logger.info(
|
|
f"Запись об остатках {stockInfo} успешно обновлена, изменены данные: {kwargs.keys()}"
|
|
)
|
|
return editedStock.toDict()
|
|
|
|
async def initialize():
|
|
pass
|