public IActionResult ScheduleChoise() { var guid = m_userManager.GetUserId(User); var availablePracticeClasses = m_classData.GetAll(). Where(c => c.Type == ClassType.PracticeDrive && c.State == ClassState.New); var selectedPracticeClasses = m_studentData.Get(guid). AttendedClasses.Where(c => c.Type == ClassType.PracticeDrive); var theoryClasses = m_theoryClasses.GetAll().Where(c => c.Seats > 0); var selectedTheoryClasses = m_studentData.Get(guid).TheoryClasses; var practiceExams = m_classData.GetAll().Where(c => c.Type == ClassType.PracticeExam); var selectedPracticeExam = m_studentData.Get(guid). AttendedClasses.Where(c => c.Type == ClassType.PracticeExam).FirstOrDefault(); var theoryExams = m_classData.GetAll().Where(c => c.Type == ClassType.TheoryExam); var selectedTheoryExam = m_studentData.Get(guid). AttendedClasses.Where(c => c.Type == ClassType.TheoryExam).FirstOrDefault(); var backAction = Request.Headers["Referer"].ToString().Split('/').Reverse().First(); var model = new ScheduleChoiseViewModel { SelectedClasses = new SelectList(selectedPracticeClasses), AvailableClasses = new SelectList(availablePracticeClasses), TheoryClasses = new SelectList(new[] { "None" }. Concat(theoryClasses.Select(c => c.ToString()))), TheoryClassesId = selectedTheoryClasses?.ToString() ?? "None", PracticeExam = new SelectList(new[] { "None" }. Concat(practiceExams.Select(c => c.ToString()))), PracticeExamId = selectedPracticeExam?.ToString() ?? "None", TheoryExam = new SelectList(new[] { "None" }. Concat(theoryExams.Select(c => c.ToString()))), TheoryExamId = selectedTheoryExam?.ToString() ?? "None", BackAction = backAction == "ScheduleView" ? "ScheduleView" : backAction == "ScheduleClassList" ? "ScheduleClassList" : "ScheduleEntry" }; return(View(model)); }
public async Task <IActionResult> ScheduleChoise(ScheduleChoiseViewModel model, string submit) { var guid = m_userManager.GetUserId(User); var user = m_studentData.Get(guid); if (submit == "Select") { await Task.Run(() => { int classId; if (int.TryParse(model.AvailableClassesId?.Split('.')[0], out classId)) { var @class = m_classData.Get(classId); @class.Student = user; @class.State = ClassState.Locked; } m_classData.SaveChanges(); }); return(RedirectToAction("ScheduleChoise", "Schedule")); } else if (submit == "Deselect") { await Task.Run(() => { int classId; if (int.TryParse(model.SelectedClassesId?.Split('.')[0], out classId)) { var @class = m_classData.Get(classId); @class.Student = null; @class.State = ClassState.New; } m_classData.SaveChanges(); }); return(RedirectToAction("ScheduleChoise", "Schedule")); } else { await Task.Run(() => { int theoryClassesId; if (user.TheoryClasses != null) { user.TheoryClasses.Seats++; } if (int.TryParse(model.TheoryClassesId?.Split('.')[0], out theoryClassesId)) { var @class = m_theoryClasses.Get(theoryClassesId); @class.Seats--; @class.State = @class.Seats == 0 ? ClassState.Locked : ClassState.New; user.TheoryClasses = @class; } else { user.TheoryClasses = null; } m_classData.SaveChanges(); }); await Task.Run(() => { int practiceExamId; var currentClass = user.AttendedClasses. Where(c => c.Type == ClassType.PracticeExam).FirstOrDefault(); if (currentClass != null) { currentClass.State = ClassState.New; currentClass.Student = null; } if (int.TryParse(model.PracticeExamId?.Split('.')[0], out practiceExamId)) { var @class = m_classData.Get(practiceExamId); @class.Student = user; @class.State = ClassState.Locked; } m_classData.SaveChanges(); }); await Task.Run(() => { int theoryExamId; var currentClass = user.AttendedClasses. Where(c => c.Type == ClassType.TheoryExam).FirstOrDefault(); if (currentClass != null) { currentClass.State = ClassState.New; currentClass.Student = null; } if (int.TryParse(model.TheoryExamId?.Split('.')[0], out theoryExamId)) { var @class = m_classData.Get(theoryExamId); @class.Student = user; @class.State = ClassState.Locked; } m_classData.SaveChanges(); }); return(RedirectToAction("ScheduleClassList", "Schedule")); } }