public async Task <ActionResult <GoodInStock> > DoOPeration([FromRoute] int idOperation, [FromBody] GoodInStock goodInStock) { var operation = await _operationTypeRepository.GetByIdAsync(idOperation); bool valid = _goodInStockRepository.ValidateGood(goodInStock); try { if (!ModelState.IsValid) { _logger.LogError("Invalid model state."); return(BadRequest()); } if (valid == true && (operation.Name == "Расход" || operation.Name == "Приход" || operation.Name == "Внутреннее перемещение")) { return(BadRequest()); } else { await _goodInStockRepository.DoOperation(idOperation, goodInStock); return(Created($"/api/goodInStock/{goodInStock.Id}", goodInStock)); } } catch (Exception ex) { _logger.LogError("Exception adding new goodInStock: " + ex.Message); return(BadRequest()); } }
/// <summary> /// /// </summary> /// <param name="idOperation"></param> /// <param name="goodInStock"></param> /// <returns>do operations in stocks</returns> public async Task DoOperation(int idOperation, GoodInStock goodInStock) { var operation = await _operationTypeRepository.GetByIdAsync(idOperation); var duplicate = await _context.GoodInStocks.Where(i => i.GoodId == goodInStock.GoodId && i.StockId == goodInStock.StockId).FirstOrDefaultAsync(); var duplicateTo = await _context.GoodInStocks.Where(i => i.GoodId == goodInStock.GoodId && i.StockId == goodInStock.StockIdTo).FirstOrDefaultAsync(); if (operation.Name == "Приход") { if (duplicate == null) { goodInStock.DateAdded = DateTime.Now; await CreateAsync(goodInStock); OperationLog(idOperation); } else { duplicate.DateEdited = DateTime.Now; duplicate.Quantity += goodInStock.Quantity; await UpdateAsync(duplicate); OperationLog(idOperation); } } else if (operation.Name == "Расход" && duplicate != null) { duplicate.DateEdited = DateTime.Now; duplicate.Quantity -= goodInStock.Quantity; await UpdateAsync(duplicate); OperationLog(idOperation); } else { if (duplicateTo == null) { var goodInStockTo = new GoodInStock { Quantity = goodInStock.Quantity, GoodId = goodInStock.GoodId, StockId = goodInStock.StockIdTo, DateAdded = DateTime.Now }; await CreateAsync(goodInStockTo); OperationLog(idOperation); } else { duplicateTo.DateEdited = DateTime.Now; duplicateTo.Quantity += goodInStock.Quantity; await UpdateAsync(duplicateTo); OperationLog(idOperation); } duplicate.Quantity -= goodInStock.Quantity; duplicate.DateEdited = DateTime.Now; await UpdateAsync(duplicate); } }