Example #1
0
        protected BasketItem GetBasketItem(string optionList, GridViewCommandEventArgs e)
        {
            //GET THE QUANTITY
            GridViewRow row          = (GridViewRow)((Control)e.CommandSource).Parent.Parent;
            int         tempQuantity = GetControlValue(row, "Quantity", 1);

            if (tempQuantity < 1)
            {
                return(null);
            }
            if (tempQuantity > System.Int16.MaxValue)
            {
                tempQuantity = System.Int16.MaxValue;
            }

            //CREATE THE BASKET ITEM WITH GIVEN OPTIONS
            BasketItem basketItem = BasketItemDataSource.CreateForProduct(_ProductId, (short)tempQuantity, optionList, AlwaysConvert.ToList(",", _SelectedKitProducts));

            if (basketItem != null)
            {
                basketItem.Basket = AbleContext.Current.User.Basket;

                //ADD IN VARIABLE PRICE
                //if (_Product.UseVariablePrice) basketItem.Price = AlwaysConvert.ToDecimal(VariablePrice.Text);
                // COLLECT ANY ADDITIONAL INPUTS
                AbleCommerce.Code.ProductHelper.CollectProductTemplateInput(basketItem, this);
            }
            return(basketItem);
        }
Example #2
0
        internal BasketItem GetBasketItem(int index, Basket basket)
        {
            WishlistItem item       = this[index];
            BasketItem   basketItem = BasketItemDataSource.CreateForProduct(item.ProductId, item.Desired, item.OptionList, item.KitList);

            basketItem.BasketId = basket.BasketId;
            if (item.Product.UseVariablePrice)
            {
                basketItem.Price = item.Price;
                if (basketItem.Price < item.Product.MinimumPrice)
                {
                    basketItem.Price = item.Product.MinimumPrice;
                }
                if (basketItem.Price > item.Product.MaximumPrice)
                {
                    basketItem.Price = item.Product.MaximumPrice;
                }
            }
            basketItem.WishlistItemId = item.WishlistItemId;
            basketItem.LineMessage    = item.LineMessage;
            //COPY OVER ITEM INPUTS
            foreach (WishlistItemInput input in item.Inputs)
            {
                BasketItemInput cloneInput = new BasketItemInput();
                cloneInput.InputFieldId = input.InputFieldId;
                cloneInput.InputValue   = input.InputValue;
                basketItem.Inputs.Add(cloneInput);
            }
            return(basketItem);
        }
Example #3
0
 protected void CartSummary_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
 {
     if (e.CommandName == "ShowGiftOptions")
     {
         int        itemId     = AlwaysConvert.ToInt(e.CommandArgument);
         BasketItem basketItem = BasketItemDataSource.Load(itemId);
         ShowGiftOptionsDialog(basketItem);
     }
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            BasketItem item      = BasketItemDataSource.Load(BasketItemId);
            WrapGroup  wrapGroup = item.Product.WrapGroup;

            if (wrapGroup != null)
            {
                _wrapStyles = wrapGroup.WrapStyles;
            }

            BuildWrapStyleList();

            if (!Page.IsPostBack)
            {
                // load initial values from calling parent control
                this.InnerGiftMessage.Text = _GiftMessage;
            }
        }
        private void InitializeGiftWrapChoices()
        {
            BasketItem item      = BasketItemDataSource.Load(_BasketItemId);
            WrapGroup  wrapGroup = item.Product.WrapGroup;

            if (wrapGroup != null)
            {
                _wrapStyles = wrapGroup.WrapStyles;
            }

            BuildWrapStyleList();

            if (string.IsNullOrEmpty(InnerGiftMessage.Text))
            {
                // load initial values from calling parent control
                this.InnerGiftMessage.Text = _GiftMessage;
            }
        }
Example #6
0
        public void ProcessRequest(HttpContext context)
        {
            HttpResponse Response = context.Response;
            //GET THE ORDER ID FROM THE URL
            int   orderId = AlwaysConvert.ToInt(context.Request.QueryString["o"]);
            Order order   = OrderDataSource.Load(orderId);

            if (order != null)
            {
                //MAKE SURE ORDER IS FOR CURRENT USER
                User user = AbleContext.Current.User;
                if (order.User != null && order.User.Id == user.Id)
                {
                    //CLEAR THE EXISTING BASKET
                    List <string>  basketMessages = new List <string>();
                    Basket         basket         = user.Basket;
                    IBasketService basketService  = AbleContext.Resolve <IBasketService>();
                    basketService.Clear(basket);
                    foreach (OrderItem item in order.Items)
                    {
                        if ((item.OrderItemType == OrderItemType.Product) && (!item.IsChildItem))
                        {
                            Product product = item.Product;
                            if ((product != null) && (product.Visibility != CommerceBuilder.Catalog.CatalogVisibility.Private))
                            {
                                BasketItem basketItem;
                                try
                                {
                                    basketItem = BasketItemDataSource.CreateForProduct(item.Product.Id, item.Quantity, item.OptionList, item.KitList);
                                    basketItem.IsSubscription = item.IsSubscription;
                                    if (!item.IsSubscription && item.Product != null)
                                    {
                                        basketItem.IsSubscription = item.Product.IsSubscription;
                                    }
                                    basketItem.Frequency     = item.Frequency;
                                    basketItem.FrequencyUnit = item.FrequencyUnit;
                                }
                                catch
                                {
                                    string itemName = item.Name;
                                    if (!string.IsNullOrEmpty(item.VariantName))
                                    {
                                        itemName += " (" + item.VariantName + ")";
                                    }
                                    basketMessages.Add("The item " + itemName + " is no longer available.");
                                    basketItem = null;
                                }
                                if (basketItem != null)
                                {
                                    //SEE IF A PRODUCT TEMPLATE IS ASSOCIATED
                                    foreach (ProductTemplate template in product.ProductTemplates)
                                    {
                                        if (template != null)
                                        {
                                            foreach (InputField inputField in template.InputFields)
                                            {
                                                if (!inputField.IsMerchantField)
                                                {
                                                    //COPY OVER ANY CUSTOMER INPUTS
                                                    BasketItemInput itemInput = new BasketItemInput();
                                                    itemInput.BasketItem = basketItem;
                                                    itemInput.InputField = inputField;
                                                    itemInput.InputValue = GetItemInputValue(item, inputField.Name);
                                                    basketItem.Inputs.Add(itemInput);
                                                }
                                            }
                                        }
                                    }
                                    if ((basketItem.OrderItemType == OrderItemType.Product) && (basketItem.Product.UseVariablePrice))
                                    {
                                        basketItem.Price = item.Price;
                                    }
                                    basketItem.Basket = basket;
                                    basket.Items.Add(basketItem);
                                    //WE HAVE TO SAVE THE BASKET IN CASE IT IS NOT YET CREATED
                                    basket.Save();
                                }
                            }
                        }
                    }
                    if (context.Session != null)
                    {
                        context.Session["BasketMessage"] = basketMessages;
                    }
                    Response.Redirect(NavigationHelper.GetBasketUrl());
                }
            }
            Response.Redirect(NavigationHelper.GetHomeUrl());
        }
        private void DoAddToCart(int productId)
        {
            //GET THE PRODUCT ID FROM THE URL
            Product product = ProductDataSource.Load(productId);

            if (product != null)
            {
                string lastShoppingUrl = AbleCommerce.Code.NavigationHelper.GetLastShoppingUrl();
                if (product.HasChoices || product.UseVariablePrice)
                {
                    //CANT ADD DIRECTLY TO BASKET, SEND TO MORE INFO
                    Response.Redirect(product.NavigateUrl);
                }
                BasketItem basketItem = BasketItemDataSource.CreateForProduct(productId, 1);
                if (basketItem != null)
                {
                    // DETERMINE IF THE LICENSE AGREEMENT MUST BE REQUESTED
                    IList <LicenseAgreement> basketItemLicenseAgreements = new List <LicenseAgreement>();
                    basketItemLicenseAgreements.BuildCollection(basketItem, LicenseAgreementMode.OnAddToBasket);
                    if ((basketItemLicenseAgreements.Count > 0))
                    {
                        // THESE AGREEMENTS MUST BE ACCEPTED TO ADD TO CART
                        List <BasketItem> basketItems = new List <BasketItem>();
                        basketItems.Add(basketItem);
                        string guidKey = Guid.NewGuid().ToString("N");
                        Cache.Add(guidKey, basketItems, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0), System.Web.Caching.CacheItemPriority.NotRemovable, null);
                        string acceptUrl  = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("~/Basket.aspx"));
                        string declineUrl = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Page.ResolveUrl(product.NavigateUrl)));
                        Response.Redirect("~/BuyWithAgreement.aspx?Items=" + guidKey + "&AcceptUrl=" + acceptUrl + "&DeclineUrl=" + declineUrl);
                    }

                    //ADD ITEM TO BASKET
                    Basket basket = AbleContext.Current.User.Basket;
                    basketItem.Basket = basket;
                    basket.Items.Add(basketItem);
                    basket.Save();

                    //Determine if there are associated Upsell products
                    if (AbleContext.Current.StoreMode == StoreMode.Standard && basketItem.Product.GetUpsellProducts(basket).Count > 0)
                    {
                        //redirect to upsell page
                        string returnUrl = AbleCommerce.Code.NavigationHelper.GetEncodedReturnUrl();
                        Response.Redirect("~/ProductAccessories.aspx?ProductId=" + basketItem.Product.Id + "&ReturnUrl=" + returnUrl);
                    }

                    // IF BASKET HAVE SOME VALIDATION PROBLEMS MOVE TO BASKET PAGE
                    IBasketService     service  = AbleContext.Resolve <IBasketService>();
                    ValidationResponse response = service.Validate(basket);
                    if (!response.Success)
                    {
                        Session["BasketMessage"] = response.WarningMessages;
                        Response.Redirect(AbleCommerce.Code.NavigationHelper.GetBasketUrl());
                    }

                    //IF THERE IS NO REGISTERED BASKET CONTROL, WE MUST GO TO BASKET PAGE
                    if (!AbleCommerce.Code.PageHelper.HasBasketControl(Page))
                    {
                        Response.Redirect(AbleCommerce.Code.NavigationHelper.GetBasketUrl());
                    }
                }
            }
        }
Example #8
0
        protected void ContinueButton_Click(object sender, EventArgs e)
        {
            BasketItem basketItem = BasketItemDataSource.Load(AlwaysConvert.ToInt(GiftOptionsBasketItemId.Value));
            // LOOP EACH ITEM ROW TO DETERMINE GIFT OPTIONS
            List <BasketItemGiftOption> giftOptions = new List <BasketItemGiftOption>();

            foreach (GridViewRow row in GiftItemsGrid.Rows)
            {
                GiftWrapChoices wrapOptions = (GiftWrapChoices)row.FindControl("GiftWrapChoices");
                wrapOptions.BasketItemId = basketItem.Id;
                int    wrapStyleId = wrapOptions.WrapStyleId;
                string giftMessage = wrapOptions.GiftMessage;
                BasketItemGiftOption optionItem = new BasketItemGiftOption(basketItem, wrapStyleId, giftMessage);
                int existingIndex = giftOptions.IndexOf(optionItem);
                if (existingIndex > -1)
                {
                    giftOptions[existingIndex].Quantity++;
                }
                else
                {
                    giftOptions.Add(optionItem);
                }
            }

            // LOOP THROUGH GIFT OPTIONS AND UPDATE BASKET ITEMS
            Basket basket = AbleContext.Current.User.Basket;

            for (int i = 0; i < giftOptions.Count; i++)
            {
                BasketItemGiftOption giftOptionItem = giftOptions[i];
                if (i == 0)
                {
                    // FOR FIRST GIFT OPTION, UPDATE THE ORIGINAL BASKET ITEM
                    basketItem.Quantity    = giftOptionItem.Quantity;
                    basketItem.WrapStyleId = giftOptionItem.WrapStyleId;
                    basketItem.GiftMessage = giftOptionItem.GiftMessage;
                }
                else
                {
                    // FOR ADDTIONAL GIFT OPTIONS, CREATE COPIES OF THE ORIGINAL BASKET ITEM
                    BasketItem newItem = basketItem.Copy();
                    newItem.Quantity    = giftOptionItem.Quantity;
                    newItem.GiftMessage = giftOptionItem.GiftMessage;
                    newItem.WrapStyleId = giftOptionItem.WrapStyleId;
                    basket.Items.Add(newItem);
                }
            }

            // SAVE, COMBINE
            basket.Save();
            IBasketService basketService = AbleContext.Resolve <IBasketService>();

            basketService.Combine(basket);

            CartSummary.DataSource = GetBasketItems();
            CartSummary.DataBind();

            // NOW HIDE THE POPUP
            phGiftOptions.Visible = false;
            GiftOptionsPopup.Hide();
        }
Example #9
0
        private BasketItem GetBasketItem(int productId, short quantity)
        {
            BasketItem basketItem = BasketItemDataSource.CreateForProduct(productId, quantity);

            return(basketItem);
        }
Example #10
0
        protected void Page_PreRender(object sender, EventArgs e)
        {
            BasketItem basketItem = BasketItemDataSource.Load(this.BasketItemId);

            if (basketItem != null)
            {
                Product product = basketItem.Product;
                if (product != null)
                {
                    //OUTPUT THE PRODUCT NAME
                    string productName = basketItem.Name;
                    if (basketItem.ProductVariant != null)
                    {
                        string variantName = string.Format(" ({0})", basketItem.ProductVariant.VariantName);
                        if (!productName.EndsWith(variantName))
                        {
                            productName += variantName;
                        }
                    }
                    if (this.LinkProducts && product.Visibility != CatalogVisibility.Private)
                    {
                        //OUTPUT NAME AS LINK
                        string url = UrlGenerator.GetBrowseUrl(product.Id, CatalogNodeType.Product, product.Name);
                        if (!string.IsNullOrEmpty(basketItem.KitList) && !string.IsNullOrEmpty(basketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Kits={2}&Options={3}\">{4}</a>", Page.ResolveUrl(url), basketItem.Id, basketItem.KitList, basketItem.OptionList.Replace(",0", string.Empty), productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else if (!string.IsNullOrEmpty(basketItem.KitList) && string.IsNullOrEmpty(basketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Kits={2}\">{3}</a>", Page.ResolveUrl(url), basketItem.Id, basketItem.KitList, productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else if (string.IsNullOrEmpty(basketItem.KitList) && !string.IsNullOrEmpty(basketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Options={2}\">{3}</a>", Page.ResolveUrl(url), basketItem.Id, basketItem.OptionList.Replace(",0", string.Empty), productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}\">{2}</a>", Page.ResolveUrl(url), basketItem.Id, productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                    }
                    else
                    {
                        //OUTPUT NAME
                        phProductName.Controls.Add(new LiteralControl(productName));
                    }

                    if (EnableFriendlyFormat)
                    {
                        phProductName.Controls.AddAt(0, new LiteralControl(string.Format("{0} of ", basketItem.Quantity)));
                        phProductName.Controls.Add(new LiteralControl(string.Format("<span class='price'>({0})</span>", basketItem.Price.LSCurrencyFormat("ulc"))));
                    }

                    //SHOW INPUTS
                    IList <BasketItemInput> inputs = GetCustomerInputs(basketItem);
                    if (inputs.Count > 0)
                    {
                        InputList.DataSource = inputs;
                        InputList.DataBind();
                    }
                    else
                    {
                        InputList.Visible = false;
                    }
                    //SHOW KIT PRODUCTS IF AVAILABLE, AND THE PRODUCT DOES NOT USE ITEMIZED DISPLAY OR FORCE KIT DISPLAY IS ON
                    if (!string.IsNullOrEmpty(basketItem.KitList) && basketItem.Product != null &&
                        basketItem.Product.Kit != null && (!basketItem.Product.Kit.ItemizeDisplay || this.ForceKitDisplay))
                    {
                        IList <BasketItem> kitProductList = GetKitProducts(basketItem, this.IgnoreKitShipment);
                        if (kitProductList.Count > 0)
                        {
                            KitProductPanel.Visible       = true;
                            KitProductRepeater.DataSource = kitProductList;
                            KitProductRepeater.DataBind();
                        }
                    }
                    //SET THE KIT MEMBER LABEL
                    if (basketItem.OrderItemType == OrderItemType.Product && basketItem.IsChildItem)
                    {
                        BasketItem parentItem = basketItem.GetParentItem(true);
                        if (parentItem != null)
                        {
                            if ((parentItem.Product != null && basketItem.Product.Kit != null && parentItem.Product.Kit.ItemizeDisplay) ||
                                basketItem.ShipmentId != parentItem.ShipmentId)
                            {
                                //SET THE WISHLIST NAME
                                KitMemberLabel.Visible = true;
                                KitMemberLabel.Text    = string.Format(KitMemberLabel.Text, parentItem.Name);
                            }
                        }
                    }
                    //SET THE WISHLIST LABEL
                    WishlistLabel.Visible = (basketItem.WishlistItem != null);
                    if (WishlistLabel.Visible)
                    {
                        //SET THE WISHLIST NAME
                        WishlistLabel.Text = string.Format(WishlistLabel.Text, GetWishlistName(basketItem.WishlistItem.Wishlist));
                    }
                    //SET THE SHIPS TO PANEL
                    Basket         basket   = basketItem.Basket;
                    BasketShipment shipment = basketItem.Shipment;
                    Address        address  = (shipment == null) ? null : shipment.Address;
                    ShipsToPanel.Visible = (this.ShowShipTo && (address != null) && (!string.IsNullOrEmpty(address.FullName)));
                    if (ShipsToPanel.Visible)
                    {
                        ShipsTo.Text = address.FullName;
                    }
                    //SHOW GIFT WRAP
                    GiftWrapPanel.Visible = (basketItem.WrapStyle != null);
                    if (GiftWrapPanel.Visible)
                    {
                        GiftWrap.Text         = basketItem.WrapStyle.Name;
                        GiftWrapPrice.Visible = (basketItem.WrapStyle.Price != 0);
                        GiftWrapPrice.Text    = string.Format("&nbsp;({0})", basketItem.WrapStyle.Price.LSCurrencyFormat("ulc"));
                    }
                    //SHOW GIFT MESSAGE
                    GiftMessagePanel.Visible = (!string.IsNullOrEmpty(basketItem.GiftMessage));
                    if (GiftMessagePanel.Visible)
                    {
                        GiftMessage.Text = basketItem.GiftMessage;
                    }
                    //SHOW ASSETS
                    List <AbleCommerce.Code.ProductAssetWrapper> assets = AbleCommerce.Code.ProductHelper.GetAssets(this.Page, basketItem.Product, basketItem.OptionList, basketItem.KitList, "javascript:window.close()");
                    AssetsPanel.Visible = (this.ShowAssets && assets.Count > 0);
                    if (AssetsPanel.Visible)
                    {
                        AssetLinkList.DataSource = assets;
                        AssetLinkList.DataBind();
                    }
                    //SHOW SUBSCRIPTIONS
                    if (this.ShowSubscription)
                    {
                        SubscriptionPlan sp = basketItem.Product.SubscriptionPlan;
                        if (sp != null && basketItem.IsSubscription && basketItem.Frequency > 0)
                        {
                            // GET THE RECURRING PAYMENT MESSAGE FOR THIS PRODUCT
                            RecurringPaymentMessage.Text = AbleCommerce.Code.ProductHelper.GetRecurringPaymentMessage(basketItem);
                            SubscriptionPanel.Visible    = true;
                        }
                    }
                }
                else
                {
                    //OUTPUT NAME
                    phProductName.Controls.Add(new LiteralControl(basketItem.Name));
                    InputList.Visible         = false;
                    KitProductPanel.Visible   = false;
                    WishlistLabel.Visible     = false;
                    ShipsToPanel.Visible      = false;
                    GiftWrapPanel.Visible     = false;
                    GiftMessagePanel.Visible  = false;
                    AssetsPanel.Visible       = false;
                    SubscriptionPanel.Visible = false;
                }
            }
            else
            {
                //NO ITEM TO DISPLAY
                this.Controls.Clear();
            }
        }
        protected BasketItem CreateBasketItem()
        {
            //GET THE PRODUCT ID
            int     productId = AlwaysConvert.ToInt(AddProductId.Value);
            Product product   = ProductDataSource.Load(productId);

            if (product == null)
            {
                return(null);
            }
            //GET THE QUANTITY
            short tempQuantity = AlwaysConvert.ToInt16(AddProductQuantity.Text);

            if (tempQuantity < 1)
            {
                return(null);
            }
            //RECALCULATE SELECTED KIT OPTIONS
            GetSelectedKitOptions(product);
            // DETERMINE THE OPTION LIST
            string optionList = ProductVariantDataSource.GetOptionList(productId, _SelectedOptions, false);

            //CREATE THE BASKET ITEM WITH GIVEN OPTIONS
            bool       calculateOneTimePrice = AlwaysConvert.ToBool(OptionalSubscription.SelectedValue, false);
            BasketItem basketItem            = BasketItemDataSource.CreateForProduct(productId, tempQuantity, optionList, AlwaysConvert.ToList(",", _SelectedKitProducts), _UserId, calculateOneTimePrice);

            if (basketItem != null)
            {
                //BASKET ID
                basketItem.BasketId = _Basket.Id;

                // PRODUCT PRICE FOR VARIABLE PRICE PRODUCT
                if (product.UseVariablePrice && !product.IsSubscription && !product.IsKit)
                {
                    basketItem.Price = AlwaysConvert.ToDecimal(AddProductVariablePrice.Text);
                }
                else
                {
                    basketItem.Price = AlwaysConvert.ToDecimal(AddProductPrice.Text);
                }

                if (product.IsSubscription)
                {
                    if (product.SubscriptionPlan.IsOptional)
                    {
                        basketItem.IsSubscription = !calculateOneTimePrice;
                    }
                    else
                    {
                        basketItem.IsSubscription = true;
                    }

                    if (basketItem.IsSubscription && product.SubscriptionPlan.IsRecurring)
                    {
                        basketItem.Frequency     = product.SubscriptionPlan.PaymentFrequencyType == PaymentFrequencyType.Optional ? AlwaysConvert.ToInt16(AutoDeliveryInterval.SelectedValue) : product.SubscriptionPlan.PaymentFrequency;
                        basketItem.FrequencyUnit = product.SubscriptionPlan.PaymentFrequencyUnit;
                    }
                    else if (basketItem.IsSubscription)
                    {
                        basketItem.Frequency     = product.SubscriptionPlan.PaymentFrequency;
                        basketItem.FrequencyUnit = product.SubscriptionPlan.PaymentFrequencyUnit;
                    }
                }


                // COLLECT ANY ADDITIONAL INPUTS
                AbleCommerce.Code.ProductHelper.CollectProductTemplateInput(basketItem, this);
            }
            return(basketItem);
        }
Example #12
0
        protected void Page_PreRender(object sender, EventArgs e)
        {
            _BasketItem = BasketItemDataSource.Load(BasketItemId);
            if (_BasketItem != null)
            {
                Product product = _BasketItem.Product;
                if (product != null)
                {
                    //OUTPUT THE PRODUCT NAME
                    string productName = product.Name;
                    if (_BasketItem.ProductVariant != null)
                    {
                        productName += string.Format(" ({0})", _BasketItem.ProductVariant.VariantName);
                    }
                    if (this.LinkProducts)
                    {
                        //OUTPUT NAME AS LINK
                        string url = UrlGenerator.GetBrowseUrl(product.Id, CatalogNodeType.Product, product.Name);
                        if (!string.IsNullOrEmpty(_BasketItem.KitList) && !string.IsNullOrEmpty(_BasketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Kits={2}&Options={3} \">{4}</a>", Page.ResolveUrl(url), _BasketItem.Id, _BasketItem.KitList, _BasketItem.OptionList.Replace(",0", string.Empty), productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else if (!string.IsNullOrEmpty(_BasketItem.KitList) && string.IsNullOrEmpty(_BasketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Kits={2}\">{3}</a>", Page.ResolveUrl(url), _BasketItem.Id, _BasketItem.KitList, productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else if (string.IsNullOrEmpty(_BasketItem.KitList) && !string.IsNullOrEmpty(_BasketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Options={2}\">{3}</a>", Page.ResolveUrl(url), _BasketItem.Id, _BasketItem.OptionList.Replace(",0", string.Empty), productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}\">{2}</a>", Page.ResolveUrl(url), _BasketItem.Id, productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                    }
                    else
                    {
                        //OUTPUT NAME
                        phProductName.Controls.Add(new LiteralControl(productName));
                    }
                    //SHOW INPUTS
                    IList <BasketItemInput> inputs = GetCustomerInputs();
                    if (inputs.Count > 0)
                    {
                        InputList.DataSource = inputs;
                        InputList.DataBind();
                    }
                    else
                    {
                        InputList.Visible = false;
                    }
                    //SHOW KIT PRODUCTS
                    IList <BasketItem> kitProductList = GetKitProducts(_BasketItem);
                    KitProductPanel.Visible = (kitProductList.Count > 0 && _BasketItem.Product.Kit != null && !_BasketItem.Product.Kit.ItemizeDisplay);
                    if (KitProductPanel.Visible)
                    {
                        KitProductRepeater.DataSource = kitProductList;
                        KitProductRepeater.DataBind();
                    }
                    //SET THE WISHLIST LABEL
                    WishlistLabel.Visible = (_BasketItem.WishlistItem != null);
                    if (WishlistLabel.Visible)
                    {
                        //SET THE WISHLIST NAME
                        WishlistLabel.Text = string.Format(WishlistLabel.Text, GetWishlistName(_BasketItem.WishlistItem.Wishlist));
                    }
                    //SET THE SHIPS TO PANEL
                    Basket basket = _BasketItem.Basket;

                    //SHOW ASSETS
                    List <AbleCommerce.Code.ProductAssetWrapper> assets = AbleCommerce.Code.ProductHelper.GetAssets(this.Page, _BasketItem.Product, _BasketItem.OptionList, _BasketItem.KitList, "javascript:window.close()");
                    AssetsPanel.Visible = (this.ShowAssets && assets.Count > 0);
                    if (AssetsPanel.Visible)
                    {
                        AssetLinkList.DataSource = assets;
                        AssetLinkList.DataBind();
                    }
                    //SHOW SUBSCRIPTIONS
                    SubscriptionPlan sp = _BasketItem.Product.SubscriptionPlan;
                    SubscriptionPanel.Visible = (this.ShowSubscription && _BasketItem.IsSubscription);
                    if (SubscriptionPanel.Visible)
                    {
                        InitialPayment.Visible = (sp.RecurringChargeSpecified);
                        if (InitialPayment.Visible)
                        {
                            InitialPayment.Text = string.Format(InitialPayment.Text, _BasketItem.Price.LSCurrencyFormat("ulc"));
                        }
                        string period;
                        if (_BasketItem.Frequency > 1)
                        {
                            period = _BasketItem.Frequency + " " + _BasketItem.FrequencyUnit.ToString().ToLowerInvariant() + "s";
                        }
                        else
                        {
                            period = _BasketItem.FrequencyUnit.ToString().ToLowerInvariant();
                        }
                        int numPayments = (sp.RecurringChargeSpecified ? sp.NumberOfPayments - 1 : sp.NumberOfPayments);
                        if (sp.NumberOfPayments == 0)
                        {
                            RecurringPayment.Text = string.Format("Recurring Payment: {0}, every {1} until canceled", sp.CalculateRecurringCharge(_BasketItem.Price).LSCurrencyFormat("ulc"), period);
                        }
                        else
                        {
                            RecurringPayment.Text = string.Format(RecurringPayment.Text, numPayments, sp.CalculateRecurringCharge(_BasketItem.Price).LSCurrencyFormat("ulc"), period);
                        }
                    }
                }
                else
                {
                    //OUTPUT NAME
                    phProductName.Controls.Add(new LiteralControl(_BasketItem.Name));
                    InputList.Visible         = false;
                    KitProductPanel.Visible   = false;
                    WishlistLabel.Visible     = false;
                    AssetsPanel.Visible       = false;
                    SubscriptionPanel.Visible = false;
                }
            }
            else
            {
                //NO ITEM TO DISPLAY
                this.Controls.Clear();
            }
        }