Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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());
        }
Ejemplo n.º 7
0
        /*
         * 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";
                }
            }
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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));
                    }
                }
            }
        }