/// <summary> /// อัพเดทหรือเพิ่มข้อมูล Class calendar /// </summary> /// <param name="data">ข้อมูลที่ต้องการดำเนินการ</param> public void UpsertClassCalendar(ClassCalendar data) { var update = Builders<ClassCalendar>.Update .Set(it => it.BeginDate, data.BeginDate) .Set(it => it.ExpiredDate, data.ExpiredDate) .Set(it => it.CloseDate, data.CloseDate) .Set(it => it.ClassRoomId, data.ClassRoomId) .Set(it => it.CreatedDate, data.CreatedDate) .Set(it => it.DeletedDate, data.DeletedDate) .Set(it => it.LessonCalendars, data.LessonCalendars) .Set(it => it.Holidays, data.Holidays) .Set(it => it.ShiftDays, data.ShiftDays); var updateOption = new UpdateOptions { IsUpsert = true }; _mongoUtil.GetCollection<ClassCalendar>(TableName) .UpdateOne(it => it.id == data.id, update, updateOption); }
/// <summary> /// อัพเดทหรือเพิ่มข้อมูล Class calendar /// </summary> /// <param name="data">ข้อมูลที่ต้องการดำเนินการ</param> public void UpsertClassCalendar(ClassCalendar data) { var update = Builders<ClassCalendar>.Update .Set(it => it.BeginDate, data.BeginDate) .Set(it => it.IsWeekendHoliday, data.IsWeekendHoliday) .Set(it => it.ExpiredDate, data.ExpiredDate) .Set(it => it.CloseDate, data.CloseDate) .Set(it => it.ClassRoomId, data.ClassRoomId) .Set(it => it.LastCalculateHolidayRequest, data.LastCalculateHolidayRequest) .Set(it => it.LastCalculateHolidayComplete, data.LastCalculateHolidayComplete) .Set(it => it.CreatedDate, data.CreatedDate) .Set(it => it.DeletedDate, data.DeletedDate) .Set(it => it.LessonCalendars, data.LessonCalendars) .Set(it => it.Holidays, data.Holidays) .Set(it => it.ShiftDays, data.ShiftDays); var updateOption = new UpdateOptions { IsUpsert = true }; MongoAccess.MongoUtil.Instance.GetCollection<ClassCalendar>(TableName) .UpdateOne(it => it.id == data.id, update, updateOption); }
private async Task<bool> addNewCourseByTeacherCode(string code, string grade, UserProfile selectedUserProfile, DateTime currentTime) { var selectedContract = await _contractRepo.GetContractsByTeacherCode(code, grade); var isTeacherKey = selectedContract != null && !selectedContract.DeletedDate.HasValue && selectedContract.Licenses.Any(); if (!isTeacherKey) return false; var selectedLicense = selectedContract.Licenses .Where(it => !it.DeletedDate.HasValue) .FirstOrDefault(it => it.TeacherKeys.Any(t => !t.DeletedDate.HasValue && t.Code == code && t.Grade == grade)); if (selectedLicense == null) return false; var selectedTeacherKey = selectedLicense.TeacherKeys .Where(it => !it.DeletedDate.HasValue) .OrderBy(it => it.CreatedDate) .LastOrDefault(); if (selectedTeacherKey == null) return false; // Create new ClassRoom var selectedCourseCatalog = _courseCatalogRepo.GetCourseCatalogById(selectedLicense.CourseCatalogId); if (selectedCourseCatalog == null) return false; var lessonCatalogs = _lessonCatalogRepo.GetLessonCatalogByCourseCatalogId(selectedCourseCatalog.id).ToList(); if (lessonCatalogs == null || !lessonCatalogs.Any()) return false; var lessons = lessonCatalogs .Where(it => !it.DeletedDate.HasValue) .Select(it => new ClassRoom.Lesson { id = Guid.NewGuid().ToString(), LessonCatalogId = it.id }).ToList(); var newClassRoom = new ClassRoom { id = Guid.NewGuid().ToString(), Name = selectedCourseCatalog.SideName, CourseCatalogId = selectedCourseCatalog.id, CreatedDate = currentTime, LastUpdatedMessageDate = currentTime, Lessons = lessons }; await _classRoomRepo.CreateNewClassRoom(newClassRoom); // Create new ClassCalendar var lessonCalendars = lessonCatalogs .Where(it => !it.DeletedDate.HasValue) .Select(lesson => { var selectedLesson = lessons.FirstOrDefault(it => it.LessonCatalogId == lesson.id); return new ClassCalendar.LessonCalendar { id = Guid.NewGuid().ToString(), Order = lesson.Order, SemesterGroupName = lesson.SemesterName, BeginDate = currentTime, CreatedDate = currentTime, LessonId = selectedLesson.id, TopicOfTheDays = lesson.TopicOfTheDays .Where(it => !it.DeletedDate.HasValue) .Select(it => new ClassCalendar.TopicOfTheDay { id = it.id, Message = it.Message, SendOnDay = it.SendOnDay, CreatedDate = currentTime, }) }; }).ToList(); var newClassCalendar = new ClassCalendar { id = Guid.NewGuid().ToString(), ClassRoomId = newClassRoom.id, CreatedDate = currentTime, Holidays = Enumerable.Empty<DateTime>(), ShiftDays = Enumerable.Empty<DateTime>(), LessonCalendars = lessonCalendars }; await _classCalendarRepo.CreateNewClassCalendar(newClassCalendar); // Create new UserActivity var userActivity = selectedUserProfile.CreateNewUserActivity(newClassRoom, newClassCalendar, lessonCatalogs, currentTime); _userActivityRepo.UpsertUserActivity(userActivity); // Create new subscription var subscriptions = createNewSubscription(selectedUserProfile.Subscriptions, UserProfile.AccountRole.Teacher, newClassRoom, newClassCalendar.id, selectedLicense.id, currentTime); selectedUserProfile.Subscriptions = subscriptions; _userprofileRepo.UpsertUserProfile(selectedUserProfile); // Create new student key var newStudentKey = new StudentKey { id = Guid.NewGuid().ToString(), Grade = grade, Code = generateStudentCode(grade), CourseCatalogId = selectedCourseCatalog.id, ClassRoomId = newClassRoom.id, CreatedDate = currentTime }; await _studentKeyRepo.CreateNewStudentKey(newStudentKey); return true; }
private GetCourseScheduleRespond getCourseSchedule(ClassCalendar classCalendar, bool isComplete) { var runningLessonId = 1; var result = new GetCourseScheduleRespond { IsComplete = isComplete, BeginDate = classCalendar.BeginDate?.ToUniversalTime(), EndDate = classCalendar.ExpiredDate?.ToUniversalTime(), Lessons = classCalendar.LessonCalendars?.Select(it => new LessonSchedule { BeginDate = it.BeginDate.ToUniversalTime(), Name = $"Lesson {runningLessonId++}" }).ToList(), Holidays = classCalendar.Holidays ?? Enumerable.Empty<DateTime>(), ShiftDays = classCalendar.ShiftDays ?? Enumerable.Empty<DateTime>(), }; return result; }
private void setHolidayAndShiftDate(ClassCalendar classCalendar, SetScheduleWithWeekRequest body, DayOfWeek day, IEnumerable<DateTime> dateRange) { var qry = dateRange.Where(it => it.DayOfWeek == day); classCalendar.Holidays = body.IsHoliday ? classCalendar.Holidays.Union(qry) : classCalendar.Holidays.Except(qry); classCalendar.ShiftDays = body.IsShift ? classCalendar.ShiftDays.Union(qry) : classCalendar.ShiftDays.Except(qry); }
private ClassCalendar createClassCalendar(ClassRoom classRoom, IEnumerable<LessonCatalog> lessonCatalogs, DateTime currentTime) { var lessonOrderRunner = 1; var lessonCalendars = classRoom.Lessons.Select(it => { var lessonCatalog = lessonCatalogs.FirstOrDefault(lc => lc.id == it.LessonCatalogId); if (lessonCatalog == null) return null; var topicOfTheDays = lessonCatalog.TopicOfTheDays.Select(totd => new ClassCalendar.TopicOfTheDay { id = Guid.NewGuid().ToString(), CreatedDate = currentTime, Message = totd.Message, SendOnDay = totd.SendOnDay, RequiredSendTopicOfTheDayDate = currentTime }).ToList(); var result = new ClassCalendar.LessonCalendar { id = Guid.NewGuid().ToString(), Order = lessonOrderRunner++, BeginDate = currentTime.Date, CreatedDate = currentTime, LessonId = it.id, SemesterGroupName = lessonCatalog.SemesterName, TopicOfTheDays = topicOfTheDays }; return result; }).Where(it => it != null).ToList(); var classCalendar = new ClassCalendar { id = Guid.NewGuid().ToString(), BeginDate = currentTime.Date, ClassRoomId = classRoom.id, CreatedDate = currentTime, Holidays = Enumerable.Empty<DateTime>(), ShiftDays = Enumerable.Empty<DateTime>(), LessonCalendars = lessonCalendars, }; return classCalendar; }
/// <summary> /// สร้าง Class calendar ใหม่ /// </summary> /// <param name="data">ข้อมูล Class calendar ที่ต้องการสร้าง</param> public async Task CreateNewClassCalendar(ClassCalendar data) { await _mongoUtil.GetCollection<ClassCalendar>(TableName).InsertOneAsync(data); }
private void calculateCourseSchedule(ClassCalendar classCalendar) { var areArgumentsValid = classCalendar != null && classCalendar.BeginDate.HasValue && classCalendar.LessonCalendars != null && classCalendar.LessonCalendars.Any(); if (!areArgumentsValid) return; const int LessonDuration = 5; var currentBeginDate = classCalendar.BeginDate.Value.Date; var shiftDays = (classCalendar.ShiftDays ?? Enumerable.Empty<DateTime>()).Select(it => it.Date); var holidays = (classCalendar.Holidays ?? Enumerable.Empty<DateTime>()).Select(it => it.Date); var lessonQry = classCalendar.LessonCalendars.Where(it => !it.DeletedDate.HasValue).OrderBy(it => it.Order); foreach (var lesson in lessonQry) { while (true) { var beginDate = currentBeginDate; var endDate = currentBeginDate.AddDays(LessonDuration); var lessonRange = Enumerable.Range(0, LessonDuration).Select(it => beginDate.AddDays(it).Date); var availableRange = lessonRange.Except(holidays); if (availableRange.Any()) { lesson.BeginDate = availableRange.First(); var totalShiftDayInLessonRange = lessonRange.Intersect(shiftDays).Count(); var nextBeginDate = endDate.AddDays(totalShiftDayInLessonRange); currentBeginDate = nextBeginDate; break; } else { const int ShiftOneDayForNextLesson = 1; var nextBeginDate = endDate.AddDays(ShiftOneDayForNextLesson); currentBeginDate = nextBeginDate; } } } }
private GetCourseScheduleRespond getCourseSchedule(ClassCalendar classCalendar, bool isComplete) { const int LessonDuration = 5; var runningLessonId = 1; var result = new GetCourseScheduleRespond { IsComplete = isComplete, BeginDate = classCalendar.BeginDate, EndDate = classCalendar.LessonCalendars.OrderBy(it => it.Order).Last().BeginDate.AddDays(LessonDuration), Lessons = classCalendar.LessonCalendars.Select(it => new LessonSchedule { BeginDate = it.BeginDate, Name = string.Format("Lesson {0}", runningLessonId++) }).ToList(), Holidays = classCalendar.Holidays ?? Enumerable.Empty<DateTime>() }; return result; }
public static UserActivity CreateNewUserActivity(this UserProfile selectedUserProfile, ClassRoom selectedClassRoom, ClassCalendar selectedClassCalendar, List<LessonCatalog> lessonCatalogs, DateTime now) { var lessonActivities = selectedClassRoom.Lessons.Select(lessonInClassRoom => { var selectedLessonCalendar = selectedClassCalendar.LessonCalendars .Where(it => !it.DeletedDate.HasValue) .FirstOrDefault(lessonCalendar => lessonCalendar.LessonId == lessonInClassRoom.id); var selectedLessonCatalog = lessonCatalogs.FirstOrDefault(it => it.id == lessonInClassRoom.LessonCatalogId); var totalContentsAmount = selectedLessonCatalog.PostAssessments.Count() + selectedLessonCatalog.PreAssessments.Count() + selectedLessonCatalog.StudentItems.Count() + selectedLessonCatalog.TeacherItems.Count(); return new UserActivity.LessonActivity { id = Guid.NewGuid().ToString(), BeginDate = selectedLessonCalendar.BeginDate, TotalContentsAmount = totalContentsAmount, LessonId = lessonInClassRoom.id, SawContentIds = Enumerable.Empty<string>() }; }).ToList(); var userActivity = new UserActivity { id = Guid.NewGuid().ToString(), UserProfileName = selectedUserProfile.Name, UserProfileImageUrl = selectedUserProfile.ImageProfileUrl, UserProfileId = selectedUserProfile.id, ClassRoomId = selectedClassRoom.id, CreatedDate = now, LessonActivities = lessonActivities }; return userActivity; }