private void AddMultipleOptionNames(SpecificationAttributeOptionModel model) { var values = model.Name.SplitSafe(";"); int order = model.DisplayOrder; for (int i = 0; i < values.Length; ++i) { var sao = new SpecificationAttributeOption() { Name = values[i].Trim(), DisplayOrder = order++, SpecificationAttributeId = model.SpecificationAttributeId }; _specificationAttributeService.InsertSpecificationAttributeOption(sao); foreach (var localized in model.Locales.Where(l => l.Name.HasValue())) { var localizedValues = localized.Name.SplitSafe(";"); string value = (i < localizedValues.Length ? localizedValues[i].Trim() : sao.Name); _localizedEntityService.SaveLocalizedValue(sao, x => x.Name, value, localized.LanguageId); } } }
private bool AddMultipleOptionNames(SpecificationAttributeOptionModel model) { var values = model.Name.SplitSafe(";"); var alias = model.Alias.SplitSafe(";"); var order = model.DisplayOrder; for (int i = 0; i < values.Length; ++i) { var sao = new SpecificationAttributeOption { Name = values.SafeGet(i).Trim(), Alias = alias.SafeGet(i).Trim(), DisplayOrder = order++, SpecificationAttributeId = model.SpecificationAttributeId }; try { _specificationAttributeService.InsertSpecificationAttributeOption(sao); } catch (Exception exception) { ModelState.AddModelError("", exception.Message); return(false); } try { // save localized properties foreach (var localized in model.Locales.Where(l => l.Name.HasValue())) { var localizedValues = localized.Name.SplitSafe(";"); var value = (i < localizedValues.Length ? localizedValues[i].Trim() : sao.Name); _localizedEntityService.SaveLocalizedValue(sao, x => x.Name, value, localized.LanguageId); } foreach (var localized in model.Locales.Where(l => l.Alias.HasValue())) { var localizedAlias = localized.Alias.SplitSafe(";"); var value = localizedAlias.SafeGet(i).Trim(); if (value.HasValue()) { _localizedEntityService.SaveLocalizedValue(sao, x => x.Alias, value, localized.LanguageId); } } } catch (Exception) { // TODO: what? } } return(true); }
public IActionResult CreateSpecificationAttribute([ModelBinder(typeof(JsonModelBinder <SpecificationAttributeDto>))] Delta <SpecificationAttributeDto> specificaitonAttributeDelta) { // Here we display the errors if the validation has failed at some point. if (!ModelState.IsValid) { return(Error()); } // Inserting the new product var specificationAttribute = new SpecificationAttribute(); specificaitonAttributeDelta.Merge(specificationAttribute); _specificationAttributeService.InsertSpecificationAttribute(specificationAttribute); var options = new List <SpecificationAttributeOption>(); if (specificaitonAttributeDelta.Dto.SpecificationAttributeOptions?.Any() == true) { var ix = 0; foreach (var option in specificaitonAttributeDelta.Dto.SpecificationAttributeOptions) { var opt = new SpecificationAttributeOption { Name = option.Name, SpecificationAttributeId = specificationAttribute.Id, DisplayOrder = ix }; ix++; _specificationAttributeService.InsertSpecificationAttributeOption(opt); options.Add(opt); } } CustomerActivityService.InsertActivity("AddNewSpecAttribute", LocalizationService.GetResource("ActivityLog.AddNewSpecAttribute"), specificationAttribute); // Preparing the result dto of the new product var specificationAttributeDto = _dtoHelper.PrepareSpecificationAttributeDto(specificationAttribute); specificationAttributeDto.SpecificationAttributeOptions = new List <SpecificationAttributeOptionDto>(); foreach (var option in options) { specificationAttributeDto.SpecificationAttributeOptions.Add(_dtoHelper.PrepareSpecificationAttributeOptionDto(option)); } var specificationAttributesRootObjectDto = new SpecificationAttributesRootObjectDto(); specificationAttributesRootObjectDto.SpecificationAttributes.Add(specificationAttributeDto); var json = JsonFieldsSerializer.Serialize(specificationAttributesRootObjectDto, string.Empty); return(new RawJsonActionResult(json)); }
public ActionResult OptionCreatePopup(string btnId, string formId, SpecificationAttributeOptionModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageAttributes)) { return(AccessDeniedView()); } var specificationAttribute = _specificationAttributeService.GetSpecificationAttributeById(model.SpecificationAttributeId); if (specificationAttribute == null) { //No specification attribute found with the specified id return(RedirectToAction("List")); } if (ModelState.IsValid) { var sao = model.ToEntity(); _specificationAttributeService.InsertSpecificationAttributeOption(sao); UpdateOptionLocales(sao, model); ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return(View(model)); } //If we got this far, something failed, redisplay form return(View(model)); }
public virtual IActionResult OptionCreatePopup(SpecificationAttributeOptionModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageAttributes)) { return(AccessDeniedView()); } var specificationAttribute = _specificationAttributeService.GetSpecificationAttributeById(model.SpecificationAttributeId); if (specificationAttribute == null) { //No specification attribute found with the specified id return(RedirectToAction("List")); } if (ModelState.IsValid) { var sao = model.ToEntity(); //clear "Color" values if it's disabled if (!model.EnableColorSquaresRgb) { sao.ColorSquaresRgb = null; } _specificationAttributeService.InsertSpecificationAttributeOption(sao); UpdateOptionLocales(sao, model); ViewBag.RefreshPage = true; return(View(model)); } //If we got this far, something failed, redisplay form return(View(model)); }
public HttpResponseMessage CreateOption(HttpRequestMessage request, SpecificationAttributeOptionVM model) { return(CreateHttpResponse(request, () => { HttpResponseMessage response = request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid specification attribute id."); if (!ModelState.IsValid) { response = request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } else { var specificationAttribute = _specificationAttributeService.GetSpecificationAttributeById(model.SpecificationAttributeId); if (specificationAttribute != null) { var sao = model.ToEntity(); //clear "Color" values if it's disabled if (!model.EnableColorSquaresRgb) { sao.ColorSquaresRgb = null; } _specificationAttributeService.InsertSpecificationAttributeOption(sao); _baseService.Commit(); response = request.CreateResponse <SpecificationAttributeOption>(HttpStatusCode.Created, sao); } } return response; })); }
public IActionResult CreateSpecificationAttributeOption([ModelBinder(typeof(JsonModelBinder <SpecificationAttributeOptionDto>))] Delta <SpecificationAttributeOptionDto> specificationAttributeOptionDelta) { // Here we display the errors if the validation has failed at some point. if (!ModelState.IsValid) { return(Error()); } // Inserting the new product SpecificationAttributeOption sao = new SpecificationAttributeOption(); specificationAttributeOptionDelta.Merge(sao); _specificationAttributeService.InsertSpecificationAttributeOption(sao); UpdateLocalesSpecificationAttributeOption(sao, specificationAttributeOptionDelta.Dto.LocalizedNames); // Preparing the result dto of the new product SpecificationAttributeOptionDto specificationAttributeOptionDto = _dtoHelper.PrepareSpecificationAttributeOptionDTO(sao); var saoRootObjectDto = new SpecificationAttributesOptionRootObjectDto(); saoRootObjectDto.SpecificationAttributeOptions.Add(specificationAttributeOptionDto); var json = JsonFieldsSerializer.Serialize(saoRootObjectDto, string.Empty); return(new RawJsonActionResult(json)); }
private SpecificationAttributeOption InsertSpecificationAttributeOption(SpecificationAttribute specificationAttribute, ProductSpecification entity) { var specAttr = specificationAttribute.SpecificationAttributeOptions.FirstOrDefault(x => x.Name.Equals(entity.Value)); if (specAttr != null) { return(specAttr); } else { SpecificationAttributeOption specificationAttributeOption = new SpecificationAttributeOption() { SpecificationAttributeId = specificationAttribute.Id, Name = entity.Value, }; _specificationAttributeService.InsertSpecificationAttributeOption(specificationAttributeOption); return (specificationAttribute.SpecificationAttributeOptions.FirstOrDefault(x => x.Name.Equals(entity.Value))); } }
public virtual ActionResult OptionCreatePopup(string btnId, string formId, SpecificationAttributeOptionModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageAttributes)) { return(AccessDeniedView()); } var specificationAttribute = _specificationAttributeService.GetSpecificationAttributeById(model.SpecificationAttributeId); if (specificationAttribute == null) { //No specification attribute found with the specified id return(RedirectToAction("List")); } if (ModelState.IsValid) { var sao = model.ToEntity(); ////clear "Color" values if it's disabled 原来处理颜色值的代码 //if (!model.EnableColorSquaresRgb) // sao.ColorSquaresRgb = null; //ColorSquaresRgb字段即可以保存颜色值也可以保存上传的图片Id if (model.EnableUploadImage) { model.EnableColorSquaresRgb = false; sao.ColorSquaresRgb = model.PictureId.ToString(); } else { if (!model.EnableColorSquaresRgb) { sao.ColorSquaresRgb = null; } } _specificationAttributeService.InsertSpecificationAttributeOption(sao); UpdateOptionLocales(sao, model); ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return(View(model)); } //If we got this far, something failed, redisplay form return(View(model)); }
public ActionResult ProductTabPost(int id, string ArtistName) { var product = _productService.GetProductById(id); if (product != null) { // _genericAttributeService.SaveAttribute<string>(product, ProductArtistAttributeNames.ArtistName, ArtistName, _storeContext.CurrentStore.Id); var artistAttr = _specificationAttributeService.GetSpecificationAttributes().Where(x => x.Name == "Artist").FirstOrDefault(); if (artistAttr != null) { var value = artistAttr.SpecificationAttributeOptions.Where(x => x.Name == ArtistName).FirstOrDefault(); if (value != null) { ProductSpecificationAttribute psA = new ProductSpecificationAttribute(); psA.SpecificationAttributeOption = value; psA.ProductId = product.Id; psA.AllowFiltering = true; psA.AttributeType = SpecificationAttributeType.Option; psA.ShowOnProductPage = true; _specificationAttributeService.InsertProductSpecificationAttribute(psA); } else { value = new SpecificationAttributeOption { Name = ArtistName, SpecificationAttributeId = artistAttr.Id }; _specificationAttributeService.InsertSpecificationAttributeOption(value); ProductSpecificationAttribute psA = new ProductSpecificationAttribute(); psA.SpecificationAttributeOption = value; psA.ProductId = product.Id; psA.AllowFiltering = true; psA.AttributeType = SpecificationAttributeType.Option; psA.ShowOnProductPage = true; _specificationAttributeService.InsertProductSpecificationAttribute(psA); } } } return(Content(ArtistName)); }
private void InstallAttributes(CcSettings settings) { var attributes = _productAttributeService.GetAllProductAttributes(); var specificationAttributes = _specificationAttributeService.GetSpecificationAttributes(); var ccIdAttribute = attributes.FirstOrDefault(x => x.Name == "CcId"); if (ccIdAttribute == null) { ccIdAttribute = new ProductAttribute() { Name = "CcId" }; _productAttributeService.InsertProductAttribute(ccIdAttribute); } var editorDefinitionSpecificationAttribute = specificationAttributes.FirstOrDefault(x => x.Name == "CC Editor"); if (editorDefinitionSpecificationAttribute == null) { editorDefinitionSpecificationAttribute = new SpecificationAttribute { Name = "CC Editor", DisplayOrder = 100 }; _specificationAttributeService.InsertSpecificationAttribute(editorDefinitionSpecificationAttribute); } var editorDefinitionSpecificationOption = editorDefinitionSpecificationAttribute.SpecificationAttributeOptions.FirstOrDefault(x => x.Name == "CC Editor"); if (editorDefinitionSpecificationOption == null) { editorDefinitionSpecificationOption = new SpecificationAttributeOption { DisplayOrder = 0, Name = "CC Editor", SpecificationAttributeId = editorDefinitionSpecificationAttribute.Id }; _specificationAttributeService.InsertSpecificationAttributeOption(editorDefinitionSpecificationOption); } var editorConfigurationSpecificationAttribute = specificationAttributes.FirstOrDefault(x => x.Name == "CC EditorConfig"); if (editorConfigurationSpecificationAttribute == null) { editorConfigurationSpecificationAttribute = new SpecificationAttribute { Name = "CC EditorConfig", DisplayOrder = 100 }; _specificationAttributeService.InsertSpecificationAttribute(editorConfigurationSpecificationAttribute); } var editorConfigurationSpecificationOption = editorDefinitionSpecificationAttribute.SpecificationAttributeOptions.FirstOrDefault(x => x.Name == "CC EditorConfig"); if (editorConfigurationSpecificationOption == null) { editorConfigurationSpecificationOption = new SpecificationAttributeOption { DisplayOrder = 0, Name = "CC EditorConfig", SpecificationAttributeId = editorConfigurationSpecificationAttribute.Id }; _specificationAttributeService.InsertSpecificationAttributeOption(editorConfigurationSpecificationOption); } // add to settings settings.CcIdAttributeId = ccIdAttribute.Id; settings.EditorDefinitionSpecificationAttributeId = editorDefinitionSpecificationAttribute.Id; settings.EditorDefinitionSpecificationOptionId = editorDefinitionSpecificationOption.Id; settings.EditorConfigurationSpecificationAttributeId = editorConfigurationSpecificationAttribute.Id; settings.EditorConfigurationSpecificationOptionId = editorConfigurationSpecificationOption.Id; }
public async Task <ActionResult> CallApi(ConfigurationModel model) { var storeScope = this.GetActiveStoreScopeConfiguration(_storeService, _workContext); var mappingSettings = _settingService.LoadSetting <ProductMappingSettings>(storeScope); var tokenebay = EbayExtensions.GetToken(); var categoryWorldBuy = _categoryMappingRecord.Table.Where(u => u.CategoryId == model.CategoryId && u.SourceId == (int)Source.Ebay).ToList(); if (categoryWorldBuy != null) { foreach (var cateIds in categoryWorldBuy) { var clientapi1 = new HttpClient(); clientapi1.BaseAddress = new Uri("https://api.ebay.com/"); clientapi1.DefaultRequestHeaders.Clear(); clientapi1.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); clientapi1.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenebay); clientapi1.Timeout = TimeSpan.FromMinutes(60); var getCategoryId = _affiliateEbayService.Get(cateIds.CategorySourceId).EbayId.ToString(); string str = "buy/browse/v1/item_summary/search?limit=200&category_ids=" + getCategoryId; if (!string.IsNullOrEmpty(model.KeyWord)) { str = str + "&q=" + model.KeyWord; } HttpResponseMessage Res1 = await clientapi1.GetAsync(str); if (Res1.IsSuccessStatusCode) { var EmpResponse1 = Res1.Content.ReadAsStringAsync().Result; var result1 = JsonConvert.DeserializeObject <SearchOutput>(EmpResponse1); int temp = int.Parse(result1.total); int value = 0; while (temp > 0) { str = str + "&offset=" + value; HttpResponseMessage Res2 = await clientapi1.GetAsync(str); if (Res2.IsSuccessStatusCode) { var EmpResponse2 = Res2.Content.ReadAsStringAsync().Result; var result2 = JsonConvert.DeserializeObject <SearchOutput>(EmpResponse2); if (result2.itemSummaries != null) { foreach (var item in result2.itemSummaries) { var checkProduct = _affiliateEbayService.GetProductBySourceId(productSourceId: item.itemId, source: (int)Source.Ebay); if (checkProduct.Id == 0) { var clientapi = new HttpClient(); clientapi.BaseAddress = new Uri("https://api.ebay.com/"); clientapi.DefaultRequestHeaders.Clear(); clientapi.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); clientapi.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenebay); clientapi.Timeout = TimeSpan.FromMinutes(60); HttpResponseMessage Res = await clientapi.GetAsync("buy/browse/v1/item/" + item.itemId); if (Res.IsSuccessStatusCode) { var EmpResponse = Res.Content.ReadAsStringAsync().Result; var result = JsonConvert.DeserializeObject <ProductModelApi>(EmpResponse); if (result.price != null) { var price = Convert.ToDecimal(result.price.value); var product = new Product(); product.Name = result.title; var currencyService = EngineContext.Current.Resolve <ICurrencyService>(); product.Price = Round(currencyService.ConvertToPrimaryStoreCurrency(price * (1 + mappingSettings.AdditionalCostPercent / 100), currencyService.GetCurrencyByCode("USD")), -3); //if(result.marketingPrice == null) //{ // product.OldPrice = 0; //} //else //{ // if(result.marketingPrice.originalPrice == null) // product.OldPrice = 0; // else // product.OldPrice = Convert.ToDecimal(result.marketingPrice.originalPrice.value); //} product.ShortDescription = result.shortDescription; product.FullDescription = result.description; product.VisibleIndividually = true; product.AllowCustomerReviews = true; product.UnlimitedDownloads = true; product.MaxNumberOfDownloads = 10; product.RecurringCycleLength = 100; product.RecurringTotalCycles = 10; product.RentalPriceLength = 1; product.IsShipEnabled = true; product.NotifyAdminForQuantityBelow = 1; product.StockQuantity = 1000; product.OrderMaximumQuantity = 1000; product.OrderMinimumQuantity = 1; product.CreatedOnUtc = DateTime.UtcNow; product.UpdatedOnUtc = DateTime.UtcNow; _productService.InsertProduct(product); var productMapping = new ProductMapping(); productMapping.ProductSourceId = item.itemId; productMapping.ProductSourceLink = item.itemWebUrl; productMapping.SourceId = (int)Source.Ebay; productMapping.ProductId = product.Id; productMapping.Price = price; _productMappingService.InsertProduct(productMapping); // Thêm hình chính var imageMain = result.image.imageUrl.Split('?')[0]; System.Drawing.Image imageKey = EbayExtensions.DownloadImage(imageMain); if (imageKey != null) { var contentTypeMain = ""; var vendorPictureBinaryMain = EbayExtensions.ImageToByte(imageKey); var fileExtensionMain = Path.GetExtension(imageMain); if (!String.IsNullOrEmpty(fileExtensionMain)) { fileExtensionMain = fileExtensionMain.ToLowerInvariant(); } if (String.IsNullOrEmpty(contentTypeMain)) { switch (fileExtensionMain) { case ".bmp": contentTypeMain = MimeTypes.ImageBmp; break; case ".gif": contentTypeMain = MimeTypes.ImageGif; break; case ".jpeg": case ".jpg": case ".jpe": case ".jfif": case ".pjpeg": case ".pjp": contentTypeMain = MimeTypes.ImageJpeg; break; case ".png": contentTypeMain = MimeTypes.ImagePng; break; case ".tiff": case ".tif": contentTypeMain = MimeTypes.ImageTiff; break; default: break; } } var pictureMain = _pictureService.InsertPicture(vendorPictureBinaryMain, contentTypeMain, null); _productService.InsertProductPicture(new ProductPicture { PictureId = pictureMain.Id, ProductId = product.Id, DisplayOrder = 0, }); } int display = 1; if (result.additionalImages != null) { foreach (var ite in result.additionalImages) { var ima = ite.imageUrl.Split('?')[0]; System.Drawing.Image image = EbayExtensions.DownloadImage(ima); if (image != null) { var contentType = ""; var vendorPictureBinary = EbayExtensions.ImageToByte(image); var fileExtension = Path.GetExtension(ima); if (!String.IsNullOrEmpty(fileExtension)) { fileExtension = fileExtension.ToLowerInvariant(); } if (String.IsNullOrEmpty(contentType)) { switch (fileExtension) { case ".bmp": contentType = MimeTypes.ImageBmp; break; case ".gif": contentType = MimeTypes.ImageGif; break; case ".jpeg": case ".jpg": case ".jpe": case ".jfif": case ".pjpeg": case ".pjp": contentType = MimeTypes.ImageJpeg; break; case ".png": contentType = MimeTypes.ImagePng; break; case ".tiff": case ".tif": contentType = MimeTypes.ImageTiff; break; default: break; } } var picture = _pictureService.InsertPicture(vendorPictureBinary, contentType, null); _productService.InsertProductPicture(new ProductPicture { PictureId = picture.Id, ProductId = product.Id, DisplayOrder = display++, }); } } } //Product specification attributes if (result.localizedAspects != null) { foreach (var attributes in result.localizedAspects) { var getAttribute = _affiliateEbayService.GetSpecificationAttributeByName(attributes.name); var specificationAttribute = new SpecificationAttribute(); var specificationAttributeOption = new SpecificationAttributeOption(); if (getAttribute == null) { specificationAttribute.Name = attributes.name; specificationAttribute.DisplayOrder = 0; _specificationAttributeService.InsertSpecificationAttribute(specificationAttribute); specificationAttributeOption.DisplayOrder = 0; specificationAttributeOption.ColorSquaresRgb = null; specificationAttributeOption.Name = attributes.value; specificationAttributeOption.SpecificationAttributeId = specificationAttribute.Id; _specificationAttributeService.InsertSpecificationAttributeOption(specificationAttributeOption); } var productSpecificationAttribute = new ProductSpecificationAttribute(); productSpecificationAttribute.AttributeTypeId = (int)SpecificationAttributeType.CustomText; if (getAttribute == null) { productSpecificationAttribute.SpecificationAttributeOptionId = specificationAttributeOption.Id; } else { var options = _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttribute(getAttribute.Id); productSpecificationAttribute.SpecificationAttributeOptionId = options.FirstOrDefault().Id; } productSpecificationAttribute.ProductId = product.Id; productSpecificationAttribute.CustomValue = attributes.value; productSpecificationAttribute.AllowFiltering = false; productSpecificationAttribute.ShowOnProductPage = true; productSpecificationAttribute.DisplayOrder = 1; _specificationAttributeService.InsertProductSpecificationAttribute(productSpecificationAttribute); } } //categories SaveCategoryMappings(product, new List <int>() { model.CategoryId }); } } } } } } value = value + 200; temp = temp - 200; } } } SuccessNotification(_localizationService.GetResource("Admin.Catalog.Products.Added")); } else { ErrorNotification(_localizationService.GetResource("Plugins.AffiliateEbay.CallApi.Error")); } return(CallApi()); }
internal static List <SpecificationAttribute> Import(КоммерческаяИнформация source, ISpecificationAttributeService specificationAttributeService, string mappingsFile, out Dictionary <string, int> outMappings, string logFile) { logFile.Log("Начало импорта свойств"); var stats = new[] { 0, 0, 0, 0 }; // attribute: key = 1c id, value = nopcommerce id // attribute value: key = <1c attribute id>.<1c value id>, value = nopcommerce id var mappings = File.Exists(mappingsFile) ? JsonConvert.DeserializeObject <Dictionary <string, int> >(File.ReadAllText(mappingsFile)) : new Dictionary <string, int>();; var attributes = specificationAttributeService.GetSpecificationAttributes().ToList(); foreach (var attr in source.Классификатор.Свойства) { // ищем соответствие только по маппингу // потому что может быть несколько атрибутов с одинаковым названием var attribute = mappings.ContainsKey(attr.Ид) ? attributes.FirstOrDefault(a => a.Id == mappings[attr.Ид]) : null; if (attribute != null) { // для существующего только добавляем новые значения if (attr.ТипЗначений == AttrTypeDictionary) { foreach (var attrOption in attr.ВариантыЗначений) { var key = $"{attr.Ид}.{attrOption.ИдЗначения}"; var option = mappings.ContainsKey(key) ? attribute.SpecificationAttributeOptions.FirstOrDefault(o => o.Id == mappings[key]) : null; if (option == null) { // ищем по имени option = attribute.SpecificationAttributeOptions.FirstOrDefault(o => o.Name == attrOption.Значение); if (option == null) { // добавляем новое значение option = new Core.Domain.Catalog.SpecificationAttributeOption { SpecificationAttributeId = attribute.Id, Name = attrOption.Значение }; specificationAttributeService.InsertSpecificationAttributeOption(option); attribute.SpecificationAttributeOptions.Add(option); //logFile.Log($"В существующий атрибут {attribute.Name} ({attribute.Id}) добавлено значение {option.Name}"); stats[0]++; } else { // мапим существующее значение //logFile.Log($"В существующем атрибуте {attribute.Name} ({attribute.Id}) добавлено сопоставление для значения {option.Name}"); stats[1]++; } mappings[key] = option.Id; } } } continue; } // new attribute attribute = new Core.Domain.Catalog.SpecificationAttribute { Name = attr.Наименование }; specificationAttributeService.InsertSpecificationAttribute(attribute); attributes.Add(attribute); mappings[attr.Ид] = attribute.Id; //logFile.Log($"Новый атрибут {attribute.Name} ({attribute.Id})"); stats[2]++; if (attr.ТипЗначений == AttrTypeDictionary) { foreach (var attrOption in attr.ВариантыЗначений) { var key = $"{attr.Ид}.{attrOption.ИдЗначения}"; var option = new Core.Domain.Catalog.SpecificationAttributeOption { SpecificationAttributeId = attribute.Id, Name = attrOption.Значение }; specificationAttributeService.InsertSpecificationAttributeOption(option); attribute.SpecificationAttributeOptions.Add(option); mappings[key] = option.Id; //logFile.Log($"В новый атрибут {attribute.Name} ({attribute.Id}) добавлено значение {option.Name}"); stats[3]++; } } else { var key = $"{attr.Ид}."; var option = new Core.Domain.Catalog.SpecificationAttributeOption { SpecificationAttributeId = attribute.Id, Name = string.Empty }; specificationAttributeService.InsertSpecificationAttributeOption(option); attribute.SpecificationAttributeOptions.Add(option); mappings[key] = option.Id; } } File.WriteAllText(mappingsFile, JsonConvert.SerializeObject(mappings, Formatting.Indented), Encoding.UTF8); logFile.Log($"Импорт свойств завершен. Привязано: {stats[0]} атрибутов и {stats[1]} значений. Добавлено: {stats[2]} атрибутов и {stats[3]} значений."); outMappings = mappings; return(attributes); }
public JsonResult SaveCcAttribute(int productId, string attributeName, string attributeValue) { try { var specificationAttributes = _specificationAttributeService.GetProductSpecificationAttributes(productId); var prodSpecAttr = specificationAttributes.FirstOrDefault( x => x.SpecificationAttributeOption.SpecificationAttribute.Name == attributeName); if (prodSpecAttr == null) { var allSpecAttrs = _specificationAttributeService.GetSpecificationAttributes(); var currSpecAttr = allSpecAttrs.FirstOrDefault(x => x.Name == attributeName); if (currSpecAttr == null) { currSpecAttr = new SpecificationAttribute(); currSpecAttr.Name = attributeName; currSpecAttr.DisplayOrder = 0; _specificationAttributeService.InsertSpecificationAttribute(currSpecAttr); var newAttrOption = new SpecificationAttributeOption(); newAttrOption.SpecificationAttribute = currSpecAttr; newAttrOption.Name = attributeName; newAttrOption.DisplayOrder = 0; _specificationAttributeService.InsertSpecificationAttributeOption(newAttrOption); } prodSpecAttr = new ProductSpecificationAttribute { AttributeType = SpecificationAttributeType.CustomText, ProductId = productId, SpecificationAttributeOptionId = currSpecAttr.SpecificationAttributeOptions.First().Id, DisplayOrder = 0, ShowOnProductPage = false, AllowFiltering = false, CustomValue = attributeValue, }; _specificationAttributeService.InsertProductSpecificationAttribute(prodSpecAttr); } else { prodSpecAttr.CustomValue = attributeValue; prodSpecAttr.ShowOnProductPage = false; _specificationAttributeService.UpdateProductSpecificationAttribute(prodSpecAttr); } var productAttributeMappings = _productAttributeService.GetProductAttributeMappingsByProductId(productId); foreach (var attrId in _ccService.GetCcAttrIds()) { if (productAttributeMappings.All(map => map.ProductAttributeId != attrId)) { _productAttributeService.InsertProductAttributeMapping(new ProductAttributeMapping { AttributeControlType = AttributeControlType.TextBox, DefaultValue = "", DisplayOrder = 100, ProductId = productId, ProductAttributeId = attrId }); } } return(Json(new { status = "success" })); } catch (Exception ex) { var message = ex.InnerException != null ? ex.InnerException.Message : ""; return(Json(new { status = "error", message = ex.Message + " " + message })); } }