public void ArchiveTrainMovement(ArchiveTrain train, IEnumerable<TrainStopArchive> trainMovements, string directoryPath)
{
using (var ts = GetTransactionScope())
{
const string deleteCancellationsSql = "DELETE FROM [dbo].[LiveTrainCancellation] WHERE [TrainId] = @trainId";
int cancel = ExecuteNonQuery(deleteCancellationsSql, new { trainId = train.Id });
const string deleteCoOSql = "DELETE FROM [dbo].[LiveTrainChangeOfOrigin] WHERE [TrainId] = @trainId";
int coo = ExecuteNonQuery(deleteCoOSql, new { trainId = train.Id });
const string deleteReinstateSql = "DELETE FROM [dbo].[LiveTrainReinstatement] WHERE [TrainId] = @trainId";
int reinstate = ExecuteNonQuery(deleteReinstateSql, new { trainId = train.Id });
if (trainMovements.Any())
{
string stops = JsonConvert.SerializeObject(trainMovements, new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
TypeNameHandling = TypeNameHandling.None,
NullValueHandling = NullValueHandling.Ignore,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple,
Formatting = Formatting.None
});
string path = Path.Combine(directoryPath, train.OriginDepartTimestamp.ToString("yyyy-MM-dd"), string.Concat(
cancel > 0 ? "CX_" : string.Empty,
coo > 0 ? "CO_" : string.Empty,
reinstate > 0 ? "RN_" : string.Empty,
"SD_",
train.ScheduleTrain.HasValue && train.ScheduleTrain != Guid.Empty ? train.ScheduleTrain.ToString() : "NS", "_ID_" + train.Id.ToString(), ".json"));
string dir = Path.GetDirectoryName(path);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
File.WriteAllText(path, stops);
const string deleteSql = @"DELETE FROM [dbo].[LiveTrainStop] WHERE [TrainId] = @trainId";
ExecuteNonQuery(deleteSql, new { trainId = train.Id });
}
const string deleteTrainSql = "DELETE FROM [dbo].[LiveTrain] WHERE [Id] = @trainId";
ExecuteNonQuery(deleteTrainSql, new { trainId = train.Id });
ts.Complete();
}
}