работа с перемещением и списанием
This commit is contained in:
+87
-6
@@ -1,47 +1,64 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from sqlalchemy import select
|
||||
|
||||
from db.schemas import StocksRecords, ServicesRecords
|
||||
from utils import logger
|
||||
|
||||
|
||||
class StocksRecordsHandler:
|
||||
|
||||
async def add(
|
||||
action: str,
|
||||
source_toolbox_id: int,
|
||||
target_toolbox_id: int,
|
||||
source_stock_id: int,
|
||||
target_stock_id: int,
|
||||
toolkit_id: int,
|
||||
init_user_id: int,
|
||||
reason: str,
|
||||
quantity: int,
|
||||
price: float,
|
||||
source_toolbox_id: int = None,
|
||||
target_toolbox_id: int = None,
|
||||
return_record_id: bool = False,
|
||||
):
|
||||
recordData = {
|
||||
"action": action,
|
||||
"source_stock_id": source_stock_id,
|
||||
"target_stock_id": target_stock_id,
|
||||
"source_toolbox_id": source_toolbox_id,
|
||||
"target_toolbox_id": target_toolbox_id,
|
||||
"toolkit_id": toolkit_id,
|
||||
"init_user_id": init_user_id,
|
||||
"reason": reason,
|
||||
"quantity": quantity,
|
||||
"price": price,
|
||||
}
|
||||
if target_toolbox_id:
|
||||
recordData["target_toolbox_id"] = target_toolbox_id
|
||||
try:
|
||||
logger.info(f"Создание записи: {action} от {init_user_id}")
|
||||
logger.debug(recordData)
|
||||
record = StocksRecords(**recordData)
|
||||
await record.save()
|
||||
logger.info(f"Запись успешно создана, id: {record.id}")
|
||||
return True
|
||||
return True if not return_record_id else record.id
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка создания записи: {str(e)}")
|
||||
return False
|
||||
|
||||
async def accept(record_id: int, accept_user_id: int):
|
||||
async def accept(
|
||||
record_id: int,
|
||||
accept_user_id: int,
|
||||
source_stock_id: int,
|
||||
quantity: int,
|
||||
price: float,
|
||||
):
|
||||
try:
|
||||
logger.info(f"Принятие записи {record_id} от {accept_user_id}")
|
||||
record = await StocksRecords.get(id=record_id)
|
||||
record.accept_user_id = accept_user_id
|
||||
record.accepted_at = datetime.now()
|
||||
record.source_stock_id = source_stock_id
|
||||
record.quantity = quantity
|
||||
record.price = price
|
||||
await record.save()
|
||||
logger.info(
|
||||
f"Запись {record_id} успешно принята {accept_user_id} в {record.accepted_at.strftime('%Y-%m-%d %H:%M:%S')}"
|
||||
@@ -52,11 +69,58 @@ class StocksRecordsHandler:
|
||||
return False
|
||||
|
||||
async def edit(record_id: int, edit_user_id: int, **kwargs):
|
||||
def updateStockRecord(recordDB, editData):
|
||||
whatchList = ["toolkit_id", "quantity", "price", "placement"]
|
||||
for key in whatchList:
|
||||
if key in editData:
|
||||
setattr(recordDB, key, editData[key])
|
||||
return recordDB
|
||||
|
||||
try:
|
||||
from db.handlers.stock import StockHandler
|
||||
|
||||
logger.info(f"Обновление записи {record_id} от {edit_user_id}")
|
||||
|
||||
record = await StocksRecords.get(id=record_id)
|
||||
record.edit_user_id = edit_user_id
|
||||
record.edited_at = datetime.now()
|
||||
|
||||
logger.info("Вносим изменения в записи о движении инструмента")
|
||||
|
||||
if record.source_stock_id:
|
||||
logger.info(
|
||||
"Вносим изменения в записи о движении инструмента из исходного склада"
|
||||
)
|
||||
sourceStockRecord = await StockHandler.get(
|
||||
record.source_stock_id, record=True
|
||||
)
|
||||
if "source_toolbox_id" in kwargs:
|
||||
sourceStockRecord.toolbox_id = kwargs["source_toolbox_id"]
|
||||
|
||||
sourceStockRecord = updateStockRecord(sourceStockRecord, kwargs)
|
||||
await sourceStockRecord.save()
|
||||
logger.info(
|
||||
"Внесли изменения в записи о движении инструмента из исходного склада"
|
||||
)
|
||||
|
||||
if record.target_stock_id:
|
||||
logger.info(
|
||||
"Вносим изменения в записи о движении инструмента в целевой склад"
|
||||
)
|
||||
targetStockRecord = await StockHandler.get(
|
||||
record.target_stock_id, record=True
|
||||
)
|
||||
if "target_toolbox_id" in kwargs:
|
||||
targetStockRecord.toolbox_id = kwargs["target_toolbox_id"]
|
||||
|
||||
targetStockRecord = updateStockRecord(targetStockRecord, kwargs)
|
||||
await targetStockRecord.save()
|
||||
logger.info(
|
||||
"Внесли изменения в записи о движении инструмента в целевой склад"
|
||||
)
|
||||
|
||||
logger.info("Внесли изменения в записи о движении инструмента")
|
||||
|
||||
edited = {}
|
||||
for key, value in kwargs.items():
|
||||
originalValue = getattr(record, key)
|
||||
@@ -69,6 +133,7 @@ class StocksRecordsHandler:
|
||||
)
|
||||
logger.debug(edited)
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка обновления записи: {str(e)}")
|
||||
return False
|
||||
@@ -103,6 +168,22 @@ class StocksRecordsHandler:
|
||||
logger.error(f"Ошибка получения записей: {str(e)}")
|
||||
return False
|
||||
|
||||
async def getById(record_id: int, record: bool = False):
|
||||
from db import CRUD
|
||||
|
||||
try:
|
||||
logger.info(f"Получение записи {record_id}")
|
||||
query = select(StocksRecords).where(StocksRecords.id == record_id)
|
||||
stocksRecord = await CRUD.read(query)
|
||||
if not stocksRecord:
|
||||
logger.info(f"Запись {record_id} не найдена")
|
||||
return False
|
||||
logger.info(f"Запись {record_id} успешно получена")
|
||||
return stocksRecord.toDict() if not record else stocksRecord
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка получения записи: {str(e)}")
|
||||
return False
|
||||
|
||||
|
||||
class ServiceRecordsHandler:
|
||||
async def add(user_id: int, details: dict):
|
||||
|
||||
Reference in New Issue
Block a user