public string ValidateByTypedDimension(InstanceFact fact, List <ValidationRuleResult> results, StringBuilder sb) { var typeddimensions = fact.Dimensions.Where(i => i.IsTyped).ToList(); foreach (var typeddimension in typeddimensions) { var member = typeddimension.DomainMember; var fulldomain = typeddimension.Domain; var ruleid = "v_tax_" + fulldomain; var rule = TaxonomyRules.FirstOrDefault(i => i.ID == ruleid) as TypedDimensionValidationRule; if (rule != null) { if (!rule.IsOk(member)) { var result = new ValidationRuleResult(); result.ID = rule.ID; var p = new SimpleValidationParameter(); p.Name = String.Format("{0}, context {1}", typeddimension.Domain, fact.ContextID); //p.Facts.Add(fact.FactString); p.FactIDs.Add(String.Format("I:{0}", fact.IX)); p.Value = member; result.Parameters.Add(p); results.Add(result); } } } return(sb.ToString()); }
public static List <int> GetPartsOfMainParts(Instance instance, InstanceFact fact, List <int> mainparts) { var taxonomy = instance.Taxonomy; var parts = new List <int>(); for (int i = 0; i < fact.TaxonomyKey.Length; i++) { var aspectid = fact.TaxonomyKey[i]; var mainaspectid = taxonomy.DimensionDomainsOfMembers.ContainsKey(aspectid) ? taxonomy.DimensionDomainsOfMembers[aspectid] : aspectid; if (mainparts.Contains(mainaspectid)) { parts.Add(fact.InstanceKey[i]); } } return(parts); }
public List <int> GetInstanceAspects(Instance instance, InstanceFact fact, List <int> domains) { var result = new List <int>(); var taxonomy = instance.Taxonomy; for (int i = 0; i < fact.InstanceKey.Length; i++) { var taxaspect = fact.TaxonomyKey[i]; var instaspect = fact.InstanceKey[i]; var domainid = taxonomy.GetDimensionDomainPart(taxaspect); if (domains.Contains(domainid)) { result.Add(instaspect); } } return(result); }
public static ValueWithTreshold GetValueWithTreshold(InstanceFact fact, string FallBackValue) { var result = new ValueWithTreshold(); if (fact == null) { fact = new InstanceFact(); fact.Value = FallBackValue; result.ObjectValue = fact.Value; result.DecimalValue = fact.Value_F; result.Treshold = 0; } else { result.ObjectValue = fact.Value; result.DecimalValue = fact.Value_F; result.Treshold = FactTreshold(fact); } return(result); }
public static decimal FactTreshold(InstanceFact fact) { decimal treshold = 0; int decimals = 0; if (fact.Decimals == "INF" || string.IsNullOrEmpty(fact.Decimals)) { return(0); } else { decimals = int.Parse(fact.Decimals); } decimals = -1 * decimals; decimal power = (decimal)Math.Pow(10, decimals); treshold = power / 2; return(treshold); }
public string ValidateByConcept(InstanceFact fact, List <ValidationRuleResult> results, StringBuilder sb) { var concept = fact.Concept; var conceptkey = fact.Concept.Content.ToLower(); var conceptstr = fact.Concept.Name.ToLower(); var cells = Utilities.Strings.ArrayToString(fact.Cells.ToArray()); var ruleid = "v_tax_" + fact.Concept.Content; var rule = TaxonomyRules.FirstOrDefault(i => i.ID == ruleid) as ConceptValidationRule; if (rule != null) { if (!rule.IsOk(fact)) { var result = new ValidationRuleResult(); result.ID = rule.ID; var p = new SimpleValidationParameter(); p.Name = "a"; p.Value = fact.Value; //p.Facts.Add(fact.FactString); p.FactIDs.Add(String.Format("I:{0}", fact.IX)); var cellidlist = new List <String>(); foreach (var cell in fact.Cells) { cellidlist.Add(TaxonomyEngine.CurrentEngine.CurrentInstance.GetDynamicCellID(cell, fact)); } p.Cells.Add(cellidlist); result.Parameters.Add(p); results.Add(result); } } return(sb.ToString()); }
/* * public List<ValidationRuleResult> GetAllInstanceResultsOld(Instance instance) * { * if (this.ID.Contains("de_sprv_vrdp-bi_3260")) * { * } * var taxonomy = instance.Taxonomy; * var allresults = GetAllResults(); * var allinstanceresults = new List<ValidationRuleResult>(); * var resultstoremove = new List<ValidationRuleResult>(); * var resultstoadd = new List<ValidationRuleResult>(); * var hastyped = this.Parameters.Any(i => i.TypedDimensions.Count > 0); * * * if (!hastyped) * { * var allfactsindexes = this.Parameters.SelectMany(i => i.TaxFacts.SelectMany(j => j)).ToList(); * * foreach (var factindex in allfactsindexes) * { * var factindexintervallist = new IntervalList(factindex); * var existing = Utilities.Objects.IntersectSorted(factindexintervallist, taxonomy.TypedIntervals, null); * if (existing.Intervals.Count > 0) * { * hastyped = true; * break; * } * } * } * //var hastyped = this.Parameters.Any(i => i.TaxFacts.Any(j=>Taxonomy.IsTyped() > 0); * if (this.Parameters.Count == 1 && this.Parameters.FirstOrDefault().IsGeneral)//.StringValue == "filingindicators") * { * if (allresults.Count == 1) * { * var theresult = allresults.FirstOrDefault(); * resultstoremove.Add(theresult); * var finds = instance.FilingIndicators.Where(i => i.Filed).ToList(); * foreach (var find in finds) * { * var findresult = new ValidationRuleResult(); * resultstoadd.Add(findresult); * * findresult.ID = theresult.ID; * findresult.Parameters.AddRange(theresult.Parameters.Select(p => p.Copy())); * findresult.Parameters.FirstOrDefault().Value = find.ID; * } * } * if (allresults.Count == 0) * { * foreach (var find in instance.FilingIndicators) * { * var findresult = new ValidationRuleResult(); * resultstoadd.Add(findresult); * * findresult.ID = this.ID; * foreach (var p in Parameters) * { * var sp = new SimpleValidationParameter(); * sp.Name = p.Name; * sp.BindAsSequence = p.BindAsSequence; * sp.Value = p.StringValue; * findresult.Parameters.Add(sp); * if (p.IsGeneral && p.StringValue == "filingindicators") * { * sp.Value = find.ID; * } * } * } * } * } * * foreach (var result in allresults) * { * * if (hastyped) * { * //resultstoadd.AddRange(ValidationRuleHelper.GetTypedResults(instance, this, result)); * resultstoadd.AddRange(ValidationRuleHelper.ResolveTypedFacts(instance, result)); * resultstoremove.Add(result); * * } * * } * allinstanceresults = allresults; * foreach (var r in resultstoremove) * { * allinstanceresults.Remove(r); * * } * allinstanceresults.AddRange(resultstoadd); * foreach (var result in allinstanceresults) * { * foreach (var p in result.Parameters) * { * if (p.Cells.Any(c1 => c1.Any(c2 => c2.Contains(Literals.DynamicCode)))) * { * for (int i = 0; i < p.FactIDs.Count; i++) * { * var cells = p.Cells.Count==p.FactIDs.Count ? p.Cells[i] : p.Cells.FirstOrDefault(); * var fid = p.FactIDs[i]; * var fk = instance.GetFactKeyByIndexString(fid); * //var dcells = instance.GetDynamicCellID(cells.FirstOrDefault(), fs); * var dcells = instance.GetDynamicCellID(cells.FirstOrDefault(), fk); * cells.Clear(); * cells.Add(dcells); * * } * } * var mFactIDs = p.FactIDs.ToList(); * var ix = 0; * foreach (var factidentfier in p.FactIDs) * { * var parts = factidentfier.Split(":"); * if (parts[0] == "T") * { * var tix = Utilities.Converters.FastParse(parts[1]); * var taxkey = instance.Taxonomy.FactsManager.GetFactKey(tix); * var facts = instance.GetFactsByTaxKey(taxkey); * if (facts.Count == 1) * { * var fact = facts.FirstOrDefault(); * mFactIDs[ix] = string.Format("I:{0}", fact.IX); * } * } * ix++; * } * p.FactIDs = mFactIDs; * } * } * * return allinstanceresults; * } */ /* * public List<ValidationRuleResult> GetAllInstanceResultsOld(Instance instance) * { * if (this.ID.Contains("0149")) * { * } * var allresults = GetAllResults(); * var allinstanceresults = new List<ValidationRuleResult>(); * var resultstoremove = new List<ValidationRuleResult>(); * var resultstoadd = new List<ValidationRuleResult>(); * var hastyped = false; * var waschecked = false; * if (this.Parameters.Count == 1 && this.Parameters.FirstOrDefault().IsGeneral)//.StringValue == "filingindicators") * { * if (allresults.Count == 1) * { * var theresult = allresults.FirstOrDefault(); * resultstoremove.Add(theresult); * var finds = instance.FilingIndicators.Where(i => i.Filed).ToList(); * foreach (var find in finds) * { * var findresult = new ValidationRuleResult(); * resultstoadd.Add(findresult); * * findresult.ID = theresult.ID; * findresult.Parameters.AddRange(theresult.Parameters.Select(p => p.Copy())); * findresult.Parameters.FirstOrDefault().Value = find.ID; * } * } * if (allresults.Count == 0) * { * foreach (var find in instance.FilingIndicators) * { * var findresult = new ValidationRuleResult(); * resultstoadd.Add(findresult); * * findresult.ID = this.ID; * foreach (var p in Parameters) * { * var sp = new SimpleValidationParameter(); * sp.Name = p.Name; * sp.BindAsSequence = p.BindAsSequence; * sp.Value = p.StringValue; * findresult.Parameters.Add(sp); * if (p.IsGeneral && p.StringValue == "filingindicators") * { * sp.Value = find.ID; * } * } * } * } * } * * foreach (var result in allresults) * { * var facts = new List<FactBase>(); * if (!waschecked) * { * waschecked = true; * //facts = result.Parameters.SelectMany(i => i.Facts).Select(i => FactBase.GetFactFrom(i)).ToList(); * facts = result.Parameters.SelectMany(i => i.FactIDs).Select(i => FactBase.GetFactFrom( * Taxonomy.GetFactStringKey(Taxonomy.FactsManager.GetFactKey(Utilities.Converters.FastParse(i.Substring(2))) * ))).ToList(); * hastyped = facts.Any(i => i.Dimensions.Any(j => j.IsTyped)); * } * if (hastyped) * { * //facts = result.Parameters.SelectMany(i => i.Facts).Select(i => FactBase.GetFactFrom(i)).ToList(); * facts = result.Parameters.SelectMany(i => i.FactIDs).Select(i => FactBase.GetFactFrom( * Taxonomy.GetFactStringKey(Taxonomy.FactsManager.GetFactKey(Utilities.Converters.FastParse(i.Substring(2))) * ))).ToList(); * var resultfactgroup = result.FactGroup; * * //instance.TypedFactMembers.ContainsKey() * * foreach (var firstfact in facts) * { * var instancefacts = instance.GetFactsByTaxKey(firstfact.GetFactKey()); * var typestoreplace = new Dictionary<string, string>(); * var typestoreplaceids = new Dictionary<int, int>(); * if (instancefacts.Count > 0) * { * resultstoremove.Add(result); * var typedids = instance.GetTypedPartDomainIds(instancefacts[0]); * foreach (var typedid in typedids) * { * typestoreplaceids.Add(typedid, -2); * } * //var typedfacts = instancefacts[0].Dimensions.Where(i => i.IsTyped).Select(i => i.ToStringForKey()); * //foreach (var typedfact in typedfacts) * //{ * // var key = typedfact.Substring(typedfact.IndexOf(":")); * // typestoreplace.Add(key, ""); * //} * * } * //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * for (int i = 0; i < instancefacts.Count; i++) * { * var instancefact = instancefacts[i]; * var facttypedids = instance.GetTypedPartIds(instancefact); * var tix=0; * var tkeys = typestoreplaceids.Keys.ToList(); * foreach (var tid in tkeys) * { * typestoreplaceids[tid] = facttypedids[tix]; * tix++; * } * //foreach (var tdim in typedimensions) * //{ * // var key = tdim.ToStringForKey(); * // key = key.Substring(key.IndexOf(":")); * // typestoreplace[key] = tdim.DomainMemberFullName.Substring(tdim.DomainMemberFullName.IndexOf(":")); * //} * * var dynamicresult = new ValidationRuleResult(); * resultstoadd.Add(dynamicresult); * dynamicresult.FactGroup = new List<string>() { instancefact.GetFactString() }; * * dynamicresult.ID = result.ID; * dynamicresult.Parameters.AddRange(result.Parameters.Select(p => p.Copy())); * dynamicresult.Message = result.Message; * foreach (var p in dynamicresult.Parameters) * { * p.Cells.Clear(); * //for (var f_ix = 0; f_ix < p.Facts.Count; f_ix++) * for (var f_ix = 0; f_ix < p.FactIDs.Count; f_ix++) * { * * var factid = Utilities.Converters.FastParse(p.FactIDs[f_ix].Substring(2)); * var factkey = Taxonomy.FactsManager.GetFactKey(factid).ToList().ToArray(); * for (int fp_ix = 0; fp_ix < factkey.Length; fp_ix++) * { * var fp = factkey[fp_ix]; * if (typestoreplaceids.ContainsKey(fp)) * { * factkey[fp_ix] = typestoreplaceids[fp]; * } * } * * //p.Facts[f_ix] = newfactstring; * var instfact = instance.GetFactsByInstKey(factkey).FirstOrDefault(); * var strkey = instfact != null ? instance.GetFactStringKey(instfact.InstanceKey) : ""; * var inst_ix = instfact == null ? -1 : instfact.IX; * if (inst_ix == -1) * { * * } * p.FactIDs[f_ix] = String.Format("I:{0}", inst_ix); * * if (instfact!=null && Taxonomy.HasFact(instfact.TaxonomyKey)) * { * var cellist = new List<string>(); * p.Cells.Add(cellist); * var cells = Taxonomy.GetCellsOfFact(instfact.TaxonomyKey); * cellist.Clear(); * foreach (var cell in cells) * { * cellist.Add(instance.GetDynamicCellID(cell, instfact)); * } * } * * } * } * * } * } * } * * } * allinstanceresults = allresults; * foreach (var r in resultstoremove) * { * allinstanceresults.Remove(r); * * } * allinstanceresults.AddRange(resultstoadd); * foreach (var result in allinstanceresults) * { * foreach (var p in result.Parameters) * { * if (p.Cells.Any(c1 => c1.Any(c2 => c2.Contains(Literals.DynamicCode)))) * { * for (int i = 0; i < p.FactIDs.Count;i++ ) * { * var cells = p.Cells[i]; * var fid = p.FactIDs[i]; * var fk = instance.GetFactKeyByIndexString(fid); * var dcells = instance.GetDynamicCellID(cells.FirstOrDefault(), fk); * cells.Clear(); * cells.Add(dcells ); * * } * } * var mFactIDs = p.FactIDs.ToList(); * var ix=0; * foreach (var factidentfier in p.FactIDs) * { * var parts = factidentfier.Split(":"); * if (parts[0] == "T") * { * var tix = Utilities.Converters.FastParse(parts[1]); * var taxkey = instance.Taxonomy.FactsManager.GetFactKey(tix); * var facts = instance.GetFactsByTaxKey(taxkey); * if (facts.Count==1) * { * var fact = facts.FirstOrDefault(); * mFactIDs[ix] = string.Format("I:{0}", fact.IX); * } * } * ix++; * } * p.FactIDs = mFactIDs; * } * } * * return allinstanceresults; * } */ public void ValidateResult(ValidationRuleResult result, Instance instance) { var HasAtLeastOneValue = false; var HasMissingValue = false; foreach (var p in result.Parameters) { var rp = Parameters.FirstOrDefault(i => i.Name == p.Name); if (rp.IsGeneral) { if (rp.StringValue == "filingindicators" && rp.BindAsSequence) { rp.StringValues = instance.FilingIndicators.Select(i => i.ID).ToArray(); rp.StringValue = Utilities.Strings.ArrayToString(rp.StringValues); } continue; } rp.CurrentFacts.Clear(); rp.StringValue = ""; if (rp.BindAsSequence) { var facts = new List <InstanceFact>(); foreach (var factstring in p.FactIDs) { var factininstance = instance.GetFactByIDString(factstring); if (factininstance != null) { facts.Add(factininstance); } else { } } if (facts.Count > 0) { HasAtLeastOneValue = true; } //facts = Getf p.Facts; var instancefacts = facts; // GetInstanceFacts(facts); //set the cells rp.CurrentFacts.AddRange(instancefacts.ToArray()); var stringvalues = instancefacts.Select(i => i.Value); var decimals = instancefacts.Select(i => i.Decimals).ToArray(); if (rp.Type == TypeEnum.String) { rp.StringValues = stringvalues.ToArray(); //GetValues(parameterfactgroup.Facts).ToArray(); rp.StringValue = Utilities.Strings.ArrayToString(rp.StringValues); } if (rp.Type == TypeEnum.Numeric) { rp.DecimalValues = stringvalues.Select(i => LogicalModel.Validation.Functions.GetNumber(i)).ToArray();// GetValues(parameterfactgroup.Facts).Select(i => double.Parse(i)).ToArray(); rp.StringValue = Utilities.Strings.ArrayToString(rp.DecimalValues); rp.Decimals = decimals; } if (rp.Type == TypeEnum.Boolean) { rp.StringValues = stringvalues.ToArray(); //GetValues(parameterfactgroup.Facts).ToArray(); rp.StringValue = Utilities.Strings.ArrayToString(rp.StringValues); } } else { if (p.FactIDs.Count > 0) { var fact = instance.GetFactByIDString(p.FactIDs.FirstOrDefault()); if (fact != null) { var instancefacts = new List <InstanceFact>() { fact }; var factkey = fact.GetFactKey(); HasAtLeastOneValue = true; InstanceFact realfact = instancefacts.FirstOrDefault(); rp.CurrentFacts.Add(realfact); rp.StringValue = realfact.Value; rp.StringValues = new string[] { realfact.Value }; rp.Decimals = new string[] { realfact.Decimals }; // Decimal.MaxValue 79228162514264337593543950335 decimal if (rp.Type == TypeEnum.Numeric) { if (rp.StringValue.Length > 29 || !Utilities.Strings.IsNumeric(rp.StringValue)) { //var cells = Utilities.Strings.ArrayToString(rp.CurrentCells.ToArray()); Logger.WriteLine(String.Format("Invalid Value Detected at {2}: {0} Cells: {1}", rp.StringValue, "", this.ID)); rp.StringValue = ""; return; } } } } } if (String.IsNullOrEmpty(rp.StringValue.Trim())) { HasMissingValue = true; } if (!HasAtLeastOneValue) { } p.Value = rp.StringValue; } if (HasAtLeastOneValue && !HasMissingValue) { Boolean partialresult = true; //var formula = Taxonomy.SimpleValidationRules.FirstOrDefault(i => i.ID == this.ID); try { partialresult = Function(Parameters); } catch (Exception ex) { if (ex is DivideByZeroException) { partialresult = false; } } if (!partialresult) { if (this.ID.Contains("-bi")) { } result.ID = this.ID; result.IsOk = false; var me = this; var allfinds = new List <string>(); foreach (var table in this.Tables) { var tbl = Taxonomy.Tables.FirstOrDefault(i => i.ID == table); allfinds.Add(tbl.FilingIndicator); } allfinds = allfinds.Distinct().ToList(); var isok = true; foreach (var find in allfinds) { var hasdata = false; var tg = Taxonomy.Module.TableGroups.FirstOrDefault(i => i.Item.FilingIndicator == find); if (tg != null) { foreach (var tableid in tg.Item.TableIDs) { var tbl = Taxonomy.Tables.FirstOrDefault(i => i.ID == tableid); if (tbl.InstanceFactsCount > 0) { hasdata = true; break; } } } if (!hasdata) { isok = false; break; } } result.HasAllFind = isok ? "1" : "2"; } } }
public Cell AddCells_Old_2(Cell cell, InstanceFact fact, Table table) { var dynamiccell = new Cell(); dynamiccell.Report = cell.Report; dynamiccell.Extension = cell.Extension; dynamiccell.Row = cell.Row; dynamiccell.Column = cell.Column; if (fact.Dimensions.Count == 0) { var factstring = Instance.GetFactStringKey(fact.InstanceKey); var tmpfact = new FactBase(); tmpfact.SetFromString(factstring); fact.Dimensions.AddRange(tmpfact.Dimensions); } if (cell.Extension == Literals.DynamicCode) { var ext = table.Extensions.Children.FirstOrDefault(); var opendimensions = ext.Item.Dimensions.Where(i => String.IsNullOrEmpty(i.DomainMember)).ToList(); //var typeddimensions = ext.Item.Dimensions.Where(i => i.IsTyped).ToList(); //var axistypeddimensions = Dimension.GetDimensions(fact.Dimensions, typeddimensions); var instanceopendimensions = Dimension.GetDimensions(fact.Dimensions, opendimensions); var openfactstring = GetFactString(instanceopendimensions); if (!ExtDictionary.ContainsKey(openfactstring)) { var extnr = String.Format("{0}", ExtDictionary.Count + 1); ExtDictionary.Add(openfactstring, extnr); } dynamiccell.Extension = ExtDictionary[openfactstring]; } if (cell.Row == Literals.DynamicCode) { // var cell = table.Rows var row = table.Rows.FirstOrDefault(i => i.Item.LabelCode == cell.Row); var typeddimensions = row.Item.Dimensions.Where(i => i.IsTyped).ToList(); var axistypeddimensions = Dimension.GetDimensions(fact.Dimensions, typeddimensions); var typedfactstring = GetTypedFactString(axistypeddimensions); if (!RowDictionary.ContainsKey(typedfactstring)) { var rownr = String.Format("{0}", RowDictionary.Count + 1); RowDictionary.Add(typedfactstring, rownr); } dynamiccell.Row = RowDictionary[typedfactstring]; } if (cell.Column == Literals.DynamicCode) { // var cell = table.Rows var col = table.Columns.FirstOrDefault(i => i.Item.LabelCode == cell.Row); var typeddimensions = col.Item.Dimensions.Where(i => i.IsTyped).ToList(); var axistypeddimensions = Dimension.GetDimensions(fact.Dimensions, typeddimensions); var typedfactstring = GetTypedFactString(axistypeddimensions); if (!ColDictionary.ContainsKey(typedfactstring)) { var rownr = String.Format("{0}", RowDictionary.Count + 1); ColDictionary.Add(typedfactstring, rownr); } dynamiccell.Column = ColDictionary[typedfactstring]; } //if (dynamiccell.CellID != cell.CellID) //{ // //var cellfactstring = fact.FactString; // //if (CellOfFact.ContainsKey(fact.FactString)) // //if (1 == 2) // //{ // // //var existing = CellOfFact[fact.FactString]; // // var existingfacts = TaxonomyEngine.CurrentEngine.CurrentInstance.FactDictionary.FactsByTaxonomyKey[fact.InstanceKey]; // // //var existingfact = existingfacts.FirstOrDefault(i => i.FactString == fact.FactString); // // var ctid = typeof(InstanceFact).IsAssignableFrom(fact.GetType()) ? ((InstanceFact)fact).ContextID : ""; // // var msg = String.Format("Fact {0} already exist >> {1}!", fact, ctid); // // Utilities.Logger.WriteLine(msg); // //} // //else // //{ // // //var item = this.Instance.FactDictionary[fact.FactIntkeys]; // // //CellOfFact.Add(fact.FactString, dynamiccell.CellID); // //} //} //else //{ //} fact.Cells.Add(dynamiccell.CellID); return(dynamiccell); }
public Cell AddCells(Cell cell, InstanceFact fact, Table table) { var dynamiccell = new Cell(); dynamiccell.Report = cell.Report; dynamiccell.Extension = cell.Extension; dynamiccell.Row = cell.Row; dynamiccell.Column = cell.Column; if (cell.Extension == Literals.DynamicCode) { var ext = table.Extensions.Children.FirstOrDefault(); var opendimensions = ext.Item.Dimensions.Where(i => i.MapID == i.DomMapID).Select(i => i.MapID).ToList(); var instanceopendimensions = GetInstanceAspects(Instance, fact, opendimensions); var openfactstring = GetString(instanceopendimensions); if (!ExtDictionary.ContainsKey(openfactstring)) { var extnr = String.Format("{0}", ExtDictionary.Count + 1); ExtDictionary.Add(openfactstring, extnr); } dynamiccell.Extension = ExtDictionary[openfactstring]; } if (cell.Row == Literals.DynamicCode) { // var cell = table.Rows var row = table.Rows.FirstOrDefault(i => i.Item.LabelCode == cell.Row); var opendimensions = row.Item.Dimensions.Where(i => i.MapID == i.DomMapID).Select(i => i.MapID).ToList(); var instanceopendimensions = GetInstanceAspects(Instance, fact, opendimensions); var openfactstring = GetString(instanceopendimensions); if (!RowDictionary.ContainsKey(openfactstring)) { var rownr = String.Format("{0}", RowDictionary.Count + 1); RowDictionary.Add(openfactstring, rownr); } dynamiccell.Row = RowDictionary[openfactstring]; } if (cell.Column == Literals.DynamicCode) { // var cell = table.Rows var col = table.Columns.FirstOrDefault(i => i.Item.LabelCode == cell.Row); var opendimensions = col.Item.Dimensions.Where(i => i.MapID == i.DomMapID).Select(i => i.MapID).ToList(); var instanceopendimensions = GetInstanceAspects(Instance, fact, opendimensions); var openfactstring = GetString(instanceopendimensions); if (!ColDictionary.ContainsKey(openfactstring)) { var rownr = String.Format("{0}", RowDictionary.Count + 1); ColDictionary.Add(openfactstring, rownr); } dynamiccell.Column = ColDictionary[openfactstring]; } if (dynamiccell.CellID != cell.CellID) { } else { } fact.Cells.Add(dynamiccell.CellID); return(dynamiccell); }
public static void SetResult(Instance instance, ValidationRuleResult result, SimpleValidationParameter referenceparameter, InstanceFact referencefact) { var taxonomy = instance.Taxonomy; var factparameters = result.Rule.Parameters.Where(i => !i.IsGeneral && i.Name != referenceparameter.Name).Select(i => i.Name).ToList(); var resultfactparameters = result.Parameters.Where(i => factparameters.Contains(i.Name)); var referencetypeddomains = instance.GetTypedPartDomainIds(referencefact); foreach (var p in resultfactparameters) { var facts = p.FactIDs.SelectMany(i => { return(instance.GetFactsByIdString(i)); }).ToArray().ToList(); p.FactIDs.Clear(); foreach (var fact in facts) { var typeddomains = instance.GetTypedPartDomainIds(fact); var commontypeddomains = typeddomains.Intersect(referencetypeddomains).ToList(); var commontypemmembersoffact = instance.GetTypedPartIds(fact, commontypeddomains); var commontypemmembersofreference = instance.GetTypedPartIds(referencefact, commontypeddomains); if (ValidationRuleHelper.listcomparer.Equals(commontypemmembersoffact, commontypemmembersofreference)) { p.FactIDs.Add(string.Format("I:{0}", fact.IX)); } } } }