TrainNotifier.Service.ScheduleRepository.InsertSchedule C# (CSharp) Method

InsertSchedule() public method

public InsertSchedule ( ScheduleTrain train, ScheduleSource source = ScheduleSource.CIF ) : void
train TrainNotifier.Common.Model.Schedule.ScheduleTrain
source ScheduleSource
return void
        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();
            }
        }

Usage Example

 private static void AddSchedule(IEnumerable<TiplocCode> tiplocs, ScheduleRepository schedrep, dynamic rowData)
 {
     ScheduleTrain train = ScheduleTrainMapper.ParseJsonTrain(rowData.JsonScheduleV1, tiplocs);
     switch (train.TransactionType)
     {
         case TransactionType.Create:
             schedrep.InsertSchedule(train);
             Trace.TraceInformation("Inserted Train UID {0}, Indicator {1}", train.TrainUid, train.STPIndicator);
             break;
         case TransactionType.Delete:
             schedrep.DeleteSchedule(train);
             Trace.TraceInformation("Deleted Train UID {0}, Indicator {1}, Date {2:dd/MM/yyyy}", train.TrainUid, train.STPIndicator, train.StartDate);
             break;
     }
 }