public GenerateStockResult GenerateStock(StockGenerationModel model) { var warehouse = _session.Get <Warehouse>(model.WarehouseId); if (warehouse == null) { var message = _stringResourceProvider.GetValue(string.Format("{0}Warehouse not found", ResourcePrefix), "Cannot find the warehouse to add stock to"); return(GenerateStockResult.Failure(message)); } var productVariantsToTrack = _session.QueryOver <ProductVariant>() .Where(variant => variant.TrackingPolicy == TrackingPolicy.Track) .Cacheable() .List() .ToHashSet(); var newWarehouseStocks = productVariantsToTrack.Select(variant => new WarehouseStock { ProductVariant = variant, Warehouse = warehouse }).ToHashSet(); switch (model.StockGenerationType) { case StockGenerationType.FixedValue: newWarehouseStocks.ForEach(stock => stock.StockLevel = model.FixedValue); break; case StockGenerationType.CopyFromSystemValues: newWarehouseStocks.ForEach(stock => stock.StockLevel = stock.ProductVariant.StockRemaining); break; case StockGenerationType.CopyFromWarehouse: var stockLevels = _session.QueryOver <WarehouseStock>() .Where(stock => stock.Warehouse.Id == model.WarehouseToCopyId) .Cacheable() .List() .ToDictionary(stock => stock.ProductVariant.Id, stock => stock.StockLevel); newWarehouseStocks.ForEach(stock => { stock.StockLevel = stockLevels.ContainsKey(stock.ProductVariant.Id) ? stockLevels[stock.ProductVariant.Id] : 0; }); break; default: throw new ArgumentOutOfRangeException(); } _session.Transact(session => newWarehouseStocks.ForEach(stock => session.Save(stock))); return(GenerateStockResult.Success("Stock generated successfully")); }
public ActionResult GenerateStock(StockGenerationModel model) { var generateStock = _warehouseAdminService.GenerateStock(model); if (generateStock.IsSuccess) { TempData.SuccessMessages().Add(generateStock.Message); } else { TempData.ErrorMessages().Add(generateStock.Message); } return(RedirectToAction("Edit", new { id = model.WarehouseId })); }