Esempio n. 1
0
        public static string NameFromIco(string ico, bool IcoIfNotFound = false)
        {
            string cnnStr = Devmasters.Config.GetWebConfigValue("CnnString");

            using (PersistLib p = new PersistLib())
            {
                string sql = @"select jmeno from Firma where ico = @ico";

                var res = p.ExecuteScalar(cnnStr, System.Data.CommandType.Text, sql, new IDataParameter[] {
                    new System.Data.SqlClient.SqlParameter("ico", ico)
                });

                if (PersistLib.IsNull(res) || string.IsNullOrEmpty(res as string))
                {
                    if (IcoIfNotFound)
                    {
                        return("IČO:" + ico);
                    }
                    else
                    {
                        return(string.Empty);
                    }
                }
                else
                {
                    return((string)res);
                }
            }
        }
Esempio n. 2
0
        public static IEnumerable <Firma> AllFromNameWildcards(string jmeno)
        {
            using (PersistLib p = new PersistLib())
            {
                var sql = @"select * from Firma where jmeno like @jmeno";

                var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, new IDataParameter[] {
                    new System.Data.SqlClient.SqlParameter("jmeno", Firma.JmenoBezKoncovky(jmeno) + "%")
                });
                var found = new List <Firma>();
                if (res.Tables.Count > 0 && res.Tables[0].Rows.Count > 0)
                {
                    found.AddRange(res.Tables[0]
                                   .AsEnumerable()
                                   .Select(m => FromDataRow(m))
                                   );

                    return(found);
                }
                else
                {
                    return new Firma[] { }
                };
            }
        }
Esempio n. 3
0
        public static void AddZahranicniFirma(string ico, string jmeno, string adresa)
        {
            /*
             *           f.ICO = (string)dr["ico"];
             * f.DIC = (string)PersistLib.IsNull(dr["dic"], string.Empty);
             * f.Datum_Zapisu_OR = (DateTime?)PersistLib.IsNull(dr["datum_zapisu_or"], null);
             * f.Stav_subjektu = Convert.ToInt32(PersistLib.IsNull(dr["Stav_subjektu"], 1));
             * f.Jmeno = (string)PersistLib.IsNull(dr["jmeno"], string.Empty);
             * f.JmenoAscii = (string)PersistLib.IsNull(dr["jmenoascii"], string.Empty);
             * f.Kod_PF = (int?)PersistLib.IsNull(dr["Kod_PF"], null);
             * f.VersionUpdate = (int)dr["VersionUpdate"];
             * //f.VazbyRaw = (string)PersistLib.IsNull(dr["vazbyRaw"], (string)"[]");
             * f.IsInRS = (short?)PersistLib.IsNull(dr["IsInRS"], null);
             * f.KrajId = (string)PersistLib.IsNull(dr["krajid"], string.Empty);
             * f.OkresId = (string)PersistLib.IsNull(dr["okresid"], string.Empty);
             */
            using (PersistLib p = new PersistLib())
            {
                string sql = @"insert into firma(ico,dic,stav_subjektu, jmeno, jmenoascii, versionupdate, popis)
                                values(@ico,@dic,@stav,@jmeno,@jmenoascii,0,@adresa)";

                p.ExecuteNonQuery(cnnStr, System.Data.CommandType.Text, sql, new IDataParameter[] {
                    new System.Data.SqlClient.SqlParameter("ico", ico),
                    new System.Data.SqlClient.SqlParameter("dic", ico),
                    new System.Data.SqlClient.SqlParameter("stav", (int)1),
                    new System.Data.SqlClient.SqlParameter("jmeno", jmeno),
                    new System.Data.SqlClient.SqlParameter("jmenoascii", Devmasters.TextUtil.RemoveDiacritics(jmeno)),
                    new System.Data.SqlClient.SqlParameter("versionupdate", (long)0),
                    new System.Data.SqlClient.SqlParameter("adresa", Devmasters.TextUtil.ShortenText(adresa, 100)),
                });
            }
        }
Esempio n. 4
0
        private static Edge AngazovanostDataToEdge(AngazovanostData ang, Node fromNode, Node toNode, int distance)
        {
            var rel = new Edge();

            rel.From     = fromNode;
            rel.To       = toNode;
            rel.Distance = distance;
            rel.RelFrom  = (DateTime?)PersistLib.IsNull(ang.fromDate, null);
            if (rel.RelFrom < minDate)
            {
                rel.RelFrom = null;
            }

            rel.RelTo = (DateTime?)PersistLib.IsNull(ang.toDate, null);
            if (rel.RelTo < minDate)
            {
                rel.RelTo = null;
            }

            var relData = AngazovanostDataToRelationSimple(ang);

            rel.Descr = relData.Item2;
            if (string.IsNullOrEmpty(rel.Descr))
            {
                rel.Descr = relData.Item1.ToNiceDisplayName();
            }
            rel.UpdateAktualnost();
            return(rel);
        }
Esempio n. 5
0
        public static IEnumerable <Graph.Edge> GetDirectParentRelationsOsoby(string ico)
        {
            string sql = @"select OsobaID, datumOd, datumDo, typVazby, pojmenovaniVazby, podil from osobavazby 
                        where vazbakico=@ico 
                    ";

            string cnnStr = Devmasters.Config.GetWebConfigValue("CnnString");

            List <Graph.Edge> relations = new List <Graph.Edge>();
            //get zakladni informace o subj.

            //find politician in the DB
            var db      = new Devmasters.PersistLib();
            var sqlCall = HlidacStatu.Lib.DirectDB.GetRawSql(System.Data.CommandType.Text, sql, new IDataParameter[] {
                new SqlParameter("ico", ico)
            });
            //string sqlFirma = "select top 1 stav_subjektu from firma where ico = @ico";

            var ds = db.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sqlCall, null);

            if (ds.Tables[0].Rows.Count > 0)
            {
                var parents = ds.Tables[0].AsEnumerable()
                              .Select(dr => new AngazovanostData()
                {
                    subjId   = ((int)dr["osobaId"]).ToString(),
                    subjname = "",
                    NodeType = Node.NodeType.Company,
                    fromDate = (DateTime?)PersistLib.IsNull(dr["datumOd"], null),
                    toDate   = (DateTime?)PersistLib.IsNull(dr["datumDo"], null),
                    kod_ang  = Convert.ToInt32(dr["typVazby"]),
                    descr    = (string)PersistLib.IsNull(dr["PojmenovaniVazby"], ""),
                    podil    = (decimal?)PersistLib.IsNull(dr["podil"], null)
                })
                              .ToArray();
                var ret = new List <Edge>();
                for (int i = 0; i < parents.Length; i++)
                {
                    AngazovanostData ang = parents[i];
                    var rel = AngazovanostDataToEdge(ang,
                                                     new Node()
                    {
                        Type = Node.NodeType.Person, Id = ang.subjId
                    },
                                                     new Node()
                    {
                        Type = Node.NodeType.Person, Id = ico
                    },
                                                     -1
                                                     );

                    ret.Add(rel);
                }
                return(Edge.GetLongestEdges(ret));
            }
            return(new Graph.Edge[] { });
        }
Esempio n. 6
0
        public static IEnumerable <string> AllIcoInRS(bool includedIcosInHoldings = false)
        {
            using (PersistLib p = new PersistLib())
            {
                string sql = @"select ico from Firma where IsInRS = 1";

                var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, null);

                if (res.Tables.Count > 0 && res.Tables[0].Rows.Count > 0)
                {
                    var allIcos = res.Tables[0]
                                  .AsEnumerable()
                                  .Where(r => Devmasters.TextUtil.IsNumeric((string)r["ICO"]))
                                  .Select(r => (string)r["ICO"])
                                  .ToArray();
                    if (includedIcosInHoldings == false)
                    {
                        return(allIcos);
                    }
                    else
                    {
                        HashSet <string> holdingIcos = new HashSet <string>();
                        foreach (var i in allIcos)
                        {
                            if (!holdingIcos.Contains(i))
                            {
                                holdingIcos.Add(i);
                            }
                            Firma f = Firmy.Get(i);
                            foreach (var hi in f.IcosInHolding(Relation.AktualnostType.Nedavny))
                            {
                                if (!holdingIcos.Contains(hi))
                                {
                                    holdingIcos.Add(hi);
                                }
                            }
                        }
                        return(holdingIcos);
                    }
                }
                else
                {
                    return new string[] { }
                };
            }
        }
Esempio n. 7
0
        public static IEnumerable <Firma> AllFirmyInRS(bool skipDS_Nace = false)
        {
            using (PersistLib p = new PersistLib())
            {
                string sql = @"select * from Firma where IsInRS = 1";

                var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, null);

                if (res.Tables.Count > 0 && res.Tables[0].Rows.Count > 0)
                {
                    return(res.Tables[0]
                           .AsEnumerable()
                           .Where(r => Devmasters.TextUtil.IsNumeric((string)r["ICO"]))
                           .Select(r => FromDataRow(r, skipDS_Nace)));
                }
                else
                {
                    return new Firma[] { }
                };
            }
        }
Esempio n. 8
0
        public static IEnumerable <string> AllIcoInRS()
        {
            using (PersistLib p = new PersistLib())
            {
                string sql = @"select ico from Firma where IsInRS = 1";

                var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, null);

                if (res.Tables.Count > 0 && res.Tables[0].Rows.Count > 0)
                {
                    return(res.Tables[0]
                           .AsEnumerable()
                           .Where(r => Devmasters.Core.TextUtil.IsNumeric((string)r["ICO"]))
                           .Select(r => (string)r["ICO"]));
                }
                else
                {
                    return new string[] { }
                };
            }
        }
Esempio n. 9
0
        private static Firma FromDataRow(DataRow dr, bool skipDS_Nace = false)
        {
            Firma f = new Data.Firma();

            f.ICO             = (string)dr["ico"];
            f.DIC             = (string)PersistLib.IsNull(dr["dic"], string.Empty);
            f.Datum_Zapisu_OR = (DateTime?)PersistLib.IsNull(dr["datum_zapisu_or"], null);
            f.Stav_subjektu   = Convert.ToInt32(PersistLib.IsNull(dr["Stav_subjektu"], 1));
            f.Status          = Convert.ToInt32(PersistLib.IsNull(dr["Status"], 1));
            f.Jmeno           = (string)PersistLib.IsNull(dr["jmeno"], string.Empty);
            f.JmenoAscii      = (string)PersistLib.IsNull(dr["jmenoascii"], string.Empty);
            f.Kod_PF          = (int?)PersistLib.IsNull(dr["Kod_PF"], null);
            f.VersionUpdate   = (int)dr["VersionUpdate"];
            //f.VazbyRaw = (string)PersistLib.IsNull(dr["vazbyRaw"], (string)"[]");
            f.IsInRS  = (short?)PersistLib.IsNull(dr["IsInRS"], null);
            f.KrajId  = (string)PersistLib.IsNull(dr["krajid"], string.Empty);
            f.OkresId = (string)PersistLib.IsNull(dr["okresid"], string.Empty);
            f.Typ     = (int?)PersistLib.IsNull(dr["Typ"], null);

            if (skipDS_Nace == false)
            {
                using (PersistLib p = new PersistLib())
                {
                    f.DatovaSchranka = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, "select DatovaSchranka from firma_DS where ico=@ico", new IDataParameter[] {
                        new System.Data.SqlClient.SqlParameter("ico", f.ICO)
                    }).Tables[0]
                                       .AsEnumerable()
                                       .Select(m => m[0].ToString())
                                       .ToArray();

                    f.NACE = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, "select NACE from firma_Nace where ico=@ico", new IDataParameter[] {
                        new System.Data.SqlClient.SqlParameter("ico", f.ICO)
                    }).Tables[0]
                             .AsEnumerable()
                             .Select(m => m[0].ToString())
                             .ToArray();
                }
            }
            return(f);
        }
Esempio n. 10
0
        public static Firma FromIco(string ico)
        {
            Firma f = new Data.Firma();

            using (PersistLib p = new PersistLib())
            {
                string sql = @"select * from Firma where ico = @ico";

                var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, new IDataParameter[] {
                    new System.Data.SqlClient.SqlParameter("ico", ico)
                });

                if (res.Tables[0].Rows.Count > 0)
                {
                    return(FromDataRow(res.Tables[0].Rows[0]));
                }
                else
                {
                    return(Firma.NotFound);
                }
            }
        }
Esempio n. 11
0
        public static Firma FromDS(string ds)
        {
            Firma f = new Data.Firma();

            using (PersistLib p = new PersistLib())
            {
                string sql = @"select firma.* from Firma_ds fds inner join firma on firma.ico = fds.ico where DatovaSchranka = @ds";

                var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, new IDataParameter[] {
                    new System.Data.SqlClient.SqlParameter("ds", ds)
                });

                if (res.Tables[0].Rows.Count > 0)
                {
                    return(FromDataRow(res.Tables[0].Rows[0]));
                }
                else
                {
                    return(Firma.NotFound);
                }
            }
        }
Esempio n. 12
0
        public static IEnumerable <Firma> AllFromName(string jmeno)
        {
            using (PersistLib p = new PersistLib())
            {
                string sql = @"select * from Firma where jmeno = @jmeno";

                var res = p.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sql, new IDataParameter[] {
                    new System.Data.SqlClient.SqlParameter("jmeno", jmeno)
                });

                if (res.Tables.Count > 0 && res.Tables[0].Rows.Count > 0)
                {
                    return(res.Tables[0]
                           .AsEnumerable()
                           .Where(r => Devmasters.TextUtil.IsNumeric((string)r["ICO"]))
                           .Select(m => FromDataRow(m)));
                }
                else
                {
                    return new Firma[] { }
                };
            }
        }
Esempio n. 13
0
        public void Save()
        {
            this.JmenoAscii = Devmasters.Core.TextUtil.RemoveDiacritics(this.Jmeno);

            string sql     = @"exec Firma_Save @ICO,@DIC,@Datum_zapisu_OR,@Stav_subjektu,@Jmeno,@Jmenoascii,@Kod_PF,@Source, @Popis, @VersionUpdate, @krajId, @okresId, @status  ";
            string sqlNACE = @"INSERT into firma_NACE(ico, nace) values(@ico,@nace)";
            string sqlDS   = @"INSERT into firma_DS(ico, DatovaSchranka) values(@ico,@DatovaSchranka)";

            string cnnStr = Devmasters.Core.Util.Config.GetConfigValue("CnnString");

            try
            {
                using (PersistLib p = new PersistLib())
                {
                    p.ExecuteNonQuery(cnnStr, System.Data.CommandType.Text, sql, new IDataParameter[] {
                        new System.Data.SqlClient.SqlParameter("ico", this.ICO),
                        new System.Data.SqlClient.SqlParameter("dic", this.DIC),
                        new System.Data.SqlClient.SqlParameter("Datum_zapisu_OR", this.Datum_Zapisu_OR),
                        new System.Data.SqlClient.SqlParameter("Stav_subjektu", this.Stav_subjektu),
                        new System.Data.SqlClient.SqlParameter("Jmeno", this.Jmeno),
                        new System.Data.SqlClient.SqlParameter("Jmenoascii", this.JmenoAscii),
                        new System.Data.SqlClient.SqlParameter("Kod_PF", this.Kod_PF),
                        new System.Data.SqlClient.SqlParameter("Source", this.Source),
                        new System.Data.SqlClient.SqlParameter("Popis", this.Popis),
                        new System.Data.SqlClient.SqlParameter("VersionUpdate", this.VersionUpdate),
                        new System.Data.SqlClient.SqlParameter("KrajId", this.KrajId),
                        new System.Data.SqlClient.SqlParameter("OkresId", this.OkresId),
                        new System.Data.SqlClient.SqlParameter("Status", this.Status),
                    });


                    if (this.DatovaSchranka != null)
                    {
                        p.ExecuteNonQuery(cnnStr, System.Data.CommandType.Text, "delete from firma_DS where ico=@ico", new IDataParameter[] {
                            new System.Data.SqlClient.SqlParameter("ico", this.ICO)
                        });
                        foreach (var ds in this.DatovaSchranka.Distinct())
                        {
                            p.ExecuteNonQuery(cnnStr, System.Data.CommandType.Text, sqlDS, new IDataParameter[] {
                                new System.Data.SqlClient.SqlParameter("ico", this.ICO),
                                new System.Data.SqlClient.SqlParameter("DatovaSchranka", ds),
                            });
                        }
                    }

                    if (this.NACE != null)
                    {
                        p.ExecuteNonQuery(cnnStr, System.Data.CommandType.Text, "delete from firma_NACE where ico=@ico", new IDataParameter[] {
                            new System.Data.SqlClient.SqlParameter("ico", this.ICO)
                        });
                        foreach (var nace in this.NACE.Distinct())
                        {
                            p.ExecuteNonQuery(cnnStr, System.Data.CommandType.Text, sqlNACE, new IDataParameter[] {
                                new System.Data.SqlClient.SqlParameter("ico", this.ICO),
                                new System.Data.SqlClient.SqlParameter("nace", nace),
                            });
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                //throw;
            }
        }
Esempio n. 14
0
        public static List <Edge> GetChildrenRelations(string sql,
                                                       Node.NodeType nodeType, string nodeId, DateTime?datumOd, DateTime?datumDo,
                                                       IDataParameter[] parameters, int level, bool goDeep,
                                                       Edge parent, ExcludeDataCol excludeICO, decimal minPodil, Relation.AktualnostType aktualnost)
        {
            if (excludeICO == null)
            {
                excludeICO = new ExcludeDataCol();
            }

            string cnnStr = Devmasters.Config.GetWebConfigValue("CnnString");

            List <Edge> relations = new List <Edge>();

            if (level == 0 && parent == null)
            {
                //add root node / edge
                relations.Add(
                    new Edge()
                {
                    From = null,
                    Root = true,
                    To   = new Node()
                    {
                        Id = nodeId, Type = nodeType
                    },
                    RelFrom  = datumOd,
                    RelTo    = datumDo,
                    Distance = 0
                }
                    );
            }
            //get zakladni informace o subj.

            //find politician in the DB
            var db      = new Devmasters.PersistLib();
            var sqlCall = HlidacStatu.Lib.DirectDB.GetRawSql(System.Data.CommandType.Text, sql, parameters);
            //string sqlFirma = "select top 1 stav_subjektu from firma where ico = @ico";

            var ds = db.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sqlCall, null);

            if (ds.Tables[0].Rows.Count > 0)
            {
                List <AngazovanostData> rows = new List <AngazovanostData>();
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    AngazovanostData angaz = null;
                    var ico = (string)dr["VazbakIco"];
                    if (string.IsNullOrEmpty(ico))
                    {
                        if (dr.Table.Columns.Contains("vazbakOsobaId"))
                        {
                            var vazbakOsobaId = (int?)PersistLib.IsNull(dr["vazbakOsobaId"], null);
                            if (vazbakOsobaId != null)
                            {
                                Osoba o = Osoby.GetById.Get(vazbakOsobaId.Value);
                                angaz = new AngazovanostData()
                                {
                                    subjId   = vazbakOsobaId.Value.ToString(),
                                    NodeType = Node.NodeType.Person,
                                    fromDate = (DateTime?)PersistLib.IsNull(dr["datumOd"], null),
                                    toDate   = (DateTime?)PersistLib.IsNull(dr["datumDo"], null),
                                    kod_ang  = Convert.ToInt32(dr["typVazby"]),
                                    descr    = (string)PersistLib.IsNull(dr["PojmenovaniVazby"], ""),
                                    podil    = (decimal?)PersistLib.IsNull(dr["podil"], null)
                                };
                            }
                        }
                    }
                    else
                    {
                        angaz = new AngazovanostData()
                        {
                            subjId   = ico,
                            subjname = "",
                            NodeType = Node.NodeType.Company,
                            fromDate = (DateTime?)PersistLib.IsNull(dr["datumOd"], null),
                            toDate   = (DateTime?)PersistLib.IsNull(dr["datumDo"], null),
                            kod_ang  = Convert.ToInt32(dr["typVazby"]),
                            descr    = (string)PersistLib.IsNull(dr["PojmenovaniVazby"], ""),
                            podil    = (decimal?)PersistLib.IsNull(dr["podil"], null)
                        };
                    }
                    rows.Add(angaz);
                }

                List <AngazovanostData> filteredRels = new List <AngazovanostData>();
                //delete vazby ve stejnem obdobi
                if (rows.Count > 0)
                {
                    //per ico
                    foreach (var gIco in rows.Select(m => m.subjId).Distinct())
                    {
                        var relsForIco = rows.Where(m => m.subjId == gIco);
                        //find longest, or separate relation
                        foreach (var r in relsForIco)
                        {
                            if (relsForIco
                                .Any(rr =>
                                     rr != r &&
                                     rr.fromDate < r.fromDate &&
                                     (rr.toDate > r.toDate || rr.toDate.HasValue == false)
                                     )
                                )
                            {
                                //skip
                            }
                            else
                            {
                                filteredRels.Add(r);
                            }
                        }
                    }
                }

                foreach (AngazovanostData ang in filteredRels.OrderBy(m => m.kod_ang))
                {
                    if (ang.kod_ang == 100) //souhrny (casove) vztah, zkontroluj, zda uz tam neni jiny vztah se stejnym rozsahem doby
                    {
                        if (
                            relations.Any(
                                r => r.To.Id == ang.subjId &&
                                r.To.Type == ang.NodeType &&
                                r.RelFrom == ang.fromDate &&
                                r.RelTo == ang.toDate
                                )
                            )
                        {
                            continue;
                        }
                    }
                    var rel = AngazovanostDataToEdge(ang,
                                                     new Node()
                    {
                        Type = nodeType, Id = nodeId
                    },
                                                     new Node()
                    {
                        Type = ang.NodeType, Id = ang.subjId
                    },
                                                     level + 1
                                                     );


                    if (excludeICO.Contains(rel))
                    {
                        continue;//skip to the next
                    }
                    if (rel.Aktualnost >= aktualnost)
                    {
                        relations.Add(rel);
                    }
                }
            }

            if (goDeep && relations.Count > 0)
            {
                level++;
                List <Edge> deeperRels  = new List <Edge>();
                List <Edge> excludeMore = new List <Edge>();
                if (parent != null)
                {
                    excludeMore = relations.ToList();
                }

                ////navazej na ten, ktery je nejdelsi
                //var parentRels = relations.GroupBy(x => new { x.To.Id }, (key, rels) =>
                //{
                //    DateTime? fromDate = rels.Any(m => m.FromDate == null) ? (DateTime?)null : rels.Min(m => m.FromDate);
                //    DateTime? toDate = rels.Any(m => m.ToDate == null) ? (DateTime?)null : rels.Max(m => m.ToDate);
                //    Relation bestRelation = Relation.GetLongestRelation(rels);

                //    return new
                //    {
                //        SubjIco = key.To.Id,
                //        FromDate = fromDate,
                //        ToDate = toDate,
                //        BestRelation = bestRelation,
                //    };

                //});



                foreach (var rel in relations.Where(m => m.Root == false))
                {
                    //old
                    deeperRels.AddRange(

                        vsechnyDcerineVazbyInternal(rel.To.Id, level, goDeep, rel,
                                                    excludeICO.AddItem(new ExcludeData(rel)),
                                                    rel.RelFrom, rel.RelTo, minPodil, aktualnost)
                        );
                }
                relations.AddRange(deeperRels);
            }

            if (level == 0)
            {
                //remove inactive companies from last branches
                //TODO
            }
            return(relations);
        }
Esempio n. 15
0
        public static List <Edge> GetChildrenRelations(string sql,
                                                       Node.NodeType nodeType, string nodeId, DateTime?datumOd, DateTime?datumDo,
                                                       IDataParameter[] parameters, int level, bool goDeep,
                                                       Edge parent, ExcludeDataCol excludeICO, Relation.AktualnostType aktualnost)
        {
            if (excludeICO == null)
            {
                excludeICO = new ExcludeDataCol();
            }

            string cnnStr = Devmasters.Core.Util.Config.GetConfigValue("CnnString");

            List <Edge> relations = new List <Edge>();

            if (level == 0 && parent == null)
            {
                //add root node / edge
                relations.Add(
                    new Edge()
                {
                    From = null,
                    Root = true,
                    To   = new Node()
                    {
                        Id = nodeId, Type = nodeType
                    },
                    RelFrom  = datumOd,
                    RelTo    = datumDo,
                    Distance = 0
                }
                    );
            }
            //get zakladni informace o subj.

            //find politician in the DB
            var db      = new Devmasters.Core.PersistLib();
            var sqlCall = HlidacStatu.Lib.DirectDB.GetRawSql(System.Data.CommandType.Text, sql, parameters);
            //string sqlFirma = "select top 1 stav_subjektu from firma where ico = @ico";

            var ds = db.ExecuteDataset(cnnStr, System.Data.CommandType.Text, sqlCall, null);

            if (ds.Tables[0].Rows.Count > 0)
            {
                List <AngazovanostData> rows = new List <AngazovanostData>();
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    AngazovanostData angaz = null;
                    var ico = (string)dr["VazbakIco"];
                    if (string.IsNullOrEmpty(ico))
                    {
                        if (dr.Table.Columns.Contains("vazbakOsobaId"))
                        {
                            var vazbakOsobaId = (int?)PersistLib.IsNull(dr["vazbakOsobaId"], null);
                            if (vazbakOsobaId != null)
                            {
                                Osoba o = Osoby.GetById.Get(vazbakOsobaId.Value);
                                angaz = new AngazovanostData()
                                {
                                    subjId   = vazbakOsobaId.Value.ToString(),
                                    NodeType = Node.NodeType.Person,
                                    fromDate = (DateTime?)PersistLib.IsNull(dr["datumOd"], null),
                                    toDate   = (DateTime?)PersistLib.IsNull(dr["datumDo"], null),
                                    kod_ang  = Convert.ToInt32(dr["typVazby"]),
                                    descr    = (string)PersistLib.IsNull(dr["PojmenovaniVazby"], ""),
                                    podil    = (decimal?)PersistLib.IsNull(dr["podil"], null)
                                };
                            }
                        }
                    }
                    else
                    {
                        angaz = new AngazovanostData()
                        {
                            subjId   = ico,
                            subjname = "",
                            NodeType = Node.NodeType.Company,
                            fromDate = (DateTime?)PersistLib.IsNull(dr["datumOd"], null),
                            toDate   = (DateTime?)PersistLib.IsNull(dr["datumDo"], null),
                            kod_ang  = Convert.ToInt32(dr["typVazby"]),
                            descr    = (string)PersistLib.IsNull(dr["PojmenovaniVazby"], ""),
                            podil    = (decimal?)PersistLib.IsNull(dr["podil"], null)
                        };
                    }
                    rows.Add(angaz);
                }

                List <AngazovanostData> filteredRels = new List <AngazovanostData>();
                //delete vazby ve stejnem obdobi
                if (rows.Count > 0)
                {
                    //per ico
                    foreach (var gIco in rows.Select(m => m.subjId).Distinct())
                    {
                        var relsForIco = rows.Where(m => m.subjId == gIco);
                        //find longest, or separate relation
                        foreach (var r in relsForIco)
                        {
                            if (relsForIco
                                .Any(rr =>
                                     rr != r &&
                                     rr.fromDate < r.fromDate &&
                                     (rr.toDate > r.toDate || rr.toDate.HasValue == false)
                                     )
                                )
                            {
                                //skip
                            }
                            else
                            {
                                filteredRels.Add(r);
                            }
                        }
                    }
                }

                foreach (AngazovanostData ang in filteredRels.OrderBy(m => m.kod_ang))
                {
                    if (ang.kod_ang == 100) //souhrny (casove) vztah, zkontroluj, zda uz tam neni jiny vztah se stejnym rozsahem doby
                    {
                        if (
                            relations.Any(
                                r => r.To.Id == ang.subjId &&
                                r.To.Type == ang.NodeType &&
                                r.RelFrom == ang.fromDate &&
                                r.RelTo == ang.toDate
                                )
                            )
                        {
                            continue;
                        }
                    }
                    var rel = new Edge();

                    rel.From = new Node()
                    {
                        Type = nodeType, Id = nodeId
                    };
                    rel.To = new Node()
                    {
                        Type = ang.NodeType, Id = ang.subjId
                    };
                    rel.Distance = level + 1;

                    rel.RelFrom = (DateTime?)PersistLib.IsNull(ang.fromDate, null);
                    if (rel.RelFrom < minDate)
                    {
                        rel.RelFrom = null;
                    }

                    rel.RelTo = (DateTime?)PersistLib.IsNull(ang.toDate, null);
                    if (rel.RelTo < minDate)
                    {
                        rel.RelTo = null;
                    }
                    int kod_ang = ang.kod_ang;

                    /*
                     *     3  - prokura
                     *     4  - člen dozorčí rady
                     *     24 - spolecnik
                     *     5  - Jediný akcionář
                     *     1 - jednatel
                     *
                     */
                    rel.Descr = ang.descr;
                    Firma.RelationSimpleEnum relRelationship = Firma.RelationSimpleEnum.Jiny;
                    switch (kod_ang)
                    {
                    case 1:
                        relRelationship = Firma.RelationSimpleEnum.Statutarni_organ;
                        if (string.IsNullOrEmpty(rel.Descr))
                        {
                            rel.Descr = Firma.RelationSimpleEnum.Jednatel.ToNiceDisplayName();
                        }
                        break;

                    case 3:
                        relRelationship = Firma.RelationSimpleEnum.Statutarni_organ;
                        if (string.IsNullOrEmpty(rel.Descr))
                        {
                            rel.Descr = Firma.RelationSimpleEnum.Prokura.ToNiceDisplayName();
                        }
                        break;

                    case 4:
                    case 7:
                    case 2:
                    case 18:
                    case 25:
                    case 26:
                    case 28:
                    case 31:
                        relRelationship = Firma.RelationSimpleEnum.Statutarni_organ;
                        if (string.IsNullOrEmpty(rel.Descr))
                        {
                            rel.Descr = Firma.RelationSimpleEnum.Dozorci_rada.ToNiceDisplayName();
                        }
                        break;

                    case 33:
                    case 34:
                    case 35:
                        relRelationship = Firma.RelationSimpleEnum.Zakladatel;
                        if (string.IsNullOrEmpty(rel.Descr))
                        {
                            rel.Descr = Firma.RelationSimpleEnum.Dozorci_rada.ToNiceDisplayName();
                        }
                        break;

                    case 5:
                    case 9:
                    case 10:
                    case 15:
                    case 19:
                    case 24:
                        relRelationship = Firma.RelationSimpleEnum.Spolecnik;
                        if (string.IsNullOrEmpty(rel.Descr))
                        {
                            rel.Descr = Firma.RelationSimpleEnum.Spolecnik.ToNiceDisplayName();
                        }
                        break;

                    case 100:
                        relRelationship = Firma.RelationSimpleEnum.Souhrnny;
                        if (string.IsNullOrEmpty(rel.Descr))
                        {
                            rel.Descr = Firma.RelationSimpleEnum.Jednatel.ToNiceDisplayName();
                        }
                        break;

                    case 23:    //
                    case 29:    //
                    case 11:    //
                    case 12:    //
                    case 13:    //
                    case 16:    //
                    case 17:    //
                    case 37:    //
                    case 40:    //
                    case 41:    //
                    case 42:    //
                    case 99:
                        relRelationship = Firma.RelationSimpleEnum.Jiny;
                        break;

                    default:

                        if (kod_ang < 0)
                        {
                            relRelationship = (Firma.RelationSimpleEnum)kod_ang;
                        }
                        else
                        {
                            //rel.Relationship = Relation.RelationDescriptionEnum.Jednatel;
                            relRelationship = Firma.RelationSimpleEnum.Jiny;
                            if (string.IsNullOrEmpty(rel.Descr))
                            {
                                rel.Descr = Firma.RelationSimpleEnum.Jednatel.ToNiceDisplayName();
                            }
                        }
                        break;
                    }

                    if (excludeICO.Contains(rel))
                    {
                        continue;//skip to the next
                    }
                    if (string.IsNullOrEmpty(rel.Descr))
                    {
                        rel.Descr = relRelationship.ToNiceDisplayName();
                    }

                    rel.UpdateAktualnost();

                    if (rel.Aktualnost >= aktualnost)
                    {
                        relations.Add(rel);
                    }
                }
            }

            if (goDeep && relations.Count > 0)
            {
                level++;
                List <Edge> deeperRels  = new List <Edge>();
                List <Edge> excludeMore = new List <Edge>();
                if (parent != null)
                {
                    excludeMore = relations.ToList();
                }

                ////navazej na ten, ktery je nejdelsi
                //var parentRels = relations.GroupBy(x => new { x.To.Id }, (key, rels) =>
                //{
                //    DateTime? fromDate = rels.Any(m => m.FromDate == null) ? (DateTime?)null : rels.Min(m => m.FromDate);
                //    DateTime? toDate = rels.Any(m => m.ToDate == null) ? (DateTime?)null : rels.Max(m => m.ToDate);
                //    Relation bestRelation = Relation.GetLongestRelation(rels);

                //    return new
                //    {
                //        SubjIco = key.To.Id,
                //        FromDate = fromDate,
                //        ToDate = toDate,
                //        BestRelation = bestRelation,
                //    };

                //});



                foreach (var rel in relations.Where(m => m.Root == false))
                {
                    //old
                    deeperRels.AddRange(

                        vsechnyDcerineVazbyInternal(rel.To.Id, level, goDeep, rel,
                                                    excludeICO.AddItem(new ExcludeData(rel)),
                                                    rel.RelFrom, rel.RelTo, aktualnost)
                        );
                }
                relations.AddRange(deeperRels);
            }

            if (level == 0)
            {
                //remove inactive companies from last branches
                //TODO
            }
            return(relations);
        }