Esempio n. 1
0
        private List <CartItem> ParseCartItems(IEnumerable <XElement> container)
        {
            List <CartItem> result = new List <CartItem>();

            try
            {
                if (container != null)
                {
                    foreach (var xEl in container)
                    {
                        var src = xEl.Descendants(_ns + "td")
                                  .WhereAttributeEquals("class", "item-image")
                                  .FirstOrNewXElement()
                                  .Elements(_ns + "img")
                                  .FirstOrNewXElement()
                                  .AttributeValue("src");

                        var detailsContainer = xEl.Descendants(_ns + "div")
                                               .WhereAttributeEquals("class", "product-list-item")
                                               .FirstOrNewXElement();

                        var name = detailsContainer.Elements(_ns + "div")
                                   .WhereAttributeEquals("class", "name")
                                   .FirstOrNewXElement()
                                   .ElementValue();

                        var href = detailsContainer.Elements(_ns + "div")
                                   .WhereAttributeEquals("class", "name")
                                   .FirstOrNewXElement()
                                   .Elements(_ns + "a")
                                   .FirstOrNewXElement()
                                   .AttributeValue("href")
                                   .Replace(Config.Urls.BaseUrl, string.Empty);

                        var productId = detailsContainer.Elements(_ns + "div")
                                        .WhereAttributeEquals("class", "sku")
                                        .FirstOrNewXElement()
                                        .Elements(_ns + "span")
                                        .WhereAttributeEquals("class", "value")
                                        .FirstOrNewXElement()
                                        .ElementValue();

                        var sku = ParsingHelper.GetSkuFromHref(href);

                        var color = detailsContainer.Descendants(_ns + "span")
                                    .WhereAttributeEquals("class", "value Color")
                                    .FirstOrNewXElement()
                                    .ElementValue();

                        var size = detailsContainer.Descendants(_ns + "span")
                                   .WhereAttributeEquals("class", "value Size")
                                   .FirstOrNewXElement()
                                   .ElementValue();

                        var width = detailsContainer.Descendants(_ns + "span")
                                    .WhereAttributeEquals("class", "value Width")
                                    .FirstOrNewXElement()
                                    .ElementValue();

                        var design = detailsContainer.Descendants(_ns + "span")
                                     .WhereAttributeEquals("class", "value Gift Card Design")
                                     .FirstOrNewXElement()
                                     .ElementValue();

                        var gcValue = detailsContainer.Descendants(_ns + "span")
                                      .WhereAttributeEquals("class", "value Gift Card Value")
                                      .FirstOrNewXElement()
                                      .ElementValue();

                        var qtyStr = xEl.Descendants(_ns + "td")
                                     .WhereAttributeEquals("class", "item-quantity")
                                     .FirstOrNewXElement()
                                     .Elements(_ns + "input")
                                     .FirstOrNewXElement()
                                     .AttributeValue("value");
                        var qty = 0;
                        Int32.TryParse(qtyStr, out qty);

                        var itemPrice = xEl.Descendants(_ns + "span")
                                        .WhereAttributeEquals("class", "price-standard")
                                        .FirstOrNewXElement()
                                        .ElementValue();

                        var specialPrice = xEl.Descendants(_ns + "span")
                                           .WhereAttributeEquals("class", "price-sales")
                                           .FirstOrNewXElement()
                                           .ElementValue();

                        var listPrice = xEl.Descendants(_ns + "span")
                                        .WhereAttributeEquals("class", "price-unadjusted")
                                        .FirstOrNewXElement()
                                        .ElementValue();

                        if (string.IsNullOrEmpty(itemPrice))
                        {
                            itemPrice    = specialPrice;
                            specialPrice = string.Empty;
                        }

                        var totalPrice = xEl.Descendants(_ns + "span")
                                         .WhereAttributeEquals("class", "price-total")
                                         .FirstOrNewXElement()
                                         .ElementValue();
                        var totalPriceLabel = string.Empty;
                        if (string.IsNullOrEmpty(totalPrice))
                        {
                            totalPrice = xEl.Descendants(_ns + "span")
                                         .WhereAttributeEquals("class", "price-adjusted-total")
                                         .FirstOrNewXElement()
                                         .ElementValue();
                            totalPriceLabel = xEl.Descendants(_ns + "div")
                                              .WhereAttributeEquals("class", "promo-adjustment")
                                              .Where(x => !string.IsNullOrEmpty(x.ElementValue()))
                                              .FirstOrNewXElement()
                                              .ElementValue();
                        }

                        var availabilityMessage = xEl.Descendants(_ns + "li")
                                                  .WhereAttributeEquals("class", "not-available")
                                                  .FirstOrNewXElement()
                                                  .ElementValue();

                        result.Add(new CartItem
                        {
                            Image = new Image {
                                Src = src
                            },
                            Name      = name,
                            Href      = href,
                            ProductId = productId,
                            Sku       = sku,
                            Color     = color,
                            Size      = size,
                            Width     = width,
                            Design    = design,
                            GCValue   = gcValue,
                            Quantity  = qty,
                            ItemPrice = new Price(itemPrice)
                            {
                                Label = "Reg. "
                            },
                            SpecialPrice = new Price(specialPrice)
                            {
                                Label = "Sale "
                            },
                            ListPrice = new Price(listPrice)
                            {
                                Label = "List Price"
                            },
                            TotalPrice = new Price(totalPrice)
                            {
                                Label = totalPriceLabel
                            },
                            AvailabilityMessage = availabilityMessage
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle(
                                "MadServ.CartService.ParseCartItems",
                                ErrorSeverity.FollowUp,
                                ErrorType.Parsing
                                ));
            }

            return(result);
        }