public ScheduledClassDto GetScheduledClass(string id)
        {
            var scheduledClass = _context.ScheduledClasses
                                 .Include("ClassType")
                                 .Include("Instructor")
                                 .FirstOrDefault(x => x.Id == id);

            if (scheduledClass == null)
            {
                _logger.Warn($"ScheduledClass ID {id} not found in database");
                return(null);
            }

            var dto = new ScheduledClassDto()
            {
                Id             = scheduledClass.Id,
                ClassStartTime = scheduledClass.ClassStartTime,
                ClassTypeName  = scheduledClass.ClassType.Name,
                InstructorName = scheduledClass.Instructor.UserName,
                IsCancelled    = scheduledClass.IsCancelled
            };

            _logger.Info($"ScheduledClass ID {id} found in database");

            return(dto);
        }
Ejemplo n.º 2
0
        public async Task <ScheduledClassIndexViewModel> BuildIndexViewModel()
        {
            var allScheduledClasses = _scheduledClassReader.GetAllScheduledClasses();

            var indexViewModel = new ScheduledClassIndexViewModel()
            {
                ScheduledClassesCompleted = allScheduledClasses.Where(x => x.InstructorName != null),
                CancelledScheduledClasses = allScheduledClasses.Where(x => x.IsCancelled)
            };

            var timetable = _classTimetableReader.GetAllClassTimetables();

            var holidayDtos  = _holidayReader.GetAllHolidays();
            var holidayDates = holidayDtos.Where(x => x.HolidayDate > DateTime.UtcNow).Select(x => x.HolidayDate.Date);

            var plannerTimespan       = Int32.Parse(ConfigurationManager.AppSettings["ScheduledClassTimeSpanInDays"]);
            var earliestSlotStartHour = Int32.Parse(ConfigurationManager.AppSettings["GymOpeningHour"]);
            var latestSlotEndHour     = Int32.Parse(ConfigurationManager.AppSettings["GymClosingHour"]);

            var incompleteScheduledClassSlots = new List <ScheduledClassDto>();

            // loop through day from today until end of timespan
            foreach (var daysFromToday in Enumerable.Range(0, plannerTimespan))
            {
                var iterationDateTime = DateTime.UtcNow.AddDays(daysFromToday);

                // if day falls on holiday
                if (holidayDates.Contains(iterationDateTime.Date))
                {
                    continue;
                }

                foreach (var hourOfToday in Enumerable.Range(earliestSlotStartHour, latestSlotEndHour - earliestSlotStartHour))
                {
                    var isScheduledClassAlreadyCreated = allScheduledClasses.Any(x => x.ClassStartTime.Day == iterationDateTime.Day && x.ClassStartTime.Hour == hourOfToday);
                    if (isScheduledClassAlreadyCreated)
                    {
                        continue;
                    }

                    var timetabledSlot = timetable.FirstOrDefault(x => x.Weekday == iterationDateTime.DayOfWeek && x.StartHour == hourOfToday);
                    if (timetabledSlot == null)
                    {
                        continue;
                    }

                    var newScheduledClass = new ScheduledClassDto()
                    {
                        ClassStartTime = new DateTime(iterationDateTime.Year, iterationDateTime.Month, iterationDateTime.Day, timetabledSlot.StartHour, timetabledSlot.StartMinutes, 0),
                        ClassTypeName  = timetabledSlot.ClassTypeName
                    };

                    incompleteScheduledClassSlots.Add(newScheduledClass);
                }
            }

            indexViewModel.ScheduledClassesRequiringCompletion = incompleteScheduledClassSlots;

            return(await Task.FromResult(indexViewModel));
        }
        public bool UpdateScheduledClass(ScheduledClassDto dto)
        {
            try
            {
                if (dto == null)
                {
                    _logger.Warn("Parameter passed is null");
                    return(false);
                }

                var scheduledClass = _context.ScheduledClasses
                                     .Include("ClassType")
                                     .Include("Instructor")
                                     .FirstOrDefault(x => x.Id == dto.Id);

                if (scheduledClass.ClassType.Name != dto.ClassTypeName)
                {
                    var classType = _context.ClassTypes.FirstOrDefault(x => x.Name == dto.ClassTypeName);
                    if (classType == null)
                    {
                        _logger.Warn($"ClassType {dto.ClassTypeName} not found in database");
                        return(false);
                    }

                    scheduledClass.ClassType   = classType;
                    scheduledClass.ClassTypeId = classType.Id;
                    _logger.Info($"ScheduledClass ID {scheduledClass.Id} ClassType has been changed to {dto.ClassTypeName}");
                }

                if (scheduledClass.Instructor.UserName != dto.InstructorName)
                {
                    var instructor = _context.Users.FirstOrDefault(x => x.UserName == dto.InstructorName);
                    if (instructor == null)
                    {
                        _logger.Warn($"Instructor {dto.InstructorName} not found in database");
                        return(false);
                    }

                    scheduledClass.Instructor   = instructor;
                    scheduledClass.InstructorId = instructor.Id;
                    _logger.Info($"ScheduledClass ID {dto.Id} has been changed to {dto.InstructorName}");
                }

                scheduledClass.IsCancelled    = dto.IsCancelled;
                scheduledClass.ClassStartTime = dto.ClassStartTime;

                _context.Entry(scheduledClass).State = EntityState.Modified;
                _context.SaveChanges();

                _logger.Info($"ScheduledClass ID {dto.Id} has been updated");

                return(true);
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(false);
            }
        }
Ejemplo n.º 4
0
 public EditScheduledClassViewModel(ScheduledClassDto dto)
 {
     Id             = dto.Id;
     ClassStartTime = dto.ClassStartTime;
     ClassTypeName  = dto.ClassTypeName;
     InstructorName = dto.InstructorName;
     IsCancelled    = dto.IsCancelled;
 }
Ejemplo n.º 5
0
 public EditScheduledClassViewModel(ScheduledClassDto dto, List <string> instructorNames)
 {
     Id              = dto.Id;
     ClassStartTime  = dto.ClassStartTime;
     ClassTypeName   = dto.ClassTypeName;
     InstructorName  = dto.InstructorName;
     IsCancelled     = dto.IsCancelled;
     InstructorNames = instructorNames;
 }
Ejemplo n.º 6
0
        public async Task <bool> UpdateScheduledClass(EditScheduledClassViewModel viewModel)
        {
            var dto = new ScheduledClassDto()
            {
                Id             = viewModel.Id,
                ClassStartTime = viewModel.ClassStartTime,
                ClassTypeName  = viewModel.ClassTypeName,
                InstructorName = viewModel.InstructorName,
                IsCancelled    = viewModel.IsCancelled
            };

            var isSuccess = _scheduledClassWriter.UpdateScheduledClass(dto);

            return(await Task.FromResult(isSuccess));
        }
        public async Task <ActionResult> Delete(string id)
        {
            if (id == null)
            {
                _logger.Trace("No parameters passed for Delete");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            ScheduledClassDto dto = await _scheduledClassService.GetScheduledClass(id);

            if (dto == null)
            {
                _logger.Info($"Parameter {id} was passed for Delete but did not return a result, therefore, no deletion occurred");
                return(HttpNotFound());
            }
            return(View(dto));
        }
        public bool AddScheduledClass(ScheduledClassDto dto)
        {
            try
            {
                if (dto == null)
                {
                    _logger.Warn("Parameter passed is null");
                    return(false);
                }

                var instructor = _context.Users.FirstOrDefault(x => x.UserName == dto.InstructorName);
                var classType  = _context.ClassTypes.FirstOrDefault(x => x.Name == dto.ClassTypeName);

                if (instructor == null || classType == null)
                {
                    _logger.Warn($"Instructor {dto.InstructorName} or ClassType {dto.ClassTypeName} not found in database");
                    return(false);
                }

                var scheduledClass = new ScheduledClass()
                {
                    Id             = dto.Id,
                    Instructor     = instructor,
                    InstructorId   = instructor.Id,
                    ClassStartTime = dto.ClassStartTime,
                    ClassType      = classType,
                    ClassTypeId    = classType.Id,
                    IsCancelled    = dto.IsCancelled
                };

                _context.ScheduledClasses.Add(scheduledClass);
                _context.SaveChanges();

                _logger.Info($"ScheduledClass ID {dto.Id}, for ClassType {classType.Name} has been scheduled for {scheduledClass.ClassStartTime}");

                return(true);
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(false);
            }
        }
Ejemplo n.º 9
0
        public async Task <bool> AddScheduledClass(CreateScheduledClassViewModel viewModel)
        {
            if (viewModel == null)
            {
                return(await Task.FromResult(false));
            }

            ScheduledClassDto dto = new ScheduledClassDto()
            {
                Id             = Guid.NewGuid().ToString(),
                ClassStartTime = viewModel.ClassStartTime,
                ClassTypeName  = viewModel.ClassTypeName,
                InstructorName = viewModel.InstructorName,
                IsCancelled    = false
            };

            bool isSuccess = _scheduledClassWriter.AddScheduledClass(dto);

            return(await Task.FromResult(isSuccess));
        }
        public async Task <ActionResult> Edit(string id)
        {
            if (id == null)
            {
                _logger.Trace("No parameters passed for Edit");
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var instructors = await _scheduledClassService.GetAllInstructorNames();

            ScheduledClassDto dto = await _scheduledClassService.GetScheduledClass(id);

            if (dto == null)
            {
                _logger.Info($"Parameter {id} was passed for Edit but did not return a result");
                return(HttpNotFound());
            }

            EditScheduledClassViewModel viewModel = new EditScheduledClassViewModel(dto, instructors);

            return(View(viewModel));
        }
Ejemplo n.º 11
0
 public CreateClassAttendanceViewModel(ScheduledClassDto dto)
 {
     ScheduledClassId   = dto.Id;
     ScheduledClassName = dto.ClassTypeName;
     ClassStartTime     = dto.ClassStartTime;
 }