protected void SearchResultsGrid_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Attach"))
            {
                EnsureKit();
                int          index          = AlwaysConvert.ToInt(e.CommandArgument);
                int          kitComponentId = (int)SearchResultsGrid.DataKeys[index].Value;
                KitComponent kitComponent   = KitComponentDataSource.Load(kitComponentId);
                if (kitComponent != null)
                {
                    _Product.ProductKitComponents.Add(new ProductKitComponent(_Product, kitComponent));
                    _Product.Save();
                    CancelButton_Click(sender, e);
                }
            }
            else if (e.CommandName.Equals("Copy"))
            {
                EnsureKit();
                int          index          = AlwaysConvert.ToInt(e.CommandArgument);
                int          kitComponentId = (int)SearchResultsGrid.DataKeys[index].Value;
                KitComponent kitComponent   = KitComponentDataSource.Load(kitComponentId);
                if (kitComponent != null)
                {
                    // copy the component
                    KitComponent branchedComponent = kitComponent.Copy(true);
                    branchedComponent.Name = "Copy of " + kitComponent.Name;
                    branchedComponent.Save();

                    // attach to the product
                    _Product.ProductKitComponents.Add(new ProductKitComponent(_Product, branchedComponent));
                    _Product.Save();
                    CancelButton_Click(sender, e);
                }
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            int     productId = AlwaysConvert.ToInt(Request.QueryString["ProductId"]);
            Product product   = ProductDataSource.Load(productId);

            if (product == null)
            {
                Response.Redirect("../../Catalog/Browse.aspx?CategoryId=" + AbleCommerce.Code.PageHelper.GetCategoryId());
            }
            Caption.Text = string.Format(Caption.Text, product.Name);

            // build list of kits
            List <KitMemberInfo> kitMemberships = new List <KitMemberInfo>();
            IList <KitComponent> components     = KitComponentDataSource.LoadForMemberProduct(productId);

            foreach (KitComponent component in components)
            {
                foreach (ProductKitComponent pkc in component.ProductKitComponents)
                {
                    kitMemberships.Add(new KitMemberInfo(pkc.ProductId, pkc.Product.Name, component.Name));
                }
            }
            kitMemberships.Sort(new KitMemberInfoComparer());
            KitMembershipList.DataSource = kitMemberships;
            KitMembershipList.DataBind();
        }
        protected void Page_Init(object sender, EventArgs e)
        {
            //INITIALIZE VARIABLES
            _CategoryId = AbleCommerce.Code.PageHelper.GetCategoryId();
            _Category   = CategoryDataSource.Load(_CategoryId);
            _ProductId  = AlwaysConvert.ToInt(Request.QueryString["ProductId"]);
            _Product    = ProductDataSource.Load(_ProductId);
            if (_Product == null)
            {
                Response.Redirect(AbleCommerce.Code.NavigationHelper.GetAdminUrl("Catalog/Browse.aspx?CategoryId=" + _CategoryId.ToString()));
            }
            _KitComponentId = AlwaysConvert.ToInt(Request.QueryString["KitComponentId"]);
            _KitComponent   = KitComponentDataSource.Load(_KitComponentId);
            if (_KitComponent == null)
            {
                Response.Redirect("EditKit.aspx?CategoryId=" + _CategoryId.ToString() + "&ProductId=" + _ProductId.ToString());
            }
            CancelLink.NavigateUrl += "?CategoryId=" + _CategoryId.ToString() + "&ProductId=" + _ProductId.ToString();
            Caption.Text            = string.Format(Caption.Text, _KitComponent.Name);
            InstructionText.Text    = string.Format(InstructionText.Text, _KitComponent.Name, _Product.Name);

            int categoryCount             = CategoryDataSource.CountAll();
            StoreSettingsManager settings = AbleContext.Current.Store.Settings;

            _DisplayCategorySearch = settings.CategorySearchDisplayLimit > 0 && categoryCount >= settings.CategorySearchDisplayLimit;

            // INITIALIZE DROP DOWN LISTS
            if (!_DisplayCategorySearch)
            {
                InitializeCategoryTree();
            }
            else
            {
                // DISPLAY AUTO COMPLETE FOR CATEGORY SEARCH OPTION
                string js = PageHelper.GetAutoCompleteScript(Page.ResolveClientUrl("~/CategorySuggest.ashx"), CategoryAutoComplete, HiddenSelectedCategoryId, "Key", "Value");

                ScriptManager.RegisterStartupScript(PageAjax, this.GetType(), "CATEGORY_SUGGEST", js, true);
                CategoryAutoComplete.Visible = true;
                CategoryFilter.Visible       = false;
            }
            ManufacturerFilter.DataSource = ManufacturerDataSource.LoadAll("Name");
            ManufacturerFilter.DataBind();
            VendorFilter.DataSource = VendorDataSource.LoadAll("Name");
            VendorFilter.DataBind();

            // LOAD CUSTOM VIEWSTATE VARIABLES
            LoadCustomViewState();
            if (_SelectedProducts.Count > 0)
            {
                // REBIND THE REPEATER
                BindSelectedProducts(_SelectedProducts);
            }

            AbleCommerce.Code.PageHelper.SetDefaultButton(NameFilter, SearchButton.ClientID);
            AbleCommerce.Code.PageHelper.SetDefaultButton(SkuFilter, SearchButton.ClientID);
        }
        protected void ComponentList_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            int          kitComponentId = AlwaysConvert.ToInt(e.CommandArgument);
            KitComponent kitComponent   = KitComponentDataSource.Load(kitComponentId);

            if (kitComponent != null)
            {
                switch (e.CommandName)
                {
                case "Branch":
                    // locate the product relationship
                    ProductKitComponent pkc = _Product.ProductKitComponents.FirstOrDefault(x => x.KitComponentId == kitComponent.Id);
                    if (pkc != null)
                    {
                        // create a copy of the component
                        KitComponent branchedComponent = kitComponent.Copy(true);
                        branchedComponent.Save();

                        // update the product relationship
                        _Product.ProductKitComponents.Add(new ProductKitComponent(_Product, branchedComponent, pkc.OrderBy));
                        _Product.ProductKitComponents.DeleteAt(_Product.ProductKitComponents.IndexOf(pkc));
                        _Product.Save();
                    }
                    break;

                case "Delete":
                    AbleContext.Current.Database.BeginTransaction();
                    ProductKitComponent matchingComponent = _Product.ProductKitComponents.FirstOrDefault(x => x.KitComponentId == kitComponentId);
                    if (matchingComponent != null)
                    {
                        int index = _Product.ProductKitComponents.IndexOf(matchingComponent);
                        if (index > -1)
                        {
                            _Product.ProductKitComponents.RemoveAt(index);
                            _Product.Save();
                        }
                    }
                    kitComponent.Delete();

                    // DELETE THE KIT RECORD IF NO COMPONENTS REMAINING
                    if (_Product.ProductKitComponents.Count == 0)
                    {
                        Kit kit = _Product.Kit;
                        _Product.Kit = null;
                        _Product.Save();
                        kit.Delete();
                    }
                    AbleContext.Current.Database.CommitTransaction();
                    ComponentList.DataBind();
                    break;
                }
            }
        }
 protected void Page_Init(object sender, EventArgs e)
 {
     //INITIALIZE VARIABLES
     _CategoryId = AbleCommerce.Code.PageHelper.GetCategoryId();
     _Category = CategoryDataSource.Load(_CategoryId);
     _ProductId = AlwaysConvert.ToInt(Request.QueryString["ProductId"]);
     _Product = ProductDataSource.Load(_ProductId);
     if (_Product == null) Response.Redirect(AbleCommerce.Code.NavigationHelper.GetAdminUrl("Catalog/Browse.aspx"));
     _KitComponentId = AlwaysConvert.ToInt(Request.QueryString["KitComponentId"]);
     _KitComponent = KitComponentDataSource.Load(_KitComponentId);
     if (_KitComponent == null) Response.Redirect("EditKit.aspx?CategoryId=" + _CategoryId.ToString() + "&ProductId=" + _ProductId.ToString());
     //INITIALIZE PAGE ELEMENTS
     Caption.Text = string.Format(Caption.Text, _KitComponent.Name);
     BindKitList();
 }
 protected void Page_Load(object sender, EventArgs e)
 {
     _CategoryId = AbleCommerce.Code.PageHelper.GetCategoryId();
     _Category   = CategoryDataSource.Load(_CategoryId);
     _ProductId  = AlwaysConvert.ToInt(Request.QueryString["ProductId"]);
     _Product    = ProductDataSource.Load(_ProductId);
     if (_Product == null)
     {
         Response.Redirect(AbleCommerce.Code.NavigationHelper.GetAdminUrl("Catalog/Browse.aspx"));
     }
     _KitComponentId = AlwaysConvert.ToInt(Request.QueryString["KitComponentId"]);
     _KitComponent   = KitComponentDataSource.Load(_KitComponentId);
     if (_KitComponent == null)
     {
         Response.Redirect("Default.aspx?CategoryId=" + _CategoryId.ToString() + "&ProductId=" + _ProductId.ToString());
     }
     Caption.Text = string.Format(Caption.Text, _KitComponent.Name);
     if (!Page.IsPostBack)
     {
         KitParts.DataSource = _KitComponent.KitProducts;
         KitParts.DataBind();
     }
 }