public static DirectSalesAgentList FindReferrals(Double latitude, Double longitude, Int32 minimum) { DirectSalesAgentList referrals = new DirectSalesAgentList(); // TODO: change to use radicals Double radius = Double.Parse(ConfigurationProvider.Instance.Settings["ReferralRadius"]); Double distance = 0; Int32 daysSinceReferral = Int32.Parse(ConfigurationProvider.Instance.Settings["DaysSinceReferral"]); Int32 minimumReferrals = minimum == 0 ? Int32.Parse(ConfigurationProvider.Instance.Settings["MinimumReferrals"]) : minimum; Int32 maxSearches = Int32.Parse(ConfigurationProvider.Instance.Settings["ReferralMaxSearches"]); IdType minimumTitleId = IdType.Parse(ConfigurationProvider.Instance.Settings["MinimumReferralTitleId"]); Int32 referralsFound = 0; Int32 searchCount = 0; try { while ((referralsFound < minimumReferrals) && (searchCount < maxSearches)) { searchCount++; if (searchCount >= maxSearches) { distance = int.MaxValue; } else { distance += radius; } DecimalType minLat = Convert.ToDecimal(CalculateSouthernRadicalPoint(latitude, longitude, distance).Latitude); DecimalType maxLat = Convert.ToDecimal(CalculateNorthernRadicalPoint(latitude, longitude, distance).Latitude); DecimalType minLong = Convert.ToDecimal(CalculateEasternRadicalPoint(latitude, longitude, distance).Longitude); DecimalType maxLong = Convert.ToDecimal(CalculateWesternRadicalPoint(latitude, longitude, distance).Longitude); referrals = DemonstratorDAO.DAO.FindWithinGeographicArea(Convert.ToDecimal(latitude), Convert.ToDecimal(longitude), minLat, maxLat, minLong, maxLong, minimumTitleId); referralsFound = referrals.Count; } } catch (Exception ex) { log.Error(ex.ToString()); return(new DirectSalesAgentList()); } return(referrals); }