コード例 #1
0
 private IEnumerable <StudentViewModel> HonorRollsStudents(MarkingPeriodKey currentQuarter)
 {
     if (allStudents == null)
     {
         return(Enumerable.Empty <StudentViewModel>());
     }
     return(allStudents.Where(s => s.Grades.Any(g => g.MarkingPeriod.Equals(currentQuarter))));
 }
コード例 #2
0
        private IEnumerable <KeyValuePair <string, string> > GetSelfDevFields(MarkingPeriodKey period)
        {
            var sdAreas = Maintenance.SelfDevelopmentAreas;
            var o       = _student.SelfDevelopmentScores.Where(score => MarkingPeriodKey.Parse(score.Quarter).Equals(period));
            var p       = o.Select((s, i) => new[] {
                new KeyValuePair <string, string>("SD" + (i + 1), sdAreas[i]),
                new KeyValuePair <string, string>("SDValue" + (i == 10 ? 12 : i + 1), s.Score.ToString())
            }).SelectMany(x => x);

            return(p);
        }
コード例 #3
0
 public static DateTime ApproximateStartDate(MarkingPeriodKey mpk)
 {
     if (mpk.Quarter == 1)
         return new DateTime(mpk.EndingSchoolYear - 1, 9, 1);
     else if (mpk.Quarter == 2)
         return new DateTime(mpk.EndingSchoolYear - 1, 11, 11);
     else if (mpk.Quarter == 3)
         return new DateTime(mpk.EndingSchoolYear, 1, 21);
     else //if (Quarter == 4)
         return new DateTime(mpk.EndingSchoolYear, 4, 2);
 }
コード例 #4
0
        private IEnumerable <KeyValuePair <string, string> > GetReportLevelFields(MarkingPeriodKey period)
        {
            var thisQuarter = MarkingPeriods.Singleton.Find(period);
            var thisYear    = new MarkingYear(thisQuarter);
            // TODO absence in Demo
            // TODONE need year to date attendance
            // TODO need to show grades for 1-4 when showing 4th quarter
            // TODO need to show not show quarters in drop down for past
            var absentThisQuarter = _student.DaysAttendance(thisQuarter, AttendanceStatus.Absent);
            int absentThisYear    = _student.DaysAttendance(thisYear, AttendanceStatus.Absent);

            var tardyThisQuarter = _student.DaysAttendance(thisQuarter, AttendanceStatus.Tardy);
            int tardyThisYear    = _student.DaysAttendance(thisYear, AttendanceStatus.Tardy);

            return(new[] {
                new KeyValuePair <string, string>(
                    "StudentAddress",
                    _student.AddressLine1 + "\n" + _student.AddressLine2),
                new KeyValuePair <string, string>(
                    "SchoolYear",
                    String.Format("{0:MMM dd, yyyy} - {1:MMM dd, yyyy}", thisYear.StartDate, thisYear.EndDate)),
                new KeyValuePair <string, string>(
                    "SchoolYearAttendance",
                    String.Format("{0} - {1}", thisYear.StartDate.Year, thisYear.EndDate.Year)),
                new KeyValuePair <string, string>(
                    "QTR1",
                    thisQuarter.DaysIn.ToString()),
                new KeyValuePair <string, string>(
                    "YR1",
                    thisYear.DaysIn.ToString()),
                new KeyValuePair <string, string>(
                    "QTR2",
                    absentThisQuarter.ToString()),
                new KeyValuePair <string, string>(
                    "YR2",
                    absentThisYear.ToString()),
                new KeyValuePair <string, string>(
                    "QTR3",
                    tardyThisQuarter.ToString()),
                new KeyValuePair <string, string>(
                    "YR3",
                    tardyThisYear.ToString()),
                new KeyValuePair <string, string>(
                    "MarkingPeriod",
                    period.QuarterString),
                new KeyValuePair <string, string>(
                    "QtrEnding",
                    thisQuarter != null ? thisQuarter.EndDate.ToShortDateString() : "N/A")
            });
        }
コード例 #5
0
        internal static MarkingPeriods DemoMarkingPeriod()
        {
            var rv = new MarkingPeriods();

            for (int year = 2011; year <= 2013; year++)
            {
                for (int quarter = 1; quarter <= 4; quarter++)
                {
                    var key = new MarkingPeriodKey(quarter, year);
                    var mp  = new MarkingPeriod(key, ApproximateStartDate(key), ApproximateEndDate(key), 45);
                    rv.Add(mp);
                }
            }
            return(rv);
        }
コード例 #6
0
 static public DateTime ApproximateEndDate(MarkingPeriodKey mpk)
 {
     if (mpk.Quarter == 1)
     {
         return(new DateTime(mpk.EndingSchoolYear - 1, 11, 10));
     }
     else if (mpk.Quarter == 2)
     {
         return(new DateTime(mpk.EndingSchoolYear, 1, 20));
     }
     else if (mpk.Quarter == 3)
     {
         return(new DateTime(mpk.EndingSchoolYear, 4, 1));
     }
     else //if (Quarter == 4)
     {
         return(new DateTime(mpk.EndingSchoolYear, 6, 12));
     }
 }
コード例 #7
0
        /*
        public void CloneQuarter(MarkingPeriodKey last, MarkingPeriodKey next)
        {
            if (false == MarkingPeriods.Singleton.Any(m => m.Key.Equals(next)))
                MarkingPeriods.Singleton.AddMarkingPeriod(new MarkingPeriod(next, next.ApproximateStartDate, next.ApproximateEndDate, 45));

            var courses = Course.Where(c => c.Quarter == last.ToString());
            foreach (var course in courses)
                Course.AddCourseRow(course.CourseKey + course.Quarter, course.SubjectName, course.Quarter, course.Group, course.Teacher, course.Level);

            Save();
        }*/
        public void ImportClassLists(MarkingPeriodKey mpk, List<string> lines)
        {
            foreach (var line in lines)
            {
                var parts = line.Split(",".ToCharArray());
                var studentName = parts[0];
                var student = Student.SingleOrDefault(s => s.Name == studentName);
                if (student == null)
                    continue;
                var courseName = parts[1];
                var quarter = parts[2];
                var teacher = parts[3];
                var group  = parts[4];
                var level = parts[5];

            }

            Save();
        }
コード例 #8
0
        /*
         * public void CloneQuarter(MarkingPeriodKey last, MarkingPeriodKey next)
         * {
         *  if (false == MarkingPeriods.Singleton.Any(m => m.Key.Equals(next)))
         *      MarkingPeriods.Singleton.AddMarkingPeriod(new MarkingPeriod(next, next.ApproximateStartDate, next.ApproximateEndDate, 45));
         *
         *  var courses = Course.Where(c => c.Quarter == last.ToString());
         *  foreach (var course in courses)
         *      Course.AddCourseRow(course.CourseKey + course.Quarter, course.SubjectName, course.Quarter, course.Group, course.Teacher, course.Level);
         *
         *  Save();
         * }*/

        public void ImportClassLists(MarkingPeriodKey mpk, List <string> lines)
        {
            foreach (var line in lines)
            {
                var parts       = line.Split(",".ToCharArray());
                var studentName = parts[0];
                var student     = Student.SingleOrDefault(s => s.Name == studentName);
                if (student == null)
                {
                    continue;
                }
                var courseName = parts[1];
                var quarter    = parts[2];
                var teacher    = parts[3];
                var group      = parts[4];
                var level      = parts[5];
            }

            Save();
        }
コード例 #9
0
        internal IEnumerable <StudentReport> StudentReports()
        {
            var rv = new List <StudentReport>();
            var gradesByQuarter = _studentRow.GetGradeRows().GroupBy(g => g.CourseRow.Quarter);

            foreach (var kvp in gradesByQuarter)
            {
                var i  = new StudentReport();
                var mp = MarkingPeriods.Singleton.Find(MarkingPeriodKey.Parse(kvp.Key));
                i.Quarter         = mp.ToString();
                i.NumberOfClasses = kvp.Count();
                i.Gpa             = Gpa(mp);
                i.Stage           = (ApprovalStage)kvp.Max(g => (int)Enum.Parse(typeof(ApprovalStage), g.ApprovalStage));
                i.HonorRoll       = HonorRoll(mp);
                i.DaysAbsent      = DaysAttendance(mp, AttendanceStatus.Absent);
                i.DaysTardy       = DaysAttendance(mp, AttendanceStatus.Tardy);
                i.DaysPresent     = mp.DaysIn - i.DaysAbsent - i.DaysTardy;
                rv.Add(i);
            }
            return(rv);
        }
コード例 #10
0
        public IEnumerable <KeyValuePair <string, string> > GetGradeReportFields(MarkingPeriodKey period, int rowIndex)
        {
            yield return(new KeyValuePair <string, string>(
                             string.Format(MarkingPeriodKey.Parse(MarkingPeriod.ToString()).Quarter + "Row{0}", rowIndex),
                             LetterGrade + (!string.IsNullOrEmpty(SpecialGrade) ? "\n" + SpecialGrade : "")));

            if (IsCurrentForPeriod(period))
            {
                yield return(new KeyValuePair <string, string>(
                                 "SubjectRow" + rowIndex,
                                 Subject));

                yield return(new KeyValuePair <string, string>(
                                 "CommentRow" + rowIndex,
                                 Comment));

                yield return(new KeyValuePair <string, string>(
                                 "TeacherRow" + rowIndex,
                                 Teacher));
            }
        }
コード例 #11
0
        private void FillCourses(MarkingPeriodKey mpk, string gradeLevel)
        {
            cmbCourse.Items.Clear();
            cmbCourse.Items.Add("All");
            var courses = Gradebook.Courses;

            if (mpk != null)
            {
                courses = courses.Where(c => c.Quarter == mpk.ToString());
            }
            //if (gradeLevel != "All")
            //    courses = courses.Where(c => c.Level == gradeLevel);
            if (chkMyStudents.IsChecked == true)
            {
                courses = courses.Where(c => c.Teacher == UserViewModel.CurrentUser.Name);
            }

            foreach (var course in courses)
            {
                cmbCourse.Items.Add(course);
            }

            cmbCourse.Text = cmbCourse.Items[0].ToString();
        }
コード例 #12
0
        private void OnGenerateReportCard(object sender, RoutedEventArgs e)
        {
            if (!UserViewModel.CurrentUser.CanExportReportCards)
            {
                MessageBox.Show("You do not have permission to export a report card!");
                return;
            }
            var           report = (StudentReport)grdStudentReport.SelectedItem;
            MarkingPeriod mp     = MarkingPeriod.Current;

            if (report != null)
            {
                mp = MarkingPeriods.Singleton.Find(MarkingPeriodKey.Parse(report.Quarter));
            }
            try
            {
                var reportCard = new ReportCard(_student);
                reportCard.CreateReportCard(null, mp);
            }
            catch (System.IO.IOException)
            {
                MessageBox.Show("Error writing the report card! Check to ensure you have permission to write to this folder and that the file is not currently in use.");
            }
        }
コード例 #13
0
        public IEnumerable<KeyValuePair<string, string>> GetGradeReportFields(MarkingPeriodKey period, int rowIndex)
        {
            yield return new KeyValuePair<string, string>(
                 string.Format(MarkingPeriodKey.Parse(MarkingPeriod.ToString()).Quarter + "Row{0}", rowIndex),
                 LetterGrade + (!string.IsNullOrEmpty(SpecialGrade) ? "\n" + SpecialGrade : ""));

            if (IsCurrentForPeriod(period))
            {
                yield return new KeyValuePair<string, string>(
                    "SubjectRow" + rowIndex,
                    Subject);
                yield return new KeyValuePair<string, string>(
                    "CommentRow" + rowIndex,
                    Comment);
                yield return new KeyValuePair<string, string>(
                    "TeacherRow" + rowIndex,
                    Teacher);
            }
        }
コード例 #14
0
 private IEnumerable<StudentViewModel> HonorRollsStudents(MarkingPeriodKey currentQuarter)
 {
     if (allStudents == null)
         return Enumerable.Empty<StudentViewModel>();
     return allStudents.Where(s => s.Grades.Any(g => g.MarkingPeriod.Equals(currentQuarter)));
 }
コード例 #15
0
        private void FillCourses(MarkingPeriodKey mpk, string gradeLevel)
        {
            cmbCourse.Items.Clear();
            cmbCourse.Items.Add("All");
            var courses = Gradebook.Courses;
            if (mpk != null)
                courses = courses.Where(c => c.Quarter == mpk.ToString());
            //if (gradeLevel != "All")
            //    courses = courses.Where(c => c.Level == gradeLevel);
            if (chkMyStudents.IsChecked == true)
                courses = courses.Where(c => c.Teacher == UserViewModel.CurrentUser.Name);

            foreach (var course in courses)
                cmbCourse.Items.Add(course);

            cmbCourse.Text = cmbCourse.Items[0].ToString();
        }
コード例 #16
0
 public bool IsCurrentForPeriod(MarkingPeriodKey periodKey)
 {
     return MarkingPeriod.Key.Equals(periodKey);
 }
コード例 #17
0
 internal static MarkingPeriods DemoMarkingPeriod()
 {
     var rv = new MarkingPeriods();
     for (int year = 2011; year <= 2013; year++)
     {
         for (int quarter = 1; quarter <= 4; quarter++)
         {
             var key = new MarkingPeriodKey(quarter, year);
             var mp = new MarkingPeriod(key, ApproximateStartDate(key), ApproximateEndDate(key), 45);
             rv.Add(mp);
         }
     }
     return rv;
 }
コード例 #18
0
 public bool IsCurrentForPeriod(MarkingPeriodKey periodKey)
 {
     return(MarkingPeriod.Key.Equals(periodKey));
 }
コード例 #19
0
        static public Gradebook CreateDemo()
        {
            _rnd = new Random(1116);
            var rv         = new Gradebook();
            var firstNames = new List <string>()
            {
                "Dan", "Kelly", "Allegra", "Ramsey", "Max", "Lexi", "Indy"
            };
            var lastNames = new List <string>()
            {
                "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega"
            };
            var dobStart = DateTime.Now.AddYears(-14);
            var dobEnd   = DateTime.Now.AddYears(-5);
            int iCourse  = 1000;

            var homeroomTeachers = new Dictionary <string, string>();
            int iClassroom       = 0;

            foreach (var gradeLevel in Maintenance.GradeLevelShorts)
            {
                homeroomTeachers.Add(gradeLevel, Maintenance.Users.Where(u => u.Role == RoleEnum.ClassroomInstructor).Select(t => t.Name).ToList()[iClassroom++]);
            }
            foreach (var quarter in MarkingPeriods.Singleton.Where(q => q.EndDate <= MarkingPeriod.Current.EndDate).OrderByDescending(q => q.ToString()))
            {
                foreach (var gradeLevel in Maintenance.GradeLevelShorts)
                {
                    foreach (var subject in Maintenance.Subjects)
                    {
                        var teacher = string.Empty;
                        if (CourseViewModel.ClassroomCourse(subject))
                        {
                            teacher = homeroomTeachers[gradeLevel];
                        }
                        else if (CourseViewModel.SmallGroupCourse(subject))
                        {
                            teacher = RandString(Maintenance.Users.Where(u => u.Role == RoleEnum.SmallGroupInstructor).Select(t => t.Name).ToList());
                        }
                        else if (CourseViewModel.SpecialCourse(subject))
                        {
                            teacher = RandString(Maintenance.Users.Where(u => u.Role == RoleEnum.SpecialInstructor).Select(t => t.Name).ToList());
                        }
                        else
                        {
                            teacher = null;
                        }

                        rv.Course.AddCourseRow((iCourse++).ToString(), subject, quarter.ToString(), RandString(Maintenance.Groups), teacher, Maintenance.GradeLevelNumber(gradeLevel));
                    }
                }
            }

            var extraComments = new List <string>()
            {
                "", "always", "never", "great", "usually", "best"
            };

            for (int iStudent = 0; iStudent < 100; iStudent++)
            {
                var name       = firstNames[iStudent % 7] + " " + lastNames[iStudent % (lastNames.Count)];
                var dob        = dobStart.AddDays(iStudent * (dobEnd - dobStart).TotalDays / 100);
                var enrolled   = dob.AddYears(5);
                var gradeLevel = AddGradeLevel(Maintenance.GradeLevelShorts[0], (DateTime.Today.Year - enrolled.Year));
                if (gradeLevel == null)
                {
                    //handle k better
                    gradeLevel = Maintenance.GradeLevelShorts.Last();
                }

                var student = rv.Student.AddStudentRow(Gradebook.MakeStudentKey(name, dob), name, dob, iStudent + " Fake St", "Bel Air, MD 22222", gradeLevel, enrolled, DateTime.MaxValue);

                foreach (var course in rv.Course.OrderByDescending(c => c.Quarter))
                {
                    var mpk       = MarkingPeriodKey.Parse(course.Quarter);
                    var mp        = MarkingPeriods.Singleton.Find(mpk);
                    var diffYears = MarkingPeriodKey.Current.EndingSchoolYear - mpk.EndingSchoolYear;

                    if (course.Level == Maintenance.GradeLevelNumber(AddGradeLevel(student.GradeLevel, 0 - diffYears)))
                    {
                        if (_rnd.NextDouble() < .1)
                        {
                            rv.Attendance.AddAttendanceRow(student, mp.StartDate.AddDays(_rnd.Next(0, 30)), AttendanceStatus.Absent.ToString());
                        }
                        if (_rnd.NextDouble() < .1)
                        {
                            rv.Attendance.AddAttendanceRow(student, mp.StartDate.AddDays(_rnd.Next(0, 30)), AttendanceStatus.Tardy.ToString());
                        }

                        if (mpk.Equals(MarkingPeriodKey.Current) && _rnd.Next(0, 2) == 0)
                        {
                            rv.Grade.AddGradeRow(student, course, string.Empty, string.Empty, string.Empty, ApprovalStage.Open.ToString());
                        }
                        else
                        {
                            var stage = ApprovalStage.Office;
                            if (mpk.Equals(MarkingPeriodKey.Current))
                            {
                                if (_rnd.Next(0, 2) == 0)
                                {
                                    stage = ApprovalStage.Instructor;
                                }
                                else
                                {
                                    stage = ApprovalStage.Classroom;
                                }
                            }

                            var specialGrade = string.Empty;
                            if (CourseViewModel.HasSpecialGrade(course.SubjectName))
                            {
                                if (course.SubjectName == "Reading")
                                {
                                    specialGrade = (int.Parse(course.Level) + _rnd.Next(0, 5)).ToString() + "-" + _rnd.Next(1, 10);
                                }
                                else if (course.SubjectName == "Math")
                                {
                                    specialGrade = (int.Parse(course.Level) + _rnd.Next(0, 5)).ToString() + "(" + _rnd.Next(1, 2).ToString() + ")";
                                }
                                else if (course.SubjectName == "Written Expression")
                                {
                                    specialGrade = "Paragraph";
                                }
                            }
                            rv.Grade.AddGradeRow(student, course, RandString(Maintenance.LetterGrades.Keys.ToList(), 3), specialGrade, Maintenance.FormatCommentFromList(RandString(Maintenance.Comments)) + " " + RandString(extraComments), stage.ToString());
                        }
                    }
                }
                var  quarters = MarkingPeriods.Singleton.OrderByDescending(q => q.ToString());
                bool withdraw = false;
                if (iStudent % 33 == 0)
                {
                    quarters = MarkingPeriods.Singleton.OrderBy(q => q.ToString());
                    withdraw = true;
                }

                foreach (var quarter in quarters)
                {
                    if (enrolled > quarter.EndDate)
                    {
                        continue;
                    }
                    foreach (var area in Maintenance.SelfDevelopmentAreas)
                    {
                        rv.SelfDevelopment.AddSelfDevelopmentRow(student, area, quarter.ToString(), _rnd.Next(3, 5), "Jekyll");
                    }

                    if (_rnd.NextDouble() > .9)
                    {
                        if (withdraw)
                        {
                            student.DateWithdrawn = quarter.EndDate.AddMonths(-1);
                        }
                        else
                        {
                            student.DateEnrolled = quarter.EndDate.AddMonths(-2);
                        }
                        //if (student.DateEnrolled > DateTime.Today)
                        //    student.DateEnrolled = DateTime.Today.AddDays(-1);
                        break;
                    }
                }
            }
            return(rv);
        }
コード例 #20
0
 public string GetDefaultReportCardFilename(MarkingPeriodKey period)
 {
     return(String.Format("{0}_Q{1}_{2}_Report_Card", _student.Name, period.Quarter, period.EndingSchoolYear));
 }