/// <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); }
/// <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) ) )); }
/// <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; } }
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; } }