public async Task CourseEmailReminder(StudentsCourse studentsCourse) { if (DateTime.Compare(DateTime.UtcNow, studentsCourse.StartDate.AddDays(-dayToStart)) <= 0) { var jobId = BackgroundJob.Schedule <EmailSender>(service => service.SendEmailAsync(studentsCourse.Student.Email, emailTheme, GenerateEmailMessage(studentsCourse, dayToStart).Result.ToString()), studentsCourse.StartDate.AddDays(-1).Date + new TimeSpan(8, 0, 0)); AddStudentCourseJob(studentsCourse, jobId); } if (DateTime.Compare(DateTime.UtcNow, studentsCourse.StartDate.AddDays(-weekToStart)) <= 0) { var jobId = BackgroundJob.Schedule <EmailSender>(service => service.SendEmailAsync(studentsCourse.Student.Email, emailTheme, GenerateEmailMessage(studentsCourse, weekToStart).Result.ToString()), studentsCourse.StartDate.AddDays(-7)); AddStudentCourseJob(studentsCourse, jobId); } if (DateTime.Compare(DateTime.UtcNow, studentsCourse.StartDate.AddDays(-monthToStart)) <= 0) { var jobId = BackgroundJob.Schedule <EmailSender>(service => service.SendEmailAsync(studentsCourse.Student.Email, emailTheme, GenerateEmailMessage(studentsCourse, monthToStart).Result.ToString()), studentsCourse.StartDate.AddDays(-30)); AddStudentCourseJob(studentsCourse, jobId); } await _context.SaveChangesAsync(); }
public void AddStudentCourseJob(StudentsCourse studentsCourse, string jobId) { _context.StudentCourseJobs.Add(new StudentCourseJob { StudentId = studentsCourse.StudentId, CourseId = studentsCourse.CourseId, JobId = jobId, }); }
public async Task <string> GenerateEmailMessage(StudentsCourse studentsCourse, int dayToStart) { var viewModel = new EmailViewModel { StudentsCourse = studentsCourse, DayToStart = dayToStart }; var result = await _viewRenderService.RenderToStringAsync("EmailPrototype", viewModel); return(result); }
public async Task <ActionResult <StudentsCourse> > PostStudentsCourse(StudentsCourse studentsCourse) { _context.StudentsCourses.Add(studentsCourse); await _context.SaveChangesAsync(); var thisCourse = await _context.StudentsCourses .Where(x => x.CourseId == studentsCourse.CourseId) .Where(x => x.StudentId == studentsCourse.StudentId) .Include(x => x.Student) .Include(x => x.Course) .FirstOrDefaultAsync(); await courseReminder.CourseEmailReminder(thisCourse); return(CreatedAtAction("GetStudentsCourse", new { id = studentsCourse.Id }, studentsCourse)); }
public async Task <IActionResult> PutStudentsCourse(int id, StudentsCourse studentsCourse) { var findStudentsCourse = await _context.StudentsCourses .Where(x => x.CourseId == studentsCourse.CourseId) .Where(x => x.StudentId == studentsCourse.StudentId) .Include(x => x.Student) .Include(x => x.Course) .FirstOrDefaultAsync(); if (findStudentsCourse == null) { await PostStudentsCourse(studentsCourse); return(Ok(new Response { Status = "Success", Message = "Registration is successfully!" })); } findStudentsCourse.StartDate = studentsCourse.StartDate; await courseReminder.DeleteCourseEmailReminder(findStudentsCourse); await courseReminder.CourseEmailReminder(findStudentsCourse); _context.Entry(findStudentsCourse).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!StudentsCourseExists(id)) { return(NotFound()); } else { throw; } } return(Ok(new Response { Status = "Success", Message = "Date updated successfully!" })); }
public async Task DeleteCourseEmailReminder(StudentsCourse studentCourseJob) { var findJobList = await _context.StudentCourseJobs .Where(x => x.StudentId == studentCourseJob.StudentId) .Where(x => x.CourseId == studentCourseJob.CourseId) .ToListAsync(); if (findJobList.Count > 0) { foreach (var findJob in findJobList) { _context.StudentCourseJobs.Remove(findJob); BackgroundJob.Delete(findJob.JobId); } } await _context.SaveChangesAsync(); }