Example #1
0
        private void DeleteSpecifiedFieldVisits()
        {
            if (!IsFieldVisitDeletionEnabled())
            {
                return;
            }

            if (Is3X())
            {
                throw new ExpectedException($"Field visit deletion is not supported for AQTS {Client.ServerVersion}");
            }

            if (!ResolvedLocations.Any())
            {
                // Delete field visits from all locations
                Context.LocationsToDelete = new List <string> {
                    "*"
                };

                ResolvedLocations = GetResolvedLocations();
            }

            var timeRange = new List <string>();

            if (Context.VisitsBefore.HasValue)
            {
                timeRange.Add($"before {Context.VisitsBefore.Value:O}");
            }

            if (Context.VisitsAfter.HasValue)
            {
                timeRange.Add($"after {Context.VisitsAfter.Value:O}");
            }

            var locationQuantity = "location".ToQuantity(ResolvedLocations.Count);

            Log.Info($"Inspecting {locationQuantity} for field visits {string.Join(" and ", timeRange)} ...");

            var deletedVisitCount = 0;

            foreach (var locationInfo in ResolvedLocations)
            {
                deletedVisitCount += DeleteVisitsAtLocation(locationInfo);
            }

            if (Context.DryRun)
            {
                Log.Info($"Dry run completed. {"field visit".ToQuantity(InspectedFieldVisits)} would have been deleted from {locationQuantity}.");
            }
            else
            {
                Log.Info($"Deleted {"field visit".ToQuantity(deletedVisitCount)} from {locationQuantity}.");
            }
        }
Example #2
0
        private void ChangeFieldVisitApprovals()
        {
            if (!ResolvedLocations.Any())
            {
                // Change field visits from all locations
                Context.Locations = new List <string> {
                    "*"
                };

                ResolvedLocations = GetResolvedLocations()
                                    .OrderBy(l => l.Identifier)
                                    .ToList();
            }

            var timeRange = new List <string>();

            if (Context.VisitsBefore.HasValue)
            {
                timeRange.Add($"before {Context.VisitsBefore.Value:O}");
            }

            if (Context.VisitsAfter.HasValue)
            {
                timeRange.Add($"after {Context.VisitsAfter.Value:O}");
            }

            var locationQuantity = "location".ToQuantity(ResolvedLocations.Count);

            Log.Info($"Inspecting {locationQuantity} for field visits {string.Join(" and ", timeRange)} ...");

            var changedVisitCount = 0;

            foreach (var locationInfo in ResolvedLocations)
            {
                changedVisitCount += ChangeVisitsAtLocation(locationInfo);
            }

            if (Context.DryRun)
            {
                Log.Info($"Dry run completed. {"field visit".ToQuantity(InspectedFieldVisits)} would have been changed from {locationQuantity}.");
            }
            else
            {
                Log.Info($"Changed {"field visit".ToQuantity(changedVisitCount)} from {locationQuantity}.");
            }
        }
Example #3
0
        private void DeleteSpecifiedFieldVisits()
        {
            if (!IsFieldVisitDeletionEnabled())
            {
                return;
            }

            if (Is3X())
            {
                throw new ExpectedException($"Field visit deletion is not supported for AQTS {Client.ServerVersion}");
            }

            if (!ResolvedLocations.Any())
            {
                // Delete field visits from all locations
                Context.LocationsToDelete = new List <string> {
                    "*"
                };

                ResolveLocationsFromSpecificVisits();

                ResolvedLocations = GetResolvedLocations();
            }

            var timeRange = new List <string>();

            if (Context.VisitsToDelete.Any())
            {
                timeRange.Add($"with {"specific visit".ToQuantity(Context.VisitsToDelete.Count)}");
            }

            if (Context.VisitsBefore.HasValue)
            {
                timeRange.Add($"before {Context.VisitsBefore.Value:O}");
            }

            if (Context.VisitsAfter.HasValue)
            {
                timeRange.Add($"after {Context.VisitsAfter.Value:O}");
            }

            var locationQuantity = "location".ToQuantity(ResolvedLocations.Count);

            Log.Info($"Inspecting {locationQuantity} for field visits {string.Join(" and ", timeRange)} ...");

            var visitIdentifiers = Context
                                   .VisitsToDelete
                                   .Select(VisitIdentifierParser.ParseIdentifier)
                                   .OrderBy(v => v.StartDateTime)
                                   .ToList();

            LockedVisitCount = 0;

            var deletedVisitCount = 0;

            foreach (var locationInfo in ResolvedLocations)
            {
                var locationSpecificVisits = visitIdentifiers
                                             .Where(v => v.Location.Equals(locationInfo.Identifier, StringComparison.InvariantCultureIgnoreCase))
                                             .ToList();

                deletedVisitCount += DeleteVisitsAtLocation(locationInfo, locationSpecificVisits);
            }

            var lockedVisitSummary = string.Empty;

            if (LockedVisitCount > 0)
            {
                lockedVisitSummary = $", skipping {"locked field visit".ToQuantity(LockedVisitCount)}";
            }

            if (Context.DryRun)
            {
                Log.Info($"Dry run completed. {"field visit".ToQuantity(InspectedFieldVisits)} would have been deleted from {locationQuantity}{lockedVisitSummary}.");
            }
            else
            {
                Log.Info($"Deleted {"field visit".ToQuantity(deletedVisitCount)} from {locationQuantity}{lockedVisitSummary}.");
            }
        }