@@ -59,6 +59,8 @@ private static string GetExecutingFileVersion()
59
59
return $ "{ MethodBase . GetCurrentMethod ( ) . DeclaringType . Namespace } v{ fileVersionInfo . FileVersion } ";
60
60
}
61
61
62
+ private int LockedVisitCount { get ; set ; }
63
+
62
64
private void DeleteSpecifiedFieldVisits ( )
63
65
{
64
66
if ( ! IsFieldVisitDeletionEnabled ( ) )
@@ -91,17 +93,26 @@ private void DeleteSpecifiedFieldVisits()
91
93
92
94
Log . Info ( $ "Inspecting { locationQuantity } for field visits { string . Join ( " and " , timeRange ) } ...") ;
93
95
96
+ LockedVisitCount = 0 ;
97
+
94
98
var deletedVisitCount = 0 ;
95
99
96
100
foreach ( var locationInfo in ResolvedLocations )
97
101
{
98
102
deletedVisitCount += DeleteVisitsAtLocation ( locationInfo ) ;
99
103
}
100
104
105
+ var lockedVisitSummary = string . Empty ;
106
+
107
+ if ( LockedVisitCount > 0 )
108
+ {
109
+ lockedVisitSummary = $ ", skipping { "locked field visit" . ToQuantity ( LockedVisitCount ) } ";
110
+ }
111
+
101
112
if ( Context . DryRun )
102
- Log . Info ( $ "Dry run completed. { "field visit" . ToQuantity ( InspectedFieldVisits ) } would have been deleted from { locationQuantity } .") ;
113
+ Log . Info ( $ "Dry run completed. { "field visit" . ToQuantity ( InspectedFieldVisits ) } would have been deleted from { locationQuantity } { lockedVisitSummary } .") ;
103
114
else
104
- Log . Info ( $ "Deleted { "field visit" . ToQuantity ( deletedVisitCount ) } from { locationQuantity } .") ;
115
+ Log . Info ( $ "Deleted { "field visit" . ToQuantity ( deletedVisitCount ) } from { locationQuantity } { lockedVisitSummary } .") ;
105
116
}
106
117
107
118
private bool IsFieldVisitDeletionEnabled ( )
@@ -114,11 +125,28 @@ private int DeleteVisitsAtLocation(LocationInfo locationInfo)
114
125
var siteVisitLocation = GetSiteVisitLocation ( locationInfo ) ;
115
126
116
127
var visits = _siteVisit . Get ( new GetLocationVisits
128
+ {
129
+ Id = siteVisitLocation . Id ,
130
+ StartTime = Context . VisitsAfter ? . UtcDateTime ,
131
+ EndTime = Context . VisitsBefore ? . UtcDateTime
132
+ } )
133
+ . OrderBy ( v => v . StartDate )
134
+ . ToList ( ) ;
135
+
136
+ var lockedVisits = visits
137
+ . Where ( v => v . IsLocked )
138
+ . ToList ( ) ;
139
+
140
+ if ( lockedVisits . Any ( ) )
117
141
{
118
- Id = siteVisitLocation . Id ,
119
- StartTime = Context . VisitsAfter ? . UtcDateTime ,
120
- EndTime = Context . VisitsBefore ? . UtcDateTime
121
- } ) ;
142
+ Log . Warn ( $ "Skipping deletion of { "locked field visit" . ToQuantity ( lockedVisits . Count ) } in location '{ locationInfo . Identifier } '.") ;
143
+
144
+ LockedVisitCount += lockedVisits . Count ;
145
+
146
+ visits = visits
147
+ . Where ( v => ! v . IsLocked )
148
+ . ToList ( ) ;
149
+ }
122
150
123
151
if ( ! visits . Any ( ) )
124
152
{
@@ -153,6 +181,8 @@ private int DeleteVisitsAtLocation(LocationInfo locationInfo)
153
181
return visits . Count ;
154
182
}
155
183
184
+ private int LockedTimeSeriesCount { get ; set ; }
185
+
156
186
private void DeleteSpecifiedTimeSeries ( )
157
187
{
158
188
if ( ! Context . TimeSeriesToDelete . Any ( ) )
@@ -161,17 +191,26 @@ private void DeleteSpecifiedTimeSeries()
161
191
if ( Is3X ( ) )
162
192
throw new ExpectedException ( $ "Time-series deletion is not supported for AQTS { Client . ServerVersion } ") ;
163
193
194
+ LockedTimeSeriesCount = 0 ;
195
+
164
196
var deletedTimeSeriesCount = 0 ;
165
197
166
198
foreach ( var timeSeriesIdentifier in Context . TimeSeriesToDelete )
167
199
{
168
200
deletedTimeSeriesCount += DeleteTimeSeries ( timeSeriesIdentifier ) ;
169
201
}
170
202
203
+ var lockedTimeSeriesSummary = string . Empty ;
204
+
205
+ if ( LockedTimeSeriesCount > 0 )
206
+ {
207
+ lockedTimeSeriesSummary = $ ", skipping { LockedTimeSeriesCount } locked time-series";
208
+ }
209
+
171
210
if ( Context . DryRun )
172
- Log . Info ( $ "Dry run complete. { InspectedTimeSeries } time-series would have been deleted.") ;
211
+ Log . Info ( $ "Dry run complete. { InspectedTimeSeries } time-series would have been deleted{ lockedTimeSeriesSummary } .") ;
173
212
else
174
- Log . Info ( $ "Deleted { deletedTimeSeriesCount } of { Context . TimeSeriesToDelete . Count } time-series.") ;
213
+ Log . Info ( $ "Deleted { deletedTimeSeriesCount } of { Context . TimeSeriesToDelete . Count } time-series{ lockedTimeSeriesSummary } .") ;
175
214
}
176
215
177
216
private int DeleteTimeSeries ( string timeSeriesIdentifierOrGuid )
@@ -201,10 +240,27 @@ private int DeleteTimeSeries(string timeSeriesIdentifierOrGuid)
201
240
}
202
241
203
242
Log . Info ( $ "Deleting '{ timeSeriesDescription . Identifier } ' ...") ;
204
- DeleteTimeSeries ( timeSeriesDescription ) ;
205
- Log . Info ( $ "Deleted '{ timeSeriesDescription . Identifier } ' successfully.") ;
206
243
207
- return 1 ;
244
+ try
245
+ {
246
+ DeleteTimeSeries ( timeSeriesDescription ) ;
247
+ Log . Info ( $ "Deleted '{ timeSeriesDescription . Identifier } ' successfully.") ;
248
+
249
+ return 1 ;
250
+ }
251
+ catch ( WebServiceException exception )
252
+ {
253
+ if ( exception . ErrorCode == "DeleteLockedTimeSeriesException" )
254
+ {
255
+ Log . Warn ( $ "Time-series '{ timeSeriesDescription . Identifier } ' has locked data and cannot be deleted.") ;
256
+
257
+ ++ LockedTimeSeriesCount ;
258
+
259
+ return 0 ;
260
+ }
261
+
262
+ throw ;
263
+ }
208
264
}
209
265
210
266
private void DeleteTimeSeries ( TimeSeriesDescription timeSeriesDescription )
0 commit comments