Example #1
0
 public async Task <ErplyProductsResponse> GetProducts(ErplyGetProductsRequest request)
 {
     return(await SendRequest <ErplyProductsResponse>(request));
 }
        public async Task ImportProducts()
        {
            var           erplyApi          = _erplyApiFactory.GetApi();
            List <string> erplyProductCodes = new List <string>();
            List <ErplyProductsResponseRecord> erplyProducts = new List <ErplyProductsResponseRecord>();
            var categoryMappings = _erplyMappingService.GetAllCategoryMappings();

            ErplyGetProductsRequest erplyProductsRequest = new ErplyGetProductsRequest()
            {
                DisplayedInWebshop = 1,
                GetStockInfo       = 1,
                OrderByDir         = ErplyApi.SortDirectionAscending,
                RecordsOnPage      = 100,
                PageNo             = 1,
                Status             = ErplyApi.ProductStatusActive
            };
            ErplyProductsResponse erplyProductsResponse;

            do
            {
                erplyProductsResponse = await erplyApi.GetProducts(erplyProductsRequest);

                foreach (var erplyProduct in erplyProductsResponse.Records)
                {
                    erplyProductCodes.Add(erplyProduct.Code);
                    erplyProducts.Add(erplyProduct);
                }

                erplyProductsRequest.PageNo++;
            } while (erplyProductsResponse.Records.Count > 0);

            var allProductsBySku       = _productService.GetProductsBySku(erplyProductCodes.ToArray());
            var allProductsCategoryIds = _categoryService.GetProductCategoryIds(allProductsBySku.Select(p => p.Id).ToArray());

            foreach (var erplyProduct in erplyProducts)
            {
                var product      = allProductsBySku.FirstOrDefault(p => p.Sku == erplyProduct.Code);
                var isNewProduct = product == null;
                product ??= new Product();
                product = GetUpdatedProductFromErplyProduct(product, erplyProduct, isNewProduct);

                if (isNewProduct)
                {
                    _productService.InsertProduct(product);
                }
                else
                {
                    _productService.UpdateProduct(product);
                }

                _urlRecordService.SaveSlug(product, _urlRecordService.ValidateSeName(product, "", product.Name, true), 0);

                var productCategories = isNewProduct || !allProductsCategoryIds.ContainsKey(product.Id) ? Array.Empty <int>() : allProductsCategoryIds[product.Id];
                var categoryMapping   = categoryMappings.FirstOrDefault(mapping => mapping.ErplyProductGroupID == erplyProduct.GroupID);

                if (!productCategories.Any(c => c == categoryMapping?.CategoryID))
                {
                    var productCategory = new ProductCategory
                    {
                        ProductId         = product.Id,
                        CategoryId        = categoryMapping.CategoryID,
                        IsFeaturedProduct = false,
                        DisplayOrder      = 1
                    };
                    _categoryService.InsertProductCategory(productCategory);
                }
            }
        }