public async Task <IActionResult> Post([FromBody] TrialLessonViewModel trialLessonViewModel) { var result = new Result <Lesson>(); var lesson = new Lesson(); var payment = new Payment(); var invoiceWaiting = new InvoiceWaitingConfirm(); var invoice = new Invoice(); lesson.LearnerId = trialLessonViewModel.LearnerId; lesson.RoomId = trialLessonViewModel.RoomId; lesson.TeacherId = trialLessonViewModel.TeacherId; lesson.OrgId = trialLessonViewModel.OrgId; lesson.IsCanceled = 0; lesson.Reason = null; lesson.CreatedAt = toNZTimezone(DateTime.UtcNow); lesson.CourseInstanceId = null; lesson.GroupCourseInstanceId = null; lesson.IsTrial = 1; lesson.BeginTime = trialLessonViewModel.BeginTime; lesson.EndTime = trialLessonViewModel.EndTime; lesson.IsChanged = 0; lesson.IsConfirm = 0; lesson.TrialCourseId = trialLessonViewModel.TrialCourseId; lesson.IsPaid = trialLessonViewModel.IsPayNow?(short)1: (short)0; payment.PaymentMethod = trialLessonViewModel.PaymentMethod; payment.LearnerId = trialLessonViewModel.LearnerId; payment.Amount = trialLessonViewModel.Amount; payment.CreatedAt = toNZTimezone(DateTime.UtcNow); payment.StaffId = trialLessonViewModel.StaffId; payment.InvoiceId = null; payment.BeforeBalance = null; payment.AfterBalance = null; payment.PaymentType = 3; payment.IsConfirmed = 0; payment.Comment = null; invoiceWaiting.LessonFee = trialLessonViewModel.Amount; invoiceWaiting.LearnerId = trialLessonViewModel.LearnerId; invoiceWaiting.LearnerName = await _ablemusicContext.Learner. Where(l => l.LearnerId == trialLessonViewModel.LearnerId).Select(l => l.FirstName).FirstOrDefaultAsync(); invoiceWaiting.BeginDate = trialLessonViewModel.BeginTime.Value.Date; invoiceWaiting.EndDate = trialLessonViewModel.BeginTime.Value.Date; invoiceWaiting.TotalFee = trialLessonViewModel.Amount; invoiceWaiting.DueDate = trialLessonViewModel.BeginTime.Value.Date; invoiceWaiting.PaidFee = 0; invoiceWaiting.OwingFee = trialLessonViewModel.Amount; invoiceWaiting.CreatedAt = toNZTimezone(DateTime.UtcNow); invoiceWaiting.IsPaid = 0; invoiceWaiting.TermId = await _ablemusicContext.Term. Where(t => t.BeginDate <= trialLessonViewModel.BeginTime.Value && t.EndDate >= trialLessonViewModel.BeginTime.Value ).Select(l => l.TermId).FirstOrDefaultAsync(); invoiceWaiting.LessonQuantity = 1; invoiceWaiting.CourseName = "Trial Lesson"; invoiceWaiting.IsConfirmed = 1; invoiceWaiting.IsEmailSent = 0; invoiceWaiting.IsActivate = 1; List <Lesson> conflictRooms = new List <Lesson>(); List <Lesson> conflictTeacherLessons = new List <Lesson>(); DateTime beginTime = lesson.BeginTime.Value.AddMinutes(-60); DateTime endTime = lesson.EndTime.Value.AddMinutes(60); 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)); } try { await _ablemusicContext.Lesson.AddAsync(lesson); if (trialLessonViewModel.IsPayNow) { await _ablemusicContext.Payment.AddAsync(payment); } else { await _ablemusicContext.InvoiceWaitingConfirm.AddAsync(invoiceWaiting); invoiceWaiting.InvoiceNum = invoiceWaiting.WaitingId.ToString(); _mapper.Map(invoiceWaiting, invoice); invoice.IsActive = 1; await _ablemusicContext.Invoice.AddAsync(invoice); } await _ablemusicContext.SaveChangesAsync(); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message; return(BadRequest(result)); } result.Data = lesson; return(Ok(result)); }
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)); }
public async Task <IActionResult> PutLesson(short userId, [FromBody] LessonViewModel lessonViewmodel) { var result = new Result <Lesson>(); string userConfirmUrlPrefix = _configuration.GetSection("UrlPrefix").Value; Lesson newLesson = new Lesson(); Lesson oldLesson = new Lesson(); _mapper.Map(lessonViewmodel, newLesson); try { oldLesson = await _ablemusicContext.Lesson.Where(l => l.LessonId == newLesson.LessonId).FirstOrDefaultAsync(); } catch (Exception ex) { result.IsFound = false; result.IsSuccess = false; result.ErrorMessage = ex.ToString(); return(NotFound(result)); } if (oldLesson == null) { result.IsFound = false; result.IsSuccess = false; result.ErrorMessage = "Lesson id not found"; return(NotFound(result)); } TimeSpan lessonDuration = oldLesson.EndTime.Value.Subtract(oldLesson.BeginTime.Value); newLesson.EndTime = newLesson.BeginTime.Value.Add(lessonDuration); var lessonConflictCheckerService = new LessonConflictCheckerService(_ablemusicContext, newLesson.BeginTime.Value, newLesson.EndTime.Value, newLesson.RoomId.Value, newLesson.OrgId, (int)newLesson.TeacherId, oldLesson.LessonId); 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)); } Learner learner = new Learner(); List <Learner> learners = new List <Learner>(); Teacher newTeacher; Teacher oldTeacher; pegasusContext.Org oldOrg; pegasusContext.Org newOrg; Room oldRoom; Room newRoom; Course course; List <Holiday> holidays; try { if (oldLesson.CourseInstanceId != null) { learner = await _ablemusicContext.Learner.FirstOrDefaultAsync(l => l.LearnerId == oldLesson.LearnerId); course = await(from c in _ablemusicContext.Course join oto in _ablemusicContext.One2oneCourseInstance on c.CourseId equals oto.CourseId join l in _ablemusicContext.Lesson on oto.CourseInstanceId equals l.CourseInstanceId where l.LessonId == newLesson.LessonId select new Course { CourseId = c.CourseId, CourseName = c.CourseName }).FirstOrDefaultAsync(); } else { learners = await(from gc in _ablemusicContext.GroupCourseInstance join lgc in _ablemusicContext.LearnerGroupCourse on gc.GroupCourseInstanceId equals lgc.GroupCourseInstanceId join l in _ablemusicContext.Learner on lgc.LearnerId equals l.LearnerId where gc.GroupCourseInstanceId == oldLesson.GroupCourseInstanceId select l ).ToListAsync(); course = await(from c in _ablemusicContext.Course join gc in _ablemusicContext.GroupCourseInstance on c.CourseId equals gc.CourseId join l in _ablemusicContext.Lesson on gc.GroupCourseInstanceId equals l.GroupCourseInstanceId where l.LessonId == newLesson.LessonId select new Course { CourseId = c.CourseId, CourseName = c.CourseName }).FirstOrDefaultAsync(); } newTeacher = await _ablemusicContext.Teacher.FirstOrDefaultAsync(t => t.TeacherId == newLesson.TeacherId); oldTeacher = newLesson.TeacherId == oldLesson.TeacherId ? newTeacher : await _ablemusicContext.Teacher.FirstOrDefaultAsync(t => t.TeacherId == oldLesson.TeacherId); if (oldLesson.IsTrial == 1) { course = await _ablemusicContext.Course.Where(c => c.CourseId == oldLesson.TrialCourseId).FirstOrDefaultAsync(); } holidays = await _ablemusicContext.Holiday.ToListAsync(); oldOrg = await _ablemusicContext.Org.Where(o => o.OrgId == oldLesson.OrgId).FirstOrDefaultAsync(); newOrg = newLesson.OrgId == oldLesson.OrgId ? oldOrg : await _ablemusicContext.Org.Where(o => o.OrgId == newLesson.OrgId).FirstOrDefaultAsync(); oldRoom = await _ablemusicContext.Room.Where(r => r.RoomId == oldLesson.RoomId).FirstOrDefaultAsync(); newRoom = newLesson.RoomId == oldLesson.RoomId ? oldRoom : await _ablemusicContext.Room.Where(r => r.RoomId == newLesson.RoomId).FirstOrDefaultAsync(); } catch (Exception e) { result.IsSuccess = false; result.ErrorMessage = e.Message; return(NotFound(result)); } if (course == null) { result.IsSuccess = false; result.ErrorMessage = "Fail to found course name under this lesson"; return(NotFound(result)); } string courseName = course.CourseName; DateTime oldTodoDate = oldLesson.BeginTime.Value.AddDays(-1); DateTime newTodoDate = newLesson.BeginTime.Value.AddDays(-1); foreach (var holiday in holidays) { if (holiday.HolidayDate.Date == oldTodoDate.Date) { oldTodoDate = oldTodoDate.AddDays(-1); } if (holiday.HolidayDate.Date == newTodoDate.Date) { newTodoDate = newTodoDate.AddDays(-1); } } DateTime oldRemindScheduledDate = oldTodoDate; DateTime newRemindScheduledDate = newTodoDate; oldLesson.IsCanceled = 1; oldLesson.IsChanged = 1; oldLesson.NewLessonId = 1; oldLesson.Reason = newLesson.Reason; newLesson.LessonId = 0; newLesson.LearnerId = oldLesson.LearnerId; newLesson.IsCanceled = 0; newLesson.Reason = ""; newLesson.CreatedAt = toNZTimezone(DateTime.UtcNow); newLesson.CourseInstanceId = oldLesson.CourseInstanceId; newLesson.GroupCourseInstanceId = oldLesson.GroupCourseInstanceId; newLesson.IsTrial = oldLesson.IsTrial; newLesson.TrialCourseId = oldLesson.TrialCourseId; newLesson.InvoiceNum = oldLesson.InvoiceNum; newLesson.IsPaid = oldLesson.IsPaid; //newLesson.NewLessonId = oldLesson.NewLessonId; newLesson.IsChanged = 0; using (var dbContextTransaction = _ablemusicContext.Database.BeginTransaction()) { try { await _ablemusicContext.Lesson.AddAsync(newLesson); oldLesson.NewLessonId = newLesson.LessonId; await _ablemusicContext.SaveChangesAsync(); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.ToString(); return(BadRequest(result)); } TodoRepository todoRepository = new TodoRepository(_ablemusicContext); if (oldLesson.CourseInstanceId != null) { todoRepository.AddSingleTodoList("Lesson Rearrangement to Remind", TodoListContentGenerator.RearrangedSingleLessonWithOldLessonForLearner( oldLesson, newLesson, learner, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom), userId, newTodoDate, newLesson.LessonId, learner.LearnerId, null); todoRepository.AddSingleTodoList("Lesson Rearrangement to Remind", TodoListContentGenerator.RearrangedSingleLessonWithOldLessonForLearner( oldLesson, newLesson, learner, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom), userId, oldTodoDate, oldLesson.LessonId, learner.LearnerId, null); } else { Dictionary <int, string> learnerIdMapContent = new Dictionary <int, string>(); foreach (var l in learners) { learnerIdMapContent.Add(l.LearnerId, TodoListContentGenerator.RearrangedSingleLessonWithOldLessonForLearner(oldLesson, newLesson, l, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom)); } todoRepository.AddMutipleTodoLists("Lesson Rearrangement to Remind", learnerIdMapContent, userId, newTodoDate, newLesson.LessonId, null); todoRepository.AddMutipleTodoLists("Lesson Rearrangement to Remind", learnerIdMapContent, userId, oldTodoDate, newLesson.LessonId, null); } todoRepository.AddSingleTodoList("Lesson Rearrangement to Remind", TodoListContentGenerator.RearrangedSingleLessonWithOldLessonForOldTeacher( oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom), userId, newTodoDate, newLesson.LessonId, null, oldTeacher.TeacherId); todoRepository.AddSingleTodoList("Lesson Rearrangement to Remind", TodoListContentGenerator.RearrangedSingleLessonWithOldLessonForNewTeacher( oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom), userId, newTodoDate, newLesson.LessonId, null, newTeacher.TeacherId); todoRepository.AddSingleTodoList("Lesson Rearrangement to Remind", TodoListContentGenerator.RearrangedSingleLessonWithOldLessonForOldTeacher( oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom), userId, oldTodoDate, oldLesson.LessonId, null, oldTeacher.TeacherId); todoRepository.AddSingleTodoList("Lesson Rearrangement to Remind", TodoListContentGenerator.RearrangedSingleLessonWithOldLessonForNewTeacher( oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom), userId, oldTodoDate, oldLesson.LessonId, null, newTeacher.TeacherId); var saveTodoResult = await todoRepository.SaveTodoListsAsync(); if (!saveTodoResult.IsSuccess) { return(BadRequest(saveTodoResult)); } RemindLogRepository remindLogRepository = new RemindLogRepository(_ablemusicContext); DateTime earlyDate = newRemindScheduledDate >= oldRemindScheduledDate ? oldRemindScheduledDate : newRemindScheduledDate; DateTime laterDate = newRemindScheduledDate >= oldRemindScheduledDate ? newRemindScheduledDate : oldRemindScheduledDate; DateTime laterDateNoticeWeekBefore = laterDate.AddDays(-7); int dateDifferentBetweenNowAndEarlyDate = (int)(earlyDate - DateTime.UtcNow.ToNZTimezone()).TotalDays; int dateDifferentBetweenEarlyDateAndLaterDate = (int)(laterDate - earlyDate).TotalDays; if (dateDifferentBetweenNowAndEarlyDate < 7 & dateDifferentBetweenNowAndEarlyDate > 1) { earlyDate = DateTime.UtcNow.ToNZTimezone().AddDays(1); } List <DateTime> remindScheduledDates = new List <DateTime> { earlyDate, laterDate }; foreach (var remindScheduleDate in remindScheduledDates) { if (oldLesson.CourseInstanceId != null) { remindLogRepository.AddSingleRemindLog(learner.LearnerId, learner.Email, RemindLogContentGenerator.RearrangedSingleLessonWithOldLessonForLearner( oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom, courseName), null, "Lesson Rearrangement Remind", newLesson.LessonId, remindScheduleDate); } else { Dictionary <Learner, string> learnerMapContent = new Dictionary <Learner, string>(); foreach (var l in learners) { learnerMapContent.Add(l, RemindLogContentGenerator.RearrangedSingleLessonWithOldLessonForLearner(oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom, courseName)); } remindLogRepository.AddMultipleRemindLogs(learnerMapContent, null, "Lesson rearrangement Remind", newLesson.LessonId, remindScheduleDate); } remindLogRepository.AddSingleRemindLog(null, oldTeacher.Email, RemindLogContentGenerator.RearrangedSingleLessonWithOldLessonForOldTeacher( oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom, courseName), oldTeacher.TeacherId, "Lesson Rearrangement Remind", oldLesson.LessonId, remindScheduleDate); remindLogRepository.AddSingleRemindLog(null, newTeacher.Email, RemindLogContentGenerator.RearrangedSingleLessonWithOldLessonForNewTeacher( oldLesson, newLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom, courseName), newTeacher.TeacherId, "Lesson Rearrangement Remind", newLesson.LessonId, remindScheduleDate); } foreach (var remindlog in remindLogRepository._remindLogs.Reverse <RemindLog>()) { if (remindlog.ScheduledDate <= DateTime.UtcNow.ToNZTimezone()) { remindLogRepository._remindLogs.Remove(remindlog); } if (dateDifferentBetweenEarlyDateAndLaterDate <= 7) { if (remindlog.ScheduledDate.Value.Date == laterDateNoticeWeekBefore.Date) { remindLogRepository._remindLogs.Remove(remindlog); } } } var saveRemindLogResult = await remindLogRepository.SaveRemindLogAsync(); if (!saveRemindLogResult.IsSuccess) { try { oldLesson.IsCanceled = 0; oldLesson.Reason = ""; _ablemusicContext.Lesson.Remove(newLesson); await _ablemusicContext.SaveChangesAsync(); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message + "\n" + saveTodoResult.ErrorMessage; return(BadRequest(result)); } return(BadRequest(saveRemindLogResult)); } //sending Email //List<NotificationEventArgs> notifications = new List<NotificationEventArgs>(); foreach (var remind in saveRemindLogResult.Data) { var todo = saveTodoResult.Data.Find(t => t.LearnerId == remind.LearnerId && t.TeacherId == remind.TeacherId && t.TodoDate == newTodoDate); string currentPersonName; if (remind.TeacherId == null) { currentPersonName = learner.FirstName + " " + learner.LastName; } else { currentPersonName = remind.TeacherId == newTeacher.TeacherId ? newTeacher.FirstName + " " + newTeacher.LastName : oldTeacher.FirstName + " " + oldTeacher.LastName; } string confirmURL = userConfirmUrlPrefix + todo.ListId + "/" + remind.RemindId; string mailContent = EmailContentGenerator.RearrangeLessonWithOld(currentPersonName, courseName, confirmURL, oldLesson, oldTeacher, newTeacher, oldOrg, newOrg, oldRoom, newRoom); 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)); } //foreach (var mail in notifications) //{ // _notificationObservable.send(mail); //} dbContextTransaction.Commit(); } result.IsSuccess = true; //result.Data = newLesson; return(Ok(result)); }
public async Task <IActionResult> RegistTrial([FromBody] TrialLessonAndLearnerModel trialLessonViewModel) { var result = new Result <Lesson>(); var lesson = new Lesson(); var payment = new Payment(); var learner = new Learner(); var invoiceWaiting = new InvoiceWaitingConfirm(); var invoice = new Invoice(); using (var dbContextTransaction = _ablemusicContext.Database.BeginTransaction()) { learner.FirstName = trialLessonViewModel.FirstName; learner.LastName = trialLessonViewModel.LastName; learner.ContactNum = trialLessonViewModel.ContactNum; learner.Email = trialLessonViewModel.Email; learner.EnrollDate = toNZTimezone(DateTime.UtcNow); learner.OrgId = trialLessonViewModel.OrgId; learner.CreatedAt = toNZTimezone(DateTime.UtcNow); learner.IsActive = 1; //learner.LearnerLevel = 0; learner.PaymentPeriod = 1; // learner.LevelType = 1; _ablemusicContext.Add(learner); await _ablemusicContext.SaveChangesAsync(); // var fundItem = new Fund { Balance = 0, LearnerId = newLearner.LearnerId }; _ablemusicContext.Add(new Fund { Balance = 0, LearnerId = learner.LearnerId }); await _ablemusicContext.SaveChangesAsync(); _ablemusicContext.Add(new User { UserName = "******" + learner.LearnerId.ToString(), Password = "******", CreatedAt = toNZTimezone(DateTime.UtcNow), RoleId = 4, IsActivate = 1 }); await _ablemusicContext.SaveChangesAsync(); lesson.LearnerId = learner.LearnerId; lesson.RoomId = trialLessonViewModel.RoomId; lesson.TeacherId = trialLessonViewModel.TeacherId; lesson.OrgId = trialLessonViewModel.OrgId; lesson.IsCanceled = 0; lesson.Reason = null; lesson.CreatedAt = toNZTimezone(DateTime.UtcNow); lesson.CourseInstanceId = null; lesson.GroupCourseInstanceId = null; lesson.IsTrial = 1; lesson.BeginTime = trialLessonViewModel.BeginTime; lesson.EndTime = trialLessonViewModel.EndTime; lesson.IsChanged = 2; lesson.IsConfirm = 0; lesson.TrialCourseId = trialLessonViewModel.TrialCourseId; lesson.IsPaid = trialLessonViewModel.IsPayNow ? (short)1 : (short)0; payment.PaymentMethod = trialLessonViewModel.PaymentMethod; payment.LearnerId = learner.LearnerId; payment.Amount = trialLessonViewModel.Amount; payment.CreatedAt = toNZTimezone(DateTime.UtcNow); payment.StaffId = trialLessonViewModel.StaffId; payment.InvoiceId = null; payment.BeforeBalance = null; payment.AfterBalance = null; payment.PaymentType = 3; payment.IsConfirmed = 0; payment.Comment = null; invoiceWaiting.LessonFee = trialLessonViewModel.Amount; invoiceWaiting.LearnerId = learner.LearnerId; invoiceWaiting.LearnerName = await _ablemusicContext.Learner. Where(l => l.LearnerId == learner.LearnerId).Select(l => l.FirstName).FirstOrDefaultAsync(); invoiceWaiting.BeginDate = trialLessonViewModel.BeginTime.Value.Date; invoiceWaiting.EndDate = trialLessonViewModel.BeginTime.Value.Date; invoiceWaiting.TotalFee = trialLessonViewModel.Amount; invoiceWaiting.DueDate = trialLessonViewModel.BeginTime.Value.Date.AddDays(7); invoiceWaiting.PaidFee = 0; invoiceWaiting.OwingFee = trialLessonViewModel.Amount; invoiceWaiting.CreatedAt = toNZTimezone(DateTime.UtcNow); invoiceWaiting.IsPaid = 0; invoiceWaiting.TermId = await _ablemusicContext.Term. Where(t => t.BeginDate <= trialLessonViewModel.BeginTime.Value && t.EndDate >= trialLessonViewModel.BeginTime.Value ).Select(l => l.TermId).FirstOrDefaultAsync(); invoiceWaiting.LessonQuantity = 1; invoiceWaiting.CourseName = "Trial Lesson"; invoiceWaiting.IsConfirmed = 1; invoiceWaiting.IsEmailSent = 0; invoiceWaiting.IsActivate = 1; List <Lesson> conflictRooms = new List <Lesson>(); List <Lesson> conflictTeacherLessons = new List <Lesson>(); DateTime beginTime = lesson.BeginTime.Value.AddMinutes(-60); DateTime endTime = lesson.EndTime.Value.AddMinutes(60); var lessonConflictCheckerService = new LessonConflictCheckerService(_ablemusicContext, lesson); Result <List <object> > lessonConflictCheckResult; try { lessonConflictCheckResult = await lessonConflictCheckerService.CheckBothRoomAndTeacher(); } catch (Exception ex) { dbContextTransaction.Rollback(); result.IsSuccess = false; result.ErrorMessage = ex.Message; return(BadRequest(result)); } if (!lessonConflictCheckResult.IsSuccess) { return(BadRequest(lessonConflictCheckResult)); } try { if (trialLessonViewModel.IsPayNow) { await _ablemusicContext.Payment.AddAsync(payment); } else { await _ablemusicContext.InvoiceWaitingConfirm.AddAsync(invoiceWaiting); await _ablemusicContext.SaveChangesAsync(); invoiceWaiting.InvoiceNum = invoiceWaiting.WaitingId.ToString(); _mapper.Map(invoiceWaiting, invoice); invoice.IsActive = 1; await _ablemusicContext.Invoice.AddAsync(invoice); } lesson.InvoiceNum = invoiceWaiting.InvoiceNum; await _ablemusicContext.Lesson.AddAsync(lesson); await _ablemusicContext.SaveChangesAsync(); dbContextTransaction.Commit(); } catch (Exception ex) { dbContextTransaction.Rollback(); result.IsSuccess = false; result.ErrorMessage = ex.Message; return(BadRequest(result)); } result.Data = lesson; return(Ok(result)); } }
//补一节课 public async Task <IActionResult> PutGroupMakeupLesson(short userId, [FromBody] GroupMakeupLessonViewModel lessonViewmodel) { var result = new Result <Lesson>(); var awaitMakeUpLesson = new AwaitMakeUpLesson(); Lesson newLesson = new Lesson(); Lesson oldLesson = new Lesson(); _mapper.Map(lessonViewmodel, newLesson); try { awaitMakeUpLesson = await _ablemusicContext.AwaitMakeUpLesson.Where(l => l.AwaitId == lessonViewmodel.AwaitId).FirstOrDefaultAsync(); if (awaitMakeUpLesson == null) { throw new Exception("Missed Lesson id not found"); } oldLesson = await _ablemusicContext.Lesson.Where(l => l.LessonId == awaitMakeUpLesson.MissedLessonId).FirstOrDefaultAsync(); if (oldLesson == null) { throw new Exception("Old Lesson not found"); } } catch (Exception ex) { result.IsFound = false; result.IsSuccess = false; result.ErrorMessage = ex.ToString(); return(NotFound(result)); } TimeSpan lessonDuration = oldLesson.EndTime.Value.Subtract(oldLesson.BeginTime.Value); newLesson.EndTime = newLesson.BeginTime.Value.Add(lessonDuration); var lessonConflictCheckerService = new LessonConflictCheckerService(_ablemusicContext, newLesson.BeginTime.Value, newLesson.EndTime.Value, newLesson.RoomId.Value, newLesson.OrgId, (int)newLesson.TeacherId, oldLesson.LessonId); 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)); } newLesson.LessonId = 0; newLesson.LearnerId = oldLesson.LearnerId; newLesson.IsCanceled = 0; newLesson.Reason = ""; newLesson.CreatedAt = toNZTimezone(DateTime.UtcNow); newLesson.CourseInstanceId = oldLesson.CourseInstanceId; newLesson.GroupCourseInstanceId = oldLesson.GroupCourseInstanceId; newLesson.IsTrial = oldLesson.IsTrial; newLesson.TrialCourseId = oldLesson.TrialCourseId; newLesson.InvoiceNum = oldLesson.InvoiceNum; newLesson.IsPaid = oldLesson.IsPaid; newLesson.IsConfirm = oldLesson.IsConfirm; //newLesson.NewLessonId = oldLesson.NewLessonId; newLesson.IsChanged = 2; using (var dbContextTransaction = _ablemusicContext.Database.BeginTransaction()) { try { await _ablemusicContext.Lesson.AddAsync(newLesson); await _ablemusicContext.SaveChangesAsync(); awaitMakeUpLesson.NewLessonId = newLesson.LessonId; awaitMakeUpLesson.IsActive = 0; _ablemusicContext.Update(awaitMakeUpLesson); await _ablemusicContext.SaveChangesAsync(); } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.ToString(); return(BadRequest(result)); } dbContextTransaction.Commit(); } result.IsSuccess = true; //result.Data = newLesson; return(Ok(result)); }