public static string RearrangeLessonWithOld(string name, string courseName, string confirmURL, Lesson oldLesson, Teacher oldTeacher, Teacher newTeacher, pegasusContext.Org oldOrg, pegasusContext.Org newOrg, Room oldRoom, Room newRoom) { string mailContent = "<div><p>Dear " + name + "</p>" + "<p>The " + courseName + " lesson given by " + oldTeacher.FirstName + " " + oldTeacher.LastName + " from " + oldLesson.BeginTime.ToString() + " to " + oldLesson.EndTime.ToString() + " at " + oldOrg.OrgName + " " + oldRoom.RoomName + " has been rearranged to be given by" + newTeacher.FirstName + " " + newTeacher.LastName + " at " + newOrg.OrgName + " " + newRoom.RoomName + ". Please click the following button to confirm. </p>" + "<a style='background-color:#4CAF50; color:#FFFFFF' href='" + confirmURL + "' target='_blank'>Confirm</a></div>"; return(mailContent); }
public static string RearrangeLesson(string name, string courseName, Lesson lesson, string confirmURL, pegasusContext.Org org, Room room) { string mailContent = "<div><p>Dear " + name + "</p>" + "<p>You have a new rearranged lesson " + courseName + " from " + lesson.BeginTime.ToString() + " to " + lesson.EndTime.ToString() + " at " + org.OrgName + " " + room.RoomName + ".</p><p>Please click the following button to confirm. </p>" + "<a style='background-color:#4CAF50; color:#FFFFFF' href='" + confirmURL + "' target='_blank'>Confirm</a></div>"; return(mailContent); }
public static string RearrangedSingleLessonWithoutOldLessonForTeacher(Learner learner, Lesson lesson, pegasusContext.Org org, Room room, Teacher teacher) { string content; content = "Inform teacher " + teacher.FirstName + " " + teacher.LastName + "new lesson has been arranged at " + org.OrgName + " " + room.RoomName + " from " + lesson.BeginTime.ToString() + " to " + lesson.EndTime.ToString() + " for learner " + teacher.FirstName + " " + teacher.LastName; return(content); }
public static string RearrangedSingleLessonWithOldLessonForNewTeacher(Lesson oldLesson, Lesson newLesson, Teacher oldTeacher, Teacher newTeacher, pegasusContext.Org oldOrg, pegasusContext.Org newOrg, Room oldRoom, Room newRoom, string courseName) { string content; content = "The " + courseName + " lesson given by " + oldTeacher.FirstName + " " + oldTeacher.LastName + " from " + oldLesson.BeginTime.ToString() + " to " + oldLesson.EndTime.ToString() + " at " + oldOrg.OrgName + " " + oldRoom.RoomName + " has been rearranged to be given by teacher " + newTeacher.FirstName + " " + newTeacher.LastName + " from " + newLesson.BeginTime.ToString() + " to " + newLesson.EndTime.ToString() + " at " + newOrg.OrgName + " " + newRoom.RoomName; return(content); }
public async Task <IActionResult> Post(int userId, [FromBody] LessonViewModel lessonViewModel) { var result = new Result <Lesson>(); var lesson = _mapper.Map(lessonViewModel, new Lesson()); var lessonRemains = new List <LessonRemain>(); var course = new Course(); var awaitMakeUpLessons = new List <AwaitMakeUpLesson>(); string userConfirmUrlPrefix = _configuration.GetSection("UrlPrefix").Value; try { lessonRemains = await _ablemusicContext.LessonRemain.Where(lr => lr.CourseInstanceId == lesson.CourseInstanceId && lr.LearnerId == lesson.LearnerId).ToListAsync(); course = await(from oto in _ablemusicContext.One2oneCourseInstance join c in _ablemusicContext.Course on oto.CourseId equals c.CourseId where oto.CourseInstanceId == lesson.CourseInstanceId select new Course { CourseId = c.CourseId, CourseName = c.CourseName, Duration = c.Duration, }).FirstOrDefaultAsync(); awaitMakeUpLessons = await _ablemusicContext.AwaitMakeUpLesson.Where(a => a.IsActive == 1 && a.LearnerId == lesson.LearnerId && (a.CourseInstanceId.HasValue && lesson.CourseInstanceId == a.CourseInstanceId) || (a.GroupCourseInstanceId.HasValue && lesson.GroupCourseInstanceId == a.GroupCourseInstanceId)) .OrderBy(a => a.ExpiredDate).ToListAsync(); } catch (Exception ex) { LogErrorToFile(ex.Message); result.IsSuccess = false; result.ErrorMessage = ex.Message; return(BadRequest(result)); } if (lessonRemains.Count <= 0) { result.IsSuccess = false; result.ErrorMessage = "Lesson Remain not found"; return(BadRequest(result)); } if (course == null) { result.IsSuccess = false; result.ErrorMessage = "Course not found"; return(BadRequest(result)); } if (awaitMakeUpLessons.Count <= 0) { result.IsSuccess = false; result.ErrorMessage = "AwaitMakeUpLesson not found"; return(BadRequest(result)); } AwaitMakeUpLesson validMakeUpLesson = null; foreach (var makeUpLesson in awaitMakeUpLessons) { if (makeUpLesson.ExpiredDate.Value.Date >= lesson.BeginTime.Value.Date) { validMakeUpLesson = makeUpLesson; break; } } if (validMakeUpLesson == null) { result.IsSuccess = false; result.ErrorMessage = "Your lesson all expired"; return(BadRequest(result)); } TimeSpan duration; switch (course.Duration) { case 1: duration = TimeSpan.FromMinutes(30); break; case 2: duration = TimeSpan.FromMinutes(45); break; case 3: duration = TimeSpan.FromMinutes(60); break; default: duration = TimeSpan.FromMinutes(0); break; } lesson.EndTime = lesson.BeginTime.Value.Add(duration); int termId = 0; foreach (var lr in lessonRemains) { if (lr.Quantity > 0) { termId = (int)lr.TermId; } } if (termId == 0) { result.IsSuccess = false; result.ErrorMessage = "Lesson Remain not found"; return(BadRequest(result)); } Teacher teacher = new Teacher(); var invoice = new Invoice(); var holidays = new List <Holiday>(); var org = new pegasusContext.Org(); var room = new Room(); var learner = new Learner(); try { invoice = await _ablemusicContext.Invoice.Where(i => i.TermId == termId && i.LearnerId == lesson.LearnerId && i.CourseInstanceId == lesson.CourseInstanceId).FirstOrDefaultAsync(); teacher = await _ablemusicContext.Teacher.Where(t => t.TeacherId == lesson.TeacherId).FirstOrDefaultAsync(); org = await _ablemusicContext.Org.Where(o => o.OrgId == lesson.OrgId).FirstOrDefaultAsync(); room = await _ablemusicContext.Room.Where(r => r.RoomId == lesson.RoomId).FirstOrDefaultAsync(); learner = await _ablemusicContext.Learner.Where(l => l.LearnerId == lesson.LearnerId).FirstOrDefaultAsync(); holidays = await _ablemusicContext.Holiday.ToListAsync(); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message; return(BadRequest(result)); } if (learner == null) { result.IsSuccess = false; result.ErrorMessage = "Learner not found"; return(BadRequest(result)); } if (room == null) { result.IsSuccess = false; result.ErrorMessage = "Room not found"; return(BadRequest(result)); } if (org == null) { result.IsSuccess = false; result.ErrorMessage = "Org not found"; return(BadRequest(result)); } if (teacher == null) { result.IsSuccess = false; result.ErrorMessage = "Teacher not found"; return(BadRequest(result)); } if (invoice == null) { result.IsSuccess = false; result.ErrorMessage = "Lesson Remain not found"; return(BadRequest(result)); } var lessonConflictCheckerService = new LessonConflictCheckerService(_ablemusicContext, lesson); Result <List <object> > lessonConflictCheckResult; try { lessonConflictCheckResult = await lessonConflictCheckerService.CheckBothRoomAndTeacher(); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message; return(BadRequest(result)); } if (!lessonConflictCheckResult.IsSuccess) { return(BadRequest(lessonConflictCheckResult)); } DateTime todoDate = lesson.BeginTime.Value.AddDays(-1); foreach (var holiday in holidays) { if (holiday.HolidayDate.Date == todoDate.Date) { todoDate = todoDate.AddDays(-1); } } DateTime remindScheduleDate = todoDate; lesson.LessonId = 0; lesson.IsCanceled = 0; lesson.Reason = null; lesson.CreatedAt = toNZTimezone(DateTime.UtcNow); lesson.GroupCourseInstanceId = null; lesson.IsTrial = 0; lesson.InvoiceNum = invoice.InvoiceNum; lesson.IsConfirm = 0; lesson.IsPaid = 1; lesson.TrialCourseId = null; lesson.IsChanged = 0; validMakeUpLesson.IsActive = 0; using (var dbContextTransaction = _ablemusicContext.Database.BeginTransaction()) { try { await _ablemusicContext.Lesson.AddAsync(lesson); await _ablemusicContext.SaveChangesAsync(); validMakeUpLesson.NewLessonId = lesson.LessonId; await _ablemusicContext.SaveChangesAsync(); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message; return(BadRequest(result)); } TodoRepository todoRepository = new TodoRepository(_ablemusicContext); todoRepository.AddSingleTodoList("Lesson Rearranged", TodoListContentGenerator.RearrangedSingleLessonWithoutOldLessonForLearner( learner, lesson, org, room, teacher), (short)userId, todoDate, lesson.LessonId, lesson.LearnerId, null); todoRepository.AddSingleTodoList("Lesson Rearranged", TodoListContentGenerator.RearrangedSingleLessonWithoutOldLessonForTeacher( learner, lesson, org, room, teacher), (short)userId, todoDate, lesson.LessonId, null, teacher.TeacherId); var saveTodoResult = await todoRepository.SaveTodoListsAsync(); if (!saveTodoResult.IsSuccess) { try { _ablemusicContext.Lesson.Remove(lesson); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message + "\n" + saveTodoResult.ErrorMessage; return(BadRequest(result)); } return(BadRequest(saveTodoResult)); } RemindLogRepository remindLogRepository = new RemindLogRepository(_ablemusicContext); remindLogRepository.AddSingleRemindLog(learner.LearnerId, learner.Email, RemindLogContentGenerator.RearrangedSingleLessonWithoutOldLessonForLearner( learner, lesson, org, room, teacher), null, "Lesson Rearranged", lesson.LessonId, remindScheduleDate); remindLogRepository.AddSingleRemindLog(null, teacher.Email, RemindLogContentGenerator.RearrangedSingleLessonWithoutOldLessonForTeacher( learner, lesson, org, room, teacher), teacher.TeacherId, "Lesson Rearranged", lesson.LessonId, remindScheduleDate); var saveRemindResult = await remindLogRepository.SaveRemindLogAsync(); if (!saveRemindResult.IsSuccess) { try { _ablemusicContext.Lesson.Remove(lesson); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message + "\n" + saveRemindResult.ErrorMessage; return(BadRequest(result)); } return(BadRequest(saveRemindResult)); } //sending Email //List<NotificationEventArgs> notifications = new List<NotificationEventArgs>(); foreach (var todo in saveTodoResult.Data) { var remind = saveRemindResult.Data.Find(r => r.LearnerId == todo.LearnerId && r.TeacherId == todo.TeacherId); string currentPersonName; if (todo.TeacherId == null) { currentPersonName = learner.FirstName + " " + learner.LastName; } else { currentPersonName = teacher.FirstName + " " + teacher.LastName; } string confirmURL = userConfirmUrlPrefix + todo.ListId + "/" + remind.RemindId; string mailContent = EmailContentGenerator.RearrangeLesson(currentPersonName, course.CourseName, lesson, confirmURL, org, room); remindLogRepository.UpdateContent(remind.RemindId, mailContent); //notifications.Add(new NotificationEventArgs(remind.Email, "Lesson Rearrange Confirm", mailContent, remind.RemindId)); } var remindLogUpdateContentResult = await remindLogRepository.SaveUpdatedContentAsync(); if (!remindLogUpdateContentResult.IsSuccess) { result.IsSuccess = false; result.ErrorMessage = remindLogUpdateContentResult.ErrorMessage; return(BadRequest(result)); } dbContextTransaction.Commit(); //foreach (var mail in notifications) //{ // _notificationObservable.send(mail); //} } result.Data = lesson; result.Data.Learner = null; result.Data.Org = null; result.Data.Room = null; result.Data.Teacher = null; return(Ok(result)); }