/// <summary> /// Обновляет или создает географическую локацию с указанными данными /// </summary> /// <param name="id">Идентификатор локации</param> /// <param name="name">Название локации</param> /// <param name="latitude">Герграфическая широта центра локации</param> /// <param name="longitude">Герграфическая долгота центра локации</param> /// <param name="region">Географический регион, в котором располагается локация</param> /// <returns></returns> public Location UpdateOrCreateLocation(Int32 id, string name, Decimal latitude, Decimal longitude, Region region) { Location location = LocationRepository.FindById(id); if (location == null) { location = new Location() { Id = id, Name = name, Latitude = latitude, Longitude = longitude, RegionId = region.Id }; LocationRepository.Create(location); } else if ((location.Name != name) || (location.Latitude != latitude) || (location.Longitude != latitude) || (location.RegionId != region.Id)) { location.Name = name; location.Latitude = latitude; location.Longitude = longitude; location.RegionId = region.Id; LocationRepository.Save(location); } return location; }
/// <summary> /// Удаляет из цели правило выбора географического региона /// </summary> /// <param name="target">Цель геолокации</param> /// <param name="region">Географический регион</param> public void RemoveRegionFromTarget(Target target, Region region) { RegionRule rule = RegionRuleRepository.FindByTargetAndRegion(target, region); if (rule != null) { RegionRuleRepository.Delete(rule); } }
/// <summary> /// Находит географический регион с указанным названием /// или создает новый /// </summary> /// <param name="name">Название региона</param> /// <param name="area">Географический округ, в котором располагается регион</param> /// <returns></returns> public Region GetOrCreateRegion(string name, Area area) { Region region = RegionRepository.FindByNameAndArea(name, area); if (region == null) { region = new Region() { Name = name, AreaId = area.Id }; RegionRepository.Create(region); } return region; }
/// <summary> /// Добавляет к цели правило выбора географического региона /// </summary> /// <param name="target">Цель геолокации</param> /// <param name="region">Географический регион</param> /// <param name="kind">Вид правила включения</param> public void AddRegionToTarget(Target target, Region region, RuleKind kind) { RegionRule rule = RegionRuleRepository.FindByTargetAndRegion(target, region); if (rule == null) { rule = new RegionRule() { TargetId = target.Id, RegionId = region.Id, Kind = kind }; RegionRuleRepository.Create(rule); } else if (rule.Kind != kind) { rule.Kind = kind; RegionRuleRepository.Save(rule); } }