public ProfessorDashboardViewModel GetProfessorDashboard(FilterViewModel filter = null)
 {
     var viewModel = ApplyFilter(filter ?? GetDefaultFilter());
     return viewModel;
 }
 private static ProfessorDashboardViewModel DefaultProfessorDashboard(FilterViewModel filterViewModel)
 {
     return new ProfessorDashboardViewModel() {Filter = filterViewModel};
 }
        private ProfessorDashboardViewModel ApplyFilter(FilterViewModel filterViewModel)
        {
            var groupId = GetSelectedId(filterViewModel.Group);
            var semesterSeqId = GetSelectedId(filterViewModel.SemesterSeq);
            if (!groupId.HasValue || !semesterSeqId.HasValue)
            {
                return DefaultProfessorDashboard(filterViewModel);
            }

            var students = groupService.GetGroupStudents(groupId.Value);
            if (!students.Any())
            {
                return DefaultProfessorDashboard(filterViewModel);
            }
            var curriculum = curriculumService.GetCurriculumForStudent(students.First());
            if (!curriculum.Semesters.Any(p => p.Sequential == semesterSeqId.Value))
            {
                return DefaultProfessorDashboard(filterViewModel);
            }

            var subjects = curriculum.Semesters.First(p => p.Sequential == semesterSeqId.Value).Subjects;

            return new ProfessorDashboardViewModel
            {
                Filter = filterViewModel,
                CountSubjects = subjects.Count,
                Students = students.Select(stud =>
                {
                    var student = studentProfileService.CreateOrOpen(stud);
                    return new StudentRowViewModel
                    {

                        Student = string.Format("{0} {1}", student.LastName, student.FirstName),
                        StudentId = student.Id,
                        Subjects = subjects.Select(subj =>
                        {
                            var studentTheme = studentThemeService.All().SingleOrDefault(p => p.SubjectId == subj.Id && p.StudentId == stud);
                            var subject = new StudentSubjectViewModel
                            {
                                Subject = subj.Name,
                                SubjectId = subj.Id
                            };

                            if (studentTheme != null)
                            {
                                subject.Theme = Mapper.Map<SelectedItemModel,SelectedItemViewModel>(themeService.GetSelectedItemById(studentTheme.ThemeId));
                                subject.ThemeId = studentTheme.ThemeId;
                            }
                            // if exist theme for this subject set it
                            return subject;
                        }).ToList()
                    };
                }).ToList()
            };
        }
 public JsonResult GetProfessorDashboard(FilterViewModel filter)
 {
     return Json(dashboardManagementService.GetProfessorDashboard(filter));
 }