/// <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);
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
        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);
 }
Exemplo n.º 8
0
        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;
                    }
                }
            }
        }
Exemplo n.º 9
0
 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;
 }
Exemplo n.º 10
0
        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;
        }