Beispiel #1
0
        private void ListInfo(Element elem, Document doc)
        {
            var message = string.Empty;

            message += "Element Id: " + elem.Id;

            // The workset the element belongs to
            WorksetId worksetId = elem.WorksetId;

            message += "\nWorkset Id : " + worksetId.ToString();

            // Model Updates Status of the element
            ModelUpdatesStatus updateStatus = WorksharingUtils.GetModelUpdatesStatus(doc, elem.Id);

            message += "\nUpdate status : " + updateStatus.ToString();

            // Checkout Status of the element
            CheckoutStatus checkoutStatus = WorksharingUtils.GetCheckoutStatus(doc, elem.Id);

            message += "\nCheckout status : " + checkoutStatus.ToString();

            // Getting WorksharingTooltipInfo of a given element Id
            WorksharingTooltipInfo tooltipInfo = WorksharingUtils.GetWorksharingTooltipInfo(doc, elem.Id);

            message += "\nCreator : " + tooltipInfo.Creator;
            message += "\nCurrent Owner : " + tooltipInfo.Owner;
            message += "\nLast Changed by : " + tooltipInfo.LastChangedBy;

            SCaddinsApp.WindowManager.ShowMessageBox("Additional Element Information", message);
        }
Beispiel #2
0
        /// <summary>
        /// The Method would open up and initialze the Article Information Plugin window. You can use this to set Taxonomy items, Article MetaData etc.
        /// </summary>
        private void OpenArticleInformation()
        {
            try
            {
                ArticleDetail.Open();

                if (GetArticleNumber() != null)
                {
                    CheckoutStatus checkedOut = SitecoreClient.GetLockedStatus(GetArticleNumber());
                    if (checkedOut.User == SitecoreUser.GetUser().Username)
                    {
                        SaveToSitecoreBtn.Enabled  = true;
                        ArticlePreviewMenu.Enabled = true;
                    }
                    else
                    {
                        SaveToSitecoreBtn.Enabled  = false;
                        ArticlePreviewMenu.Enabled = false;
                    }
                }
            }
            catch (UnauthorizedAccessException uax)
            {
                Globals.SitecoreAddin.LogException("ESRibbon.OpenArticleInformation: Error loading the article information window! Unauthorized access to API handler. Asking user to login again", uax);
                MessageBox.Show(Constants.SESSIONTIMEOUTERRORMESSAGE);
            }
            catch (Exception ex)
            {
                Globals.SitecoreAddin.LogException("ESRibbon.OpenArticleInformation: Error loading the article information window!", ex);
                MessageBox.Show
                    (@"An error has occurred while attempting to display the article information window. Please restart Word and try again." +
                    Environment.NewLine + Environment.NewLine +
                    @"If the problem persists, contact your system administrator.", @"Informa", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Enables/disables some controls since it's so similar to a PreLinkEnable state
        /// </summary>
        /// <param name="checkedOut"></param>
        public void IndicateCheckedOutByOther(CheckoutStatus checkedOut)
        {
            var lockUserInfo = SitecoreClient.GetFullNameAndEmail(checkedOut.User);

            if (lockUserInfo.Count == 2)
            {
                uxLockUser.Text = lockUserInfo[0];
                label1.Text     = lockUserInfo[1];
            }
            _articleInformationControl.IsCheckedOutByMe = false;
            _parent.PreLinkEnable();
            IndicatedUnfavoredLink();
            uxUnlockButton.Visible = true;
            uxUnlockButton.Enabled = false;
            uxLockButton.Visible   = false;
            DocumentProtection.Protect(DocumentCustomProperties);
        }
Beispiel #4
0
        /// <summary>
        /// Returns the CheckedoutStatus of an Article
        /// </summary>
        /// <param name="article"></param>
        /// <returns></returns>
        public CheckoutStatus GetLockedStatus(Item article)
        {
            if (article == null)
            {
                var nex = new NullReferenceException("Article item provided was null!");
                throw nex;
            }

            var checkoutStatus = new CheckoutStatus();

            ItemLocking itemLocking = article.Locking;

            checkoutStatus.Locked = itemLocking.IsLocked();
            checkoutStatus.User   = itemLocking.GetOwner();

            return(checkoutStatus);
        }
Beispiel #5
0
        void OpenArticleInformationWindowIfNeeded(Word.Document doc)
        {
            var props = new DocumentCustomProperties(doc);

            if (props.PluginName != Constants.InformaPluginName)
            {
                return;
            }
            string articleNumber = props.ArticleNumber;

            if (!string.IsNullOrEmpty(articleNumber))
            {
                Log("Document opened with article number: " + articleNumber);
                if (!SitecoreUser.GetUser().IsLoggedIn)
                {
                    ArticleDetail.Open(true);
                }
                else
                {
                    CheckoutStatus checkedOut = SitecoreClient.GetLockedStatus(articleNumber);
                    if (checkedOut.User == SitecoreUser.GetUser().Username)
                    {
                        DocumentProtection.Unprotect(props);
                        return;
                    }
                    if (!checkedOut.Locked)
                    {
                        if (DialogFactory.PromptAutoLock() == DialogResult.Yes &&
                            SitecoreClient.CheckOutArticle(articleNumber, SitecoreUser.GetUser().Username))
                        {
                            DocumentProtection.Unprotect(props);
                        }
                    }
                    else
                    {
                        ArticleDetail.Open();
                    }
                }
            }
        }
Beispiel #6
0
 private void SitecoreAddin_SelectedWordDocumentChanged()
 {
     if (_user.IsLoggedIn == false || string.IsNullOrEmpty(GetArticleNumber()))
     {
         SaveToSitecoreBtn.Enabled  = false;
         ArticlePreviewMenu.Enabled = false;
     }
     else
     {
         CheckoutStatus checkedOut = SitecoreClient.GetLockedStatus(GetArticleNumber());
         if (checkedOut.User == SitecoreUser.GetUser().Username)
         {
             SaveToSitecoreBtn.Enabled  = true;
             ArticlePreviewMenu.Enabled = true;
         }
         else
         {
             SaveToSitecoreBtn.Enabled  = false;
             ArticlePreviewMenu.Enabled = false;
         }
     }
 }
Beispiel #7
0
        public void IndicateCheckedOutByMe(CheckoutStatus checkedOut)
        {
            DocumentProtection.Unprotect(DocumentCustomProperties);
            _articleInformationControl.IsCheckedOutByMe = true;
            if (_parent.CloseOnSuccessfulLock && _articleInformationControl.CheckWordDocVersion(_parent.ArticleDetails, false))
            {
                _parent.Close();
                return;
            }
            _parent.CloseOnSuccessfulLock = false;
            var lockUserInfo = SitecoreClient.GetFullNameAndEmail(checkedOut.User);

            if (lockUserInfo.Count == 2)
            {
                uxLockUser.Text = lockUserInfo[0];
                label1.Text     = lockUserInfo[1];
            }
            //			uxLockUser.Text = _articleInformationControl.FormatUserName(checkedOut.User);
            _parent.PostLinkEnable();
            uxUnlockButton.Visible = true;
            uxLockButton.Visible   = false;
            uxUnlockButton.Enabled = true;
            _statusBar.ChangeLockButtonStatus(LockStatus.Locked);
        }
Beispiel #8
0
        // json is true when checkout is done from an iframe, eg. facebook page
        public ActionResult create(CheckoutStatus status, string shippingmethod, string paymentmethod, bool isJson = false)
        {
            Debug.Assert(!cart.orderid.HasValue);

            var shop_owner = cart.MASTERsubdomain.organisation.users.First();
            var currency   = cart.MASTERsubdomain.currency.ToCurrency();
            var buyer      = cart.user;

            var transaction = new Transaction(cart.MASTERsubdomain, buyer, TransactionType.INVOICE, repository, sessionid.Value);

            transaction.CreateTransaction(
                repository.GetNewOrderNumber(subdomainid.Value, TransactionType.INVOICE),
                DateTime.UtcNow,
                cart.MASTERsubdomain.paymentTerms,
                currency.id);

            // mark as sent
            transaction.UpdateOrderStatus(OrderStatus.SENT);

            var shoppingcart = new ShoppingCart(currency.code)
            {
                shippingMethod = shippingmethod
            };

            foreach (var item in cart.cartitems)
            {
                var checkOutItem = item.product_variant.ToCheckoutItem(item.quantity, sessionid);
                var orderItem    = new orderItem
                {
                    description = item.product_variant.ToProductFullTitle(),
                    variantid   = item.product_variant.id,
                    unitPrice   = item.product_variant.product.ToUserPrice(cart.userid.Value),
                    tax         = item.product_variant.product.tax,
                    quantity    = item.quantity
                };
                transaction.AddOrderItem(orderItem, item.product_variant.product.products_digitals);
                // update inventory
                transaction.UpdateInventoryItem(orderItem, item.quantity);

                shoppingcart.items.Add(checkOutItem);
            }

            if (!cart.isDigitalOrder())
            {
                shoppingcart.CalculateShippingCost(cart.cartitems.Select(x => x.product_variant).AsQueryable(), cart.MASTERsubdomain, buyer);

                if (cart.cartitems.Select(x => x.product_variant.product.shippingProfile).UseShipwire())
                {
                    transaction.UpdateShippingMethod(shoppingcart.shipwireShippingName, shoppingcart.shippingMethod);
                }
                else
                {
                    transaction.UpdateShippingMethod(shoppingcart.shippingMethod);
                }
            }

            transaction.UpdateTotal(cart.coupon);
            transaction.SaveNewTransaction(); ////////////////////// SAVE INVOICE

            repository.AddActivity(buyer.id,
                                   new ActivityMessage(transaction.GetID(), shop_owner.id,
                                                       ActivityMessageType.INVOICE_NEW,
                                                       new HtmlLink(transaction.GetOrderNumber(), transaction.GetID()).ToTransactionString(TransactionType.INVOICE)), subdomainid.Value);

            // add checkout note as a comment
            if (!string.IsNullOrEmpty(cart.note))
            {
                transaction.AddComment(cart.note, cart.userid.Value);
            }

            // add comment if shipping method not specified
            if (!transaction.HasShippingMethod() && !cart.isDigitalOrder())
            {
                transaction.AddComment(OrderComment.SHIPPING_WAIT_FOR_COST);
            }

            // set cart as processed
            cart.orderid = transaction.GetID();

            // save payment method
            if (!string.IsNullOrEmpty(paymentmethod))
            {
                switch (paymentmethod)
                {
                case "paypal":
                    cart.paymentMethod = PaymentMethodType.Paypal.ToString();
                    break;

                default:
                    cart.paymentMethod   = PaymentMethodType.Custom.ToString();
                    cart.paymentCustomId = long.Parse(paymentmethod);
                    break;
                }
            }

            repository.Save();

            // send emails
            // send mail to buyer
            var buyerEmailContent = new OrderReceipt()
            {
                viewloc =
                    cart.MASTERsubdomain.ToHostName().ToDomainUrl(transaction.GetOrderLink()),
                shopname        = cart.MASTERsubdomain.storeName,
                date            = transaction.GetOrderDate().ToShortDateString(),
                shippingAddress = transaction.GetShippingAddress().ToHtmlString(),
                billingAddress  = transaction.GetBillingAddress().ToHtmlString(),
                subtotal        = string.Format("{0}{1}", currency.symbol, transaction.GetSubTotal().ToString("n" + currency.decimalCount)),
                shippingcost    = string.Format("{0}{1}", currency.symbol, transaction.GetShippingCost().ToString("n" + currency.decimalCount)),
                discount        = string.Format("{0}{1}", currency.symbol, transaction.GetDiscount().ToString("n" + currency.decimalCount)),
                totalcost       = string.Format("{0}{1}{2}", currency.code, currency.symbol, transaction.GetTotal().ToString("n" + currency.decimalCount)),
                orderitems      = transaction
                                  .GetOrderItems()
                                  .Select(x => string.Format("{0} x {1}{2} {3}",
                                                             x.quantity,
                                                             currency.symbol,
                                                             x.unitPrice.Value.ToString("n" + currency.decimalCount),
                                                             x.description))
            };

            // send mail to seller
            var sellerEmailContent = new NewOrderEmailContent
            {
                viewloc =
                    cart.MASTERsubdomain.ToHostName().ToDomainUrl(transaction.GetOrderLink()),
                sender = buyer.organisation1.name
            };

            string buyer_subject;
            string seller_subject;

            switch (status)
            {
            case CheckoutStatus.SHIPPING_FAIL:
                buyer_subject = string.Format("[{0}]Invoice #{1}", cart.MASTERsubdomain.name,
                                              transaction.GetOrderNumber());
                seller_subject = string.Format("[{0}]New Invoice #{1} : ACTION REQUIRED", cart.MASTERsubdomain.name,
                                               transaction.GetOrderNumber());
                buyerEmailContent.message =
                    "Thank you for placing an order with us. Unfortunately, we are not able to provide a shipping cost at this moment. We will contact you once we have the shipping costs. You can check the status of your order by following the link below:";
                sellerEmailContent.message = "A customer has placed an order on your online store. However, the shipping cost could not be calculated. You will need to manually update the invoice with the shipping cost. To update the invoice, follow the link below:";
                break;

            case CheckoutStatus.SHIPPING_NONE:
            case CheckoutStatus.SHIPPING_OK:
                buyer_subject = string.Format("[{0}]Invoice #{1} confirmed", cart.MASTERsubdomain.name,
                                              transaction.GetOrderNumber());
                seller_subject = string.Format("[{0}]New Invoice #{1}", cart.MASTERsubdomain.name,
                                               transaction.GetOrderNumber());

                if (cart.isDigitalOrder())
                {
                    buyerEmailContent.message = "Download links will be provided once payment is confirmed";
                }
                sellerEmailContent.message = "A customer has placed an order on your online store. To view the invoice, follow the link below:";
                break;

            default:
                throw new ArgumentOutOfRangeException("status");
            }

            this.SendEmail(EmailViewType.INVOICEORDER_NEW, sellerEmailContent, seller_subject,
                           shop_owner.GetEmailAddress(), shop_owner.ToFullName(), buyer);

            this.SendEmail(EmailViewType.ORDER_RECEIPT, buyerEmailContent, buyer_subject,
                           buyer.GetEmailAddress(), buyer.ToFullName(), shop_owner);

            // handle payment
            string redirecturl = "";

            if (!string.IsNullOrEmpty(paymentmethod))
            {
                switch (paymentmethod)
                {
                case "paypal":
                    string returnUrl;
                    if (isJson)
                    {
                        returnUrl = string.Format("{0}/checkout/order/{1}/close", GeneralConstants.HTTP_SECURE, cart.id);
                    }
                    else
                    {
                        returnUrl = string.Format("{0}/checkout/order/{1}", GeneralConstants.HTTP_SECURE, cart.id);
                    }
                    var pworker = new PaypalWorker(cart.id.ToString(),
                                                   transaction,
                                                   repository,
                                                   cart.MASTERsubdomain.GetPaypalID(),
                                                   transaction.GetCurrency().id,
                                                   returnUrl);
                    try
                    {
                        redirecturl = pworker.GetPaymentUrl();
                    }
                    catch (Exception ex)
                    {
                        Syslog.Write(ex);
                        return(RedirectToAction("Index", "Error"));
                    }
                    break;

                default:
                    break;
                }
            }

            if (!string.IsNullOrEmpty(redirecturl))
            {
                return(Redirect(redirecturl));
            }

            if (isJson)
            {
                return(View("close"));
            }

            return(RedirectToAction("Index"));
        }
Beispiel #9
0
        /// <summary>
        /// Get from sitecore checked out status, then set control accordingly
        /// </summary>
        /// <remarks>This method is a beast. We should refactor it if possible.</remarks>
        protected void SetCheckedOutStatus()
        {
            string articleNum = GetArticleNumber();

            if (!articleNum.IsNullOrEmpty())
            {
                CheckoutStatus checkedOut = _scServer.GetLockedStatus(this.GetArticleNumber());
                IsCheckedOut = checkedOut.Locked;
                if (IsCheckedOut)
                {
                    if (_user.Username == checkedOut.User.TextAfterString(@"\"))
                    {                     //Locked, checked out by me
                        //TODO: what colors do they want for checked out by me?
                        uxLockStatus.BackColor = Color.FromArgb(255, 217, 234, 211);
                        //uxLockStatus.ForeColor = Color.Green;

                        uxLockUser.Text  = checkedOut.User;
                        IsCheckedOutByMe = true;

                        uxCheckInOut.Enabled = true;
                        uxCheckInOut.Text    = "Check in article";

                        uxSaveChanges.Enabled     = true;
                        uxSaveAndTransfer.Enabled = true;
                    }
                    else
                    {                     //locked, checked out by other
                        uxLockStatus.BackColor = Color.FromArgb(255, 244, 204, 204);
                        //uxLockStatus.ForeColor = Color.FromArgb(255, 224, 102, 102);

                        uxLockUser.Text = checkedOut.User;

                        uxCheckInOut.Enabled = false;
                        uxCheckInOut.Text    = "Check out article";

                        IsCheckedOutByMe = false;

                        uxSaveChanges.Enabled     = false;
                        uxSaveAndTransfer.Enabled = false;
                    }
                    uxStatus.Text = "Locked";
                }
                else
                {                 //Unlocked, not checked out
                    uxLockStatus.BackColor = GroupBox.DefaultBackColor;
                    //uxLockStatus.ForeColor = GroupBox.DefaultForeColor;

                    uxLockUser.Text = @"N\A";

                    uxCheckInOut.Enabled = true;
                    uxCheckInOut.Text    = "Check out article";
                    uxStatus.Text        = "Unlocked";

                    IsCheckedOutByMe = false;
                    IsCheckedOut     = false;

                    uxSaveChanges.Enabled     = false;
                    uxSaveAndTransfer.Enabled = false;
                }
                uxRefreshStatus.Enabled       = true;
                uxLinkArticle.Visible         = false;
                uxArticleNumberToLink.Visible = false;
            }
            else
            {             //locked, not created yet
                uxLockStatus.BackColor = GroupBox.DefaultBackColor;
                uxLockStatus.ForeColor = GroupBox.DefaultForeColor;

                uxLockUser.Text = @"N\A";

                IsCheckedOutByMe = false;
                IsCheckedOut     = false;

                uxCheckInOut.Enabled          = false;
                uxCheckInOut.Text             = "Check out article";
                uxStatus.Text                 = "Unlocked";
                uxRefreshStatus.Enabled       = false;
                uxLinkArticle.Visible         = true;
                uxArticleNumberToLink.Visible = true;

                uxSaveChanges.Enabled     = true;
                uxSaveAndTransfer.Enabled = true;
            }
            bool articleNotCreated = GetArticleNumber() == null;

            uxRelatedArticles.Enabled       = IsCheckedOutByMe;
            uxSidebarsParents.Enabled       = IsCheckedOutByMe;
            uxCompanies.Enabled             = IsCheckedOutByMe;
            uxIndustries.Enabled            = IsCheckedOutByMe;
            uxSubjects.Enabled              = IsCheckedOutByMe;
            uxGeography.Enabled             = IsCheckedOutByMe;
            uxTherapeuticCategories.Enabled = IsCheckedOutByMe;
            uxMarketSegments.Enabled        = IsCheckedOutByMe;
            uxGeneralTags.Enabled           = IsCheckedOutByMe;
            uxSummary.Enabled  = IsCheckedOutByMe;
            uxSubtitle.Enabled = IsCheckedOutByMe;
            uxArticleInformationSummary.Enabled = IsCheckedOutByMe;
            //uxSelectAuthor.Enabled = IsCheckedOutByMe;
            uxAddAuthor.Enabled = IsCheckedOutByMe || articleNotCreated;
            //uxSelectedAuthors.Enabled = IsCheckedOutByMe;
            //uxSelectEditor.Enabled = IsCheckedOutByMe;
            //uxSelectedEditors.Enabled = IsCheckedOutByMe;
            uxSelectedEditors.DisableEdit = !IsCheckedOutByMe;
            uxSelectedAuthors.DisableEdit = !IsCheckedOutByMe;
            uxAddEditor.Enabled           = IsCheckedOutByMe || articleNotCreated;

            //When Checked Out By You / Article Not Created Yet:
            //should be able to view, add, remove authors and editors.

            //When checked out by another user or checked in,
            //should be able to view the list of assigned authors/editors,
            //and the list of available authors/editors, but not add or remove them.
            uxArticleType.Enabled     = IsCheckedOutByMe;
            uxArticleSize.Enabled     = IsCheckedOutByMe;
            uxArticleCategory.Enabled = IsCheckedOutByMe;

            uxTitle.Enabled = !IsCheckedOut || IsCheckedOutByMe;
            uxArticleInformationIssue.Enabled = !IsCheckedOut || IsCheckedOutByMe;
            uxPublication.Enabled             = !IsCheckedOut || IsCheckedOutByMe;
            uxArticleCategory.Enabled         = !IsCheckedOut || IsCheckedOutByMe;
        }
Beispiel #10
0
        public override GetOrdersResponse Parse(Stream stream, bool keepStremPosition = true)
        {
            try
            {
                string temp;

                var getOrdersResponse = new GetOrdersResponse();

                XNamespace ns = "urn:ebay:apis:eBLBaseComponents";

                var streamStartPos = stream.Position;

                var root = XElement.Load(stream);

                var xmlOrders = root.Descendants(ns + "Order");

                var error = this.ResponseContainsErrors(root, ns);
                if (error != null)
                {
                    getOrdersResponse.Errors = error;
                    return(getOrdersResponse);
                }

                if (!string.IsNullOrWhiteSpace(temp = GetElementValue(root, ns, "HasMoreOrders")))
                {
                    getOrdersResponse.HasMoreOrders = (Boolean.Parse(temp));
                }

                var orders = xmlOrders.Select(x =>
                {
                    var resultOrder = new Order();

                    resultOrder.BuyerUserId = GetElementValue(x, ns, "BuyerUserID");

                    resultOrder.OrderId = GetElementValue(x, ns, "OrderID");

                    if (!string.IsNullOrWhiteSpace(temp = GetElementValue(x, ns, "OrderStatus")))
                    {
                        EbayOrderStatusEnum tempEbayOrderStatusEnum;
                        if (Enum.TryParse(temp, true, out tempEbayOrderStatusEnum))
                        {
                            resultOrder.Status = tempEbayOrderStatusEnum;
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(temp = GetElementValue(x, ns, "CancelStatus")))
                    {
                        CancelStatusEnum tempCancelStatus;
                        if (Enum.TryParse(temp, true, out tempCancelStatus))
                        {
                            resultOrder.CancelStatus = tempCancelStatus;
                        }
                    }

                    #region ChecoutStatus
                    if (x.Element(ns + "CheckoutStatus") != null)
                    {
                        var elCheckoutStatus = x.Element(ns + "CheckoutStatus");
                        var obCheckoutStatus = new CheckoutStatus();
                        obCheckoutStatus.EBayPaymentStatus = GetElementValue(elCheckoutStatus, ns, "eBayPaymentStatus");
                        obCheckoutStatus.IntegratedMerchantCreditCardEnabled = GetElementValue(elCheckoutStatus, ns, "IntegratedMerchantCreditCardEnabled").ToBool();
                        obCheckoutStatus.LastModifiedTime = GetElementValue(elCheckoutStatus, ns, "LastModifiedTime").ToDateTime();
                        obCheckoutStatus.PaymentMethod    = GetElementValue(elCheckoutStatus, ns, "PaymentMethod");

                        CompleteStatusCodeEnum tempCompleteStatusCodeEnum;
                        if (Enum.TryParse(GetElementValue(elCheckoutStatus, ns, "Status"), true, out tempCompleteStatusCodeEnum))
                        {
                            obCheckoutStatus.Status = tempCompleteStatusCodeEnum;
                        }

                        resultOrder.CheckoutStatus = obCheckoutStatus;
                    }
                    #endregion

                    #region Shipping
                    if (x.Element(ns + "ShippingAddress") != null)
                    {
                        var shipToAddress           = x.Element(ns + "ShippingAddress");
                        var address                 = new ShippingAddress();
                        address.Name                = GetElementValue(shipToAddress, ns, "Name");
                        address.Country             = GetElementValue(shipToAddress, ns, "Country");
                        address.CountryName         = GetElementValue(shipToAddress, ns, "CountryName");
                        address.Phone               = GetElementValue(shipToAddress, ns, "Phone");
                        address.City                = GetElementValue(shipToAddress, ns, "CityName");
                        address.PostalCode          = GetElementValue(shipToAddress, ns, "PostalCode");
                        address.State               = GetElementValue(shipToAddress, ns, "StateOrProvince");
                        address.Street1             = GetElementValue(shipToAddress, ns, "Street1");
                        address.Street2             = GetElementValue(shipToAddress, ns, "Street2");
                        resultOrder.ShippingAddress = address;
                    }
                    #endregion

                    #region Payment
                    if (x.Element(ns + "PaymentHoldDetails") != null)
                    {
                        var paymentHoldDetails      = x.Element(ns + "PaymentHoldDetails");
                        var address                 = new PaymentHoldDetails();
                        address.ExpectedReleaseDate = GetElementValue(paymentHoldDetails, ns, "ExpectedReleaseDate").ToDateTime();
                    }

                    resultOrder.PaymentMethods = GetElementValue(x, ns, "PaymentMethods");

                    ebayCurrency tempCurrency;
                    resultOrder.TotalCurrencyId = Enum.TryParse(this.GetElementAttribute("currencyID", x, ns, "Total"), out tempCurrency) ? tempCurrency : default(ebayCurrency);
                    resultOrder.Total           = GetElementValue(x, ns, "Total").ToDecimalDotOrComaSeparated();

                    resultOrder.SubtotalCurrencyId = Enum.TryParse(this.GetElementAttribute("currencyID", x, ns, "Subtotal"), out tempCurrency) ? tempCurrency : default(ebayCurrency);
                    resultOrder.Subtotal           = GetElementValue(x, ns, "Subtotal").ToDecimalDotOrComaSeparated();
                    #endregion

                    #region XXXTime
                    resultOrder.CreatedTime = GetElementValue(x, ns, "CreatedTime").ToDateTime();
                    resultOrder.PaidTime    = GetElementValue(x, ns, "PaidTime").ToDateTime();
                    resultOrder.ShippedTime = GetElementValue(x, ns, "ShippedTime").ToDateTime();
                    #endregion

                    #region Refunds
                    var elMonetaryDetails = x.Element(ns + "MonetaryDetails");
                    if (elMonetaryDetails != null)
                    {
                        resultOrder.MonetaryDetails = new MonetaryDetails();

                        var refunds = elMonetaryDetails.Descendants(ns + "Refund");
                        resultOrder.MonetaryDetails.Refunds = refunds.Select(refund =>
                        {
                            var resRefund                    = new Refund();
                            resRefund.RefundAmount           = GetElementValue(refund, ns, "RefundAmount").ToDecimalDotOrComaSeparated();
                            resRefund.RefundAmountCurrencyID = this.GetElementAttribute("CurrencyCodeType", refund, ns, "RefundAmount");
                            resRefund.RefundTime             = GetElementValue(refund, ns, "RefundTime").ToDateTime();

                            if (!string.IsNullOrWhiteSpace(temp = GetElementValue(refund, ns, "RefundStatus")))
                            {
                                resRefund.RefundStatus = ( RefundStatus )Enum.Parse(typeof(RefundStatus), temp);
                            }

                            return(resRefund);
                        });
                    }
                    #endregion

                    #region Delivery
                    var shippingDetails = x.Element(ns + "ShippingDetails");
                    if (shippingDetails != null)
                    {
                        resultOrder.ShippingDetails = new ShippingDetails();

                        resultOrder.ShippingDetails.SellingManagerSalesRecordNumber = GetElementValue(x, ns, "ShippingDetails", "SellingManagerSalesRecordNumber").ToIntOrDefault();
                        resultOrder.ShippingDetails.GetItFast = GetElementValue(x, ns, "ShippingDetails", "GetItFast").ToBoolNullable();

                        var salesTaxEl = shippingDetails.Element(ns + "SalesTax");
                        if (salesTaxEl != null)
                        {
                            var salesTax               = new SalesTax();
                            var salesTaxPercent        = GetElementValue(salesTaxEl, ns, "SalesTaxPercent").ToDecimalDotOrComaSeparatedNullable();
                            var salesTaxState          = GetElementValue(salesTaxEl, ns, "SalesTaxState");
                            var shippingIncludedInTax  = GetElementValue(salesTaxEl, ns, "ShippingIncludedInTax").ToBoolNullable();
                            var salesTaxAmount         = GetElementValue(salesTaxEl, ns, "SalesTaxAmount").ToDecimalDotOrComaSeparatedNullable();
                            var salesTaxAmountCurrency = GetElementAttribute("currencyID", salesTaxEl, ns, "SalesTaxAmount");

                            salesTax.SalesTaxPercent          = salesTaxPercent;
                            salesTax.SalesTaxState            = salesTaxState;
                            salesTax.ShippingIncludedInTax    = shippingIncludedInTax;
                            salesTax.SalesTaxAmount           = salesTaxAmount;
                            salesTax.SalesTaxAmountCurrencyId = salesTaxAmountCurrency;

                            resultOrder.ShippingDetails.SalesTax = salesTax;
                        }

                        var shippingService = shippingDetails.Element(ns + "ShippingServiceOptions");
                        if (shippingService != null)
                        {
                            var shippingServiceOptions = new ShippingServiceOptions();

                            var ShippingService             = GetElementValue(shippingService, ns, "ShippingService");
                            var ShippingServiceCost         = GetElementValue(shippingService, ns, "ShippingServiceCost").ToDecimalDotOrComaSeparatedNullable();
                            var ShippingServiceCostCurrency = GetElementAttribute("currencyID", shippingService, ns, "ShippingServiceCost");
                            var ShippingServicePriority     = GetElementValue(shippingService, ns, "ShippingServicePriority");
                            var ExpeditedService            = GetElementValue(shippingService, ns, "ExpeditedService").ToBoolNullable();
                            var ShippingTimeMin             = GetElementValue(shippingService, ns, "ShippingTimeMin").ToLongOrNull();
                            var ShippingTimeMax             = GetElementValue(shippingService, ns, "ShippingTimeMax").ToLongOrNull();

                            shippingServiceOptions.ShippingService             = ShippingService;
                            shippingServiceOptions.ShippingServiceCost         = ShippingServiceCost;
                            shippingServiceOptions.ShippingServiceCostCurrency = ShippingServiceCostCurrency;
                            shippingServiceOptions.ShippingServicePriority     = ShippingServicePriority;
                            shippingServiceOptions.ExpeditedService            = ExpeditedService;
                            shippingServiceOptions.ShippingTimeMin             = ShippingTimeMin;
                            shippingServiceOptions.ShippingTimeMax             = ShippingTimeMax;

                            resultOrder.ShippingDetails.ShippingServiceOptions = shippingServiceOptions;
                            if (x.Element(ns + "ShippingPackageInfo") != null)
                            {
                                shippingServiceOptions.ShippingPackageInfo = new ShippingPackageInfo();
                                shippingServiceOptions.ShippingPackageInfo.ActualDeliveryTime       = GetElementValue(x, ns, "ShippingDetails", "ShippingServiceOptions", "ShippingPackageInfo", "ActualDeliveryTime").ToDateTime();
                                shippingServiceOptions.ShippingPackageInfo.ScheduledDeliveryTimeMax = GetElementValue(x, ns, "ShippingDetails", "ShippingServiceOptions", "ShippingPackageInfo", "ScheduledDeliveryTimeMax").ToDateTime();
                                shippingServiceOptions.ShippingPackageInfo.ScheduledDeliveryTimeMin = GetElementValue(x, ns, "ShippingDetails", "ShippingServiceOptions", "ShippingPackageInfo", "ScheduledDeliveryTimeMin").ToDateTime();
                            }

                            resultOrder.ShippingDetails.ShippingServiceOptions = shippingServiceOptions;
                        }
                    }
                    #endregion

                    #region TransactionArray
                    var elTransactionArray = x.Element(ns + "TransactionArray");
                    if (elTransactionArray != null)
                    {
                        var transactions             = elTransactionArray.Descendants(ns + "Transaction");
                        resultOrder.TransactionArray = transactions.Select(transaction =>
                        {
                            var resTransaction = new Transaction();
                            var elBuyer        = transaction.Element(ns + "Buyer");
                            if (elBuyer != null)
                            {
                                resTransaction.Buyer       = new Buyer();
                                resTransaction.Buyer.Email = GetElementValue(elBuyer, ns, "Email");
                            }

                            resTransaction.CurrencyId       = Enum.TryParse(this.GetElementAttribute("currencyID", transaction, ns, "TransactionPrice"), out tempCurrency) ? tempCurrency : default(ebayCurrency);
                            resTransaction.TransactionPrice = GetElementValue(transaction, ns, "TransactionPrice").ToDecimalDotOrComaSeparated();

                            var elItem = transaction.Element(ns + "Item");
                            if (elItem != null)
                            {
                                resTransaction.Item = new Item();

                                resTransaction.Item.ItemId = GetElementValue(elItem, ns, "ItemID");

                                resTransaction.Item.Site = GetElementValue(elItem, ns, "Site");

                                resTransaction.Item.Sku = GetElementValue(elItem, ns, "SKU");

                                resTransaction.Item.Title = GetElementValue(elItem, ns, "Title");
                            }

                            var elVariation = transaction.Element(ns + "Variation");
                            if (elVariation != null)
                            {
                                resTransaction.Variation = new Variation();

                                resTransaction.Variation.Sku = GetElementValue(elVariation, ns, "SKU");
                            }

                            if (!string.IsNullOrWhiteSpace(temp = GetElementValue(transaction, ns, "QuantityPurchased")))
                            {
                                resTransaction.QuantityPurchased = int.Parse(temp);
                            }

                            return(resTransaction);
                        }).ToList();
                    }
                    #endregion

                    if (keepStremPosition)
                    {
                        stream.Position = streamStartPos;
                    }

                    return(resultOrder);
                }).ToList();

                getOrdersResponse.Orders = orders;
                return(getOrdersResponse);
            }
            catch (Exception ex)
            {
                var buffer = new byte[stream.Length];
                stream.Read(buffer, 0, ( int )stream.Length);
                var utf8Encoding = new UTF8Encoding();
                var bufferStr    = utf8Encoding.GetString(buffer);
                throw new Exception("Can't parse: " + bufferStr, ex);
            }
        }