private void CreateSizeListItems(GenericProductViewModel model, List <GenericSizeVariationContent> variationItems)
        {
            if (model.GenericVariationViewModel != null)
            {
                List <SelectListItem> items = variationItems.Select(x =>
                {
                    var inventory = _inventoryService.GetTotal(new CatalogKey(AppContext.Current.ApplicationId, x.Code));
                    bool inStock  = inventory != null && inventory.InStockQuantity - inventory.ReservedQuantity > 0;
                    return(CreateSelectListItem(x.Size, x.Size + GetStockText(inStock), !inStock, x.Code));
                }).ToList();

                model.Size = items;
            }
        }
Esempio n. 2
0
        private void CreateSizeListItems(FashionProductViewModel model, List <FashionItemContent> fashionItems)
        {
            if (model.FashionItemViewModel != null)
            {
                List <SelectListItem> items =
                    fashionItems.Distinct(new FashionProductSizeVariationComparer())
                    .OrderBy(x => {
                    return(ShoppingController.SortSizes(model.SizeType + "/" + model.SizeUnit + "/" + x.Facet_Size));
                })
                    .Select(x => {
                    var inventory = _inventoryService.GetTotal(new CatalogKey(AppContext.Current.ApplicationId, x.Code));
                    bool inStock  = inventory != null && inventory.InStockQuantity - inventory.ReservedQuantity > 0;
                    return(CreateSelectListItem(x.Facet_Size, x.Facet_Size + GetStockText(inStock), !inStock, x.Code));
                }).ToList();

                model.Size = items;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Perform an additional stock check
        /// </summary>
        /// <param name="lineItems"></param>
        void ConfirmStocks(IEnumerable <LineItem> lineItems)
        {
            // TODO: Additonal stock check, if necessary - here is your chance to update stock from the ERP system for an example

            // TODO: Confirm use of default warehouse for your project
            var epiWarehouses = _warehouseRepository.List().Where(w => w.Code.Equals("default")).ToList();

            if (lineItems == null || lineItems.Any() == false)
            {
                return;
            }

            // [sku] = quantity, displayname
            var summary = new Dictionary <string, Tuple <decimal, string> >();

            foreach (var i in lineItems)
            {
                Tuple <decimal, string> quantity;

                if (summary.TryGetValue(i.Code, out quantity))
                {
                    quantity = new Tuple <decimal, string>(quantity.Item1 + i.Quantity, quantity.Item2);
                }
                else
                {
                    quantity = new Tuple <decimal, string>(i.Quantity, i.DisplayName);
                }

                summary[i.Code] = quantity;
            }

            foreach (var p in summary)
            {
                var catalogKey = new CatalogKey(Mediachase.Commerce.Core.AppContext.Current.ApplicationId, p.Key);
                var inventory  = _warehouseInventory.GetTotal(catalogKey, epiWarehouses);

                if (inventory == null || inventory.InStockQuantity < p.Value.Item1)
                {
                    /// TODO: Add language string
                    ModelState.AddModelError(string.Empty, "Variant is out of stock " + p.Value.Item2 + " (" + p.Key + ")");
                }
            }
        }