コード例 #1
0
ファイル: FrmSkuLinks.cs プロジェクト: ewin66/Arya
        /// <summary>
        /// Match Taxonomy for the specified Link
        /// </summary>
        private static bool ValidateMatchedLinks(FilteredSkuLink link, out string leftTaxonomy, out string rightTaxonomy)
        {
            //Batch>One-One|Rep.>Images|Skus
            const int numberOfTopTaxonomyLevelsToSkip = 3;

            leftTaxonomy  = TaxonomyInfo.StripTopLevelNodes(link.LeftTaxonomy.ToString(), numberOfTopTaxonomyLevelsToSkip);
            rightTaxonomy = TaxonomyInfo.StripTopLevelNodes(link.RightTaxonomy.ToString(), numberOfTopTaxonomyLevelsToSkip);

            return(leftTaxonomy.Equals(rightTaxonomy));
        }
コード例 #2
0
ファイル: FrmSkuLinks.cs プロジェクト: ewin66/Arya
        /// <summary>
        /// Match Attribute Values for the specified Link
        /// </summary>
        private bool?ValidateMatchedLinks(FilteredSkuLink link, string attributeName, out string leftValue, out string rightValue)
        {
            var leftValues  = link.LeftSku.GetValuesForAttribute(attributeName, true).Select(ed => ed.Value).ToList();
            var rightValues = link.RightSku.GetValuesForAttribute(attributeName, true).Select(ed => ed.Value).ToList();

            leftValue = leftValues.Aggregate(
                string.Empty, (current, value) => string.IsNullOrEmpty(current) ? value : current + ", " + value);
            rightValue = rightValues.Aggregate(
                string.Empty, (current, value) => string.IsNullOrEmpty(current) ? value : current + ", " + value);

            if (leftValues.Count == 0)
            {
                AddSkuGap(link.LeftSku, attributeName);
                return(null);
            }

            if (rightValues.Count == 0)
            {
                var leftSchemaAttributes =
                    link.LeftTaxonomy.SchemaInfos.Where(si => si.SchemaData != null).Select(si => si.Attribute).ToList();

                var leftDeriviedAttribute =
                    leftSchemaAttributes.Where(
                        a => (a.AttributeName == attributeName + " (Ratio)") && a.AttributeType.Contains(AttributeTypeEnum.Global.ToString())).SelectMany(
                        p => p.DerivedAttributes).FirstOrDefault(p => p.TaxonomyID == link.LeftTaxonomy.ID);

                if (leftDeriviedAttribute != null)
                {
                    var ta = new TaxAttValueCalculator(link.LeftSku);
                    ta.ProcessCalculatedAttribute(leftDeriviedAttribute.Expression, leftDeriviedAttribute.MaxResultLength);
                    var attributes = ta.GetAttributesInTokens();
                    foreach (var attribute in
                             attributes.Where(attribute => link.LeftSku.GetValuesForAttribute(attribute).Count == 0))
                    {
                        AddSkuGap(link.LeftSku, attribute);
                    }
                    return(null);
                }

                AddSkuGap(link.RightSku, attributeName);
                return(null);
            }

            if (leftValues.Any(lv => _notDiscernibles.Union(_dontCareValues).Contains(lv)) ||
                rightValues.Any(rv => _notDiscernibles.Union(_dontCareValues).Contains(rv)))
            {
                return(true);
            }

            return(leftValues.Any(lv => rightValues.Any(rv => rv.Equals(lv))));
        }
コード例 #3
0
ファイル: FrmSkuLinks.cs プロジェクト: ewin66/Arya
        private void UpdateLinkStatus(FilteredSkuLink link, string accuracy, string reasonCode, string reasonDetail, string brandReasonDetail = null)
        {
            //Sku sku = rbResultsInLeftSku.Checked ? link.LeftSku : link.RightSku;
            //results in left Sku
            Sku sku = link.LeftSku;
            var leftLowerTaxonomy = sku.Taxonomy.ToString().ToLower();

            if (!string.IsNullOrEmpty(reasonCode) && !string.IsNullOrEmpty(reasonDetail))
            {
                var rightLowerTaxonomy = link.RightTaxonomy.ToString().ToLower();

                if (leftLowerTaxonomy.Contains(">Representational>".ToLower()))
                {
                    if (rightLowerTaxonomy.Contains(">Line Drawing".ToLower()))
                    {
                        reasonDetail = "Line Drawing";
                        reasonCode   = "Does not fit Image Guidelines";
                    }
                    else if (rightLowerTaxonomy.Contains(">Group Shot".ToLower()))
                    {
                        reasonDetail = "Group Shot";
                        reasonCode   = "Does not fit Image Guidelines";
                    }
                }
                else if (leftLowerTaxonomy.Contains(">One-One>".ToLower()))
                {
                    if (rightLowerTaxonomy.Contains(">Line Drawing".ToLower()))
                    {
                        reasonDetail = "Line Drawing";
                        reasonCode   = "Does not fit Image Guidelines";
                    }
                }
            }

            var status = accuracy == Yes || accuracy == No ? "Completed" : "Sent to MSC for data insufficiency";

            //if (leftLowerTaxonomy.Contains(">One-One>".ToLower()) && (reasonCode == null || !reasonCode.Equals("Does not fit Image Guidelines", StringComparison.OrdinalIgnoreCase)))
            //    return;

            sku.UpsertValue(txtResultPrefix.Text + "Accurate?", accuracy);
            sku.UpsertValue(txtResultPrefix.Text + "Reason Code", reasonCode);
            sku.UpsertValue(txtResultPrefix.Text + "Reason Detail", reasonDetail);
            //sku.UpsertValue(txtResultPrefix.Text + "Brand Reason Detail", brandReasonDetail);
            sku.UpsertValue(txtResultPrefix.Text + "Status", status);
        }
コード例 #4
0
ファイル: FrmSkuLinks.cs プロジェクト: ewin66/Arya
        private void DoMatch(FilteredSkuLink link, out string accuracy, out string reasonCode, out string reasonDetail, out string brandReasonDetail)
        {
            string leftValue, rightValue;

            accuracy          = Yes;
            reasonCode        = null;
            reasonDetail      = null;
            brandReasonDetail = null;

            //First, match on Brand Name
            //bool? isMatch = ValidateMatchedLinks(link, BrandName, out leftValue, out rightValue);
            //if (isMatch == null)
            //{
            //    accuracy = Maybe;
            //}
            //else if (isMatch == false)
            //{
            //    accuracy = No;
            //    //reasonCode = "Brand.";
            //    brandReasonDetail = string.Format("Brand: SKU={0}, Image={1}.", leftValue, rightValue);
            //    //return;
            //}

            //First, match Taxonomy only if the image is in quarantine nodes
            if (link.RightTaxonomy.ToString().ToLower().Contains("quarantine") && !ValidateMatchedLinks(link, out leftValue, out rightValue))
            {
                accuracy     = No;
                reasonCode   = "Taxonomy doesn't match";
                reasonDetail = string.Format("Taxonomy: SKU={0}, Image={1}.", leftValue, rightValue);
                //return;
            }

            //Second, match on PartNumber
            bool?isMatch = ValidateMatchedLinks(link, ConsolidatedPartNumberAttribute, out leftValue, out rightValue);

            //if (isMatch == null)
            //{
            //    //accuracy = Maybe;
            //    return;
            //}

            if (isMatch == false)
            {
                accuracy     = No;
                reasonCode   = "Specs don't match";
                reasonDetail = string.Format("{0}: SKU={1}, Image={2}.", ConsolidatedPartNumberAttribute, leftValue, rightValue);
            }

            //Then, match all attributes
            //var schemaTaxonomy = rbUseLeftSchema.Checked ? link.LeftTaxonomy : link.RightTaxonomy;
            //use schema from right taxonomy
            //var schemaTaxonomy = link.RightTaxonomy;
            //var atts = from si in schemaTaxonomy.SchemaInfos
            //           let sd = si.SchemaData
            //           where sd != null && sd.InSchema && !si.Attribute.AttributeName.Equals(BrandName)
            //           select si.Attribute;

            //int reasonCount = 0;
            //foreach (var att in atts)
            //{
            //    isMatch = ValidateMatchedLinks(link, att.AttributeName, out leftValue, out rightValue);
            //    switch (isMatch)
            //    {
            //        case null:
            //            if (accuracy.Equals(Yes))
            //                accuracy = Maybe;
            //            break;
            //        case false:
            //            accuracy = No;
            //            reasonCode = "Specs don't match";
            //            reasonDetail += string.Format("{0}: SKU={1}, Image={2}.", att, leftValue, rightValue);
            //            reasonCount++;
            //            break;
            //    }
            //    if (reasonCount == 3)
            //        break;
            //}

            UpdateLinkStatus(link, accuracy, reasonCode, reasonDetail);
        }