Example #1
0
        public IActionResult ScheduledReportIndex()
        {
            var userRecurringJobs = RecurringJobManager.GetUserRecurringJobs();
            var viewModels        = new List <ScheduledReportViewModel>();

            foreach (var job in userRecurringJobs)
            {
                var communication = Rdb.Communications.FirstOrDefault(x => x.CommunicationSettings.RecurringJobId == job.Id);
                if (communication != null)
                {
                    var viewModel = new ScheduledReportViewModel
                    {
                        Communication = communication,
                        RecurringJob  = job
                    };
                    //Throwing errors when trying to create title friendly string in view

                    viewModel.Communication.CommunicationSettings.ReportName = viewModel.Communication
                                                                               .CommunicationSettings.ReportName.ToTitleFriendlyString();

                    viewModels.Add(viewModel);
                }
            }
            return(View(viewModels));
        }
Example #2
0
        public IActionResult ScheduledReportDetail(int id)
        {
            var communication = Rdb.Communications.FirstOrDefault(x => x.CommunicationId == id);
            var recurringJob  = RecurringJobManager.GetRecurringJobById(communication.CommunicationSettings.RecurringJobId);
            var viewModel     = new ScheduledReportViewModel
            {
                Communication = communication,
                RecurringJob  = recurringJob
            };

            SetHeroLayoutViewData(communication.CommunicationId, communication.CampaignName, PageKeys.ScheduledReportDetails);

            return(View(viewModel));
        }
Example #3
0
        public async Task <ActionResult> Schedule(int id)
        {
            var result = await this.db.ScheduledReports
                         .Include(s => s.Query)
                         .Include(s => s.Query.DatabaseConnection)
                         .FirstOrDefaultAsync(m => m.ScheduleID == id);

            ScheduledReportViewModel model = null;

            if (result == null)
            {
                return(Json(new ScheduledReportViewModel()));
            }
            else if (CanUserAccessDatabase(result.Query.DatabaseConnection))
            {
                model = new ScheduledReportViewModel(result);
                return(Json(model));
            }

            return(NotFound());
        }
Example #4
0
        public async Task <ActionResult> Schedule([FromBody] ScheduledReportViewModel model)
        {
            var query = this.db.Queries
                        .Include(q => q.DatabaseConnection)
                        .FirstOrDefault(q => q.QueryID == model.QueryID);

            if (query != null && CanUserAccessDatabase(query.DatabaseConnection))
            {
                if (model.FrequencyScheduled == FrequencyScheduled.None)
                {
                    // Remove schedule
                    var schedule = await this.db.ScheduledReports.FirstOrDefaultAsync(m => m.ScheduleID == model.QueryID);

                    if (schedule != null)
                    {
                        this.db.ScheduledReports.Remove(schedule);
                        await this.db.SaveChangesAsync();
                    }

                    // Remove schedule job
                    this.RemoveScheduleJob(model.QueryID.ToString());

                    return(StatusCode((int)HttpStatusCode.OK));
                }

                if (model.FrequencyScheduled == FrequencyScheduled.Monthly &&
                    (!model.DayOfMonth.HasValue || model.DayOfMonth < 1 || model.DayOfMonth > 32))
                {
                    return(BadRequest("Select the correct Day of the Month"));
                }

                DateTime dateValue;
                if (!DateTime.TryParseExact(model.Time, "h:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
                {
                    return(BadRequest("Select the correct Time"));
                }

                Regex regex = new Regex(@"^(?!.*<[^>]+>).*");
                if (!regex.IsMatch(model.Recipients))
                {
                    return(BadRequest("No html tags allowed"));
                }

                var recipients = this.RecipientsValidation(model.Recipients);
                if (string.IsNullOrEmpty(recipients))
                {
                    return(BadRequest("Wrong 'Recipients' format. Only e-mails are separated by comma"));
                }

                ScheduledReport scheduleReport = await this.db.ScheduledReports.FirstOrDefaultAsync(m => m.ScheduleID == model.QueryID);

                if (scheduleReport == null)
                {
                    scheduleReport = new ScheduledReport
                    {
                        FrequencyScheduled = model.FrequencyScheduled,
                        Time       = dateValue.TimeOfDay,
                        DayOfWeek  = model.DayOfWeek,
                        DayOfMonth = model.DayOfMonth,
                        Recipients = recipients,
                        Query      = query
                    };

                    this.db.ScheduledReports.Add(scheduleReport);
                }
                else
                {
                    scheduleReport.FrequencyScheduled = model.FrequencyScheduled;
                    scheduleReport.Time       = dateValue.TimeOfDay;
                    scheduleReport.DayOfWeek  = model.DayOfWeek;
                    scheduleReport.DayOfMonth = model.DayOfMonth;
                    scheduleReport.Recipients = recipients;

                    this.db.Entry(scheduleReport).State = EntityState.Modified;
                }

                await this.db.SaveChangesAsync();

                this.AddOrUpdateScheduleTask(scheduleReport);

                return(StatusCode((int)HttpStatusCode.OK));
            }

            return(NotFound());
        }