/// <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)); }
/// <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)))); }
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); }
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); }