public void AddLevelSurvey(FieldVisitInfo fieldVisit, LevelSurvey levelSurvey) { fieldVisit.LevelSurveys.Add(levelSurvey); ExtendVisitPeriod(fieldVisit, new [] { levelSurvey.SurveyPeriod.Start, levelSurvey.SurveyPeriod.End } .Concat(levelSurvey.LevelSurveyMeasurements.Select(lsm => lsm.MeasurementTime))); }
public void AddLevelSurvey(FieldVisitInfo fieldVisit, LevelSurvey levelSurvey) { fieldVisit.LevelSurveys.Add(levelSurvey); }
private IEnumerable <DateTimeOffset?> GetTimes(LevelSurvey item) { return(item .LevelSurveyMeasurements .Select(m => (DateTimeOffset?)m.MeasurementTime)); }
public IEnumerable <LevelSurvey> Map(EHSN eHsn) { if (eHsn == null) { throw new ArgumentNullException(nameof(eHsn)); } var parsedSurvey = ParseLevelSurveyInfo(eHsn); var levelSurvey = (LevelSurvey)null; var levelSurveyTime = (DateTimeOffset?)null; foreach (var table in parsedSurvey.LevelCheckTables) { if (!table.upload.ToNullableBoolean() ?? false) { continue; } var establishedRows = table.LevelChecksRow .Where(row => row.establish.ToNullableDouble().HasValue) .ToList(); if (!establishedRows.Any()) { continue; } var originReferenceName = establishedRows.First().station; var measuredRows = establishedRows .Where(row => row == establishedRows.First() || row.foresight.ToNullableDouble().HasValue) .ToList(); if (!measuredRows.Any()) { continue; } if (levelSurvey == null) { levelSurvey = new LevelSurvey(originReferenceName) { Comments = parsedSurvey.LevelCheckComments, Party = parsedSurvey.Party }; } else if (levelSurvey.OriginReferencePointName != originReferenceName) { _logger.Error($"Can't change the {nameof(LevelSurvey)}.{nameof(levelSurvey.OriginReferencePointName)} from '{levelSurvey.OriginReferencePointName}' to '{originReferenceName}'. Retaining first origin."); } if (!levelSurveyTime.HasValue) { levelSurveyTime = GetLevelSurveyTime(eHsn); } var distinctRows = measuredRows .DistinctBy(r => new { r.station }) .ToList(); var skippedRows = measuredRows .Where(r => !distinctRows.Contains(r)) .ToList(); if (skippedRows.Any()) { foreach (var skippedRow in skippedRows) { var keptRow = distinctRows.First(r => r.station == skippedRow.station); _logger.Error($"'{keptRow.station}' using first circuit measurement of {keptRow.elevation}, and ignoring secondary measurement of {skippedRow.elevation}"); } } var measurements = distinctRows .Select(row => new LevelSurveyMeasurement(row.station, levelSurveyTime.Value, row.elevation.ToNullableDouble() ?? 0) { Comments = row.comments }) .ToList(); var secondaryMeasurements = measurements .Where(m => IsReferencePointMeasured(levelSurvey, m.ReferencePointName)) .ToList(); foreach (var secondaryMeasurement in secondaryMeasurements) { var existingMeasurement = levelSurvey .LevelSurveyMeasurements .Single(m => m.ReferencePointName.Equals(secondaryMeasurement.ReferencePointName, StringComparison.InvariantCultureIgnoreCase)); if (!DoubleHelper.AreEqual(secondaryMeasurement.MeasuredElevation, existingMeasurement.MeasuredElevation)) { _logger.Error($"'{existingMeasurement.ReferencePointName}' with first measured elevation of {existingMeasurement.MeasuredElevation}. Ignoring secondary measured elevation of {secondaryMeasurement.MeasuredElevation}"); } else { _logger.Info($"'{existingMeasurement.ReferencePointName}' was remeasured a second time with the same elevation of {secondaryMeasurement.MeasuredElevation}"); } } var newMeasurements = measurements .Where(m => !secondaryMeasurements.Contains(m)) .ToList(); levelSurvey.LevelSurveyMeasurements.AddRange(newMeasurements); } var levelSurveys = new List <LevelSurvey>(); if (levelSurvey != null) { levelSurveys.Add(levelSurvey); } return(levelSurveys); }
private bool IsReferencePointMeasured(LevelSurvey levelSurvey, string referencePointName) { return(levelSurvey .LevelSurveyMeasurements .Any(m => m.ReferencePointName.Equals(referencePointName, StringComparison.InvariantCultureIgnoreCase))); }