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); }
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); } }
public EditScheduledClassViewModel(ScheduledClassDto dto) { Id = dto.Id; ClassStartTime = dto.ClassStartTime; ClassTypeName = dto.ClassTypeName; InstructorName = dto.InstructorName; IsCancelled = dto.IsCancelled; }
public EditScheduledClassViewModel(ScheduledClassDto dto, List <string> instructorNames) { Id = dto.Id; ClassStartTime = dto.ClassStartTime; ClassTypeName = dto.ClassTypeName; InstructorName = dto.InstructorName; IsCancelled = dto.IsCancelled; InstructorNames = instructorNames; }
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); } }
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)); }
public CreateClassAttendanceViewModel(ScheduledClassDto dto) { ScheduledClassId = dto.Id; ScheduledClassName = dto.ClassTypeName; ClassStartTime = dto.ClassStartTime; }