public void RemoveProduct(string userId, int productId, ApiProdAction info) { using var context = _di.GetService <ApplicationDbContext>(); var from = getStockAndVerify(productId, info, context); using var transaction = context.Database.BeginTransaction(); try { var date = DateTime.UtcNow; var action = new ProductAction() { ProductId = productId, Quantity = -info.Quantity, WarehouseId = info.FromId, Description = info.Description, UserId = userId, Date = date, Operation = OperationDescription.Delete }; context.ProductsTrqansactions.Add(action); context.SaveChanges(); // Commit transaction if all commands succeed, // transaction will auto-rollback when disposed if either commands fails transaction.Commit(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); // TODO: Handle failure throw; } }
public async Task <ApiResponseBase> Remove(int id, [FromBody] ApiProdAction model) { if (!ModelState.IsValid) { return(ModelState.ToApiBaseResponse()); } var user = await GetCurrentUserAsync(); _houseRepo.RemoveProduct(user?.Id, id, model); return(new ApiResponseBase()); }
private static WarehouseProducts getStockAndVerify(int productId, ApiProdAction info, ApplicationDbContext context) { var from = context.WarehouseProducts.Include(it => it.Product).FirstOrDefault(it => it.ProductId == productId && it.WarehouseId == info.FromId); if (from == null) { throw new ArgumentException($"Товар з ID {productId} не знайдено на складі"); } if (from.Quantity < info.Quantity) { throw new ArgumentException($"Не достатньо товарів на складі для здійстення продажі (ProductID: {from.Product.ProductType } - {from.Product.Model})"); } from.Quantity -= info.Quantity; return(from); }
public void AddProduct(string userId, int productId, ApiProdAction info) { using var context = _di.GetService <ApplicationDbContext>(); var from = context.WarehouseProducts.FirstOrDefault(it => it.ProductId == productId && it.WarehouseId == info.FromId); if (@from == null) { @from = new WarehouseProducts() { ProductId = productId, WarehouseId = info.FromId, Quantity = 0 }; context.WarehouseProducts.Add(@from); } @from.Quantity += info.Quantity; using var transaction = context.Database.BeginTransaction(); try { context.SaveChanges(); var date = DateTime.UtcNow; context.ProductsTrqansactions.Add(new ProductAction() { ProductId = productId, Quantity = info.Quantity, WarehouseId = info.FromId, UserId = userId, Date = date, Description = $"Товар додано адміністратором", Operation = OperationDescription.StockRenew, 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; } }