/// <summary>
    /// Initializes the control properties.
    /// </summary>
    protected void SetupControl()
    {
        if (StopProcessing)
        {
            // Do nothing
        }
        else
        {
            NotResolveProperties = "AddToShoppingCartConversionValue;OrderConversionValue;RegistrationConversionValue";
            // Set shopping cart properties
            cartElem.RedirectAfterPurchase                    = RedirectAfterPurchase;
            cartElem.EnablePasswordRetrieval                  = PasswordRetrieval;
            cartElem.RegistrationTrackConversionName          = RegistrationTrackConversionName;
            cartElem.OrderTrackConversionName                 = OrderTrackConversionName;
            cartElem.SendNewRegistrationNotificationToAddress = SendNewRegistrationNotificationToAddress;
            cartElem.AssignToRoles            = AssignToRoles;
            cartElem.AssignToSites            = AssignToSites;
            cartElem.DisplayStepImages        = DisplayStepImages;
            cartElem.ImageStepSeparator       = ImageStepSeparator;
            cartElem.EnableProductPriceDetail = EnableProductPriceDetail;
            cartElem.RequiredFieldsMark       = RequiredFieldsMark;

            if (string.IsNullOrEmpty(CheckoutProcess))
            {
                // Load checkout process from e-commerce configuration
                cartElem.CheckoutProcessType = CheckoutProcessEnum.LiveSite;
            }
            else
            {
                // Load custom checkout process from web part
                cartElem.CheckoutProcessType = CheckoutProcessEnum.Custom;
                CheckoutProcessInfo process = new CheckoutProcessInfo(CheckoutProcess);
                cartElem.LoadCheckoutProcess(process);
            }
        }
    }
    /// <summary>
    /// Initializes the control properties.
    /// </summary>
    protected void SetupControl()
    {
        if (StopProcessing)
        {
            // Do nothing
        }
        else
        {
            NotResolveProperties = "AddToShoppingCartConversionValue;OrderConversionValue;RegistrationConversionValue";
            // Set shopping cart properties
            cartElem.RedirectAfterPurchase = RedirectAfterPurchase;
            cartElem.EnablePasswordRetrieval = PasswordRetrieval;
            cartElem.RegistrationTrackConversionName = RegistrationTrackConversionName;
            cartElem.OrderTrackConversionName = OrderTrackConversionName;
            cartElem.SendNewRegistrationNotificationToAddress = SendNewRegistrationNotificationToAddress;
            cartElem.AssignToRoles = AssignToRoles;
            cartElem.AssignToSites = AssignToSites;
            cartElem.DisplayStepImages = DisplayStepImages;
            cartElem.ImageStepSeparator = ImageStepSeparator;
            cartElem.EnableProductPriceDetail = EnableProductPriceDetail;
            cartElem.RequiredFieldsMark = RequiredFieldsMark;

            if (string.IsNullOrEmpty(CheckoutProcess))
            {
                // Load checkout process from e-commerce configuration
                cartElem.CheckoutProcessType = CheckoutProcessEnum.LiveSite;
            }
            else
            {
                // Load custom checkout process from web part
                cartElem.CheckoutProcessType = CheckoutProcessEnum.Custom;
                CheckoutProcessInfo process = new CheckoutProcessInfo(CheckoutProcess);
                cartElem.LoadCheckoutProcess(process);
            }
        }
    }
    /// <summary>
    /// Gets and updates checkout process step. Called when the "Get and update step" button is pressed.
    /// Expects the CreateCheckoutProcessStep method to be run first.
    /// </summary>
    private bool GetAndUpdateCheckoutProcessStep()
    {
        CheckoutProcessInfo checkoutProcess = new CheckoutProcessInfo();
        checkoutProcess.LoadXmlDefinition(ECommerceSettings.CheckoutProcess(CMSContext.CurrentSiteName));

        CheckoutProcessStepInfo updateStep = checkoutProcess.GetCheckoutProcessStepInfo("MyNewStep");

        if (updateStep != null)
        {
            // Update the property
            updateStep.Caption = updateStep.Caption.ToLowerCSafe();

            // Update xml definition
            checkoutProcess.SetCheckoutProcessStepNode(updateStep);

            // Update the checkout process
            SettingsKeyProvider.SetValue(CMSContext.CurrentSiteName + "." + ECommerceSettings.CHECKOUT_PROCESS, checkoutProcess.GetXmlDefinition());

            return true;
        }

        return false;
    }
    /// <summary>
    /// Gets and bulk update checkout process steps. Called when the "Get and bulk update steps" button is pressed.
    /// Expects the CreateCheckoutProcessStep method to be run first.
    /// </summary>
    private bool GetAndBulkUpdateCheckoutProcessSteps()
    {
        bool success = false;

        CheckoutProcessInfo checkoutProcess = new CheckoutProcessInfo();
        checkoutProcess.LoadXmlDefinition(ECommerceSettings.CheckoutProcess(CMSContext.CurrentSiteName));

        // Get the list
        List<CheckoutProcessStepInfo> steps = checkoutProcess.GetCheckoutProcessSteps(CheckoutProcessEnum.CMSDeskOrder);
        foreach (CheckoutProcessStepInfo updateStep in steps)
        {
            if (updateStep.Name == "MyNewStep")
            {
                // Update the property
                updateStep.Caption = updateStep.Caption.ToUpper();

                // Update xml definition
                checkoutProcess.SetCheckoutProcessStepNode(updateStep);

                success = true;
            }
        }

        // Update the checkout process
        SettingsKeyProvider.SetValue(CMSContext.CurrentSiteName + "." + ECommerceSettings.CHECKOUT_PROCESS, checkoutProcess.GetXmlDefinition());

        return success;
    }
    /// <summary>
    /// Generates default checkout process. Called when the "Generate default process" button is pressed.
    /// </summary>
    private bool GenerateDefaultCheckoutProcess()
    {
        // Create new checkout process object
        CheckoutProcessInfo checkoutProcess = new CheckoutProcessInfo();

        // Load default checkout process xml definition
        checkoutProcess.LoadXmlDefinition(ShoppingCart.DEFAULT_CHECKOUT_PROCESS);

        // Save the data
        SettingsKeyProvider.SetValue(CMSContext.CurrentSiteName + "." + ECommerceSettings.CHECKOUT_PROCESS, checkoutProcess.GetXmlDefinition());

        return true;
    }
    /// <summary>
    /// Deletes checkout process step. Called when the "Delete step" button is pressed.
    /// Expects the CreateCheckoutProcessStep method to be run first.
    /// </summary>
    private bool DeleteCheckoutProcessStep()
    {
        // Create new checkout process
        CheckoutProcessInfo checkoutProcess = new CheckoutProcessInfo();

        // Load checkout process xml definition
        checkoutProcess.LoadXmlDefinition(ECommerceSettings.CheckoutProcess(CMSContext.CurrentSiteName));

        // Get 'My new step' checkout process step
        CheckoutProcessStepInfo deleteStep = checkoutProcess.GetCheckoutProcessStepInfo("MyNewStep");

        if (deleteStep != null)
        {
            // Delete the step
            checkoutProcess.RemoveCheckoutProcessStepNode("MyNewStep");

            // Save the data
            SettingsKeyProvider.SetValue(CMSContext.CurrentSiteName + "." + ECommerceSettings.CHECKOUT_PROCESS, checkoutProcess.GetXmlDefinition());

            return true;
        }

        return false;
    }
    /// <summary>
    /// Creates checkout process step. Called when the "Create step" button is pressed.
    /// </summary>
    private bool CreateCheckoutProcessStep()
    {
        // Create new checkout process step object
        CheckoutProcessStepInfo newStep = new CheckoutProcessStepInfo();

        // Set the properties
        newStep.Name = "MyNewStep";
        newStep.Caption = "My new step";
        newStep.ControlPath = "";
        newStep.ShowInCMSDeskCustomer = true;
        newStep.ShowInCMSDeskOrder = true;
        newStep.ShowOnLiveSite = true;
        newStep.ShowInCMSDeskOrderItems = true;

        // Insert node
        CheckoutProcessInfo checkoutProcess = new CheckoutProcessInfo();
        checkoutProcess.LoadXmlDefinition(ECommerceSettings.CheckoutProcess(CMSContext.CurrentSiteName));
        checkoutProcess.SetCheckoutProcessStepNode(newStep);

        // Create the checkout process
        SettingsKeyProvider.SetValue(CMSContext.CurrentSiteName + "." + ECommerceSettings.CHECKOUT_PROCESS, checkoutProcess.GetXmlDefinition());

        return true;
    }