Example #1
0
        private int FindExactMatches(Sku sourceSku)
        {
            IQueryable <Sku> skuFilter = from sku in AryaTools.Instance.InstanceData.Dc.Skus
                                         //where sku.SkuInfos.Any(si => si.Active && leftTaxIds.Contains(si.TaxonomyID))
                                         select sku;

            var schemaAttributes = GetInSchemaAttributes(sourceSku.Taxonomy);

            if (schemaAttributes.Count == 0)
            {
                return(0);
            }

            //Must match Brand
            //var brandAttribute = Attribute.GetAttributeFromName(BrandName, true);
            //if (!schemaAttributes.Contains(brandAttribute))
            //    schemaAttributes.Add(brandAttribute);

            bool   hasValues = false;
            string matchType = "Exact";

            foreach (var att in schemaAttributes)
            {
                var attribute = att;
                var values    = sourceSku.GetValuesForAttribute(attribute.AttributeName, true).Select(ed => ed.Value).ToList();
                if (values.Count == 0 || values.Any(val => _dontCareValues.Contains(val)))
                {
                    continue;
                }

                if (values.Any(val => _notDiscernibles.Contains(val)))
                {
                    matchType = "Potential";
                    continue;
                }

                hasValues = true;

                skuFilter =
                    skuFilter.Where(
                        sku =>
                        sku.EntityInfos.Any(
                            ei =>
                            ei.EntityDatas.Any(
                                ed => ed.Active && ed.AttributeID.Equals(attribute.ID) && values.Contains(ed.Value))));
            }

            if (!hasValues)
            {
                return(0);
            }

            var targetSkus = skuFilter.Distinct().ToList();

            int newLinkCount = 0;

            foreach (var targetSku in targetSkus)
            {
                if (targetSku.Taxonomy.ToString().Contains(">Images>"))
                {
                    continue;
                }

                if (CreateSkuLink(targetSku, sourceSku, matchType))
                {
                    newLinkCount++;
                }
            }

            return(newLinkCount);
        }