public void InsertSchedule(ScheduleTrain train, ScheduleSource source = ScheduleSource.CIF)
{
using (var ts = GetTransactionScope())
{
if (train.AtocCode == null || string.IsNullOrEmpty(train.AtocCode.Code))
{
const string atocCodeLookup = @"
SELECT TOP 1
[AtocCode]
FROM [ScheduleTrain]
WHERE [TrainUid] = @trainUid
AND [AtocCode] IS NOT NULL";
string atocCode = ExecuteScalar<string>(atocCodeLookup, new { trainUid = train.TrainUid });
train.AtocCode = new AtocCode
{
Code = atocCode
};
}
const string sql = @"
INSERT INTO [natrail].[dbo].[ScheduleTrain]
([TrainUid]
,[Headcode]
,[StartDate]
,[EndDate]
,[AtocCode]
,[RunsMonday]
,[RunsTuesday]
,[RunsWednesday]
,[RunsThursday]
,[RunsFriday]
,[RunsSaturday]
,[RunsSunday]
,[RunsBankHoliday]
,[STPIndicatorId]
,[ScheduleStatusId]
,[OriginStopTiplocId]
,[DestinationStopTiplocId]
,[Source]
,[PowerTypeId]
,[CategoryTypeId]
,[Speed])
OUTPUT [inserted].[ScheduleId]
VALUES
(@TrainUid
,@Headcode
,@StartDate
,@EndDate
,@Code
,@Monday
,@Tuesday
,@Wednesday
,@Thursday
,@Friday
,@Saturday
,@Sunday
,@BankHoliday
,@STPIndicator
,@Status
,@OriginTiplocId
,@DestinationTiplocId
,@Source
,@PowerTypeId
,@CategoryTypeId
,@Speed)";
Guid id = ExecuteInsert(sql, new
{
train.TrainUid,
train.Headcode,
train.StartDate,
train.EndDate,
train.AtocCode.Code,
train.Schedule.Monday,
train.Schedule.Tuesday,
train.Schedule.Wednesday,
train.Schedule.Thursday,
train.Schedule.Friday,
train.Schedule.Saturday,
train.Schedule.Sunday,
train.Schedule.BankHoliday,
train.STPIndicator,
train.Status,
OriginTiplocId = train.Origin != null ? new short?(train.Origin.TiplocId) : default(short?),
DestinationTiplocId = train.Destination != null ? new short?(train.Destination.TiplocId) : default(short?),
Source = source,
PowerTypeId = train.PowerType != null ? (byte)train.PowerType : default(byte?),
CategoryTypeId = train.TrainCategory != null ? (byte)train.TrainCategory : default(byte?),
Speed = train.Speed != null ? (byte)train.Speed : default(byte?)
});
if (source == ScheduleSource.VSTP)
{
Trace.TraceInformation("Saving VSTP Schedule for UID: {0} with ID {1}",
train.TrainUid, id);
}
InsertScheduleStops(id, train.Stops);
ts.Complete();
}
}