public void ProcessGaugingSummary_ValidGaugingSummary_MapsObserverToParty()
        {
            var expectedNumberOfItems = 3;

            var startDate = Fixture.Create <DateTime>();
            var duration  = Fixture.Create <TimeSpan>().Duration();
            var observer  = Fixture.Create <string>();

            var gaugingSummaryItems = Fixture.Build <GaugingSummaryItem>()
                                      .OmitAutoProperties()
                                      .With(x => x.StartDate, startDate)
                                      .With(x => x.EndDate, startDate.Add(duration))
                                      .With(x => x.ObserversName, observer)
                                      .With(x => x.GaugingId)
                                      .With(x => x.Flow)
                                      .With(x => x.Area)
                                      .With(x => x.MeanVelocity)
                                      .With(x => x.PanelItems, new PanelItem[] {})
                                      .CreateMany(expectedNumberOfItems).ToList();

            var gaugingSummary = new GaugingSummary {
                GaugingSummaryItems = gaugingSummaryItems
            };

            _gaugingSummaryProcessor.ProcessGaugingSummary(gaugingSummary);

            FieldDataResultsAppender
            .Received(expectedNumberOfItems)
            .AddFieldVisit(Arg.Any <LocationInfo>(), Arg.Is <FieldVisitDetails>(x => x.Party == observer));

            FieldDataResultsAppender
            .Received(expectedNumberOfItems)
            .AddDischargeActivity(Arg.Any <FieldVisitInfo>(), Arg.Is <DischargeActivity>(x => x.Party == observer));
        }
        public void ProcessGaugingSummary(GaugingSummary gaugingSummary)
        {
            try
            {
                var dischargeActivityMapper = CreateDischargeActivityMapper();

                foreach (var gaugingSummaryItem in gaugingSummary.GaugingSummaryItems)
                {
                    var locationIdentifier = gaugingSummaryItem.SiteId;
                    var location           = _fieldDataResultsAppender.GetLocationByIdentifier(locationIdentifier);

                    var dischargeActivity = dischargeActivityMapper.Map(gaugingSummaryItem, location.UtcOffset);

                    var fieldVisit     = CreateFieldVisit(dischargeActivity);
                    var fieldVisitInfo = _fieldDataResultsAppender.AddFieldVisit(location, fieldVisit);

                    _fieldDataResultsAppender.AddDischargeActivity(fieldVisitInfo, dischargeActivity);
                }

                _logger.Info(FormattableString.Invariant($"Processed gauging summary with {gaugingSummary.GaugingSummaryItems.Count} item(s)"));
            }
            catch (Exception e)
            {
                throw new PocketGaugerDataPersistenceException("Failed to persist pocket gauger data", e);
            }
        }
        private void AttachMeterDetails(GaugingSummary gaugingSummary, PocketGaugerFiles pocketGaugerFiles)
        {
            var meterDetails = _meterDetailsParser.Parse(pocketGaugerFiles);

            foreach (var gaugingSummaryItem in gaugingSummary.GaugingSummaryItems)
            {
                gaugingSummaryItem.MeterDetailsItem = meterDetails[gaugingSummaryItem.MeterId];
            }
        }
        private void AttachPanelItems(GaugingSummary gaugingSummary, PocketGaugerFiles pocketGaugerFiles)
        {
            var panelItems = _panelParser.Parse(pocketGaugerFiles);

            foreach (var gaugingSummaryItem in gaugingSummary.GaugingSummaryItems)
            {
                gaugingSummaryItem.PanelItems =
                    panelItems.Where(p => p.GaugingId == gaugingSummaryItem.GaugingId).ToList();
            }
        }
        private void SetUpGaugingSummaryParser()
        {
            _gaugingSummaryParser = Substitute.For <IGaugingSummaryParser>();

            var gaugingSummaryItems =
                _fixture.Build <GaugingSummaryItem>()
                .Without(g => g.MeterDetailsItem)
                .Without(g => g.PanelItems)
                .CreateMany(3)
                .ToList();

            for (var i = 0; i < gaugingSummaryItems.Count; i++)
            {
                gaugingSummaryItems[i].MeterId = _meterIds[i];
            }
            var gaugingSummary = new GaugingSummary {
                GaugingSummaryItems = gaugingSummaryItems
            };

            _gaugingSummaryParser.Parse(Arg.Any <PocketGaugerFiles>()).Returns(gaugingSummary);
        }