예제 #1
0
        public IResponseBase ParseCart(IResultResponse response, IRequestParameter parameters)
        {
            Response <CartResponse> result = new Response <CartResponse>();

            try
            {
                // Check If Cart Is Empty
                var emptyCartCheck = _xDoc.Descendants(_ns + "div")
                                     .WhereAttributeEquals("class", "cart-empty")
                                     .Any();

                if (!emptyCartCheck)
                {
                    var mainContainer = _xDoc.Descendants(_ns + "form")
                                        .WhereAttributeEquals("id", "cart-items-form")
                                        .FirstOrNewXElement();

                    // Get Cart Items
                    var itemsContainer = mainContainer.Descendants(_ns + "tr")
                                         .WhereAttributeEquals("class", "cart-row");

                    var items = ParseCartItems(itemsContainer);

                    //cperez:SPAY-43: MasterID is the LOT + Size. This is the equivalent to SKU
                    if (items != null && items.Any())
                    {
                        foreach (var cartItem in items)
                        {
                            cartItem.MasterProductId = cartItem.Sku;
                        }
                    }

                    // Get Price Summary
                    var summaryContainer = mainContainer.Descendants(_ns + "table")
                                           .WhereAttributeEquals("class", "order-totals-table")
                                           .FirstOrNewXElement();

                    var summary = ParseCartSummary(summaryContainer);

                    // Get Coupons
                    var couponsContainer = mainContainer.Descendants(_ns + "tr")
                                           .WhereAttributeEquals("class", "rowcoupons");

                    var coupons = ParseCartCoupons(couponsContainer);

                    // Get Promo Message
                    var promoMessage = mainContainer.Descendants(_ns + "div")
                                       .WhereAttributeEquals("class", "cart-promo")
                                       .FirstOrNewXElement()
                                       .ElementValue();

                    // Get DWQuery
                    var action  = mainContainer.AttributeValue("action");
                    var begin   = action.IndexOf("?dwcont=");
                    var dwQuery = string.Empty;

                    if (begin > -1)
                    {
                        dwQuery = action.Substring(begin, action.Length - begin);
                    }

                    var csrfToken = ParsingHelper.GetPasswordReset_CsrfToken(_xDoc);
                    if (!string.IsNullOrEmpty(csrfToken))
                    {
                        var strCsrfToken = csrfToken.Split('=').GetValue(1).ToString();
                        if (_session == null)
                        {
                            _session = new PaylessSession(_core);
                        }
                        var checkout = _session.GetCheckout();
                        checkout.CsrfToken = strCsrfToken;
                        _session.SetCheckout(checkout);
                    }

                    // Get Login Parameter Name
                    var dwLoginParam = _xDoc.Descendants(_ns + "form")
                                       .WhereAttributeEquals("id", "dwfrm_login")
                                       .Descendants(_ns + "input")
                                       .WhereAttributeContains("id", "dwfrm_login_username_")
                                       .FirstOrNewXElement()
                                       .AttributeValue("id");

                    // Get Errors
                    _errors.AddRange(ParseCartErrors(mainContainer));

                    // Allow to Checkout
                    var allowToCheckout = !_xDoc.Descendants(_ns + "button")
                                          .WhereAttributeEquals("name", "dwfrm_cart_checkoutCart")
                                          .WhereAttributeEquals("disabled", "disabled")
                                          .Any();

                    // Total Cart Item Count
                    var itemCount = 0;
                    items.ForEach(x => itemCount += x.Quantity);



                    // Populate Result
                    result.resultset.Cart.CartItems        = items;
                    result.resultset.Cart.Summary          = summary;
                    result.resultset.Cart.Coupons          = coupons;
                    result.resultset.Cart.PromoMessage     = promoMessage;
                    result.resultset.Cart.DWQuery          = dwQuery;
                    result.resultset.Cart.DWLoginParam     = dwLoginParam;
                    result.resultset.Cart.AllowToCheckout  = allowToCheckout;
                    result.resultset.Cart.CartItemCount    = itemCount;
                    result.resultset.Cart.GoogleWalletInfo = ParsingHelper.GetCartGoogleWalletInfoFrom(response, result.resultset.Cart);
                }


                // Criteo Customer Id
                var criteoCustomerId = ParsingHelper.GetCriteoCustomerId(response);
                result.resultset.Cart.CriteoCustomerId = criteoCustomerId;

                // Get Promo Header
                var promoHeaderContainer = _xDoc.Descendants(_ns + "div")
                                           .WhereAttributeEquals("class", "header-banner")
                                           .FirstOrNewXElement();

                promoHeaderContainer.Descendants(_ns + "script")
                .Remove();

                var promoHeader = string.Empty;
                if (Config.CartServicesParams.IsVisiblePromoHeader)
                {
                    promoHeader = promoHeaderContainer.ElementValue();
                }

                result.resultset.Cart.PromoHeader    = promoHeader;
                result.resultset.TealiumDataBase     = ParsingHelper.GetTealiumDataBase(_xDoc);
                result.resultset.TealiumDataExtended = ParsingHelper.GetTealiumDataExtended(_xDoc);
            }
            catch (Exception ex)
            {
                _errors.Add(ex.Handle(
                                "MadServ.CartService.ParseCart",
                                ErrorSeverity.FollowUp,
                                ErrorType.Parsing
                                ));
            }


            return(result);
        }