/// <summary> /// Create a new <see cref="Altask.www.Models.TaskInstance"/> from a <see cref="Altask.Data.Dto.Schedule"/>. /// </summary> /// <param name="task"></param> /// <param name="date"></param> /// <param name="schedule"></param> /// <returns></returns> public static TaskInstance FromSchedule(Data.Dto.Task task, DateTime date, Data.Dto.Schedule schedule) { var instance = TaskInstance.Create(task, null, null, date); instance.AnyTime = schedule.AnyTime.GetValueOrDefault(false); if (!instance.AnyTime && schedule.AsEarlyAsN.HasValue) { switch (schedule.AsEarlyAsFrequency) { case "Minute(s)": instance.AsEarlyAsDate = date.AddMinutes(-(double)schedule.AsEarlyAsN); break; case "Hour(s)": instance.AsEarlyAsDate = date.AddHours(-(double)schedule.AsEarlyAsN); break; case "Day(s)": instance.AsEarlyAsDate = date.AddDays(-(double)schedule.AsEarlyAsN); break; case "Week(s)": instance.AsEarlyAsDate = date.AddDays(-(double)(schedule.AsEarlyAsN * 7)); break; case "Month(s)": instance.AsEarlyAsDate = date.AddMonths(-schedule.AsEarlyAsN.Value); break; } } instance.ScheduleId = schedule.Id; return(instance); }
/// <summary> /// Returns a collection of projected run dates for the <see cref="Altask.Data.Model.Schedule"/>. /// </summary> /// <param name="schedule">The <see cref="Altask.Data.Model.Schedule"/>.</param> /// <param name="count">The number of dates within the constrains of the <see cref="Altask.Data.Model.Schedule"/> objects parameters to calculate out to.</param> /// <returns>Returns a <see cref="Altask.Data.EntityResult"/> indicating success or failure.</returns> public virtual async Task <ActionResult> GetRunDates(Data.Dto.Schedule schedule, DateTime from, DateTime to) { from = from.LessSeconds(); to = to.LessSeconds(); ThrowIfDisposed(); var dates = new List <DateTime>(); try { dates = schedule.GetRunDates(from, to); } catch (Exception ex) { return(BadRequest(ErrorDescriber.DefaultError(ex.Message))); } return(await System.Threading.Tasks.Task.FromResult(Ok(new { dates = dates }))); }
internal override void BeforeCreate(Data.Model.Schedule entity, Data.Dto.Schedule dto) { ThrowIfDisposed(); entity.StartsOn = entity.StartsOn.LessSeconds(); foreach (var item in dto.Assets) { entity.Assets.Add(new Data.Model.ScheduleAsset() { AssetId = item.AssetId, ScheduleAssetTypeId = item.ScheduleAssetTypeId }); } foreach (var item in dto.Users) { entity.Users.Add(new Data.Model.ScheduleUser() { UserId = item.UserId, ScheduleUserTypeId = item.ScheduleUserTypeId }); } }
internal override void BeforeUpdate(Data.Model.Schedule entity, Data.Dto.Schedule dto) { ThrowIfDisposed(); entity.StartsOn = entity.StartsOn.LessSeconds(); var currentAssets = entity.Assets.ToList(); for (var index = currentAssets.Count - 1; index >= 0; index--) { var asset = currentAssets[index]; if (!dto.Assets.Any(tda => tda.AssetId == asset.AssetId)) { Context.ScheduleAssets.Remove(asset); } } foreach (var asset in dto.Assets) { var existingAsset = Context.Assets.FirstOrDefault(a => a.Id == asset.AssetId); if (existingAsset != null) { if (!entity.Assets.Any(tda => tda.AssetId == asset.AssetId)) { entity.Assets.Add(new Data.Model.ScheduleAsset() { AssetId = asset.AssetId, ScheduleAssetTypeId = asset.ScheduleAssetTypeId }); } } } var currentUsers = entity.Users.ToList(); for (var index = currentUsers.Count - 1; index >= 0; index--) { var user = currentUsers[index]; if (!dto.Users.Any(tdu => tdu.UserId == user.UserId)) { Context.ScheduleUsers.Remove(user); } } foreach (var user in dto.Users) { var existingUser = Context.Users.FirstOrDefault(a => a.Id == user.UserId); if (existingUser != null) { if (!entity.Users.Any(tdu => tdu.UserId == user.UserId)) { entity.Users.Add(new Data.Model.ScheduleUser() { UserId = user.UserId, ScheduleUserTypeId = user.ScheduleUserTypeId }); } } } }