private HttpRequestMessage HandleMessage(RequestSchedule request)
        {
            var relativeUri = $"sports/{request.Language.Code}/schedules/{request.Date:yyyy-MM-dd}/schedule.xml";
            var message     = new HttpRequestMessage(HttpMethod.Get, new Uri(options.Uri, relativeUri));

            return(message);
        }
        public void ActivateLegacyRequestSchedule(Guid userID, Guid requestID, string cronExpression)
        {
            //Ensure a job with the same ID doesn't already exist
            Hangfire.RecurringJob.RemoveIfExists(requestID.ToString());

            //Ensure the request exists and it is not deleted
            if (DataContext.Requests.Any(p => p.ID == requestID) == false || DataContext.Requests.Any(p => p.ID == requestID && p.Deleted == true))
            {
                DeleteRequestSchedules(requestID);
                return;
            }

            //Add the recurring job
            Hangfire.RecurringJob.AddOrUpdate <LegacyRequestsController>(requestID.ToString(), (x) => x.OnSubmitSchedulerRequest(userID, requestID), cronExpression);

            //Add the job details to the request schedule if it isn't defined already
            if (!DataContext.RequestSchedules.Any(p => p.RequestID == requestID && p.ScheduleID == requestID.ToString() && p.ScheduleType == RequestScheduleTypes.Recurring))
            {
                RequestSchedule requestSchedule = new RequestSchedule();
                requestSchedule.RequestID    = requestID;
                requestSchedule.ID           = Guid.NewGuid();
                requestSchedule.ScheduleID   = requestID.ToString();
                requestSchedule.ScheduleType = RequestScheduleTypes.Recurring;
                DataContext.RequestSchedules.Add(requestSchedule);

                DataContext.SaveChanges();
            }
        }
Beispiel #3
0
 private void Btn_requestSchedule_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         RequestSchedule requestSchedule = new RequestSchedule();
         DB.TodoListGrid temp            = Grid_todoList.SelectedItem as DB.TodoListGrid;
         TodoList        todoList        = mainWindow.DB.GetTodoByID(temp.WorkID);
         requestSchedule.Owner    = mainWindow;
         requestSchedule.todolist = todoList;
         mainWindow.Opacity       = 0.5;
         requestSchedule.WindowStartupLocation = WindowStartupLocation.CenterOwner;
         requestSchedule.ShowDialog();
     }
     catch (Exception ex)
     {
         DB.AddLog(new Log {
             error_page = "uctodolist", error_text = ex.Message, log_user = User.id
         });
     }
 }
        public async Task <HttpResponseMessage> ScheduleLegacyRequest(LegacySchedulerRequestDTO dto)
        {
            if (dto.IsNull() || dto.ScheduleJSON.IsNullOrEmpty())
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The Request Schedule is not defined."));
            }
            try
            {
                //Delete the recurring job, if it exists
                Hangfire.RecurringJob.RemoveIfExists(dto.RequestID.ToString());

                //Check if any additional schedule jobs exist
                if (DataContext.RequestSchedules.Any(p => p.RequestID == dto.RequestID))
                {
                    var schedules = await DataContext.RequestSchedules.Where(p => p.RequestID == dto.RequestID).ToListAsync();

                    foreach (var item in schedules)
                    {
                        if (item.ScheduleType == RequestScheduleTypes.Recurring)
                        {
                            Hangfire.RecurringJob.RemoveIfExists(item.ScheduleID);
                        }
                        else
                        {
                            Hangfire.BackgroundJob.Delete(item.ScheduleID);
                        }
                    }

                    DataContext.RequestSchedules.RemoveRange(schedules);
                    await DataContext.SaveChangesAsync();
                }

                RequestScheduleModel scheduleModel = Newtonsoft.Json.JsonConvert.DeserializeObject <RequestScheduleModel>(dto.ScheduleJSON);

                if (scheduleModel.PauseJob)
                {
                    //Do not schedule anything if the user has paused the schedule.
                    return(new HttpResponseMessage(HttpStatusCode.OK));
                }

                string cronExpression = ScheduleManager.GetCronExpression(scheduleModel);
                var    schedule       = NCrontab.CrontabSchedule.Parse(cronExpression);

                if (scheduleModel.StartDate <= DateTime.Now)
                {
                    Hangfire.RecurringJob.AddOrUpdate <LegacyRequestsController>(dto.RequestID.ToString(), (x) => x.OnSubmitSchedulerRequest(Identity.ID, dto.RequestID.Value), cronExpression); //LegacyRequests.ActivateLegacyRequestSchedule(Identity.ID, requestID, cronExpression);

                    RequestSchedule requestSchedule = new RequestSchedule();
                    requestSchedule.RequestID    = dto.RequestID.Value;
                    requestSchedule.ID           = Guid.NewGuid();
                    requestSchedule.ScheduleID   = dto.RequestID.ToString();
                    requestSchedule.ScheduleType = RequestScheduleTypes.Recurring;
                    DataContext.RequestSchedules.Add(requestSchedule);
                }
                else
                {
                    var jobID = Hangfire.BackgroundJob.Schedule <LegacyRequestsController>((x) => x.ActivateLegacyRequestSchedule(Identity.ID, dto.RequestID.Value, cronExpression), scheduleModel.StartDate);

                    RequestSchedule requestSchedule = new RequestSchedule();
                    requestSchedule.RequestID    = dto.RequestID.Value;
                    requestSchedule.ID           = Guid.NewGuid();
                    requestSchedule.ScheduleID   = jobID;
                    requestSchedule.ScheduleType = RequestScheduleTypes.Activate;
                    DataContext.RequestSchedules.Add(requestSchedule);
                }

                if (scheduleModel.EndDate.HasValue)
                {
                    var jobID = Hangfire.BackgroundJob.Schedule <LegacyRequestsController>((x) => x.DeactivateLegacyRequestSchedule(dto.RequestID.Value), scheduleModel.EndDate.Value);

                    RequestSchedule requestSchedule = new RequestSchedule();
                    requestSchedule.RequestID    = dto.RequestID.Value;
                    requestSchedule.ID           = Guid.NewGuid();
                    requestSchedule.ScheduleID   = jobID;
                    requestSchedule.ScheduleType = RequestScheduleTypes.Deactivate;
                    DataContext.RequestSchedules.Add(requestSchedule);
                }

                await DataContext.SaveChangesAsync();

                return(new HttpResponseMessage(HttpStatusCode.OK));
            }
            catch (Exception ex)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Could not schedule request. Details: " + ex.Message));
            }
        }