Esempio n. 1
0
        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++;
        }