/// <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); }
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); }
/// <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; } } } }
/// <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); } } }
public MD_Divisao(DivisaoTerritorial dt) { this.DivisoesTerritoriaisId = dt.DivisoesTerritoriaisId; this.Tipo = dt.Nome; this.Linhas = new List <int>(); }