示例#1
0
        /*
         * public List<FactBaseQuery> GetRuleQuery(Hierarchy<XbrlIdentifiable> item)
         * {
         *  //root level
         *  var rootfilters = item.Children.Where(i => i.Item is Filter).ToList();
         *  var rootquerypool = new List<List<FactBaseQuery>>();
         *
         *  foreach (var rootfilter in rootfilters)
         *  {
         *      var rootfilterItem = rootfilter.Item as Filter;
         *      var queries = rootfilterItem.GetQueries(this.Taxonomy, 0);
         *      //rootquerypool.Add(queries);
         *      if (queries.Count > 0)
         *      {
         *          if (queries.Count == 1)
         *          {
         *              rootquerypool.Add(queries);
         *          }
         *          else
         *          {
         *
         *          }
         *      }
         *
         *  }
         *
         *  var rootqueries = CombineQueries(rootquerypool.ToArray());
         *
         *  var allqueries = rootqueries;
         *  foreach (var qry in allqueries)
         *  {
         *      qry.NrOfDictFilters = qry.DictFilterIndexes.Count;
         *  }
         *  return allqueries;
         * }
         */
        /*
         * public List<FactBaseQuery> GetRuleBaseQuery(Hierarchy<XbrlIdentifiable> item)
         * {
         *  //root level
         *  var rootfilters = item.Children.Where(i => i.Item is Filter).ToList();
         *  var rootquerypool = new List<List<FactBaseQuery>>();
         *
         *  foreach (var rootfilter in rootfilters)
         *  {
         *      var rootfilterItem = rootfilter.Item as Filter;
         *      var queries = rootfilterItem.GetQueries(this.Taxonomy, 0);
         *      //rootquerypool.Add(queries);
         *      if (queries.Count > 0)
         *      {
         *          if (queries.Count == 1)
         *          {
         *              rootquerypool.Add(queries);
         *              item.Children.Remove(rootfilter);
         *          }
         *          else
         *          {
         *
         *          }
         *      }
         *
         *  }
         *
         *  var rootqueries = CombineQueries(rootquerypool.ToArray());
         *
         *  var allqueries = rootqueries;
         *  foreach (var qry in allqueries)
         *  {
         *      qry.NrOfDictFilters = qry.DictFilterIndexes.Count;
         *  }
         *  return allqueries;
         * }
         */
        /*
         * public List<FactBaseQuery> GetFactQuery(Hierarchy<XbrlIdentifiable> item,int level=0)
         * {
         *  //or queries
         *  var orfilters = item.Where(i => i.Item is OrFilter).ToList();
         *  var querycombinationpool = new List<List<FactBaseQuery>>();
         *  foreach (var orfilter in orfilters)
         *  {
         *
         *      var orfilteritem = orfilter.Item as OrFilter;
         *      var andfilters = orfilter.Where(i => i.Item is AndFilter).ToList();
         *      var orquerycombinationpool = new List<List<FactBaseQuery>>();
         *      var queries = new List<FactBaseQuery>();
         *      foreach (var andfilter in andfilters)
         *      {
         *          var andfilteritem = andfilter.Item as AndFilter;
         *
         *          var levelquerypool = new List<List<FactBaseQuery>>();
         *
         *          foreach (var filteritem in andfilter.Children)
         *          {
         *              var levelfilteritem = filteritem.Item as Filter;
         *              var levelqueries = levelfilteritem.GetQueries(this.Taxonomy, level);
         *              //queries.AddRange(levelqueries);
         *              levelquerypool.Add(levelqueries);
         *          }
         *          var andqueries = CombineQueries(levelquerypool.ToArray());
         *          queries.AddRange(andqueries);
         *          //orquerycombinationpool.Add(andqueries);
         *
         *      }
         *
         *      //List<FactBaseQuery> queries = CombineQueries(orquerycombinationpool.ToArray());
         *
         *      item.Children.Remove(orfilter);
         *      querycombinationpool.Add(queries);
         *  }
         *  var mergedqueries = CombineQueries(querycombinationpool.ToArray());
         *
         *  //root level
         *  var rootfilters = item.Where(i => i.Item is Filter).ToList();
         *  var rootquerypool = new List<List<FactBaseQuery>>();
         *
         *  foreach (var rootfilter in rootfilters)
         *  {
         *      var rootfilterItem  = rootfilter.Item as Filter;
         *      rootquerypool.Add(rootfilterItem.GetQueries(this.Taxonomy, level));
         *
         *  }
         *
         *  var rootqueries = CombineQueries(rootquerypool.ToArray());
         *
         *  var allqueries = CombineQueries(rootqueries, mergedqueries);
         *  foreach (var qry in allqueries)
         *  {
         *      qry.NrOfDictFilters = qry.DictFilterIndexes.Count;
         *  }
         *  return allqueries;
         * }
         */
        /*
         * public List<int> GetFactIDsByDict(FactBaseQuery fbq, List<int> IdList)
         * {
         *  IEnumerable<int> ids = null;
         *
         *
         *  var rulefactquery = fbq;
         *  var dimparts = rulefactquery.GetDimensions().Distinct().ToList();
         *  var source = IdList == null ? Taxonomy.FactIndexEnumerable() : IdList;
         *
         *  if (dimparts.Count > 0)
         *  {
         *      ids = source;
         *      var firstdimpartix = Taxonomy.FactParts[dimparts[0]];
         *      ids = Taxonomy.FactsOfParts[firstdimpartix];
         *      for (int i = 1; i < dimparts.Count; i++)
         *      {
         *          var ix = Taxonomy.FactParts[dimparts[i]];
         *          if (Taxonomy.FactsOfParts.ContainsKey(ix))
         *          {
         *              ids = Utilities.Objects.IntersectSorted(ids, Taxonomy.FactsOfParts[ix], null).AsQueryable().ToList();
         *          }
         *      }
         *
         *  }
         *  else
         *  {
         *      return source.ToList();
         *  }
         *  return ids.ToList();
         * }
         */
        public List <String> GetFactsByIds(IEnumerable <int> ids)
        {
            var factlist = new List <String>();//ids.Count());

            foreach (var id in ids)
            {
                var key = Taxonomy.GetFactStringKey(Taxonomy.FactsManager.GetFactKey(id));
                factlist.Add(key);
            }
            return(factlist);
        }
示例#2
0
        public List <KeyValue <string, int> > GetFactsKVByIds(IEnumerable <int> ids)
        {
            var factlist = new List <KeyValue <string, int> >();//ids.Count());

            foreach (var id in ids)
            {
                var key = Taxonomy.GetFactStringKey(Taxonomy.FactsManager.GetFactKey(id));
                factlist.Add(new KeyValue <string, int>(key, id));
            }
            return(factlist);
        }
示例#3
0
        public List <ValidationRuleResult> GetAllResults()
        {
            var results    = new List <ValidationRuleResult>();
            var factgroups = Parameters.FirstOrDefault().TaxFacts;

            for (int i = 0; i < factgroups.Count; i++)
            {
                var vruleresult = new ValidationRuleResult();
                vruleresult.Rule = this;
                results.Add(vruleresult);
                vruleresult.ID = this.ID;

                foreach (var p in Parameters)
                {
                    if (p.IsGeneral)
                    {
                        continue;
                    }
                    p.Clear();
                    //p.CurrentCells.Clear();
                    var itemfacts   = new List <string>();
                    var itemfactids = new List <int>();


                    var sp = new SimpleValidationParameter();
                    sp.Name           = p.Name;
                    sp.BindAsSequence = p.BindAsSequence;
                    vruleresult.Parameters.Add(sp);

                    //TODO
                    IList <int> facts = null;
                    if (i >= p.TaxFacts.Count && p.TaxFacts.Count == 1)
                    {
                        facts = p.TaxFacts[0];
                    }
                    else
                    {
                        facts = p.TaxFacts[i];
                    }

                    if (p.BindAsSequence)
                    {
                        //set the cells
                        itemfactids.AddRange(facts);
                        itemfacts.AddRange(facts.Select(f => Taxonomy.GetFactStringKey(Taxonomy.FactsManager.GetFactKey(f))));
                        foreach (var tax_fact in itemfactids)
                        {
                            //var cellist = new List<string>();
                            //sp.Cells.Add(cellist);
                            //var taxfactkey = Taxonomy.FactsManager.GetFactKey(tax_fact);
                            //if (Taxonomy.HasFact(taxfactkey))
                            //{

                            //    var cells = Taxonomy.GetCellsOfFact(taxfactkey);

                            //    cellist.AddRange(cells);
                            //}
                        }
                    }
                    else
                    {
                        if (facts.Count > 1)
                        {
                            //TODO
                            //Logger.WriteLine("Issue with " + this.ID + " parameter " + p.Name);
                        }
                        else
                        {
                            if (facts.Count == 1)
                            {
                                var factkey = Taxonomy.GetFactStringKey(Taxonomy.FactsManager.GetFactKey(facts.FirstOrDefault()));
                                itemfacts.Add(factkey);
                                var factid = facts.FirstOrDefault();
                                itemfactids.Add(factid);
                                //set the cells
                                //var cells = new List<String>();
                                //sp.Cells.Add(cells); ;
                                //if (Taxonomy.HasFact(factkey))
                                //{
                                //    cells.AddRange(Taxonomy.GetCellsOfFact(factkey));
                                //}
                            }
                        }
                    }

                    //sp.Facts.AddRange(itemfacts);
                    sp.FactIDs.AddRange(itemfactids.Select(f => String.Format("T:{0}", f)));
                    //p.FactIDs.Add(String.Format("I:{0}", fact.IX));
                    //
                }
            }

            //results = ValidationRuleHelper.ExecuteImplicitFiltering(Taxonomy, results);
            //Taxonomy.SetCells(results);
            ValidationRuleHelper.SetCells(Taxonomy, results);
            return(results);
        }
示例#4
0
        public string CheckCells(LogicalModel.Validation.ValidationParameter parameter)
        {
            var cellfound = false;
            var sb        = new StringBuilder();
            var sequence  = parameter.BindAsSequence ? "Sequence" : "";

            sb.AppendLine("parameter: " + parameter.Name + " " + sequence);
            var c_sb = new StringBuilder();
            var log  = false;

            foreach (var factgroup in parameter.TaxFacts)
            {
                foreach (var factid in factgroup.AsEnumerable())
                {
                    var cellslist = new List <List <String> >();
                    var factkey   = Taxonomy.FactsManager.GetFactKey(factid);
                    var fact      = FactBase.GetFactFrom(Taxonomy.GetFactStringKey(factkey));
                    if (Taxonomy.HasFact(factkey))
                    {
                        var cells = Taxonomy.GetCellsOfFact(factkey);
                        if (parameter.RuleID.Contains("0602"))
                        {
                            cellslist.Add(cells.Select(i => i + " {" + factkey + "} ").ToList());
                        }
                        else
                        {
                            cellslist.Add(cells);
                        }
                        if (cells.Count == 0)
                        {
                            if (log)
                            {
                                c_sb.AppendLine(parameter.RuleID + " fact found but no cells! " + factkey);
                            }
                        }
                    }
                    else
                    {
                        var s_facts = Taxonomy.FactKeysAsEnumerable().Select(i => i).AsEnumerable();
                        if (fact.Concept != null)
                        {
                            //s_facts = s_facts.Where(i => i.StartsWith(fact.Concept.Content));
                            //if (Taxonomy.FactsOfDimensions.ContainsKey(fact.Concept.Content))
                            var ix = Taxonomy.FactParts[fact.Concept.Content];
                            if (Taxonomy.FactsOfParts.ContainsKey(ix))
                            {
                                s_facts = Taxonomy.FactsOfParts[ix].Select(
                                    i => Taxonomy.FactsManager.GetFactKey(i));
                            }
                            else
                            {
                                s_facts = new List <int[]>();
                            }
                        }
                        foreach (var dimension in fact.Dimensions)
                        {
                            s_facts = s_facts.Where(i => Taxonomy.GetFactStringKey(i).Contains(dimension.DomainMemberFullName));
                        }
                        // var s_factlist = s_facts.ToList();
                        var hasanyfact = false;

                        foreach (var s_fact in s_facts)
                        {
                            hasanyfact = true;
                            var cells = Taxonomy.GetCellsOfFact(s_fact);
                            if (cells.Count == 0)
                            {
                                if (log)
                                {
                                    c_sb.AppendLine(parameter.RuleID + " for parameter " + parameter.Name + " no cells were found! " + s_fact);
                                }
                            }
                            if (parameter.RuleID.Contains("0602"))
                            {
                                cellslist.Add(cells.Select(i => i + " {" + factkey + "} ").ToList());
                            }
                            else
                            {
                                cellslist.Add(cells);
                            }
                        }

                        if (!hasanyfact)
                        {
                            if (log)
                            {
                                c_sb.AppendLine(parameter.RuleID + " fact for parameter " + parameter.Name + " not found! " + factkey);
                            }
                        }
                    }
                    if (cellslist.Count == 0)
                    {
                    }
                    else
                    {
                        cellfound = true;
                    }
                    //sb.AppendLine(fact.GetFactKey());
                    foreach (var cells in cellslist)
                    {
                        foreach (var cell in cells)
                        {
                            sb.Append(cell + ", ");
                        }
                        sb.AppendLine();
                    }
                }
            }
            if (!cellfound)
            {
                if (log)
                {
                    c_sb.AppendLine("None of the Fact Groups can be found for " + parameter.RuleID + " - " + parameter.Name);
                }
            }
            if (c_sb.Length > 0)
            {
                Logger.WriteLine(c_sb.ToString());
            }
            return(sb.ToString());
        }