public StudentCourseReport(Course course, DegreeProgram program, Student student, char?grade, CourseTime time)
                : base(course.CRN, course.DepartmentName, course.Name, course.Description, course.SectionNumber, course.MaxSeats,
                       course.Location, course.SemesterID, course.CourseTimeID)
            {
                this.DegreeProgram = program;
                this.Student       = student;

                this.grade = grade;
                if (time.CourseStart < DateTime.Now && DateTime.Now < time.CourseEnd)
                {
                    this.setStatus(Status.InProgress);
                }
                else if (this.grade == '\0' || this.grade == null)
                {
                    if (DateTime.Now > time.CourseEnd)
                    {
                        this.setStatus(Status.AwaitingGrade);
                    }
                    else
                    {
                        this.setStatus(Status.Default);
                    }
                }
                else
                {
                    this.setStatus(Status.Completed);
                }
            }
        public Transcript(DegreeProgram program, Student student, List <Course> coursesTaken)
        {
            this.DegreeProgram = program;
            this.Student       = student;
            List <Course> requiredCourses = this.DegreeProgram.RequiredCourses.Courses;

            this.CourseReports = new List <StudentCourseReport>();

            requiredCourses.AddRange(coursesTaken.Where(courseTaken =>
                                                        requiredCourses.All(coursesRequired => coursesRequired.CRN != courseTaken.CRN)));
            this.Courses = new List <Course>(requiredCourses);
        }