/// <summary>
    /// Gets all options used in variant.
    /// </summary>
    /// <returns>Collection of option Ids used in variants.</returns>
    private List <string> GetOptionIdsUsedInVariant()
    {
        var optionsInCategory = SKUInfoProvider.GetSKUOptions(optionSKUCategoryInfo.CategoryID, false).Column("SKUID");
        var optionsInVariants = VariantOptionInfoProvider.GetVariantOptions()
                                .WhereIn("VariantSKUID", VariantHelper.GetVariants(ProductID).Column("SKUID"))
                                .Column("OptionSKUID");


        // Check if some variant was created from the option
        return(optionsInCategory.WhereIn("SKUID", optionsInVariants).ToList()
               .Select(o => o.SKUID.ToString())
               .ToList());
    }
        private IEnumerable <SKUInfo> GetOptions(int skuID, int categoryID)
        {
            // Get all variant's options
            var variantOptionIDs = VariantOptionInfoProvider.GetVariantOptions()
                                   .WhereIn("VariantSKUID", VariantHelper.GetVariants(skuID).Column("SKUID"))
                                   .Column("OptionSKUID");

            var variantOptionsList = SKUInfoProvider.GetSKUs()
                                     .WhereIn("SKUID", variantOptionIDs)
                                     .OrderBy("SKUOrder")
                                     .ToList();

            // Create option categories with selectable variant options
            return(variantOptionsList.Where(o => o.SKUOptionCategoryID == categoryID));
        }
    protected void editForm_OnBeforeDataLoad(object sender, EventArgs e)
    {
        if ((Variant == null) || !Variant.IsProductVariant)
        {
            EditedObject = null;
            return;
        }

        CheckEditedObjectSiteID(Variant.SKUSiteID);

        var optionsDs = SKUInfoProvider.GetSKUs()
                        .WhereIn("SKUID",
                                 VariantOptionInfoProvider.GetVariantOptions()
                                 .Column("OptionSKUID")
                                 .WhereEquals("VariantSKUID", Variant.SKUID)
                                 );

        var attrPos = GetAttributesPosition();

        foreach (var option in optionsDs)
        {
            if (option.Parent != null)
            {
                string categoryCodeName = option.Parent.Generalized.ObjectCodeName;
                options.Add(categoryCodeName, option);

                FormFieldInfo ffOption = new FormFieldInfo
                {
                    Name         = categoryCodeName,
                    AllowEmpty   = true,
                    Size         = 400,
                    FieldType    = FormFieldControlTypeEnum.LabelControl,
                    DataType     = FieldDataType.Text,
                    IsDummyField = true,
                };

                OptionCategoryInfo parentOptionCategory = (OptionCategoryInfo)option.Parent;

                ffOption.SetPropertyValue(FormFieldPropertyEnum.DefaultValue, HTMLHelper.HTMLEncode(ResHelper.LocalizeString(option.SKUName)));

                // Show category live site display name instead of category display name in case it is available
                ffOption.SetPropertyValue(FormFieldPropertyEnum.FieldCaption, HTMLHelper.HTMLEncode(ResHelper.LocalizeString(parentOptionCategory.CategoryTitle)));

                //Insert field to the form on specified position
                editForm.FormInformation.AddFormItem(ffOption, attrPos++);
            }
        }
    }
    protected void editForm_OnBeforeDataLoad(object sender, EventArgs e)
    {
        if ((Variant == null) || !Variant.IsProductVariant)
        {
            EditedObject = null;
            return;
        }

        CheckEditedObjectSiteID(Variant.SKUSiteID);

        var optionsDs = SKUInfoProvider.GetSKUs()
                        .WhereIn("SKUID",
                                 VariantOptionInfoProvider.GetVariantOptions()
                                 .Column("OptionSKUID")
                                 .WhereEquals("VariantSKUID", Variant.SKUID)
                                 );

        SetVariantAttributes(optionsDs);
    }
Example #5
0
        /// <summary>
        /// Returns a collection of option categories used in a product's variants.
        /// </summary>
        /// <param name="productId">SKU identifier of the variant's parent product.</param>
        /// <returns>Collection of option categories used in a product's variants. See <see cref="ProductOptionCategory"/> for detailed information.</returns>
        public IEnumerable <ProductOptionCategory> GetVariantOptionCategories(int productId)
        {
            // Get a list of option categories
            var optionCategoriesList = VariantHelper.GetProductVariantsCategories(productId).ToList();

            // Get all variant's options
            var variantOptionIDs = VariantOptionInfoProvider.GetVariantOptions()
                                   .WhereIn("VariantSKUID", VariantHelper.GetVariants(productId).Column("SKUID"))
                                   .Column("OptionSKUID");

            var variantOptionsList = SKUInfoProvider.GetSKUs()
                                     .WhereIn("SKUID", variantOptionIDs)
                                     .OrderBy("SKUOrder")
                                     .ToList();

            // Create option categories with selectable variant options
            return(optionCategoriesList.Select(cat =>
                                               new ProductOptionCategory(
                                                   cat,
                                                   variantOptionsList.Where(o => o.SKUOptionCategoryID == cat.CategoryID)
                                                   )
                                               ));
        }
Example #6
0
        /// <summary>
        /// Returns an enumerable collection of all variants of the given product.
        /// </summary>
        /// <param name="productId">SKU object identifier of the variant's parent product.</param>
        /// <returns>Collection of product variants. See <see cref="Variant"/> for detailed information.</returns>
        public IEnumerable <Variant> GetByProductId(int productId)
        {
            var variantSKUs = VariantHelper.GetVariants(productId).OnSite(SiteID).ToList();

            // Get the used option IDs for the variants
            var variantOptions = VariantOptionInfoProvider.GetVariantOptions()
                                 .WhereIn("VariantSKUID", variantSKUs.Select(s => s.SKUID).ToList())
                                 .ToList();

            // Pre-load option SKUs for the variants
            var options = SKUInfoProvider.GetSKUs()
                          .WhereIn("SKUID", variantOptions.Select(v => v.OptionSKUID).ToList())
                          .ToList();

            // Create variants with the options
            return(variantSKUs.Select(sku => new Variant(
                                          sku,
                                          new ProductAttributeSet(variantOptions
                                                                  .Where(o => o.VariantSKUID == sku.SKUID)
                                                                  .Select(o => options.First(s => s.SKUID == o.OptionSKUID))
                                                                  .ToArray())
                                          )));
        }
    private void grid_OnAction(string actionName, object actionArgument)
    {
        if (string.IsNullOrEmpty(actionName))
        {
            return;
        }

        int skuId = ValidationHelper.GetInteger(actionArgument, 0);

        switch (actionName.ToLowerInvariant())
        {
        case "edit":
            // Show product tabs for type Products, otherwise show only general tab
        {
            var url = UIContextHelper.GetElementUrl(ModuleName.ECOMMERCE, "ProductOptions.Options.General");
            url = URLHelper.AddParameterToUrl(url, "displaytitle", "false");
            url = URLHelper.AddParameterToUrl(url, "productId", skuId.ToString());
            url = URLHelper.AddParameterToUrl(url, "categoryid", categoryId.ToString());
            url = URLHelper.AddParameterToUrl(url, "siteId", categoryObj.CategorySiteID.ToString());
            url = URLHelper.AddParameterToUrl(url, "objectid", skuId.ToString());
            // To be able to hide tax class tab for attribute and text option
            url = URLHelper.AddParameterToUrl(url, "parentobjectid", categoryId.ToString());

            // Add parent product id
            if (parentProductId > 0)
            {
                url += "&parentProductId=" + parentProductId;
            }

            if (QueryHelper.GetBoolean("isindialog", false))
            {
                url = URLHelper.AddParameterToUrl(url, "isindialog", "1");
                url = ApplicationUrlHelper.AppendDialogHash(url);
            }

            URLHelper.Redirect(url);
        }
        break;

        case "delete":
            // Check permissions
            CheckModifyPermission();

            // Check dependencies
            if (SKUInfoProvider.CheckDependencies(skuId))
            {
                // Show error message
                ShowError(EcommerceUIHelper.GetDependencyMessage(SKUInfoProvider.GetSKUInfo(skuId)));

                return;
            }

            // Check if same variant is defined by this option
            DataSet variants = VariantOptionInfoProvider.GetVariantOptions()
                               .TopN(1)
                               .Columns("VariantSKUID")
                               .WhereEquals("OptionSKUID", skuId);

            if (!DataHelper.DataSourceIsEmpty(variants))
            {
                // Option is used in some variant
                ShowError(GetString("com.option.usedinvariant"));

                return;
            }

            SKUInfoProvider.DeleteSKUInfo(skuId);
            ugOptions.ReloadData();

            break;
        }
    }
    /// <summary>
    /// Handles the OptionCategoryGrid's OnAction event.
    /// </summary>
    /// <param name="actionName">Name of item (button) that throws event</param>
    /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param>
    protected void OptionCategoryGrid_OnAction(string actionName, object actionArgument)
    {
        int categoryId = ValidationHelper.GetInteger(actionArgument, 0);

        switch (actionName.ToLowerCSafe())
        {
        case "edit":
            URLHelper.Redirect(UIContextHelper.GetElementUrl(ModuleName.ECOMMERCE, "EditOptionCategory", false, categoryId));

            break;

        case "delete":

            OptionCategoryInfo categoryObj = OptionCategoryInfoProvider.GetOptionCategoryInfo(categoryId);

            if (categoryObj == null)
            {
                break;
            }

            // Check permissions
            if (!ECommerceContext.IsUserAuthorizedToModifyOptionCategory(categoryObj))
            {
                // Check module permissions
                if (categoryObj.CategoryIsGlobal)
                {
                    RedirectToAccessDenied(ModuleName.ECOMMERCE, EcommercePermissions.ECOMMERCE_MODIFYGLOBAL);
                }
                else
                {
                    RedirectToAccessDenied(ModuleName.ECOMMERCE, "EcommerceModify OR ModifyProducts");
                }
            }

            // Check category dependencies
            if (categoryObj.Generalized.CheckDependencies())
            {
                // Show error message
                ShowError(EcommerceUIHelper.GetDependencyMessage(categoryObj));
                return;
            }

            DataSet options = SKUInfoProvider.GetSKUOptions(categoryId, false);

            // Check option category options dependencies
            if (!DataHelper.DataSourceIsEmpty(options))
            {
                // Check if some attribute option is not used in variant
                if (categoryObj.CategoryType == OptionCategoryTypeEnum.Attribute)
                {
                    var optionIds = DataHelper.GetIntegerValues(options.Tables[0], "SKUID");

                    // Check if some variant is defined by this option
                    DataSet variants = VariantOptionInfoProvider.GetVariantOptions()
                                       .TopN(1)
                                       .Column("VariantSKUID")
                                       .WhereIn("OptionSKUID", optionIds);

                    if (!DataHelper.DataSourceIsEmpty(variants))
                    {
                        // Option is used in some variant
                        ShowError(GetString("com.option.categoryoptiosusedinvariant"));

                        return;
                    }
                }

                // Check other dependencies (shopping cart, order)
                foreach (DataRow option in options.Tables[0].Rows)
                {
                    var skuid = ValidationHelper.GetInteger(option["SKUID"], 0);
                    var sku   = SKUInfoProvider.GetSKUInfo(skuid);

                    if (SKUInfoProvider.CheckDependencies(skuid))
                    {
                        // Show error message
                        ShowError(EcommerceUIHelper.GetDependencyMessage(sku));

                        return;
                    }
                }
            }

            // Delete option category from database
            OptionCategoryInfoProvider.DeleteOptionCategoryInfo(categoryObj);

            break;
        }
    }
Example #9
0
    private void grid_OnAction(string actionName, object actionArgument)
    {
        int skuId = ValidationHelper.GetInteger(actionArgument, 0);

        switch (actionName.ToLowerCSafe())
        {
        case "edit":
            // Show product tabs for type Products, otherwise show only general tab
        {
            string url = (categoryObj.CategoryType == OptionCategoryTypeEnum.Products) ?
                         UIContextHelper.GetElementUrl("CMS.ECommerce", "ProductOptions.Options.Edit") :
                         "~/CMSModules/Ecommerce/Pages/Tools/Products/Product_Edit_General.aspx";

            url = URLHelper.AddParameterToUrl(url, "displaytitle", "false");
            url = URLHelper.AddParameterToUrl(url, "productId", skuId.ToString());
            url = URLHelper.AddParameterToUrl(url, "categoryid", categoryId.ToString());
            url = URLHelper.AddParameterToUrl(url, "siteId", categoryObj.CategorySiteID.ToString());
            url = URLHelper.AddParameterToUrl(url, "objectid", categoryId.ToString());
            url = URLHelper.AddParameterToUrl(url, "dialog", QueryHelper.GetString("dialog", "0"));

            // Add parent product id
            if (parentProductId > 0)
            {
                url += "&parentProductId=" + parentProductId;
            }

            URLHelper.Redirect(url);
        }
        break;

        case "delete":
            // Check permissions
            CheckModifyPermission();

            // Check dependencies
            if (SKUInfoProvider.CheckDependencies(skuId))
            {
                // Show error message
                ShowError(GetString("Ecommerce.DeleteDisabled"));

                return;
            }

            // Check if same variant is defined by this option
            DataSet variants = VariantOptionInfoProvider.GetVariantOptions()
                               .TopN(1)
                               .Columns("VariantSKUID")
                               .WhereEquals("OptionSKUID", skuId);

            if (!DataHelper.DataSourceIsEmpty(variants))
            {
                // Option is used in some variant
                ShowError(GetString("com.option.usedinvariant"));

                return;
            }

            SKUInfoProvider.DeleteSKUInfo(skuId);
            ugOptions.ReloadData();

            break;

        case "moveup":
            // Check permissions
            CheckModifyPermission();

            SKUInfoProvider.MoveSKUOptionUp(skuId);
            break;

        case "movedown":
            // Check permissions
            CheckModifyPermission();

            SKUInfoProvider.MoveSKUOptionDown(skuId);
            break;
        }
    }