private String WikipediaTambonTableEntry(Entity tambon, AmphoeDataForWikipediaExport amphoeData, String format, CultureInfo culture) { var subCounted = tambon.CountAllSubdivisions(_localGovernments); var muban = 0; if (!subCounted.TryGetValue(EntityType.Muban, out muban)) { muban = 0; } var citizen = 0; var populationData = tambon.population.FirstOrDefault(x => x.Year == PopulationReferenceYear && x.source == PopulationDataSourceType.DOPA); if (populationData != null) { citizen = populationData.TotalPopulation.total; } var geocodeString = (tambon.geocode % 100).ToString(culture); if (tambon.geocode % 100 < 10) { geocodeString = "{{0}}" + geocodeString; } String mubanString; if (muban == 0) { mubanString = "-"; } else if (muban < 10) { mubanString = "{{0}}" + muban.ToString(culture); } else { mubanString = muban.ToString(); } var citizenString = citizen.ToString("###,##0", culture); for (int i = citizenString.Length; i < amphoeData.MaxPopulation.ToString("###,##0", culture).Length; i++) { citizenString = "{{0}}" + citizenString; } var romanizedName = tambon.english; var link = String.Empty; if (amphoeData.WikipediaLinks.TryGetValue(tambon, out link)) { romanizedName = WikiLink(link, romanizedName); } return(String.Format(culture, format, geocodeString, romanizedName, tambon.name, mubanString, citizenString)); }
private AmphoeDataForWikipediaExport CalculateAmphoeData(Entity entity, Language language) { if (entity.type.IsCompatibleEntityType(EntityType.Amphoe)) { var result = new AmphoeDataForWikipediaExport(); result.Province = _country.entity.FirstOrDefault(x => x.geocode == GeocodeHelper.ProvinceCode(entity.geocode)); result.AllTambon.AddRange(entity.entity.Where(x => x.type.IsCompatibleEntityType(EntityType.Tambon) && !x.IsObsolete)); result.LocalAdministrations.AddRange(entity.LocalGovernmentEntitiesOf(_localGovernments).Where(x => !x.IsObsolete)); var allEntities = result.AllTambon.ToList(); allEntities.AddRange(result.LocalAdministrations); if (CheckWikiData) { foreach (var keyValuePair in RetrieveWikpediaLinks(allEntities, language)) { result.WikipediaLinks[keyValuePair.Key] = keyValuePair.Value; } } var counted = entity.CountAllSubdivisions(_localGovernments); if (!counted.ContainsKey(EntityType.Muban)) { counted[EntityType.Muban] = 0; } foreach (var keyValuePair in counted) { result.CentralAdministrationCountByEntity[keyValuePair.Key] = keyValuePair.Value; } result.MaxPopulation = 0; foreach (var tambon in result.AllTambon) { var populationData = tambon.population.FirstOrDefault(x => x.Year == PopulationReferenceYear && x.source == PopulationDataSourceType.DOPA); if (populationData != null) { result.MaxPopulation = Math.Max(result.MaxPopulation, populationData.TotalPopulation.total); } } foreach (var keyValuePair in Entity.CountSubdivisions(result.LocalAdministrations)) { result.LocalAdministrationCountByEntity[keyValuePair.Key] = keyValuePair.Value; } return(result); } else { return(null); } }
private static String WikipediaLocalAdministrationTableEntry( Entity localEntity, AmphoeDataForWikipediaExport amphoeData, String entryLocal, String tambonCompleteSingular, String tambonCompletePlural, String tambonPartiallySingular, String tambonPartiallyPlural, String entryLocalCoverageOne, String entryLocalCoverageTwo, CultureInfo culture) { var result = String.Empty; var english = localEntity.english; var link = String.Empty; if (amphoeData.WikipediaLinks.TryGetValue(localEntity, out link)) { english = WikiLink(link, english); } result += String.Format(culture, entryLocal, english, localEntity.FullName); if (localEntity.LocalGovernmentAreaCoverage.Any()) { var coverage = localEntity.LocalGovernmentAreaCoverage.GroupBy(x => x.coverage).Select(group => new { Coverage = group.Key, TambonCount = group.Count() }); var textComplete = String.Empty; var textPartially = String.Empty; if (coverage.Any(x => x.Coverage == CoverageType.completely)) { var completeTambon = localEntity.LocalGovernmentAreaCoverage. Where(x => x.coverage == CoverageType.completely). Select(x => amphoeData.Province.FlatList().FirstOrDefault(y => y.geocode == x.geocode)); var tambonString = String.Join(", ", completeTambon.Select(x => x.english)); if (coverage.First(x => x.Coverage == CoverageType.completely).TambonCount == 1) { textComplete = String.Format(culture, tambonCompleteSingular, tambonString); } else { textComplete = String.Format(culture, tambonCompletePlural, tambonString); } } if (coverage.Any(x => x.Coverage == CoverageType.partially)) { var completeTambon = localEntity.LocalGovernmentAreaCoverage. Where(x => x.coverage == CoverageType.partially). Select(x => amphoeData.Province.FlatList().FirstOrDefault(y => y.geocode == x.geocode)); var tambonString = String.Join(", ", completeTambon.Select(x => x.english)); if (coverage.First(x => x.Coverage == CoverageType.partially).TambonCount == 1) { textPartially = String.Format(culture, tambonPartiallySingular, tambonString); } else { textPartially = String.Format(culture, tambonPartiallyPlural, tambonString); } } if (!String.IsNullOrEmpty(textPartially) && !String.IsNullOrEmpty(textComplete)) { result += String.Format(culture, entryLocalCoverageTwo, textComplete, textPartially); } else { result += String.Format(culture, entryLocalCoverageOne, textComplete + textPartially); } } result += Environment.NewLine; return(result); }