Beispiel #1
0
        public PipelineExecutionResult Execute(Category subject)
        {
            var idToDelete = subject.Name;

            logging.Log <DeleteCategoryFromKaching>("Deleting tag: " + subject.Name + " in Ka-ching");
            var config = KachingConfiguration.Get();
            var url    = config.TagsIntegrationURL;

            if (url.StartsWith("https://", StringComparison.Ordinal))
            {
                var idsToDelete = new List <string>();
                idsToDelete.Add(idToDelete);
                var result = Synchronizer.Delete(idsToDelete, url);
                if (result == PipelineExecutionResult.Error)
                {
                    return(result);
                }
            }


            var folders    = new CategoryConverter(logging).GetFolders();
            var foldersUrl = config.FoldersIntegrationURL;

            if (!foldersUrl.StartsWith("https://", StringComparison.Ordinal))
            {
                return(PipelineExecutionResult.Success);
            }
            return(Synchronizer.Post(folders, foldersUrl));
        }
        private void PostTags(List <KachingTag> tags)
        {
            var config = KachingConfiguration.Get();
            var url    = config.TagsIntegrationURL;

            if (!url.StartsWith("https://", StringComparison.Ordinal))
            {
                return;
            }
            Synchronizer.Post(tags, url);
        }
        private void UpdateButtonState()
        {
            var config = KachingConfiguration.Get();
            var urls   = new List <string> {
                config.ProductsIntegrationURL, config.TagsIntegrationURL, config.FoldersIntegrationURL
            };
            var canImport = urls.All(s => s != null && s.StartsWith("https:", StringComparison.Ordinal));

            StartCategoryImportButton.Enabled = canImport;
            StartProductImportButton.Enabled  = canImport;
        }
 public CategoryExportService(
     ReferenceConverter referenceConverter,
     IContentLoader contentLoader,
     IContentVersionRepository contentVersionRepository,
     L10nStringFactory l10nStringFactory)
 {
     _configuration            = KachingConfiguration.Instance;
     _referenceConverter       = referenceConverter;
     _contentLoader            = contentLoader;
     _contentVersionRepository = contentVersionRepository;
     _l10nStringFactory        = l10nStringFactory;
 }
Beispiel #5
0
        public PipelineExecutionResult UpdateFolders(Category subject)
        {
            var config = KachingConfiguration.Get();
            var url    = config.FoldersIntegrationURL;

            if (!url.StartsWith("https://", StringComparison.Ordinal))
            {
                return(PipelineExecutionResult.Success);
            }

            var folders = new CategoryConverter(logging).GetFolders();

            return(Synchronizer.Post(folders, url));
        }
Beispiel #6
0
 public ProductExportService(
     IAssociationRepository associationRepository,
     GroupDefinitionRepository <AssociationGroupDefinition> associationGroupRepository,
     ReferenceConverter referenceConverter,
     IContentLoader contentLoader,
     ProductFactory productFactory,
     IPublishedStateAssessor publishedStateAssessor)
 {
     _associationRepository      = associationRepository;
     _associationGroupRepository = associationGroupRepository;
     _referenceConverter         = referenceConverter;
     _configuration          = KachingConfiguration.Instance;
     _contentLoader          = contentLoader;
     _productFactory         = productFactory;
     _publishedStateAssessor = publishedStateAssessor;
 }
Beispiel #7
0
        private PipelineExecutionResult PostTag(KachingTag tag)
        {
            var config = KachingConfiguration.Get();
            var url    = config.TagsIntegrationURL;

            if (!url.StartsWith("https://", StringComparison.Ordinal))
            {
                return(PipelineExecutionResult.Success);
            }

            var tags = new List <KachingTag>();

            tags.Add(tag);

            return(Synchronizer.Post(tags, url));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            UpdateButtonState();
            GetPriceGroupData();
            GetCultureCodeData();

            if (!Page.IsPostBack)
            {
                BindPriceGroupList();
                BindCultureCodeList();

                var config = KachingConfiguration.Get();

                ProductsImportURL.Text = config.ProductsIntegrationURL;
                TagsImportURL.Text     = config.TagsIntegrationURL;
                FoldersImportURL.Text  = config.FoldersIntegrationURL;
            }
        }
        public PipelineExecutionResult Execute(Product subject)
        {
            var config = KachingConfiguration.Get();
            var url    = config.ProductsIntegrationURL;

            if (!url.StartsWith("https://", StringComparison.Ordinal))
            {
                return(PipelineExecutionResult.Success);
            }

            // In case a product is initially being created, it will not yet have a
            // category configured. In this case delay the synchronization slightly
            // in order to let the database save the product<->category relationship.

            Func <PipelineExecutionResult> synchronize = () =>
            {
                var converter = new ProductConverter(logging);
                var product   = converter.ConvertProduct(subject);

                KachingProduct[] products = new KachingProduct[1];
                products[0] = product;
                var metadata = converter.GetMetadata();

                return(Synchronizer.Post(new ProductsRequest(products, metadata), url));
            };


            if (subject.GetCategories().Count == 0)
            {
                Task.Delay(2000).ContinueWith((task) =>
                {
                    synchronize();
                });
                return(PipelineExecutionResult.Success);
            }

            return(synchronize());
        }
        private int ImportProducts(IEnumerable <Product> products)
        {
            var config = KachingConfiguration.Get();
            var url    = config.ProductsIntegrationURL;

            if (!url.StartsWith("https://", StringComparison.Ordinal))
            {
                return(0);
            }

            var converter = new ProductConverter(logger);
            List <KachingProduct> kachingProducts = new List <KachingProduct>();

            foreach (var product in products)
            {
                kachingProducts.Add(converter.ConvertProduct(product));
            }

            var metadata = converter.GetMetadata();

            Synchronizer.Post(new ProductsRequest(kachingProducts.ToArray(), metadata), url);
            return(kachingProducts.Count);
        }
Beispiel #11
0
        public Product BuildKaChingProduct(
            ProductContent product,
            ICollection <string> tags,
            KachingConfiguration configuration,
            string skipVariantCode)
        {
            var kachingProduct = new Product();

            kachingProduct.Id          = product.Code.SanitizeKey();
            kachingProduct.Barcode     = GetPropertyStringValue(product, configuration.SystemMappings.BarcodeMetaField);
            kachingProduct.Name        = _l10nStringFactory.GetLocalizedString(product, nameof(product.DisplayName));
            kachingProduct.Description = _l10nStringFactory.GetLocalizedString(product, configuration.SystemMappings.DescriptionMetaField);

            foreach (var mapping in configuration.AttributeMappings.Cast <AttributeMappingElement>())
            {
                object value = GetAttributeValue(product, mapping.MetaField);
                if (value == null)
                {
                    continue;
                }

                kachingProduct.Attributes[mapping.AttributeId] = value;
            }

            /* ---------------------------- */
            /* Example of dimension and dimension value construction from the Quicksilver site. */
            /* ---------------------------- */

            //var dimensions = new List<Dimension>();
            //var sizeDimension = new Dimension();
            //sizeDimension.Id = "Size";
            //sizeDimension.Name = new L10nString("Size");
            //sizeDimension.Values = new List<DimensionValue>();
            //foreach (var size in product.AvailableSizes)
            //{
            //    var sizeValue = new DimensionValue();
            //    sizeValue.Id = size.ToLower().Replace(' ', '_');
            //    sizeValue.Name = new L10nString(size);
            //    sizeDimension.Values.Add(sizeValue);
            //}
            //dimensions.Add(sizeDimension);

            //var colorDimension = new Dimension();
            //colorDimension.Id = "Color";
            //colorDimension.Name = new L10nString("Color");
            //colorDimension.Values = new List<DimensionValue>();
            //foreach (var color in product.AvailableColors)
            //{
            //    var colorValue = new DimensionValue();
            //    colorValue.Id = color.ToLower().Replace(' ', '_');
            //    colorValue.Name = new L10nString(color);
            //    colorDimension.Values.Add(colorValue);
            //}
            //dimensions.Add(colorDimension);

            //kachingProduct.Dimensions = dimensions;

            CommerceMedia productImage = product.CommerceMediaCollection.FirstOrDefault();

            if (productImage != null)
            {
                Uri absoluteUrl = GetAbsoluteUrl(productImage.AssetLink);
                kachingProduct.ImageUrl = absoluteUrl?.AbsoluteUri;
            }

            IEnumerable <ContentReference> variantRefs = _relationRepository
                                                         .GetChildren <ProductVariation>(product.ContentLink)
                                                         .Select(r => r.Child);

            ICollection <VariationContent> variants = _contentLoader
                                                      .GetItems(variantRefs, LanguageSelector.MasterLanguage())
                                                      .OfType <VariationContent>()
                                                      .ToArray();

            if (variants.Count == 1 &&
                configuration.ExportSingleVariantAsProduct)
            {
                // If the product has only one variant and ExportSingleVariantAsProduct is configured to true,
                // then put all variant properties on the product instead.
                var variant = variants.First();

                kachingProduct.Id      = variant.Code.SanitizeKey();
                kachingProduct.Barcode = GetPropertyStringValue(variant, configuration.SystemMappings.BarcodeMetaField);
                kachingProduct.Name    = _l10nStringFactory.GetLocalizedString(variant, nameof(variant.DisplayName));

                MarketPrice retailPrice = MarketPriceForCode(variant.Code);
                AddProductPricing(kachingProduct, product, retailPrice, configuration.SystemMappings.PriceUnitMetaField);

                foreach (var mapping in configuration.AttributeMappings.Cast <AttributeMappingElement>())
                {
                    object value = GetAttributeValue(variant, mapping.MetaField);
                    if (value == null)
                    {
                        continue;
                    }

                    kachingProduct.Attributes[mapping.AttributeId] = value;
                }

                if (kachingProduct.ImageUrl == null)
                {
                    CommerceMedia variantImage = variant.CommerceMediaCollection.FirstOrDefault();
                    if (variantImage != null)
                    {
                        Uri absoluteUrl = GetAbsoluteUrl(variantImage.AssetLink);
                        kachingProduct.ImageUrl = absoluteUrl?.AbsoluteUri;
                    }
                }
            }
            else if (variants.Count > 0)
            {
                var kachingVariants = new List <Variant>(variants.Count);

                foreach (var variant in variants)
                {
                    if (skipVariantCode != null &&
                        skipVariantCode == variant.Code)
                    {
                        continue;
                    }

                    var kachingVariant = new Variant();
                    kachingVariant.Id      = variant.Code.SanitizeKey();
                    kachingVariant.Barcode = GetPropertyStringValue(variant, configuration.SystemMappings.BarcodeMetaField);

                    var variantName = _l10nStringFactory.GetLocalizedString(variant, nameof(variant.DisplayName));
                    if (!variantName.Equals(kachingProduct.Name))
                    {
                        kachingVariant.Name = variantName;
                    }

                    if (kachingProduct.UnitPricing == null)
                    {
                        kachingVariant.RetailPrice = MarketPriceForCode(variant.Code);
                    }

                    foreach (var mapping in configuration.AttributeMappings.Cast <AttributeMappingElement>())
                    {
                        object value = GetAttributeValue(variant, mapping.MetaField);
                        if (value == null)
                        {
                            continue;
                        }

                        kachingVariant.Attributes[mapping.AttributeId] = value;
                    }

                    CommerceMedia variantImage = variant.CommerceMediaCollection.FirstOrDefault();
                    if (variantImage != null)
                    {
                        Uri absoluteUrl = GetAbsoluteUrl(variantImage.AssetLink);
                        kachingVariant.ImageUrl = absoluteUrl?.AbsoluteUri;
                    }

                    if (kachingProduct.ImageUrl == null)
                    {
                        kachingProduct.ImageUrl = kachingVariant.ImageUrl;
                    }

                    kachingVariants.Add(kachingVariant);
                }

                kachingProduct.Variants = kachingVariants;
            }

            /* ---------------------------- */
            /* Assign tags to enable category navigation */
            /* ---------------------------- */

            kachingProduct.Tags = new Dictionary <string, bool>();
            foreach (var tag in tags)
            {
                kachingProduct.Tags[tag] = true;
            }

            return(kachingProduct);
        }