public void TransferProduct(string userId, int productId, ApiProdTransfer info) { using var context = _di.GetService <ApplicationDbContext>(); var from = getStockAndVerify(productId, info, context); using var transaction = context.Database.BeginTransaction(); try { var to = context.WarehouseProducts.FirstOrDefault(it => it.ProductId == productId && it.WarehouseId == info.ToId); if (to == null) { to = new WarehouseProducts() { ProductId = productId, WarehouseId = info.ToId, Quantity = 0 }; context.WarehouseProducts.Add(to); } to.Quantity += info.Quantity; context.SaveChanges(); var date = DateTime.UtcNow; context.ProductsTrqansactions.Add(new ProductAction { ProductId = productId, Quantity = -info.Quantity, WarehouseId = info.FromId, UserId = userId, Date = date, Description = $"Переміщення товару зі складу {info.FromId} на склад {info.ToId} (Зменшення)", Operation = OperationDescription.TransferRemove, Price = 0, }); context.SaveChanges(); context.ProductsTrqansactions.Add(new ProductAction() { ProductId = productId, Quantity = info.Quantity, WarehouseId = info.ToId, UserId = userId, Date = date, Description = $"Переміщення товару зі складу {info.FromId} на склад {info.ToId} (Збільшення)", Operation = OperationDescription.TransferAdd, Price = 0, }); context.SaveChanges(); // Commit transaction if all commands succeed, transaction will auto-rollback // when disposed if either commands fails transaction.Commit(); } catch (Exception ex) { // TODO: Handle failure throw ex; } }
public async Task <ApiResponseBase> Transfer(int id, [FromBody] ApiProdTransfer prodTransfer) { if (!ModelState.IsValid) { return(ModelState.ToApiBaseResponse()); } var user = await GetCurrentUserAsync(); _houseRepo.TransferProduct(user?.Id, id, prodTransfer); return(new ApiResponseBase()); }