public IHttpActionResult Add(AddToBasketDTO model)
        {
            string variantSku = null;
            var    product    = CatalogLibrary.GetProduct(model.Sku);

            if (model.Variants == null || !model.Variants.Any())
            {
                var variant = product.Variants.FirstOrDefault();

                if (variant != null)
                {
                    variantSku = variant.VariantSku;
                }
            }
            else
            {
                var variants = product.Variants.AsEnumerable();

                foreach (var v in model.Variants)
                {
                    variants = variants.Where(pv => pv.ProductProperties.Any(pp => pp.Value == v.Value));
                }

                var variant = variants.FirstOrDefault();
                if (variant != null)
                {
                    variantSku = variant.VariantSku;
                }
            }

            TransactionLibrary.AddToBasket(model.Quantity, model.Sku, variantSku);
            return(Json(this.GetBasketModel()));
        }
Exemple #2
0
        public IHttpActionResult Add(AddToBasketDTO model)
        {
            if (model.Quantity < 1)
            {
                var responseDTO = new OperationStatusDTO();
                responseDTO.Status  = "failed";
                responseDTO.Message = "Quantity must be greater than 0";

                return(this.Json(responseDTO));
            }

            string variantSku = null;
            var    product    = Product.FirstOrDefault(x => x.Sku == model.Sku && x.VariantSku == null);

            if (product == null)
            {
                var responseDTO = new OperationStatusDTO();
                responseDTO.Status  = "failed";
                responseDTO.Message = $"No product with SKU: '{ model.Sku}'";

                return(this.Json(responseDTO));
            }

            if (model.Variants != null && model.Variants.Any())
            {
                var productQuery = Product.All().Where(x => x.Sku == model.Sku);
                foreach (var variant in model.Variants)
                {
                    productQuery = productQuery.Where(x =>
                                                      x.ProductProperties.Any(y => y.Value == variant.Value && y.ProductDefinitionField.Name == variant.TypeName));
                }

                var result = productQuery.FirstOrDefault();

                if (result != null)
                {
                    variantSku = result.VariantSku;
                }
            }

            TransactionLibrary.AddToBasket((int)model.Quantity, model.Sku, variantSku);
            return(Json(this.GetBasketModel()));
        }