public virtual async Task <IActionResult> OptionEditPopup(int id) { if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageAttributes)) { return(AccessDeniedView()); } //try to get a specification attribute option with the specified id var specificationAttributeOption = await _specificationAttributeService.GetSpecificationAttributeOptionByIdAsync(id); if (specificationAttributeOption == null) { return(RedirectToAction("List")); } //try to get a specification attribute with the specified id var specificationAttribute = await _specificationAttributeService .GetSpecificationAttributeByIdAsync(specificationAttributeOption.SpecificationAttributeId); if (specificationAttribute == null) { return(RedirectToAction("List")); } //prepare model var model = await _specificationAttributeModelFactory .PrepareSpecificationAttributeOptionModelAsync(null, specificationAttribute, specificationAttributeOption); return(View(model)); }
private async Task ExportSpecificationsAsync(XmlWriter xml, Product product) { var allProductSpecAttrs = await _specificationAttributeService.GetProductSpecificationAttributesAsync(product.Id); var features = new List <ProductSpecificationAttribute>(); foreach (var psa in allProductSpecAttrs) { var sao = await _specificationAttributeService.GetSpecificationAttributeOptionByIdAsync(psa.Id); if (sao == null) { continue; } var sa = await _specificationAttributeService.GetSpecificationAttributeByIdAsync(sao.Id); if (sa == null || sa.Name == "Color" || sa.Name == "Category") { continue; } features.Add(psa); } if (!features.Any()) { return; } xml.WriteStartElement(_featuresTag); foreach (var feature in features) { var specAttrId = (await _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttributeAsync(feature.Id))[0].SpecificationAttributeId; var sa = await _specificationAttributeService.GetSpecificationAttributeByIdAsync(specAttrId); xml.WriteStartElement(_featureTag); xml.WriteAttributeString("name", XmlConvert.EncodeName(sa.Name)); xml.WriteValue(XmlSanitize(sa.Name)); xml.WriteEndElement(); } xml.WriteEndElement(); }
protected virtual async Task <ProductSpecificationApiModel> PrepareProductSpecificationAttributeModelAsync(Product product) { var result = new ProductSpecificationApiModel(); if (product == null) { var allProductSpecifications = new ProductSpecificationApiModel(); var specificationCacheKey = _staticCacheManager.PrepareKeyForDefaultCache(NopModelCacheDefaults.AllProductSpecificationsModelKey, product, await _storeContext.GetCurrentStoreAsync()); allProductSpecifications = await _staticCacheManager.GetAsync(specificationCacheKey, async() => { var productAllSpecificationAttributes = await _specificationAttributeService.GetProductSpecificationAttributesAsync(); foreach (var psa in productAllSpecificationAttributes) { var singleOption = await _specificationAttributeService.GetSpecificationAttributeOptionByIdAsync(psa.SpecificationAttributeOptionId); var checkModel = result.ProductSpecificationAttribute.FirstOrDefault(model => model.Id == singleOption.SpecificationAttributeId || model.Name == singleOption.Name); if (checkModel == null) { var model1 = new ProductSpecificationAttributeApiModel(); var attribute = await _specificationAttributeService.GetSpecificationAttributeByIdAsync(singleOption.SpecificationAttributeId); model1.Id = attribute.Id; model1.Name = await _localizationService.GetLocalizedAsync(attribute, x => x.Name); var options = await _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttributeAsync(attribute.Id); foreach (var option in options) { model1.Values.Add(new ProductSpecificationAttributeValueApiModel { AttributeTypeId = psa.AttributeTypeId, ColorSquaresRgb = option.ColorSquaresRgb, ValueRaw = psa.AttributeType switch { SpecificationAttributeType.Option => WebUtility.HtmlEncode(await _localizationService.GetLocalizedAsync(option, x => x.Name)), SpecificationAttributeType.CustomText => WebUtility.HtmlEncode(await _localizationService.GetLocalizedAsync(psa, x => x.CustomValue)), SpecificationAttributeType.CustomHtmlText => await _localizationService.GetLocalizedAsync(psa, x => x.CustomValue), SpecificationAttributeType.Hyperlink => $"<a href='{psa.CustomValue}' target='_blank'>{psa.CustomValue}</a>", _ => null } });