private static void UpdateInsertProductWorker(string columSeparator, string propertySeparator, Dictionary <ProductFields, object> productInStrings) { try { bool addingNew; Product product = null; if (productInStrings.ContainsKey(ProductFields.Sku) && productInStrings[ProductFields.Sku].AsString().IsNullOrEmpty()) { throw new Exception("SKU can not be empty"); } var artNo = productInStrings.ContainsKey(ProductFields.Sku) ? productInStrings[ProductFields.Sku].AsString() : string.Empty; if (string.IsNullOrEmpty(artNo)) { addingNew = true; } else { product = ProductService.GetProduct(artNo); addingNew = product == null; } if (addingNew) { product = new Product { ArtNo = string.IsNullOrEmpty(artNo) ? null : artNo, Multiplicity = 1 }; } if (productInStrings.ContainsKey(ProductFields.Name)) { product.Name = productInStrings[ProductFields.Name].AsString(); } else { product.Name = product.Name ?? string.Empty; } if (productInStrings.ContainsKey(ProductFields.Enabled)) { product.Enabled = productInStrings[ProductFields.Enabled].AsString().Trim().Equals("+"); } if (productInStrings.ContainsKey(ProductFields.OrderByRequest)) { product.AllowPreOrder = productInStrings[ProductFields.OrderByRequest].AsString().Trim().Equals("+"); } if (productInStrings.ContainsKey(ProductFields.Discount)) { product.Discount = productInStrings[ProductFields.Discount].AsFloat(); } if (productInStrings.ContainsKey(ProductFields.Weight)) { product.Weight = productInStrings[ProductFields.Weight].AsFloat(); } if (productInStrings.ContainsKey(ProductFields.Size)) { product.Size = GetSizeForBdFormat(productInStrings[ProductFields.Size].AsString()); } if (productInStrings.ContainsKey(ProductFields.BriefDescription)) { product.BriefDescription = productInStrings[ProductFields.BriefDescription].AsString(); } if (productInStrings.ContainsKey(ProductFields.Description)) { product.Description = productInStrings[ProductFields.Description].AsString(); } if (productInStrings.ContainsKey(ProductFields.SalesNotes)) { product.SalesNote = productInStrings[ProductFields.SalesNotes].AsString(); } if (productInStrings.ContainsKey(ProductFields.Gtin)) { product.Gtin = productInStrings[ProductFields.Gtin].AsString(); } if (productInStrings.ContainsKey(ProductFields.GoogleProductCategory)) { product.GoogleProductCategory = productInStrings[ProductFields.GoogleProductCategory].AsString(); } if (productInStrings.ContainsKey(ProductFields.Adult)) { product.Adult = productInStrings[ProductFields.Adult].AsString().Trim().Equals("+"); } if (productInStrings.ContainsKey(ProductFields.ManufacturerWarranty)) { product.ManufacturerWarranty = productInStrings[ProductFields.ManufacturerWarranty].AsString().Trim().Equals("+"); } if (productInStrings.ContainsKey(ProductFields.ShippingPrice)) { product.ShippingPrice = productInStrings[ProductFields.ShippingPrice].AsFloat(); } if (productInStrings.ContainsKey(ProductFields.Unit)) { product.Unit = productInStrings[ProductFields.Unit].AsString(); } if (productInStrings.ContainsKey(ProductFields.MultiOffer)) { OfferService.OffersFromString(product, productInStrings[ProductFields.MultiOffer].AsString(), columSeparator, propertySeparator); } else { OfferService.OfferFromFields(product, productInStrings.ContainsKey(ProductFields.Price) ? productInStrings[ProductFields.Price].AsFloat() : (float?)null, productInStrings.ContainsKey(ProductFields.PurchasePrice) ? productInStrings[ProductFields.PurchasePrice].AsFloat() : (float?)null, productInStrings.ContainsKey(ProductFields.Amount) ? productInStrings[ProductFields.Amount].AsFloat() : (float?)null); } if (productInStrings.ContainsKey(ProductFields.ParamSynonym)) { var prodUrl = productInStrings[ProductFields.ParamSynonym].AsString().IsNotEmpty() ? productInStrings[ProductFields.ParamSynonym].AsString() : product.ArtNo; product.UrlPath = UrlService.GetAvailableValidUrl(product.ID, ParamType.Product, prodUrl); } else { product.UrlPath = product.UrlPath ?? UrlService.GetAvailableValidUrl(product.ID, ParamType.Product, product.ArtNo ?? product.Name.Substring(0, product.Name.Length - 1 < 50 ? product.Name.Length - 1 : 50)); } product.Meta.ObjId = product.ProductId; if (productInStrings.ContainsKey(ProductFields.Title)) { product.Meta.Title = productInStrings[ProductFields.Title].AsString(); } else { product.Meta.Title = product.Meta.Title ?? SettingsSEO.ProductMetaTitle; } if (productInStrings.ContainsKey(ProductFields.H1)) { product.Meta.H1 = productInStrings[ProductFields.H1].AsString(); } else { product.Meta.H1 = product.Meta.H1 ?? SettingsSEO.ProductMetaH1; } if (productInStrings.ContainsKey(ProductFields.MetaKeywords)) { product.Meta.MetaKeywords = productInStrings[ProductFields.MetaKeywords].AsString(); } else { product.Meta.MetaKeywords = product.Meta.MetaKeywords ?? SettingsSEO.ProductMetaKeywords; } if (productInStrings.ContainsKey(ProductFields.MetaDescription)) { product.Meta.MetaDescription = productInStrings[ProductFields.MetaDescription].AsString(); } else { product.Meta.MetaDescription = product.Meta.MetaDescription ?? SettingsSEO.ProductMetaDescription; } if (productInStrings.ContainsKey(ProductFields.Markers)) { ProductService.MarkersFromString(product, productInStrings[ProductFields.Markers].AsString(), columSeparator); } if (productInStrings.ContainsKey(ProductFields.Producer)) { product.BrandId = BrandService.BrandFromString(productInStrings[ProductFields.Producer].AsString()); } if (!addingNew) { ProductService.UpdateProduct(product, false); CommonStatistic.TotalUpdateRow++; } else { if (!(SaasDataService.IsSaasEnabled && ProductService.GetProductsCount() >= SaasDataService.CurrentSaasData.ProductsCount)) { ProductService.AddProduct(product, false); CommonStatistic.TotalAddRow++; } else { Log(CommonStatistic.RowPosition + ": " + "Превышен лимит по количеству товаров"); CommonStatistic.TotalErrorRow++; } } if (product.ProductId > 0) { OtherFields(productInStrings, product.ProductId, columSeparator, propertySeparator); } } catch (OutOfMemoryException e) { Debug.LogError(e); CommonStatistic.TotalErrorRow++; Log(CommonStatistic.RowPosition + ": " + "Неверный формат файла " + productInStrings[ProductFields.Photos].AsString()); } catch (Exception e) { CommonStatistic.TotalErrorRow++; Log(CommonStatistic.RowPosition + ": " + e.Message); Debug.LogError(e); } productInStrings.Clear(); CommonStatistic.RowPosition++; }