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())); }
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())); }