コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }