示例#1
0
        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"));
        }
示例#2
0
        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 }));
        }