public static Models.PlantInfo Clone(this Models.PlantInfo plantInfo, string userId) => new Models.PlantInfo { PlantInfoId = 0, Lifeform = plantInfo.Lifeform, LifeformId = plantInfo.LifeformId, ScientificName = plantInfo.ScientificName, CommonName = plantInfo.CommonName, BloomTime = plantInfo.BloomTime, Height = plantInfo.Height, Spread = plantInfo.Spread, Requirements = plantInfo.Requirements, WildlifeEffects = plantInfo.WildlifeEffects, SoilTypes = plantInfo.SoilTypes, Notes = plantInfo.Notes, Visibility = Visibility.Inherit, UserId = null, CreatedBy = userId, DateCreated = DateTime.UtcNow, Taxon = plantInfo.Taxon, Origin = null, Locations = plantInfo.Locations, Photos = null, User = null };
public static Search.Models.PlantInfo AsSearchModel(this Models.PlantInfo source, IEnumerable <Models.PlantLocation> plantLocations, IEnumerable <Models.Synonym> synonyms) { var plantLocationSearch = plantLocations?.Select(pl => pl.AsSearchModel()) ?? source.Locations?.Select(pl => pl.AsSearchModel()); var bloomTimes = new List <Month>(); if (source.BloomTime != null) { if (source.BloomTime.MinimumBloomTime > 0 && source.BloomTime.MaximumBloomTime > 0) { for (var i = source.BloomTime.MinimumBloomTime; i <= source.BloomTime.MaximumBloomTime; i++) { bloomTimes.Add(i); } } else { if (source.BloomTime.MinimumBloomTime > 0) { bloomTimes.Add(source.BloomTime.MinimumBloomTime); } if (source.BloomTime.MaximumBloomTime > 0 && source.BloomTime.MinimumBloomTime != source.BloomTime.MaximumBloomTime) { bloomTimes.Add(source.BloomTime.MaximumBloomTime); } } } var waterTypes = new List <WaterType>(); if (source.Requirements?.WaterRequirements != null) { if (source.Requirements.WaterRequirements.MinimumWater != WaterType.Unknown && source.Requirements.WaterRequirements.MaximumWater != WaterType.Unknown) { var minWater = source.Requirements.WaterRequirements.MinimumWater; var maxWater = source.Requirements.WaterRequirements.MaximumWater; for (var i = minWater; i <= maxWater; i++) { waterTypes.Add(i); } } else { if (source.Requirements.WaterRequirements.MinimumWater != WaterType.Unknown) { waterTypes.Add(source.Requirements.WaterRequirements.MinimumWater); } if (source.Requirements.WaterRequirements.MaximumWater != WaterType.Unknown) { waterTypes.Add(source.Requirements.WaterRequirements.MaximumWater); } } } var lightTypes = new List <LightType>(); if (source.Requirements?.LightRequirements != null) { if (source.Requirements.LightRequirements.MinimumLight != LightType.Unknown && source.Requirements.LightRequirements.MaximumLight != LightType.Unknown) { var minLight = source.Requirements.LightRequirements.MinimumLight; var maxLight = source.Requirements.LightRequirements.MaximumLight; for (var i = minLight; i <= maxLight; i++) { lightTypes.Add(i); } } else { if (source.Requirements.LightRequirements.MinimumLight != LightType.Unknown) { lightTypes.Add(source.Requirements.LightRequirements.MinimumLight); } if (source.Requirements.LightRequirements.MaximumLight != LightType.Unknown) { lightTypes.Add(source.Requirements.LightRequirements.MaximumLight); } } } var zones = new List <Search.Models.Zone>(); var allZones = ZoneHelper.GetZones(); if (source.Requirements?.ZoneRequirements?.MinimumZone != null && source.Requirements?.ZoneRequirements?.MaximumZone != null) { for (var i = source.Requirements?.ZoneRequirements?.MinimumZone.Id; i <= source.Requirements?.ZoneRequirements?.MaximumZone.Id; i++) { zones.Add(allZones.First(z => z.Id == i).AsSearchModel()); } } else { if (source.Requirements?.ZoneRequirements?.MinimumZone != null) { zones.Add(source.Requirements?.ZoneRequirements?.MinimumZone.AsSearchModel()); } if (source.Requirements?.ZoneRequirements?.MaximumZone != null && source.Requirements?.ZoneRequirements?.MinimumZone.Id != source.Requirements?.ZoneRequirements?.MaximumZone.Id) { zones.Add(source.Requirements?.ZoneRequirements?.MaximumZone.AsSearchModel()); } } return(new Search.Models.PlantInfo { Id = source.PlantInfoId, CommonName = source.CommonName, ScientificName = source.ScientificName, Origin = source.Origin?.AsSearchModel(), Lifeform = source.Lifeform.AsSearchModel(), PlantLocations = plantLocationSearch, Synonyms = synonyms?.Select(s => s.AsSearchModel()), MinimumBloomTime = source.BloomTime != null && source.BloomTime?.MinimumBloomTime != Month.Unknown ? (short?)source.BloomTime.MinimumBloomTime : null, MaximumBloomTime = source.BloomTime != null && source.BloomTime?.MaximumBloomTime != Month.Unknown ? (short?)source.BloomTime.MaximumBloomTime : null, BloomTimes = bloomTimes.Any() ? bloomTimes : null, MinimumHeight = source.Height != null ? source.Height?.MinimumHeight : null, MaximumHeight = source.Height != null ? source.Height?.MaximumHeight : null, HeightUnit = source.Height != null && (source.Height.MinimumHeight.HasValue || source.Height.MaximumHeight.HasValue) ? DistanceUnit.Feet : null, MinimumSpread = source.Spread != null ? source.Spread?.MinimumSpread : null, MaximumSpread = source.Spread != null ? source.Spread?.MaximumSpread : null, SpreadUnit = source.Spread != null && (source.Spread.MinimumSpread.HasValue || source.Spread.MaximumSpread.HasValue) ? DistanceUnit.Feet : null, MinimumLight = source.Requirements?.LightRequirements?.MinimumLight != LightType.Unknown ? source.Requirements?.LightRequirements?.MinimumLight : null, MaximumLight = source.Requirements?.LightRequirements?.MaximumLight != LightType.Unknown ? source.Requirements?.LightRequirements?.MaximumLight : null, LightTypes = lightTypes.Any() ? lightTypes : null, MinimumWater = source.Requirements?.WaterRequirements?.MinimumWater != WaterType.Unknown ? source.Requirements?.WaterRequirements?.MinimumWater : null, MaximumWater = source.Requirements?.WaterRequirements?.MaximumWater != WaterType.Unknown ? source.Requirements?.WaterRequirements?.MaximumWater : null, WaterTypes = waterTypes.Any() ? waterTypes : null, MinimumZone = source.Requirements?.ZoneRequirements?.MinimumZone?.AsSearchModel(), MaximumZone = source.Requirements?.ZoneRequirements?.MaximumZone?.AsSearchModel(), Zones = zones.Any() ? zones : null, StratificationStages = source.Requirements?.StratificationStages?.Select(s => s.AsSearchModel()), Preferred = source.Preferred, Taxon = source.Taxon?.AsSearchModel(), WildlifeEffects = source.WildlifeEffects, SoilTypes = source.SoilTypes, Notes = source.Notes, Visibility = source.Visibility, User = source.User?.AsSearchModel(), CreatedBy = source.CreatedBy, ModifiedBy = source.ModifiedBy, DateCreated = source.DateCreated ?? DateTime.UtcNow, DateModified = source.DateModified }); }
public static PlantInfo AsStore(this Models.PlantInfo source) { if (source.Height?.MinimumHeight != null && source.Height.MaximumHeight != null && source.Height.MinimumHeight >= source.Height.MaximumHeight) { var minHeight = source.Height.MinimumHeight; var maxHeight = source.Height.MaximumHeight; source.Height.MinimumHeight = maxHeight; source.Height.MaximumHeight = minHeight; } if (source.Spread?.MinimumSpread != null && source.Spread?.MaximumSpread != null && source.Spread.MinimumSpread >= source.Spread.MaximumSpread) { var minSpread = source.Spread.MinimumSpread; var maxSpread = source.Spread.MaximumSpread; source.Spread.MinimumSpread = maxSpread; source.Spread.MaximumSpread = minSpread; } if (source.Requirements?.WaterRequirements != null && source.Requirements?.WaterRequirements?.MinimumWater != WaterType.Unknown && source.Requirements?.WaterRequirements?.MaximumWater != WaterType.Unknown && source.Requirements.WaterRequirements.MinimumWater >= source.Requirements.WaterRequirements.MaximumWater) { var minWater = source.Requirements.WaterRequirements.MinimumWater; var maxWater = source.Requirements.WaterRequirements.MaximumWater; source.Requirements.WaterRequirements.MinimumWater = maxWater; source.Requirements.WaterRequirements.MaximumWater = minWater; } if (source.Requirements?.LightRequirements != null && source.Requirements?.LightRequirements?.MinimumLight != LightType.Unknown && source.Requirements?.LightRequirements?.MaximumLight != LightType.Unknown && source.Requirements.LightRequirements.MinimumLight >= source.Requirements.LightRequirements.MaximumLight) { var minLight = source.Requirements.LightRequirements.MinimumLight; var maxLight = source.Requirements.LightRequirements.MaximumLight; source.Requirements.LightRequirements.MinimumLight = maxLight; source.Requirements.LightRequirements.MaximumLight = minLight; } if (source.Requirements?.ZoneRequirements != null && source.Requirements?.ZoneRequirements?.MinimumZone != null && source.Requirements?.ZoneRequirements?.MaximumZone != null && source.Requirements.ZoneRequirements.MinimumZone.Id >= source.Requirements.ZoneRequirements.MaximumZone.Id) { var minZone = source.Requirements.ZoneRequirements.MinimumZone; var maxZone = source.Requirements.ZoneRequirements.MaximumZone; source.Requirements.ZoneRequirements.MinimumZone = new Models.Zone { Id = maxZone.Id }; source.Requirements.ZoneRequirements.MaximumZone = new Models.Zone { Id = minZone.Id }; } return(new PlantInfo { Id = source.PlantInfoId, CommonName = source.CommonName, ScientificName = source.ScientificName, OriginId = source.Origin?.OriginId, LifeformId = source.Lifeform?.LifeformId ?? source.LifeformId, TaxonId = source.Taxon?.TaxonId, MinimumBloomTime = (short?)source.BloomTime?.MinimumBloomTime, MaximumBloomTime = (short?)source.BloomTime?.MaximumBloomTime, MinimumHeight = source.Height?.MinimumHeight, MaximumHeight = source.Height?.MaximumHeight, HeightUnit = source.Height?.Unit != DistanceUnit.Unknown ? DistanceUnit.Feet.ToString() : null, MinimumSpread = source.Spread?.MinimumSpread, MaximumSpread = source.Spread?.MaximumSpread, SpreadUnit = source.Spread?.Unit != DistanceUnit.Unknown ? DistanceUnit.Feet.ToString() : null, MinimumLight = source.Requirements?.LightRequirements?.MinimumLight != LightType.Unknown ? source.Requirements?.LightRequirements?.MinimumLight.ToString() : null, MaximumLight = source.Requirements?.LightRequirements?.MaximumLight != LightType.Unknown ? source.Requirements?.LightRequirements?.MaximumLight.ToString() : null, MinimumWater = source.Requirements?.WaterRequirements?.MinimumWater != WaterType.Unknown ? source.Requirements?.WaterRequirements?.MinimumWater.ToString() : null, MaximumWater = source.Requirements?.WaterRequirements?.MaximumWater != WaterType.Unknown ? source.Requirements?.WaterRequirements?.MaximumWater.ToString() : null, MinimumZoneId = source.Requirements?.ZoneRequirements?.MinimumZone?.Id, MaximumZoneId = source.Requirements?.ZoneRequirements?.MaximumZone?.Id, StratificationStages = source.Requirements?.StratificationStages != null?JsonConvert.SerializeObject(source.Requirements.StratificationStages) : null, Preferred = source.Preferred, WildlifeEffects = source.WildlifeEffects != null?JsonConvert.SerializeObject(source.WildlifeEffects) : null, SoilTypes = source.SoilTypes != null?JsonConvert.SerializeObject(source.SoilTypes) : null, Notes = source.Notes, Visibility = source.Visibility, UserId = source.UserId, CreatedBy = source.CreatedBy, ModifiedBy = source.ModifiedBy, DateCreated = source.DateCreated ?? DateTime.UtcNow, DateModified = source.DateModified }); }