Example #1
0
        /// <summary>
        /// verifica a existência de Divisoes Territoriais ou Unidades Territoriais associadas ao nome indicado
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        private List <DivisaoTerritorial> CheckDivisoesTerritoriais(string name)
        {
            List <DivisaoTerritorial> divisoes = new List <DivisaoTerritorial>();
            Nomes nome = GetNome(name);

            if (nome == null)
            {
                return(divisoes);
            }

            DivisaoTerritorial unidade_divisao = GetUnidadeDivisoesWithName(nome);

            if (unidade_divisao != null)
            {
                // se foi encontrada uma Unidade_Divisão não é necessário pesquisar o nome nas UT nem nas DT
                // pois ambas estão inequivocamente identificadas na Unidade_Divisao
                divisoes.Add(unidade_divisao);
                return(divisoes);
            }

            List <int> unidades = GetUnidadesFromNome(nome);

            if (unidades.Count > 0)
            {
                divisoes.AddRange(GetDivisoesFromUnidades(unidades));
            }

            divisoes.AddRange(GetDivisoesFromNome(nome));
            return(divisoes);
        }
Example #2
0
        private MD_Divisao GetMDDivisao(DivisaoTerritorial dt)
        {
            MD_Divisao divisao = this.GeoDivisoes.Find(x => x.DivisoesTerritoriaisId == dt.DivisoesTerritoriaisId);

            if (divisao == null)
            {
                divisao = new MD_Divisao(dt);
                this.GeoDivisoes.Add(divisao);
            }
            return(divisao);
        }
Example #3
0
        /// <summary>
        /// Faz o cruzamento entre todas as colunas que contêm Divisões Territoriais para verificar
        /// as que correspondem nas mesmas linhas
        /// </summary>
        /// <param name="socket"></param>
        public void InitDivisoesCompare()
        {
            List <CsvColumn> domainsCol = this.Columns.FindAll(x => x.MetricOrDimension.Equals("dimension") && x.Geographic != null && (x.Geographic.Divisoes.Count > 0 || x.Geographic.Unidades.Count > 0));

            if (domainsCol.Count == 0)
            {
                return;
            }

            this.RowGeographic = new List <DivisaoTerritorial> [CsvFile.RowsCount.Value];
            List <DivisaoTerritorial>[] auxRows = new List <DivisaoTerritorial> [CsvFile.RowsCount.Value];


            int listIndex  = -1;
            int colsLength = domainsCol.Count;

            foreach (CsvColumn col in domainsCol)
            {
                listIndex++;
                foreach (DivisaoTerritorial divisao in col.Geographic.Divisoes)
                {
                    foreach (int row in divisao.Rows)
                    {
                        if (auxRows[row] == null)
                        {
                            auxRows[row] = new List <DivisaoTerritorial>();
                        }

                        DivisaoTerritorial auxDiv = auxRows[row].Find(x => x.DivisoesTerritoriaisId == divisao.DivisoesTerritoriaisId);
                        if (auxDiv == null)
                        {
                            auxDiv = new DivisaoTerritorial
                            {
                                Count = 1,
                                DivisoesTerritoriaisId = divisao.DivisoesTerritoriaisId,
                                Nome = divisao.Nome,
                                UnidadesDivisoesId     = divisao.UnidadesDivisoesId,
                                UnidadesTerritoriaisId = divisao.UnidadesTerritoriaisId
                            };
                            auxRows[row].Add(auxDiv);
                        }
                        else
                        {
                            auxDiv.Count++;
                        }
                    }
                }
                foreach (DivisaoTerritorial divisao in col.Geographic.Unidades)
                {
                    foreach (int row in divisao.Rows)
                    {
                        if (auxRows[row] == null)
                        {
                            auxRows[row] = new List <DivisaoTerritorial>();
                        }

                        DivisaoTerritorial auxDiv = auxRows[row].Find(x => x.DivisoesTerritoriaisId == divisao.DivisoesTerritoriaisId);
                        if (auxDiv == null)
                        {
                            auxDiv = new DivisaoTerritorial
                            {
                                Count = 1,
                                DivisoesTerritoriaisId = divisao.DivisoesTerritoriaisId,
                                Nome = divisao.Nome,
                                UnidadesDivisoesId     = divisao.UnidadesDivisoesId,
                                UnidadesTerritoriaisId = divisao.UnidadesTerritoriaisId
                            };
                            auxRows[row].Add(auxDiv);
                        }
                        else
                        {
                            auxDiv.Count++;
                        }
                    }
                }
            }

            this.RowGeographic = new List <DivisaoTerritorial> [CsvFile.RowsCount.Value];
            for (int i = 0; i < auxRows.Length; i++)
            {
                if (auxRows[i] == null)
                {
                    continue;
                }

                var a = auxRows[i].OrderByDescending(x => x, new DivisaoTerritorialComparer());

                this.RowGeographic[i] = new List <DivisaoTerritorial>();
                int max = 0;

                foreach (DivisaoTerritorial dt in a)
                {
                    if (dt.Count >= max)
                    {
                        this.RowGeographic[i].Add(dt);
                        max = dt.Count;
                    }
                }
            }
        }
Example #4
0
        /// <summary>
        /// método que verifica se a coluna está associada um domínio geográfico
        /// </summary>
        public void CheckDomain()
        {
            if (this.MetricOrDimension.Equals("metric"))
            {
                // é uma coluna métrica, não pode ser de domínio geográfico
                return;
            }

            if (this.UniqueValues.Count == 1 && this.NullsCount == 0)
            {
                this.ColClass = "file";
            }

            if (!CheckPossibleGeographicDomain())
            {
                //a coluna não aparente estar associada a domínios geográficos
                return;
            }

            List <DivisaoTerritorial> divisoesAll = new List <DivisaoTerritorial>();

            divisoesAll.Add(new DivisaoTerritorial {
                DivisoesTerritoriaisId = null, Nome = "Geo_Unknown", Rows = new List <int>()
            });
            int geoDomainsFound = 0;

            foreach (KeyValuePair <string, DistinctValue> val in this.UniqueValues)
            {
                if (val.Value.Divisoes == null)
                {
                    SetDivisoesTerritoriais(val);
                }

                if (val.Value.Divisoes.Count == 0)
                {
                    divisoesAll[0].Rows.AddRange(val.Value.Rows);
                    continue;
                }
                else
                {
                    geoDomainsFound++;
                }

                foreach (DivisaoTerritorial divisao in val.Value.Divisoes)
                {
                    divisao.Rows = new List <int>(val.Value.Rows);

                    DivisaoTerritorial colDiv = divisoesAll.Find(x => x.DivisoesTerritoriaisId == divisao.DivisoesTerritoriaisId);

                    if (colDiv == null)
                    {
                        divisoesAll.Add(divisao);
                    }
                    else
                    {
                        foreach (int row in divisao.Rows)
                        {
                            if (colDiv.Rows.Contains(row))
                            {
                                continue;
                            }
                            else
                            {
                                colDiv.Rows.Add(row);
                            }
                        }
                    }
                }
            }

            if (geoDomainsFound == 0 || geoDomainsFound < Convert.ToInt32(Math.Round(this.UniqueValues.Count * percentageMinimumGeoUnique)))
            {
                return;                 // A quantidade de valores associada a domínios geográficos é inferior ao mínimo aceitável. A coluna não é considerada como Domínio Geográfico
            }
            foreach (DivisaoTerritorial dt in divisoesAll)
            {
                if (!dt.DivisoesTerritoriaisId.HasValue)
                {
                    continue;
                }

                if (dt.IsUnidadeDivisao == 1)
                {
                    this.Geographic.Divisoes.Add(dt);
                    continue;
                }

                if (dt.UnidadesTerritoriaisId.HasValue)
                {
                    this.Geographic.Unidades.Add(dt);
                    this.Geographic.Divisoes.Add(dt);
                }
                else
                {
                    this.Geographic.Divisoes.Add(dt);
                }
            }
        }
Example #5
0
 public MD_Divisao(DivisaoTerritorial dt)
 {
     this.DivisoesTerritoriaisId = dt.DivisoesTerritoriaisId;
     this.Tipo   = dt.Nome;
     this.Linhas = new List <int>();
 }