Example #1
0
        public JsonResult GetTimeTable(long ID)
        {
            ResultInfo <TimeTableDetails> ResultInfo = new ResultInfo <TimeTableDetails>()
            {
                Status      = false,
                Description = "Failed|Login",
                ErrorCode   = 400,
            };

            try
            {
                TimeTableDetails temp = new TimeTableDetails();
                Hod obj = new Hod();
                temp.WeekList      = obj.GetAllWeekdays();
                temp.PeriodList    = obj.GetAllperiods();
                temp.TimeTableList = obj.GetAllTimeTableList(ID);
                ResultInfo.Info    = temp;
                if (ResultInfo.Info != null)
                {
                    ResultInfo.Description = "Success| Get time table details";
                    ResultInfo.Status      = true;
                    ResultInfo.ErrorCode   = 200;
                }
            }
            catch (Exception ex)
            {
            }
            return(Json(ResultInfo, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// Method for updating a time table details
        /// </summary>
        /// <param name="addedTimeTable"></param>
        /// <param name="instituteId"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <dynamic> UpdateTimeTableAsync(AddTimeTableAc addedTimeTable, int instituteId, ApplicationUser currentUser)
        {
            #region Update time table

            TimeTable timeTable = await _imsDbContext.TimeTables.FirstAsync(x => x.Id == addedTimeTable.TimeTable.Id);

            timeTable.AcademicYearId  = addedTimeTable.TimeTable.AcademicYearId;
            timeTable.ClassId         = addedTimeTable.TimeTable.ClassId;
            timeTable.SectionId       = addedTimeTable.TimeTable.SectionId;
            timeTable.InstituteId     = instituteId;
            timeTable.PeriodCount     = addedTimeTable.TimeTable.PeriodCount;
            timeTable.PeriodDuration  = addedTimeTable.TimeTable.PeriodDuration;
            timeTable.PeriodStartTime = addedTimeTable.TimeTable.PeriodStartTime;
            timeTable.BreaksCount     = addedTimeTable.TimeTable.BreaksCount;

            _imsDbContext.TimeTables.Update(timeTable);
            await _imsDbContext.SaveChangesAsync();

            #endregion

            #region Update time table details

            List <TimeTableDetails> existingTimeTableDetails = await _imsDbContext.TimeTableDetails.Where(x => x.TimeTableId == timeTable.Id).ToListAsync();

            List <TimeTableDetails> addedTimeTableDetailsList = new List <TimeTableDetails>();
            foreach (TimeTableDetailsAc addedTimeTableDetailsAc in addedTimeTable.TimeTableSubjectDetailsList)
            {
                TimeTableDetails timeTableDetails = existingTimeTableDetails.FirstOrDefault(x => x.WeekDaysEnum == addedTimeTableDetailsAc.WeekDaysEnum && x.PeriodNumber == addedTimeTableDetailsAc.PeriodNumber);
                if (timeTableDetails == null)
                {
                    addedTimeTableDetailsList.Add(new TimeTableDetails
                    {
                        SubjectId    = addedTimeTableDetailsAc.SubjectId,
                        TimeTableId  = timeTable.Id,
                        WeekDaysEnum = addedTimeTableDetailsAc.WeekDaysEnum,
                        PeriodNumber = addedTimeTableDetailsAc.PeriodNumber
                    });
                }
                else
                {
                    timeTableDetails.SubjectId = addedTimeTableDetailsAc.SubjectId;
                    _imsDbContext.Update(timeTableDetails);
                }
            }
            if (addedTimeTableDetailsList.Count > 0)
            {
                _imsDbContext.TimeTableDetails.AddRange(addedTimeTableDetailsList);
            }
            await _imsDbContext.SaveChangesAsync();

            #endregion

            #region Update time table break details

            List <TimeTableBreakDetails> existingTimeTableBreakDetails = await _imsDbContext.TimeTableBreakDetails.Where(x => x.TimeTableId == timeTable.Id).ToListAsync();

            _imsDbContext.TimeTableBreakDetails.RemoveRange(existingTimeTableBreakDetails);

            List <TimeTableBreakDetails> timeTableBreakDetailsList = new List <TimeTableBreakDetails>();
            foreach (TimeTableBreakDetailsAc timeTableBreakDetailsAc in addedTimeTable.TimeTableBreakDetailsList)
            {
                timeTableBreakDetailsList.Add(new TimeTableBreakDetails
                {
                    TimeTableId      = timeTable.Id,
                    BreakAfterPeriod = timeTableBreakDetailsAc.BreakAfterPeriod,
                    BreakDuration    = timeTableBreakDetailsAc.BreakDuration
                });
            }
            _imsDbContext.TimeTableBreakDetails.AddRange(timeTableBreakDetailsList);
            await _imsDbContext.SaveChangesAsync();

            #endregion

            return(new { Message = "Time table updated successfully" });
        }
        /// <summary>
        /// Method for fetching the details of a time table based on class, section, institute and academic year
        /// </summary>
        /// <param name="classId"></param>
        /// <param name="sectionId"></param>
        /// <param name="academicYearId"></param>
        /// <param name="instituteId"></param>
        /// <returns></returns>
        public async Task <AddTimeTableAc> GetTimeTableDetailsAsync(int classId, int sectionId, int academicYearId, int instituteId)
        {
            AddTimeTableAc timeTableObj = new AddTimeTableAc();
            TimeTable      timeTable    = await _imsDbContext.TimeTables.FirstOrDefaultAsync(x => x.ClassId == classId && x.SectionId == sectionId &&
                                                                                             x.AcademicYearId == academicYearId && x.InstituteId == instituteId);

            if (timeTable != null)
            {
                #region Set time table data

                TimeTableAc timeTableAc = new TimeTableAc
                {
                    Id              = timeTable.Id,
                    AcademicYearId  = timeTable.AcademicYearId,
                    ClassId         = timeTable.ClassId,
                    SectionId       = timeTable.SectionId,
                    PeriodCount     = timeTable.PeriodCount,
                    PeriodDuration  = timeTable.PeriodDuration,
                    PeriodStartTime = timeTable.PeriodStartTime,
                    BreaksCount     = timeTable.BreaksCount
                };
                timeTableObj.TimeTable = timeTableAc;

                #endregion

                #region Set time table break details

                timeTableObj.TimeTableBreakDetailsList = new List <TimeTableBreakDetailsAc>();
                List <TimeTableBreakDetails> timeTableBreakDetailsList = await _imsDbContext.TimeTableBreakDetails
                                                                         .Where(x => x.TimeTableId == timeTable.Id).ToListAsync();

                foreach (TimeTableBreakDetails timeTableBreakDetails in timeTableBreakDetailsList)
                {
                    timeTableObj.TimeTableBreakDetailsList.Add(new TimeTableBreakDetailsAc
                    {
                        Id               = timeTableBreakDetails.Id,
                        TimeTableId      = timeTableBreakDetails.TimeTableId,
                        BreakAfterPeriod = timeTableBreakDetails.BreakAfterPeriod,
                        BreakDuration    = timeTableBreakDetails.BreakDuration
                    });
                }

                #endregion

                #region Set time table details

                timeTableObj.TimeTableSubjectDetailsList = new List <TimeTableDetailsAc>();
                List <TimeTableDetails> timeTableDetailsList = await _imsDbContext.TimeTableDetails
                                                               .Include(x => x.Subject)
                                                               .Where(x => x.TimeTableId == timeTable.Id).ToListAsync();

                List <WeekDaysEnumDetails> weekDaysEnumDetailsList = GetDaysOfWeek(instituteId);

                foreach (WeekDaysEnumDetails weekDaysEnumDetails in weekDaysEnumDetailsList)
                {
                    TimeTableDetailsAc timeTableDetailsAc = new TimeTableDetailsAc
                    {
                        WeekDaysEnum       = weekDaysEnumDetails.WeekDaysEnum,
                        WeekDaysEnumString = weekDaysEnumDetails.WeekDaysEnumString
                    };

                    timeTableDetailsAc.TimeTableWeekDaySubjectList = new List <TimeTableDetailsAc>();
                    int periodNo = 1;
                    for (int i = 0; i < timeTableAc.PeriodCount + timeTableAc.BreaksCount; i++)
                    {
                        bool             isBreakPeriod    = CheckBreakPeriod(i, timeTableObj.TimeTableBreakDetailsList);
                        TimeTableDetails timeTableDetails = null;
                        if (!isBreakPeriod)
                        {
                            timeTableDetails = timeTableDetailsList.FirstOrDefault(x => x.PeriodNumber == periodNo && x.WeekDaysEnum == weekDaysEnumDetails.WeekDaysEnum);
                            periodNo++;
                        }

                        timeTableDetailsAc.TimeTableWeekDaySubjectList.Add(new TimeTableDetailsAc
                        {
                            Id                 = (timeTableDetails == null) ? 0 : timeTableDetails.Id,
                            PeriodNumber       = (timeTableDetails == null) ? (i + 1) : timeTableDetails.PeriodNumber,
                            SubjectId          = (timeTableDetails == null) ? 0 : timeTableDetails.SubjectId,
                            TimeTableId        = (timeTableDetails == null) ? 0 : timeTableDetails.TimeTableId,
                            WeekDaysEnum       = (timeTableDetails == null) ? weekDaysEnumDetails.WeekDaysEnum : timeTableDetails.WeekDaysEnum,
                            WeekDaysEnumString = (timeTableDetails == null) ? weekDaysEnumDetails.WeekDaysEnumString : EnumHelperService.GetDescription(timeTableDetails.WeekDaysEnum),
                            SubjectName        = timeTableDetails?.Subject?.Name,
                            SubjectCode        = timeTableDetails?.Subject?.Code,
                            IsBreakPeriod      = isBreakPeriod
                        });
                    }

                    timeTableObj.TimeTableSubjectDetailsList.Add(timeTableDetailsAc);
                }

                #endregion
            }
            return(timeTableObj);
        }