{"version":3,"file":"js/schedule.min.js","mappings":"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","sources":["webpack://nha.app.masterscheduling.web/./app/services/teacher-course-filter-counts.service.ts","webpack://nha.app.masterscheduling.web/./app/services/roster-history.service.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/add-teachers/add-teachers.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/roster.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/add-teachers/add-teachers-subjects.controller.ts","webpack://nha.app.masterscheduling.web/./app/student-record/student-courses/student-course.service.ts","webpack://nha.app.masterscheduling.web/./app/services/course-teacher.service.ts","webpack://nha.app.masterscheduling.web/./app/services/course-section-group.repository.ts","webpack://nha.app.masterscheduling.web/./app/course/course.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/services/school-grade-level-master-schedule.repository.ts","webpack://nha.app.masterscheduling.web/./app/course/course.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/remove-students/remove-students.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/transfer-students.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/services/course-data.service.ts","webpack://nha.app.masterscheduling.web/./app/app.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/services/transfer-students.repository.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/remove-students/remove-students.ts","webpack://nha.app.masterscheduling.web/./app/student-record/student-courses/transfer/courses/courses.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/import/import.ts","webpack://nha.app.masterscheduling.web/./app/services/filtered-repository.factory.ts","webpack://nha.app.masterscheduling.web/./app/services/school-subject.repository.ts","webpack://nha.app.masterscheduling.web/./app/services/course-section-staff.service.ts","webpack://nha.app.masterscheduling.web/./app/course/overview/overview.controller.ts","webpack://nha.app.masterscheduling.web/./app/courses/courses.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/transfer-confirmation/transfer-confirmation.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/add-students/add-students.controller.ts","webpack://nha.app.masterscheduling.web/./app/directives/course-progress-indicator/course-progress-indicator.directive.ts","webpack://nha.app.masterscheduling.web/./app/directives/dual-list-selector/dual-list-selector.directive.ts","webpack://nha.app.masterscheduling.web/./app/student-record/student-courses/transfer/confirm/confirm.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/import/import.service.ts","webpack://nha.app.masterscheduling.web/./app/services/course-schedule-meeting-block.repository.ts","webpack://nha.app.masterscheduling.web/./app/student-record/student-courses/add-courses/addCoursesContext.service.ts","webpack://nha.app.masterscheduling.web/./app/course/overview/overview.ts","webpack://nha.app.masterscheduling.web/./app/course/services/course-data-manager.service.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/teachers.controller.ts","webpack://nha.app.masterscheduling.web/./app/services/school-schedule.repository.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/add-teachers/add-teachers.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/services/course-section-group.service.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/transfer-courses/transfer-courses.controller.ts","webpack://nha.app.masterscheduling.web/./app/services/course-section.service.ts","webpack://nha.app.masterscheduling.web/./app/services/subject-type.repository.ts","webpack://nha.app.masterscheduling.web/./app/services/onsite-facilitator-access.service.ts","webpack://nha.app.masterscheduling.web/./app/main/main.ts","webpack://nha.app.masterscheduling.web/./app/app.route.config.ts","webpack://nha.app.masterscheduling.web/./app/services/course.service.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/services/transfer-students-context.service.ts","webpack://nha.app.masterscheduling.web/./app/services/staff-history.service.ts","webpack://nha.app.masterscheduling.web/./app/services/school-grade-level-section.service.ts","webpack://nha.app.masterscheduling.web/./app/services/teacher-course-detail.service.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/remove-teachers/remove-teachers.ts","webpack://nha.app.masterscheduling.web/./app/services/course-summary.repository.ts","webpack://nha.app.masterscheduling.web/./app/student-record/student-courses/student-courses.controller.ts","webpack://nha.app.masterscheduling.web/./app/teachers/teachers.ts","webpack://nha.app.masterscheduling.web/./app/main/main.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/transfer-students.ts","webpack://nha.app.masterscheduling.web/./app/course/overview/meeting-blocks/meeting-blocks.controller.ts","webpack://nha.app.masterscheduling.web/./app/student-record/student-courses/add-courses/add-courses.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/import/import-to.controller.ts","webpack://nha.app.masterscheduling.web/./app/courses/courses.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/import/import-from.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/roster.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/teachers.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/services/transfer-students-context-manager.service.ts","webpack://nha.app.masterscheduling.web/./app/services/teacher-course.service.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/add-students/add-students.ts","webpack://nha.app.masterscheduling.web/./app/student-record/student-courses/transfer/services/transfer-context.service.ts","webpack://nha.app.masterscheduling.web/./app/teachers/teachers.controller.ts","webpack://nha.app.masterscheduling.web/./app/services/school-marking-period-group-option.service.ts","webpack://nha.app.masterscheduling.web/./app/course/subjects/subjects.ts","webpack://nha.app.masterscheduling.web/./app/services/course-section-roster.service.ts","webpack://nha.app.masterscheduling.web/./app/course/services/course-validation.service.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/add-students/add-student.service.ts","webpack://nha.app.masterscheduling.web/./app/course/subjects/subjects-modal/subjects-modal.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/teachers.service.ts","webpack://nha.app.masterscheduling.web/./app/modals/effective-date-modal/effective-date-modal.controller.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/transfer-confirmation/transfer-confirmation.ts","webpack://nha.app.masterscheduling.web/./app/app.config.ts","webpack://nha.app.masterscheduling.web/./app/course/teachers/remove-teachers/remove-teachers.controller.ts","webpack://nha.app.masterscheduling.web/./app/services/course-section-group-detail.repository.ts","webpack://nha.app.masterscheduling.web/./app/course/roster/transfer/transfer-courses/transfer-courses.ts","webpack://nha.app.masterscheduling.web/webpack/bootstrap","webpack://nha.app.masterscheduling.web/webpack/runtime/compat get default export","webpack://nha.app.masterscheduling.web/webpack/runtime/define property getters","webpack://nha.app.masterscheduling.web/webpack/runtime/hasOwnProperty shorthand","webpack://nha.app.masterscheduling.web/./app/course/subjects/subjects.controller.ts"],"sourcesContent":["\n\n angular.module('nha.schedule')\n .service('teacherCourseFilterCountsService', ['repositoryFactory', 'baseService', 'MasterSchedulingRestangular',\n function (repositoryFactory, baseService, masterSchedulingRestangular) {\n var repo = new repositoryFactory('TeacherCourseFilterCounts', masterSchedulingRestangular);\n\n repo.setFilters = function (parameters, filters, searchText) {\n if (filters) {\n if (filters.AcademicYear) {\n var selectedYear = _.head(_.filter(filters.AcademicYear.items, 'selected'));\n if (selectedYear) {\n parameters.academicYearId = selectedYear.id;\n }\n }\n\n if (filters.School) {\n var selectedSchool = _.head(_.filter(filters.School.items, 'selected'));\n if (selectedSchool) {\n parameters.schoolId = selectedSchool.id;\n }\n }\n\n if (filters.GradeLevel) {\n var selectedIds = _.map(_.filter(filters.GradeLevel.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.gradeLevelIds = selectedIds;\n } else {\n parameters.gradeLevelIds = [];\n }\n } else {\n parameters.gradeLevelIds = [];\n }\n\n\n if (filters.MarkingPeriod) {\n var selectedIds = _.map(_.filter(filters.MarkingPeriod.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.markingPeriodIds = selectedIds;\n } else {\n parameters.markingPeriodIds = [];\n }\n } else {\n parameters.markingPeriodIds = [];\n }\n\n if (filters.SchoolGradeLevelSection) {\n var selectedIds = _.map(_.filter(filters.SchoolGradeLevelSection.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.sectionGroupIds = selectedIds;\n } else {\n parameters.sectionGroupIds = [];\n }\n } else {\n parameters.sectionGroupIds = [];\n }\n\n if (filters.SubjectType) {\n var selectedIds = _.map(_.filter(filters.SubjectType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.subjectTypeIds = selectedIds;\n } else {\n parameters.subjectTypeIds = [];\n }\n } else {\n parameters.subjectTypeIds = [];\n }\n\n _utils.setSearchFilter(parameters, searchText, repo.textSearchFields);\n }\n }\n\n repo.getTeacherCounts = function (parameters, filters) {\n\n var apiParameters: any = {};\n\n repo.setFilters(apiParameters, filters, null);\n\n if (parameters.searchText) {\n apiParameters.searchText = parameters.searchText;\n } else {\n apiParameters.searchText = '';\n }\n\n return baseService.getList(\"TeacherCourseFilterCounts\", apiParameters, true, true, masterSchedulingRestangular);\n }\n\n return repo;\n }\n ]);\n","\n\n angular.module('nha.schedule')\n .service('rosterHistoryService', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('CourseSectionRosterStatusHistory', masterSchedulingRestangular);\n }\n ]);\n","angular.module('nha.schedule').config([\n\t'$stateProvider',\n\t'appSettings',\n\tfunction config($stateProvider, appSettings) {\n\t\t$stateProvider\n\t\t\t.state('new-course.teachers.add-teachers', {\n\t\t\t\turl: '/add/{flowType:string}',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/add-teachers/add-teachers.html',\n\t\t\t\t\t\tcontroller: 'CourseAddTeachersCtrl as CourseAddTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Add Teachers',\n\t\t\t\t\tparent: 'new-course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Add Teachers',\n\t\t\t})\n\t\t\t.state('course.teachers.add-teachers', {\n\t\t\t\turl: '/add/{flowType:string}',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/add-teachers/add-teachers.html',\n\t\t\t\t\t\tcontroller: 'CourseAddTeachersCtrl as CourseAddTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Add Teachers',\n\t\t\t\t\tparent: 'course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Add Teachers',\n\t\t\t})\n\t\t\t.state('new-course.teachers.add-teachers-subjects', {\n\t\t\t\turl: '/add/{flowType:string}/subjects',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/add-teachers/add-teachers-subjects.html',\n\t\t\t\t\t\tcontroller: 'CourseAddTeachersSubjectsCtrl as CourseAddTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Select Teachers',\n\t\t\t\t\tparent: 'new-course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Add Teachers',\n\t\t\t})\n\t\t\t.state('course.teachers.add-teachers-subjects', {\n\t\t\t\turl: '/add/{flowType:string}/subjects',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/add-teachers/add-teachers-subjects.html',\n\t\t\t\t\t\tcontroller: 'CourseAddTeachersSubjectsCtrl as CourseAddTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Select Subjects',\n\t\t\t\t\tparent: 'course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Add Teachers',\n\t\t\t});\n\t},\n]);\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.roster', {\n url: '/roster',\n templateUrl: 'app/course/roster/roster.html',\n controller: 'CourseRosterCtrl as CourseRosterVM',\n ncyBreadcrumb: {\n label: 'Roster',\n },\n title: 'Roster',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses'\n }\n }\n })\n .state('new-course.roster', {\n url: '/roster',\n templateUrl: 'app/course/roster/roster.html',\n controller: 'CourseRosterCtrl as CourseRosterVM',\n ncyBreadcrumb: {\n label: 'Roster',\n },\n title: 'Roster',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n ;\n }]);\n\n\n","function CourseAddTeachersSubjectsCtrl(\n\t$scope,\n\t$state,\n\t$uibModal,\n\tcourseSectionStaffService,\n\tcourseDataManagerService,\n\tappSettings,\n\tuiAlertService,\n\tbusinessResponseService\n) {\n\tvar vm = this;\n\n\tvm.isOnsiteFacilitatorFlow = $state.params.flowType === 'onsite-facilitator';\n\n\tvm.loadingViewState = { pageLoading: true };\n\tvm.sort = [{ criteria: 'TeacherName', descending: false }];\n\tvm.positions =\n\t\t$state.params.flowType === 'onsite-facilitator'\n\t\t\t? [{ name: 'Onsite Facilitator', shortName: 'Onsite Facilitator', typeId: 6 }]\n\t\t\t: [\n\t\t\t\t\t{ name: 'Primary Teacher of Record', shortName: 'Primary', typeId: 1 },\n\t\t\t\t\t{ name: 'Team Teacher', shortName: 'Team Teach', typeId: 2 },\n\t\t\t\t\t{ name: 'Substitute Teacher', shortName: 'Substitute', typeId: 4 },\n\t\t\t\t\t{ name: 'Secondary Teacher', shortName: 'Secondary', typeId: 5 },\n\t\t\t ];\n\n\t/** Private **/\n\tvar resetOnCancel = false;\n\n\t/** Public **/\n\n\tvm.courseSectionStaff = [];\n\n\tvm.canAssignPrimaryTeacherOfRecord = function (courseSection, staffTypeId) {\n\t\tif (staffTypeId === 1) {\n\t\t\tvar assignedStaff = _.filter(vm.courseSectionStaff, function (css) {\n\t\t\t\treturn css.courseSectionStaffTypeID === 1 && css.subjectLevel1ID === courseSection.subjectLevel1ID;\n\t\t\t});\n\t\t\treturn assignedStaff.length === 0;\n\t\t}\n\t\treturn true;\n\t};\n\n\tvm.setTeacher = function (teacher, courseSection, staffTypeId) {\n\t\tvar courseSectionStaff = {\n\t\t\tcourseSection: courseSection,\n\t\t\tcourseSectionID: courseSection.courseSectionID,\n\t\t\tsubjectLevel1ID: courseSection.subjectLevel1ID,\n\t\t\tcourseSectionStaffType: _.head(\n\t\t\t\t_.filter(vm.positions, function (pos) {\n\t\t\t\t\treturn pos.typeId === staffTypeId;\n\t\t\t\t})\n\t\t\t),\n\t\t\tcourseSectionStaffTypeID: staffTypeId,\n\t\t\tstaff: { lastName: teacher.lastName, firstName: teacher.firstName },\n\t\t};\n\n\t\tcourseSectionStaff.courseSectionStaffType.isActive = true; // set active now so we can filter out of available teachers before save.\n\n\t\tif (staffTypeId !== 1) vm.courseSectionStaff.push(_.assign(courseSectionStaff, teacher));\n\t\telse {\n\t\t\tif (vm.canAssignPrimaryTeacherOfRecord(courseSection, staffTypeId)) {\n\t\t\t\tvm.courseSectionStaff.push(_.assign(courseSectionStaff, teacher));\n\t\t\t}\n\t\t}\n\t};\n\n\tvm.setAll = function (teacher, staffTypeID, subjectFilter) {\n\t\tvar wrappedSubjects = _(vm.subjects);\n\n\t\twrappedSubjects.filter(subjectFilter).each(function (sub) {\n\t\t\tvar courseSectionStaff = {\n\t\t\t\tcourseSection: sub.courseSection,\n\t\t\t\tcourseSectionID: sub.courseSection.courseSectionID,\n\t\t\t\tsubjectLevel1ID: sub.courseSection.subjectLevel1ID,\n\t\t\t\tcourseSectionStaffType: _.head(\n\t\t\t\t\t_.filter(vm.positions, function (pos) {\n\t\t\t\t\t\treturn pos.typeId === staffTypeID;\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\tcourseSectionStaffTypeID: staffTypeID,\n\t\t\t\tstaff: { lastName: teacher.lastName, firstName: teacher.firstName },\n\t\t\t};\n\t\t\tvar css = _.assign(courseSectionStaff, teacher);\n\t\t\tif (vm.canAssignPrimaryTeacherOfRecord(sub.courseSection, staffTypeID)) {\n\t\t\t\tif (\n\t\t\t\t\t!_.some(vm.courseSectionStaff, {\n\t\t\t\t\t\tcourseSectionID: css.courseSectionID,\n\t\t\t\t\t\tteacherStaffId: css.teacherStaffId,\n\t\t\t\t\t\tsubjectLevel1ID: css.subjectLevel1ID,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t\tvm.courseSectionStaff.push(css);\n\t\t\t}\n\t\t});\n\t};\n\n\tvm.availableTeachers = function (courseSection) {\n\t\treturn _.filter(vm.teachers, function (teacher) {\n\t\t\treturn !_.some(vm.courseSectionStaff, {\n\t\t\t\tcourseSectionID: courseSection.courseSectionID,\n\t\t\t\tteacherStaffId: teacher.teacherStaffId,\n\t\t\t\tsubjectLevel1ID: courseSection.subjectLevel1ID,\n\t\t\t\tcourseSectionStaffType: { isActive: true },\n\t\t\t});\n\t\t});\n\t};\n\tvm.getTeachers = function (courseSection, staffTypeId) {\n\t\treturn _.filter(vm.courseSectionStaff, {\n\t\t\tcourseSectionID: courseSection.courseSectionID,\n\t\t\tcourseSectionStaffTypeID: staffTypeId,\n\t\t\tsubjectLevel1ID: courseSection.subjectLevel1ID,\n\t\t});\n\t};\n\n\tvm.removeTeacher = function (teacher, courseSection, $event) {\n\t\t$event.stopPropagation();\n\t\t_.remove(vm.courseSectionStaff, {\n\t\t\tteacherStaffId: teacher.teacherStaffId,\n\t\t\tcourseSectionID: courseSection.courseSectionID,\n\t\t\tsubjectLevel1ID: courseSection.subjectLevel1ID,\n\t\t});\n\t};\n\n\tvm.add = function () {\n\t\tvar teachersToAdd = _.map(\n\t\t\t_.filter(vm.courseSectionStaff, function (t) {\n\t\t\t\treturn !t.isLocked;\n\t\t\t}),\n\t\t\tfunction (t) {\n\t\t\t\treturn {\n\t\t\t\t\tacademicYearID: vm.course.courseSectionGroup.academicYearID,\n\t\t\t\t\tschoolID: vm.course.courseSectionGroup.schoolID,\n\t\t\t\t\tteacherStaffId: t.teacherStaffId,\n\t\t\t\t\tstaffID: t.teacherStaffId,\n\t\t\t\t\tstaff: t.staff,\n\t\t\t\t\tcourseSectionStaffTypeID: t.courseSectionStaffTypeID,\n\t\t\t\t\tcourseSectionStaffType: t.courseSectionStaffType,\n\t\t\t\t\tpositionTypeID: t.positionTypeID,\n\t\t\t\t\tcourseSection: t.courseSection,\n\t\t\t\t\tcourseSectionID: t.courseSectionID,\n\t\t\t\t\tmasterStatusID: 21, //active status\n\t\t\t\t\tstatusHistory: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmasterStatusID: 21, //active status\n\t\t\t\t\t\t\tdate: vm.course.effectiveDate,\n\t\t\t\t\t\t\tcourseSectionStaffTypeID: t.courseSectionStaffTypeID,\n\t\t\t\t\t\t\tisCurrent: true,\n\t\t\t\t\t\t\tmasterStatus: {\n\t\t\t\t\t\t\t\tmasterStatusID: 21,\n\t\t\t\t\t\t\t\tdescription: 'Active',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\n\t\tvar secondaryTeacherInNonSecondaryStaffType = _.filter(teachersToAdd, function (t) {\n\t\t\tvar isSecondaryTeacher = t.positionTypeID === 13 || t.positionTypeID === 14;\n\t\t\tvar isSecondary = t.courseSectionStaffTypeID === 5;\n\t\t\treturn isSecondaryTeacher && !isSecondary;\n\t\t});\n\n\t\tif (!_.isEmpty(secondaryTeacherInNonSecondaryStaffType)) {\n\t\t\tvar title = 'Unable to add teacher';\n\t\t\tvar teacherNamesString = '';\n\n\t\t\tvar teacherNames = _.uniq(\n\t\t\t\t_.map(secondaryTeacherInNonSecondaryStaffType, function (t) {\n\t\t\t\t\treturn t.staff.firstName + ' ' + t.staff.lastName;\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tvar isMultipleTeachers = teacherNames.length > 1;\n\t\t\tif (isMultipleTeachers) {\n\t\t\t\ttitle += 's';\n\t\t\t\tteacherNamesString = teacherNames.slice(0, -1).join(', ') + ' and ' + teacherNames.slice(-1);\n\t\t\t} else {\n\t\t\t\tteacherNamesString = teacherNames[0];\n\t\t\t}\n\n\t\t\tswal(title, teacherNamesString + ' can only be assigned as a Secondary Teacher due to their current position', 'error');\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ($state.params.courseID) {\n\t\t\tvm.adding = true;\n\n\t\t\t_.remove(vm.course.courseSubjects, function (subject) {\n\t\t\t\treturn !subject.schoolSubject || subject.schoolSubject < 0;\n\t\t\t});\n\n\t\t\t_.forEach(vm.course.courseSubjects, function (subject) {\n\t\t\t\tvar teachers = _.filter(teachersToAdd, function (t) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tt.courseSectionID === subject.courseSection.courseSectionID && t.courseSection.subjectLevel1ID === subject.courseSection.subjectLevel1ID\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tif (subject.staff) {\n\t\t\t\t\tsubject.staff = subject.staff.concat(teachers);\n\t\t\t\t} else {\n\t\t\t\t\tsubject.staff = teachers;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcourseDataManagerService.saveCourse().then(\n\t\t\t\tfunction (result) {\n\t\t\t\t\tcourseDataManagerService.reconcileOnsiteFacilitatorAccess();\n\t\t\t\t\tvm.adding = false;\n\t\t\t\t\tuiAlertService.success('Teacher changes were saved successfully.', 'Save Successful');\n\t\t\t\t\tcourseDataManagerService.resetCourse();\n\t\t\t\t\tvm.course.selectedTeachers = [];\n\t\t\t\t\tvm.course.effectiveDate = null;\n\t\t\t\t\t$state.go('^');\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\tresetOnCancel = true;\n\t\t\t\t\tvm.adding = false;\n\n\t\t\t\t\tbusinessResponseService.showBusinessResponse(error.data, 'The teachers could not be added to the course');\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tlog('teachersToAdd - new course', teachersToAdd);\n\t\t\t_.forEach(vm.course.courseSubjects, function (subject) {\n\t\t\t\tvar teachers = _.filter(teachersToAdd, function (t) {\n\t\t\t\t\treturn t.courseSection.subjectLevel1ID === subject.courseSection.subjectLevel1ID;\n\t\t\t\t});\n\t\t\t\tsubject.staff = teachers;\n\t\t\t});\n\t\t\tvm.course.selectedTeachers = [];\n\t\t\tvm.course.effectiveDate = null;\n\t\t\t$state.go('^');\n\t\t}\n\t};\n\n\tvm.back = function () {\n\t\tvm.course.courseSectionStaff = vm.courseSectionStaff; //need to retain this for the trip back.\n\t\t$state.go('^.add-teachers', { flowType: $state.params.flowType });\n\t};\n\n\tvm.cancel = function () {\n\t\tvm.course.courseSectionStaff = null;\n\t\tvm.course.selectedTeachers = [];\n\t\tvm.course.effectiveDate = null;\n\t\tif (resetOnCancel) {\n\t\t\tcourseDataManagerService.resetCourse();\n\t\t}\n\t\t$state.go('^');\n\t};\n\n\tfunction flowTypeSubjectFilter(s) {\n\t\treturn (\n\t\t\t!vm.isOnsiteFacilitatorFlow ||\n\t\t\ts.schoolSubject.isOnline ||\n\t\t\ts.schoolSubject.subjectClassificationID === 7 || // subjectClassificationID of 7 = Career Tech\n\t\t\ts.schoolSubject.subjectClassificationID === 8 || // subjectClassificationID of 8 = College;\n\t\t\ts.schoolSubject.subjectClassificationID === 10 || // subjectClassificationID of 10 = Credit Recovery\n\t\t\ts.schoolSubject.subjectClassificationID === 11\n\t\t); // subjectClassificationID of 11 = Prep\n\t}\n\n\tvm.coreAndMoralFocus = function (s) {\n\t\treturn flowTypeSubjectFilter(s) && _.includes([1, 4], s.schoolSubject.subjectTypeID);\n\t};\n\n\tvm.specialAndElective = function (s) {\n\t\treturn flowTypeSubjectFilter(s) && _.includes([2, 3], s.schoolSubject.subjectTypeID);\n\t};\n\n\t/** Exports **/\n\n\tfunction init() {\n\t\tconsole.log($state.params.flowType);\n\n\t\tcourseDataManagerService.ensureAppContext().then(function (course) {\n\t\t\tvm.course = course;\n\t\t\t$scope.course = course;\n\n\t\t\tlog('init -- vm.course.courseSectionStaff', vm.course.courseSectionStaff);\n\n\t\t\tif (!vm.course.courseSectionStaff) {\n\t\t\t\tvm.courseSectionStaff = _.map(_.filter(_.flatten(_.map(vm.course.courseSubjects, 'staff')), { masterStatusID: 21 }), function (tch) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tacademicYearID: vm.course.courseSectionGroup.academicYearID,\n\t\t\t\t\t\tschoolID: vm.course.courseSectionGroup.schoolID,\n\t\t\t\t\t\tstaffID: tch.teacherStaffId || tch.staffID,\n\t\t\t\t\t\tteacherStaffId: tch.teacherStaffId || tch.staffID,\n\t\t\t\t\t\tstaff: tch.staff,\n\t\t\t\t\t\tteacherName: tch.staff.lastName + ', ' + tch.staff.firstName,\n\t\t\t\t\t\tcourseSectionStaffTypeID: tch.courseSectionStaffTypeID,\n\t\t\t\t\t\tcourseSectionStaffType: tch.courseSectionStaffType,\n\t\t\t\t\t\tcourseSection: tch.courseSection,\n\t\t\t\t\t\tsubjectLevel1ID: tch.courseSection.subjectLevel1ID,\n\t\t\t\t\t\tcourseSectionID: tch.courseSectionID,\n\t\t\t\t\t\tisLocked: tch.courseSectionStaffID > 0,\n\t\t\t\t\t\tmasterStatusID: tch.masterStatusID,\n\t\t\t\t\t\tstatusHistory: tch.statusHistory,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t_.each(vm.course.courseSectionStaff, function (css) {\n\t\t\t\t\tvm.courseSectionStaff.push(css);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlog('init -- vm.courseSectionStaff', vm.courseSectionStaff);\n\n\t\t\tvm.teachers = vm.course.selectedTeachers || [];\n\t\t\tvm.subjects = vm.course.courseSubjects;\n\n\t\t\tvm.loadingViewState.pageLoading = false;\n\t\t});\n\t}\n\n\tinit();\n}\n\nangular.module('nha.schedule').controller('CourseAddTeachersSubjectsCtrl', CourseAddTeachersSubjectsCtrl);\n\nCourseAddTeachersSubjectsCtrl.$inject = [\n\t'$scope',\n\t'$state',\n\t'$uibModal',\n\t'courseSectionStaffService',\n\t'courseDataManagerService',\n\t'appSettings',\n\t'uiAlertService',\n\t'businessResponseService',\n];\n","import { IGetStudentAvailableCoursesRequest } from 'app/types/get-student-available-courses-request.type';\n\nangular.module('nha.schedule').service('studentCoursesService', [\n\t'baseService',\n\t'appSettings',\n\t'MasterSchedulingRestangular',\n\tfunction (baseService, appSettings, masterSchedulingRestangular) {\n\t\tvar service = {\n\t\t\tget: get,\n\t\t\tgetForStudent: getForStudent,\n\t\t\tgetAvailable: getAvailable,\n\t\t\taddCoursesToStudent: addCoursesToStudent,\n\t\t};\n\n\t\treturn service;\n\n\t\tfunction get(studentInSchoolID) {\n\t\t\treturn baseService.getList('StudentCourses/' + studentInSchoolID, null, false, true, masterSchedulingRestangular);\n\t\t}\n\n\t\tfunction getForStudent(studentInSchoolID, academicYearID, markingPeriodID) {\n\t\t\treturn baseService\n\t\t\t\t.getList('StudentCourses/' + studentInSchoolID + '/' + academicYearID + '/' + markingPeriodID, null, false, true, masterSchedulingRestangular)\n\t\t\t\t.then(function (courses) {\n\t\t\t\t\t// fix dates\n\t\t\t\t\t_.forEach(courses, function (c) {\n\t\t\t\t\t\t_.forEach(c.statusHistory, function (sh) {\n\t\t\t\t\t\t\tsh.date = _utils.inSpecifiedTimezone(sh.date);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn courses;\n\t\t\t\t});\n\t\t}\n\n\t\tfunction getAvailable(schoolID: number, academicYearID: number, studentInSchoolID: number, gradeLevelIDs: number[]) {\n\t\t\tvar params: IGetStudentAvailableCoursesRequest = {\n\t\t\t\tacademicYearID: academicYearID,\n\t\t\t\tschoolID: schoolID,\n\t\t\t\tstudentInSchoolID: studentInSchoolID,\n\t\t\t\tgradeLevelIDs: gradeLevelIDs,\n\t\t\t};\n\n\t\t\treturn masterSchedulingRestangular.all('StudentCourses/GetAvailable').post(params);\n\t\t}\n\n\t\tfunction addCoursesToStudent(coursesToAdd) {\n\t\t\treturn masterSchedulingRestangular.all('StudentCourses').post(coursesToAdd);\n\t\t}\n\t},\n]);\n","\n angular.module(\"nha.schedule\")\n .service(\"courseTeacherService\", [\"filteredRepositoryFactory\", 'baseService', 'MasterSchedulingRestangular', \n function (filteredRepositoryFactory, baseService, masterSchedulingRestangular) {\n\n var repo = new filteredRepositoryFactory('TeacherCourse', masterSchedulingRestangular);\n\n repo.textSearchFields = ['TeacherName'];\n\n /*** private service methods ***/\n repo.setFilters = function (parameters, filters, searchText) {\n\n if (filters) {\n if (filters.AcademicYear) {\n var selectedYear = _.head(_.filter(filters.AcademicYear.items, 'selected'));\n if (selectedYear) {\n parameters.academicYearId = selectedYear.id;\n }\n }\n\n if (filters.School) {\n var selectedSchool = _.head(_.filter(filters.School.items, 'selected'));\n if (selectedSchool) {\n parameters.schoolId = selectedSchool.id;\n }\n }\n\n if (filters.GradeLevel) {\n var selectedIds = _.map(_.filter(filters.GradeLevel.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.gradeLevelIds = selectedIds;\n } else {\n parameters.gradeLevelIds = [];\n }\n } else {\n parameters.gradeLevelIds = [];\n }\n\n\n if (filters.MarkingPeriod) {\n var selectedIds = _.map(_.filter(filters.MarkingPeriod.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.markingPeriodIds = selectedIds;\n } else {\n parameters.markingPeriodIds = [];\n }\n } else {\n parameters.markingPeriodIds = [];\n }\n\n if (filters.SchoolGradeLevelSection) {\n var selectedIds = _.map(_.filter(filters.SchoolGradeLevelSection.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.sectionGroupIds = selectedIds;\n } else {\n parameters.sectionGroupIds = [];\n }\n } else {\n parameters.sectionGroupIds = [];\n }\n\n if (filters.SubjectType) {\n var selectedIds = _.map(_.filter(filters.SubjectType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.subjectTypeIds = selectedIds;\n } else {\n parameters.subjectTypeIds = [];\n }\n } else {\n parameters.subjectTypeIds = [];\n }\n\n if (filters.Homeroom) {\n var selectedIds = _.map(_.filter(filters.Homeroom.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.staffIds = selectedIds;\n } else {\n parameters.staffIds = [];\n }\n } else {\n parameters.staffIds = [];\n }\n\n _utils.setSearchFilter(parameters, searchText, repo.textSearchFields);\n }\n }\n\n // /*** public service methods ***/\n repo.getTeachers = function(parameters, filters) {\n\n if (!parameters.append) {\n repo.loadedCount = 0;\n repo.moreExist = true;\n }\n\n var apiParameters: any = {};\n apiParameters.$top = repo.pageSize;\n apiParameters.$skip = repo.loadedCount;\n\n _utils.setOrderByParameters(apiParameters, parameters.sortOrder);\n repo.setFilters(apiParameters, filters, parameters.searchText);\n\n return baseService.getList(\"TeacherCourse\", apiParameters, true, true, masterSchedulingRestangular).then(function (response) {\n\n repo.loadedCount += response.length;\n if (response.length < repo.pageSize) {\n repo.moreExist = false;\n }\n return response;\n\n });\n }\n\n repo.getAvailableTeachers = function (parameters, filters, includeAllPositionTypes) {\n var schoolId = _.head(_.map(_.filter(filters.School.items, 'selected'), 'id'));\n var academicYearId = _.head(_.map(_.filter(filters.AcademicYear.items, 'selected'), 'id'));\n var api = \"teachercourse/\" + (includeAllPositionTypes ? 'getAvailableStaff/' : 'getAvailableTeachers/') + schoolId + \"/\" + academicYearId;\n\n if (!parameters.append) {\n repo.loadedCount = 0;\n repo.moreExist = true;\n }\n\n var apiParameters: any = {\n $top: repo.pageSize,\n $skip: repo.loadedCount,\n }\n\n _utils.setOrderByParameters(apiParameters, parameters.sortOrder);\n\n if (parameters.searchText) {\n _utils.setSearchFilter(apiParameters, parameters.searchText, repo.textSearchFields);\n }\n\n return baseService.getList(api, apiParameters, true, true, masterSchedulingRestangular).then(function(response) {\n\n repo.loadedCount += response.length;\n if (response.length < repo.pageSize) {\n repo.moreExist = false;\n }\n return response;\n });\n }\n\n return repo;\n }\n ]);\n\n\n","\n\n angular.module('nha.schedule')\n .service('courseSectionGroupRepository', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('CourseSectionGroup', masterSchedulingRestangular);\n }\n ]);\n","\n\n function CourseCtrl($scope, $timeout, $rootScope, $state, $uibModal, appSettings, courseDataManagerService, courseService, courseValidationService, errorService, uiAlertService, businessResponseService) {\n\n var vm = this;\n\n vm.fromState = $rootScope.previousState;\n vm.validations = [];\n var initialized = false;\n vm.iconUrl = \"app/icons/\" + ($state.params.courseID ? \"edit-course.png\" : \"new-course.png\");\n\n\t\tvm.severity = courseValidationService.severityLevels;\n\n\t\tvm.messageText = '';\n\t\tvm.messageDetailText = '';\n\n function getStaffHistoryEditsInProgress() {\n var allStaffStatusHistories = _.flatten(_.map(_.flatten(_.map(_.flatten(vm.course.courseSubjects), 'staff')), 'statusHistory'));\n var editsInProgress = _.filter(allStaffStatusHistories, { editMode: true });\n return editsInProgress;\n }\n\n function getStudentHistoryEditsInProgress() {\n var allStudentStatusHistories = _.flatten(_.map(_.flatten(_.map(_.flatten(vm.course.courseSubjects), 'students')), 'statusHistory'));\n var editsInProgress = _.filter(allStudentStatusHistories, { editMode: true });\n return editsInProgress;\n }\n\n //vm.isDirty = function () {\n // if (vm.initialState) {\n\n // return !_.isEqual(vm.initialState, vm.course, function (_initialState, _course) {\n\n // // determine if this has changed only by looking at certain objects\n // return _.eq(_initialState.courseSectionGroup, _course.courseSectionGroup)\n // && _.eq(_initialState.courseSubjects, _course.courseSubjects)\n // && _.eq(_initialState.schoolMarkingPeriods, _course.schoolMarkingPeriods)\n // && _.eq(_initialState.courseSectionGroupMeetingBlockTimes, _course.courseSectionGroupMeetingBlockTimes);\n // });\n // }\n\n // return false;\n //}\n\n vm.isValid = function () {\n return courseValidationService.isValid();\n }\n\n vm.isFormComplete = function (frmName) {\n return courseValidationService.isFormComplete(frmName);\n }\n\n vm.saveCourse = function () {\n\n vm.validations = courseValidationService.getValidations();\n if (!courseValidationService.isValid()) {\n swal('Unable to save course', 'Please correct errors before you can save this course', 'error');\n return;\n }\n\n if (getStaffHistoryEditsInProgress().length > 0) {\n swal('Unconfirmed inline edits detected', 'You have one or more teacher status history edits in progress. These changes would be lost. Please confirm or cancel these edits in progress');\n return;\n }\n\n if (getStudentHistoryEditsInProgress().length > 0) {\n swal('Unconfirmed inline edits detected', 'You have one or more roster status history edits in progress. These changes would be lost. Please confirm or cancel these edits in progress');\n return;\n }\n\n var courseSectionGroupName = vm.course.courseSectionGroup.courseSectionGroupName\n if (courseSectionGroupName && courseSectionGroupName.indexOf(',') > -1) {\n swal('Comma detected', 'Course could not be saved. Please remove the comma(s) from the Course Name and save again.');\n return;\n }\n\n if (vm.course.courseSectionGroupMeetingBlockTimes) {\n //issue w/directive and self-contained half day courses.\n //directive is binding as an object instead of an array - we need to bind as an array.\n //before posting to the server.\n if (!_.isArray(vm.course.courseSectionGroupMeetingBlockTimes)) {\n var csmbtArray = [];\n csmbtArray.push(_.cloneDeep(vm.course.courseSectionGroupMeetingBlockTimes));\n vm.course.courseSectionGroupMeetingBlockTimes = csmbtArray;\n }\n }\n\t\t\tvm.course.isEditMode = false;\n vm.course.courseSubjects = _.orderBy(vm.course.courseSubjects, 'schoolSubject.subjectName', 'asc');\n\n log('course->saveCourse, vm.course', vm.course);\n\n vm.saving = true;\n\n if (vm.businessResponse) {\n delete vm.businessResponse; //reset business response property to reflect this call.\n }\n\n courseDataManagerService.saveCourse(vm.course).then(function (resp) {\n vm.saving = false;\n\n courseDataManagerService.reconcileOnsiteFacilitatorAccess();\n log('saved business response', resp);\n vm.businessResponse = resp;\n\n if (resp.operationResult && resp.operationResult.passed) {\n\n if ($state.params.courseID) {\n swal(\"Course Updated\", 'Course has been successfully updated. ' + resp.operationResult.result.courseSectionGroup.courseSectionGroupName, \"success\");\n } else {\n swal(\"Course Created\", 'A new course has been created named ' + resp.operationResult.result.courseSectionGroup.courseSectionGroupName, \"success\");\n }\n courseDataManagerService.resetCourse();\n //$state.go('course.overview', { courseID: resp.operationResult.result.courseSectionGroup.courseSectionGroupID }, { reload: true });\n $state.go($state.current.name.replace('new-course', 'course'), { courseID: resp.operationResult.result.courseSectionGroup.courseSectionGroupID }, { reload: true });\n }\n },\n function (error) {\n vm.saving = false;\n log('save error occurred', error);\n\n vm.businessResponse = error.data;\n });\n }\n\n vm.deleteCourse = function () {\n swal({\n title: \"You are about to delete this course - are you sure?\",\n type: \"warning\",\n showCancelButton: true,\n confirmButtonColor: \"#DD6B55\",\n confirmButtonText: \"Yes, delete the course\",\n closeOnConfirm: true\n }, function () {\n vm.deleting = true;\n var courseId = $state.params.courseID;\n\n courseService.deleteCourse(courseId).then(function (response) {\n\n vm.deleting = false;\n uiAlertService.success('Course has been successfully deleted. ', \"Course Deleted\");\n $state.go('courses');\n\n\t\t\t\t}, function (error) {\n\n\t\t\t\t\tvm.setMessageAndMessageDetailsText(error);\n\n vm.deleting = false;\n\n\t\t\t\t\tswal({\n\t\t\t\t\t\ttitle: 'The course could not be deleted',\n\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\ttext: vm.messageText,\n\t\t\t\t\t\thtml: true,\n\t\t\t\t\t\tshowCancelButton: (vm.messageDetailText.length !== 0),\n\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\tconfirmButtonColor: '#DD6B55',\n\t\t\t\t\t\tcancelButtonText: 'Show Details',\n\t\t\t\t\t\tconfirmButtonText: 'Ok',\n\t\t\t\t\t},\n\t\t\t\t\t\tfunction (value) {\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\t\t\tswal({\n\t\t\t\t\t\t\t\t\t\ttitle: 'Dependent Data Details',\n\t\t\t\t\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\t\t\t\t\ttext: vm.messageDetailText,\n\t\t\t\t\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 400);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n });\n });\n\t\t}\n\n\t\tvm.setMessageAndMessageDetailsText = function (error) {\n\t\t\tvar messages = [];\n\t\t\tvar messageDetails = [];\n\n\t\t\t_.forEach(error.data.operationResult.rules, function (rule) {\n\t\t\t\t_.forEach(rule.messages, function (message) {\n\t\t\t\t\tmessages.push(message);\n\t\t\t\t});\n\n\t\t\t\t_.forEach(rule.messageDetails, function (messageDetail) {\n\t\t\t\t\tmessageDetails.push(messageDetail);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tvm.messageText = messages.join('\\n\\n');\n\t\t\tvm.messageDetailText = messageDetails.join('\\n\\n');\n\t\t}\n\n vm.showDeleteButton = function () {\n return $state.params && $state.params.courseID > 0;\n }\n\n vm.backToPrevious = function () {\n if (vm.fromState) {\n $state.go(vm.fromState);\n } else {\n $state.go('courses');\n }\n }\n\n vm.cancel = function () {\n courseDataManagerService.courseCancelled();\n }\n\n vm.academicYearDisplay = function () {\n return (vm.course && vm.course.courseSectionGroup && vm.course.courseSectionGroup.academicYearID ? vm.course.courseSectionGroup.academicYearID + '-' + (parseInt(vm.course.courseSectionGroup.academicYearID, 10) + 1) : '');\n }\n\n vm.subjectCount = function () {\n if (vm.course && vm.course.courseSubjects) {\n return vm.course.courseSubjects.length;\n }\n }\n\n vm.studentCount = function () {\n if (vm.course && vm.course.courseSubjects) {\n return _(vm.course.courseSubjects).map('students').reject(_.isUndefined).flatten().uniqBy('studentInSchoolID')\n .filter(function (s) {\n return (s.currentMasterStatusID === 23 || s.currentMasterStatusID === 46)\n }).value().length;\n }\n }\n\n vm.teacherCount = function () {\n if (vm.course && vm.course.courseSubjects) {\n return _(vm.course.courseSubjects).map('staff').reject(_.isUndefined).flatten().uniqBy('staffID').value().length;\n }\n }\n\n function init() {\n initialized = true;\n courseDataManagerService.ensureAppContext().then(function (course) {\n vm.course = course;\n $scope.course = course;\n\n $timeout(function () {\n vm.initialState = _.cloneDeep(course);\n }, 500);\n\n courseDataManagerService.canUpdateCourse().then(function (result) {\n vm.hasUpdateAccess = result;\n\t\t\t\t\tlog('vm.course', vm.course);\n\t\t\t\t\tif (vm.course.courseSectionGroup.isAttendance) {\n\t\t\t\t\t\tvm.course.courseSectionGroup.attendanceOption = 'Attendance';\n\t\t\t\t\t} else if (vm.course.courseSectionGroup.isSafetyAttendance) {\n\t\t\t\t\t\tvm.course.courseSectionGroup.attendanceOption = 'Safety';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvm.course.courseSectionGroup.attendanceOption = 'None';\n\t\t\t\t\t}\n });\n }, function (error) {\n initialized = false;\n });\n }\n\n $scope.$on('master-scheduling-course-loaded', function (event, data) {\n if (!initialized) {\n init();\n }\n });\n\n }\n\n angular.module('nha.schedule').controller('CourseCtrl', CourseCtrl);\n\n CourseCtrl.$inject = ['$scope', '$timeout', '$rootScope', '$state', '$uibModal', 'appSettings', 'courseDataManagerService', 'courseService', 'courseValidationService', 'errorSvc', 'uiAlertService', 'businessResponseService'];\n\n\n","\n\n angular.module('nha.schedule')\n .service('schoolGradeLevelMasterScheduleRepository', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('SchoolGradeLevelMasterSchedule', masterSchedulingRestangular);\n }\n ]);\n","angular.module('nha.schedule').config([\n\t'$stateProvider',\n\t'appSettings',\n\tfunction config($stateProvider, appSettings) {\n\t\t$stateProvider\n\t\t\t.state('course', {\n\t\t\t\turl: '/course/{courseID:int}',\n\n\t\t\t\ttemplateUrl: 'app/course/course.html',\n\t\t\t\tcontroller: 'CourseCtrl as courseVM',\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: '{{course.displayName || \"Course\"}}',\n\t\t\t\t},\n\t\t\t\ttitle: 'Course Detail',\n\t\t\t\tresolve: {\n\t\t\t\t\tauthorization: [\n\t\t\t\t\t\t'stateTransitionSecurityCheck',\n\t\t\t\t\t\tfunction (stateTransitionSecurityCheck) {\n\t\t\t\t\t\t\treturn stateTransitionSecurityCheck.resolveAuthorization('Courses');\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\tsecurity: {\n\t\t\t\t\t\trequiredResource: 'Role|SIS Admin',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tredirectTo: 'course.overview',\n\t\t\t})\n\t\t\t.state('new-course', {\n\t\t\t\turl: '/course/new',\n\n\t\t\t\ttemplateUrl: 'app/course/course.html',\n\t\t\t\tcontroller: 'CourseCtrl as courseVM',\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'New Course',\n\t\t\t\t\tparent: 'main',\n\t\t\t\t},\n\t\t\t\ttitle: 'New Course',\n\t\t\t\tresolve: {\n\t\t\t\t\tauthorization: [\n\t\t\t\t\t\t'stateTransitionSecurityCheck',\n\t\t\t\t\t\tfunction (stateTransitionSecurityCheck) {\n\t\t\t\t\t\t\treturn stateTransitionSecurityCheck.resolveAuthorization('Courses');\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\tdata: {\n\t\t\t\t\tsecurity: {\n\t\t\t\t\t\trequiredResource: 'Role|SIS Admin',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tredirectTo: 'new-course.overview',\n\t\t\t});\n\t},\n]);\n","\n\n function CourseRemoveStudentsCtrl($scope, $state, $uibModal, courseDataManagerService, rosterHistoryService, errorService, appSettings, businessResponseService) {\n\n var vm = this;\n\n vm.course = courseDataManagerService.getCourse();\n\n vm.nameSortCriteria = [\n { criteria: 'student.lastName', displayName: 'Last Name' },\n { criteria: 'student.firstName', displayName: 'First Name' }\n ];\n\n vm.sort = [{ criteria: 'student.lastName', descending: false }];\n\n vm.clearSelectedCourseSubjects = {};\n\n\n vm.loadingViewState = { studentsLoading: false };\n\n\n /** Private **/\n\n function getStudentSubjects(studentInSchoolID) {\n // Get the subjects the student is part of.\n return _.map(_.filter(vm.course.courseSubjects, function (cs) {\n return _.some(cs.students, function (s) {\n var lastStatus = _.last(s.statusHistory);\n return s.studentInSchoolID === studentInSchoolID && [23, 46].indexOf(lastStatus.masterStatusID) > -1;\n });\n }), function (cs) {\n // Strip out the parts we don't need to prevent massive model\n return { id: _.find(cs.students, { 'studentInSchoolID': studentInSchoolID }).courseSectionRosterID, name: cs.courseSection.courseSubjectDisplayName };\n });\n }\n\n /** Integrations **/\n\n\n /** Public **/\n\n vm.checkAll = function () {\n _.each(vm.students, function (student) {\n var lastStatus = _.last(student.statusHistory);\n if (lastStatus.masterStatusID === 23 || lastStatus.masterStatusID === 46) {//only select students that are active/transferred in as last status record. \n student.selected = true;\n }\n });\n };\n\n vm.uncheckAll = function () {\n _.each(vm.students, function (student) {\n student.selected = false;\n });\n };\n\n vm.checkAllSubjects = function () {\n _.each(vm.students, function (student) {\n _.each(student.subjects, function (subject) {\n subject.selected = true;\n })\n });\n };\n\n vm.uncheckAllSubjects = function () {\n _.each(vm.students, function (student) {\n _.each(student.subjects, function (subject) {\n subject.selected = false;\n })\n });\n };\n\n vm.sortChanged = function (expression) {\n vm.sort = _.map(expression, function (crit) {\n return (crit.descending ? '-' : '') + crit.criteria;\n });\n }\n\n vm.searchFilter = function (item) {\n if (!item.student) {\n return false;\n }\n return !vm.searchBoxDisplay || _.some([item.student.firstName, item.student.lastName], function (str) {\n return _.includes(str.toUpperCase(), vm.searchBoxDisplay.toUpperCase());\n });\n }\n\n\n\n vm.attachSubjects = function (student) {\n student.subjects = getStudentSubjects(student.studentInSchoolID);\n log(student);\n }\n\n function validate() {\n var valid = true;\n _.each(vm.students, function (t) {\n if (t.selected && (!t.effectiveDate || !t.effectiveDate.toDate())) {\n log('validate failure', t);\n swal('Student effective date is invalid', \"The effective date for student \" + t.student.lastName + \", \" + t.student.firstName + \" is not valid. Please pick a valid date\", 'error');\n valid = false;\n }\n });\n return valid;\n }\n\n vm.remove = function (ignoreWarnings) {\n errorService.dismissAllErrors();\n var removeMasterStatusId = 24; //matches CourseSectionRosterMasterStatus.Removed enum\n vm.removing = true;\n var statusChanges = [];\n if (validate()) {\n _.each(vm.students, function (t) {\n if (t.selected) {\n _.each(t.subjects, function (s) {\n if (s.selected) {\n statusChanges.push({ Id: s.id, StartDate: t.effectiveDate.toDate(), MasterStatusId: removeMasterStatusId, IgnoreWarnings: ignoreWarnings });\n }\n });\n }\n });\n rosterHistoryService.post(statusChanges).then(function() {\n vm.removing = false;\n courseDataManagerService.resetCourse();\n $state.go('^', {}, { reload: true });\n }, function(error) {\n vm.removing = false;\n if (error.status === 400) {\n //business rules failed, display popup listing violated rules.\n var displayModal = {\n businessResponse: error.data,\n title: \"The student removal could not be completed\",\n message: \"The student removal could not be completed due the following business rules\",\n warningMessage: \"The following data will be deleted if you proceed:\",\n checkboxLabel: \"I understand that the above data will be deleted for all students\",\n checkboxWarning: true,\n confirmButtonText: \"Yes - Delete the Data\"\n }\n\n var modalInstance = $uibModal.open({\n templateUrl: appSettings.coreWebRootUrl + 'app/templates/business-response-modal.html',\n controller: 'BusinessResponseModalCtrl',\n resolve: {\n displayModal: function() {\n return displayModal;\n }\n },\n size: 'sm'\n });\n\n modalInstance.result.then(function(results) {\n if (results.ignoreWarnings) {\n vm.remove(true);\n }\n });\n } else {\n vm.hasError = true;\n businessResponseService.showBusinessResponse(error.data, 'An error occurred while removing students.');\n }\n });\n } else {\n vm.removing = false;\n }\n }\n\n function clearSelections() {\n _.each(vm.students, function(t) {\n if (t.selected) {\n delete t.selected;\n }\n _.each(t.subjects, function(s) {\n if (s.selected) {\n delete s.selected;\n }\n })\n })\n }\n\n vm.cancel = function () {\n clearSelections();\n $state.go('^');\n }\n\n vm.back = function () {\n $state.go('^.remove-students');\n }\n\n function convertToMoment(dateToConvert) {\n return dateToConvert instanceof moment ? dateToConvert : moment(_.trimStart(dateToConvert, \"'\\'\"));\n }\n\n function init() {\n errorService.dismissAllErrors();\n\n courseDataManagerService.ensureAppContext().then(function (context) {\n $scope.course = context;\n vm.course = context;\n\n vm.minDate = convertToMoment(vm.course.schoolMarkingPeriods[0].beginDate);\n vm.maxDate = convertToMoment(_.last(vm.course.schoolMarkingPeriods).endDate);\n var now = moment();\n\n if (!vm.course.effectiveDate) {\n if (vm.minDate.isAfter(now)) {\n vm.course.effectiveDate = vm.minDate; \n } else if (vm.maxDate.isBefore(now)) {\n vm.course.effectiveDate = vm.maxDate;\n } \n }\n\n vm.course.effectiveDate = (vm.course.effectiveDate || moment());\n\n log('remove-students: vm.course.courseSubjects', vm.course.courseSubjects);\n\n if (vm.course.courseSubjects.length && !vm.students) {\n var students = _.uniqBy(_.flatten(_.map(vm.course.courseSubjects, 'students')), 'studentInSchoolID');\n _.each(students, function (student) {\n student.subjects = getStudentSubjects(student.studentInSchoolID);\n });\n vm.students = students;\n }\n\n log('remove-students: vm.students', vm.students);\n vm.sortChanged(vm.sort);\n\n });\n }\n\n init();\n\n\n /** Exports **/\n\n\n }\n\n angular.module('nha.schedule').controller('CourseRemoveStudentsCtrl', CourseRemoveStudentsCtrl);\n\n CourseRemoveStudentsCtrl.$inject = ['$scope', '$state', '$uibModal', 'courseDataManagerService', 'rosterHistoryService', 'errorSvc', 'appSettings', 'businessResponseService'];\n\n\n","\n\n function TransferStudentsCtrl($state, transferStudentsContextManagerService, errorService, appSettings) {\n\n var vm = this;\n\n /** Private **/\n function selectStudent(student) {\n log('student selected', student);\n student.selected = true;\n vm.transfer.selectedStudents.push(student);\n }\n\n function init() {\n\n errorService.dismissAllErrors();\n vm.loadingViewState.studentsLoading = true;\n\n var courseSectionGroupId = -1;\n if ($state.params.courseID) {\n courseSectionGroupId = $state.params.courseID;\n }\n\n transferStudentsContextManagerService.ensureTransferStudentsContext(courseSectionGroupId).then(function (response) {\n vm.transfer = transferStudentsContextManagerService.getTransfer();\n vm.loadingViewState.studentsLoading = false;\n }, function (error) {\n errorService.getUnhandledError(error, 'An error occurred loading the transfer data.');\n });\n\n }\n\n /** Public **/\n vm.loadingViewState = { studentsLoading: false };\n\n function unselectStudent(student) {\n student.selected = false;\n vm.transfer.selectedStudents = _.reject(vm.transfer.selectedStudents, { studentInSchoolId: student.studentInSchoolId });\n }\n\n function setSelected(student) {\n if (student.selected) {\n selectStudent(student);\n } else {\n unselectStudent(student);\n }\n }\n\n function doCancel() {\n transferStudentsContextManagerService.resetTransfer();\n $state.go('^');\n }\n\n function goToStudentRecord(s, $event) {\n\n if ($event) {\n $event.stopPropagation();\n }\n\n _utils.openUrl(appSettings.studentManagementWebRootUrl + s.studentInSchoolId + '/courses/overview', true);\n }\n\n\n /** Exports **/\n vm.setSelected = setSelected;\n vm.unselectStudent = unselectStudent;\n vm.doCancel = doCancel;\n vm.goToStudentRecord = goToStudentRecord;\n\n init();\n }\n\n angular.module('nha.schedule').controller('TransferStudentsCtrl', TransferStudentsCtrl);\n\n TransferStudentsCtrl.$inject = ['$state', 'transferStudentsContextManagerService', 'errorSvc', 'appSettings'];\n\n\n","import {CourseSectionGroup} from \"../../types/course.type\";\n\nangular.module(\"nha.schedule\")\n .service(\"courseDataService\",\n function () {\n\n // This service acts as our model. This shouldn't be for http calls\n return {\n course: {\n courseSectionGroup: {} as CourseSectionGroup,\n schoolSchedule: [],\n isAttendanceRequired: true,\n curriculum: {\n curriculumType: 1,\n gradeLevel: null\n\n },\n selectedAcademicYear: -1, //no academicYearSelected by default - sync'd w/filters\n //markingPeriodGroup: 'year',\n courseSubjects: [],\n rosterImport: {}, // any imports that need to be performed\n isDefaultSubjects: true,\n areSubjectsVerified: false, // used to validate whether user has visited subjects tab\n\t\t\t\t\t\tcourseOverallPrimaryStaffIds: [],\n\t\t\t\t\t\tmarkingPeriodHybridLearningDays: []\n }\n };\n }\n );\n","\n\n\tangular.module('nha.schedule', _ng.moduleInit([\n\t\t'nha.core',\n\t\t'nha.portal'\n\t]));\n","/**\n * transfer-students.repository\n * @namespace schedule\n * @remarks '.repository' is a sub-classification of service, including exclusively webAPI calls (CRUD+Special); one file per webAPI endpoint\n */\n\n\n // define one component per file (single responsibility)\n angular\n .module('nha.schedule')\n .service('studentTransfersRepository', studentTransfersRepository);\n\n // protect against minification\n /* @ngInject */\n studentTransfersRepository.$inject = ['baseService', 'appSettings', 'MasterSchedulingRestangular'];\n\n /**\n * @name studentTransfersRepository\n * @description Constructor for transfer-students.repository\n * @memberOf schedule\n */\n function studentTransfersRepository(baseService, appSettings, masterSchedulingRestangular) {\n\n /*jshint validthis: true */\n var service = this;\n\n // Service methods - sorted alphabetically, matching sorted implementations below\n // helps you instantly identify which members of the service can be used \n service.appSettings = appSettings;\n service.get = get;\n service.put = put;\n\n return service;\n\n /**\n * @name get\n * @description retrieves a transfer view model \n * @returns object Object all of the student transfer properties for the courseSectionGroup\n */\n function get(courseSectionGroupId) {\n return baseService.getList('studentTransfers', { id: courseSectionGroupId }, true, true, masterSchedulingRestangular);\n }\n\n /**\n * @name put\n * @description puts a transfer view model object to the service endpoint.\n */\n function put(transfer) {\n var params: any = { id: transfer.fromCourseSectionGroupId };\n return baseService.put('studentTransfers', transfer, transfer.fromCourseSectionGroupId, true, masterSchedulingRestangular, params);\n }\n }\n\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.roster.remove-students', {\n url: '/remove',\n views: {\n '@': {\n templateUrl: 'app/course/roster/remove-students/remove-students.html',\n controller: 'CourseRemoveStudentsCtrl as CourseRemoveStudentsVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Remove Students',\n parent: 'course',\n skip: true\n },\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n },\n title: 'Remove Students'\n })\n .state('new-course.roster.remove-students', {\n url: '/remove',\n views: {\n '@': {\n templateUrl: 'app/course/roster/remove-students/remove-students.html',\n controller: 'CourseRemoveStudentsCtrl as CourseRemoveStudentsVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Remove Students',\n parent: 'new-course',\n skip: true\n },\n title: 'Remove Students'\n })\n .state('course.roster.remove-students-from', {\n url: '/remove/subjects',\n views: {\n '@': {\n templateUrl: 'app/course/roster/remove-students/remove-from-subjects.html',\n controller: 'CourseRemoveStudentsCtrl as CourseRemoveStudentsVM',\n }\n },\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n },\n ncyBreadcrumb: {\n label: 'Remove Students',\n parent: 'course',\n skip: true\n },\n title: 'Remove Students'\n })\n .state('new-course.roster.remove-students-from', {\n url: '/remove/subjects',\n views: {\n '@': {\n templateUrl: 'app/course/roster/remove-students/remove-from-subjects.html',\n controller: 'CourseRemoveStudentsCtrl as CourseRemoveStudentsVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Remove Students',\n parent: 'new-course',\n skip: true\n },\n title: 'Remove Students'\n })\n\n ;\n }]);\n\n\n","function StudentCoursesTransferCoursesCtrl(\n\t$state,\n\tschoolMarkingPeriodService,\n\ttermService,\n\tcourseSectionGroupService,\n\tcourseSectionService,\n\terrorService,\n\ttransferContextService,\n\tschoolGradeLevelService,\n\t$q,\n\ttoastr\n) {\n\tvar vm = this;\n\tvm.selectedGradeLevelID = null;\n\n\t/** Private **/\n\tfunction populateCourseSectionTransfers() {\n\t\tlet courseSections = vm.courseSections;\n\t\tif (vm.transfer.toCourseSectionGroupId) {\n\t\t\tcourseSections = _.filter(courseSections, { courseSectionGroupID: vm.transfer.toCourseSectionGroupId });\n\t\t}\n\t\tif (vm.transfer.effectiveDate === null) {\n\t\t\tcourseSections = [];\n\t\t}\n\n\t\t_.forEach(vm.transfer.studentCourses, function (transferCourseSection) {\n\t\t\ttransferCourseSection.selected = false;\n\t\t\ttransferCourseSection.toCourseSectionGroupId = vm.transfer.toCourseSectionGroupId;\n\n\t\t\tvar filteredCourseSections = _.filter(_.reject(courseSections, { courseSectionID: transferCourseSection.courseSectionID }), {\n\t\t\t\tbaseSubjectID: transferCourseSection.baseSubjectID,\n\t\t\t});\n\n\t\t\tif (!filteredCourseSections.length) {\n\t\t\t\tfilteredCourseSections.push({ courseSectionID: -1, courseSectionSystemGeneratedName: 'No course found' });\n\t\t\t\ttransferCourseSection.transferToCourseList = filteredCourseSections;\n\t\t\t\ttransferCourseSection.selectedItem = filteredCourseSections[0];\n\t\t\t} else {\n\t\t\t\ttransferCourseSection.transferToCourseList = _.sortBy(filteredCourseSections, 'courseSectionSystemGeneratedName');\n\t\t\t\tif (transferCourseSection.transferToCourseList.length === 2) {\n\t\t\t\t\ttransferCourseSection.selectedItem = transferCourseSection.transferToCourseList[1];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction loadGradeLevels() {\n\t\tvar academicYearId = vm.transfer.student.academicYearID;\n\t\tvar schoolId = vm.transfer.student.schoolID;\n\n\t\treturn schoolGradeLevelService.get(schoolId, academicYearId);\n\t}\n\n\tfunction loadMarkingPeriods() {\n\t\tvar academicYearId = vm.transfer.student.academicYearID;\n\t\tvar schoolId = vm.transfer.student.schoolID;\n\n\t\t// load marking periods data\n\t\treturn schoolMarkingPeriodService.get(schoolId, academicYearId).then(function (schoolMarkingPeriods) {\n\t\t\tvm.schoolMarkingPeriods = schoolMarkingPeriods;\n\t\t});\n\t}\n\n\tfunction loadTransferCourseSectionGroups(fromCourseSectionGroup, isSBG: boolean) {\n\t\tvm.courseSectionGroups = [];\n\n\t\tif (vm.groupForGradeLevel) {\n\t\t\tconst otherGradeLevels = vm.groupForGradeLevel.gradeLevelIDs.filter((gl) => gl !== vm.selectedGradeLevelID);\n\t\t\totherGradeLevels.forEach((gl) => {\n\t\t\t\tcourseSectionGroupService.getAlternativesWithSameBaseSubjectForGradeLevel(fromCourseSectionGroup.courseSectionGroupID, gl).then((response) => {\n\t\t\t\t\tvm.courseSectionGroups.push(...response);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tif (isSBG || fromCourseSectionGroup.gradeLevelID >= 404 && fromCourseSectionGroup.gradeLevelID <= 408) {\n\t\t\treturn courseSectionGroupService.getAlternativesWithSameContentAreaForGradeLevel(fromCourseSectionGroup.courseSectionGroupID, vm.selectedGradeLevelID).then(\n\t\t\t\tresponse => {\n\t\t\t\t\tvm.courseSectionGroups.push(...response);\n\t\t\t\t},\n\t\t\t\terror => {\n\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading the list of alternative course section groups');\n\t\t\t\t}\n\t\t\t)\n\t\t} else {\n\t\t\treturn courseSectionGroupService\n\t\t\t\t.getAlternativesWithSameBaseSubjectForGradeLevel(fromCourseSectionGroup.courseSectionGroupID, vm.selectedGradeLevelID)\n\t\t\t\t.then(\n\t\t\t\t\tresponse => {\n\t\t\t\t\t\tvm.courseSectionGroups.push(...response);\n\t\t\t\t\t},\n\t\t\t\t\terror => {\n\t\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading the list of alternative course section groups');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t}\n\t}\n\n\tfunction loadTransferCourseSections() {\n\t\tvm.courseSections = [];\n\t\tvar academicYearId = vm.transfer.student.academicYearID;\n\t\tvar schoolId = vm.transfer.student.schoolID;\n\t\tconst { baseSubjectIDs, subjectLevel1IDs, isSbgOrHighSchool } = vm.transfer.studentCourses.reduce((acc, sc) => {\n\t\t\tacc.baseSubjectIDs.push(sc.baseSubjectID);\n\t\t\tacc.subjectLevel1IDs.push(sc.subjectLevel1ID);\n\t\t\tif (sc.isSBG || (sc.gradeLevelID >= 404 && sc.gradeLevelID <= 408)) {\n\t\t\t\tacc.isSbgOrHighSchool = true;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, { baseSubjectIDs: [], subjectLevel1IDs: [], isSbgOrHighSchool: false });\n\n\t\tif (vm.groupForGradeLevel) {\n\t\t\tconst otherGradeLevels = vm.groupForGradeLevel.gradeLevelIDs.filter((gl) => gl !== vm.selectedGradeLevelID);\n\t\t\totherGradeLevels.forEach((gl) => {\n\t\t\t\tif (isSbgOrHighSchool) {\n\t\t\t\t\t// If SBG or High School, only get like-for-like courses (subjectLevel1ID matches) for all transfers\n\t\t\t\t\t// But this is unlikely to match anything outside of the same grade\n\t\t\t\t\tfor (let sl1ID of subjectLevel1IDs) {\n\t\t\t\t\t\tcourseSectionService.getCourseSections(schoolId, academicYearId, gl, sl1ID).then((response) => {\n\t\t\t\t\t\t\tvm.courseSections.push(...response);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcourseSectionService.getCourseSections(schoolId, academicYearId, gl).then((response) => {\n\t\t\t\t\t\tvm.courseSections.push(...response);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t\t// If SBG or High School, only get like-for-like courses (subjectLevel1ID matches) for all transfers\n\t\tif (isSbgOrHighSchool) {\n\t\t\tfor(let subjectLevel1ID of subjectLevel1IDs) {\n\t\t\t\tcourseSectionService.getCourseSections(schoolId, academicYearId, vm.selectedGradeLevelID, subjectLevel1ID).then(\n\t\t\t\t\tresponse => {\n\t\t\t\t\t\tvm.courseSections.push(...response);\n\n\t\t\t\t\t\tvm.courseSections.filter(function(c) {\n\t\t\t\t\t\t\treturn baseSubjectIDs.includes(c.baseSubjectID);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpopulateCourseSectionTransfers();\n\t\t\t\t\t},\n\t\t\t\t\terror => {\n\t\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading the list of alternative course sections');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\treturn courseSectionService.getCourseSections(schoolId, academicYearId, vm.selectedGradeLevelID).then(\n\t\t\t\tresponse => {\n\t\t\t\t\tvm.courseSections.push(...response);\n\n\t\t\t\t\tvm.courseSections.filter(function(c) {\n\t\t\t\t\t\treturn baseSubjectIDs.includes(c.baseSubjectID);\n\t\t\t\t\t});\n\t\t\t\t\tpopulateCourseSectionTransfers();\n\t\t\t\t},\n\t\t\t\terror => {\n\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading the list of alternative course sections');\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t}\n\n\tfunction updateStudentCourses() {\n\t\tvm.transfer.courseTransfers = [];\n\n\t\t_.forEach(vm.transfer.studentCourses, function (studentCourseTransfer) {\n\t\t\tvar alreadySet = vm.transfer.courseTransfers.findIndex(function (t) {\n\t\t\t\treturn t.courseSectionID === studentCourseTransfer.courseSectionID;\n\t\t\t});\n\n\t\t\tif (studentCourseTransfer.selectedItem && alreadySet === -1) {\n\t\t\t\tvar courseToTransfer = {\n\t\t\t\t\tcourseSectionGroupId: studentCourseTransfer.courseSectionGroupID,\n\t\t\t\t\tcourseSectionId: studentCourseTransfer.courseSectionID,\n\t\t\t\t\tsubjectLevel1Id: studentCourseTransfer.subjectLevel1ID,\n\t\t\t\t\tscheduleBreakTypeId: null,\n\t\t\t\t\tcourseSectionSystemGeneratedName: studentCourseTransfer.systemGeneratedName,\n\t\t\t\t\tcourseSubjectDisplayName: studentCourseTransfer.subjectName,\n\t\t\t\t\tcourseSectionPrimaryTeacherDisplayName: studentCourseTransfer.courseSectionPrimaryTeacherDisplayName,\n\t\t\t\t\tmarkingPeriods: [],\n\t\t\t\t\tisExcelerateCourse: studentCourseTransfer.isExcelerateCourse,\n\t\t\t\t\ttoCourseSectionGroupId: studentCourseTransfer.selectedItem.courseSectionGroupID,\n\t\t\t\t\ttoCourseSectionId: studentCourseTransfer.selectedItem.courseSectionID,\n\t\t\t\t\ttoCourseSectionSystemGeneratedName: studentCourseTransfer.selectedItem.courseSectionSystemGeneratedName,\n\t\t\t\t\ttoCourseSubjectDisplayName: studentCourseTransfer.selectedItem.courseSubjectDisplayName,\n\t\t\t\t\ttoIsExcelerateCourse: studentCourseTransfer.selectedItem.isExcelerateCourse,\n\t\t\t\t};\n\n\t\t\t\tvm.transfer.courseTransfers.push(courseToTransfer);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction loadSchoolGradeLevelScheduleGroups(academicYearId, schoolId) {\n\t\tvar courseSchedulingService = (window).myNHA.GetApiService('MasterScheduling', 'CourseSchedulingService');\n\t\treturn courseSchedulingService?.getGradeLevelGroups(academicYearId, schoolId);\n\t}\n\n\tfunction init() {\n\t\terrorService.dismissAllErrors();\n\t\tvm.transfer = transferContextService.transfer;\n\n\t\tvm.selectedGradeLevelID = vm.transfer.student.gradeLevelID;\n\n\t\tconst academicYearID = vm.transfer.student.academicYearID;\n\t\tconst schoolID = vm.transfer.student.schoolID;\n\n\t\t$q.all([loadGradeLevels(), loadSchoolGradeLevelScheduleGroups(academicYearID, schoolID)]).then(\n\t\t\t_.spread(function (gradeLevels, schoolGradeLevelScheduleGroups) {\n\t\t\t\tvm.gradeLevels = gradeLevels;\n\t\t\t\tvm.schoolGradeLevelScheduleGroups = schoolGradeLevelScheduleGroups;\n\n\t\t\t\tvm.schoolGradeLevelScheduleGroups?.forEach((group) => {\n\t\t\t\t\tvm.gradeLevels = vm.gradeLevels.filter((gl) => {\n\t\t\t\t\t\treturn !group.gradeLevelIDs.includes(gl.gradeLevelID) || gl.gradeLevelID === group.primaryGradeLevelIDForGroup;\n\t\t\t\t\t});\n\t\t\t\t\tconst primaryGradeLevelForGroup = vm.gradeLevels.find((gl) => gl.gradeLevelID === group.primaryGradeLevelIDForGroup);\n\t\t\t\t\tprimaryGradeLevelForGroup.gradeLevel.description = group.schoolGradeLevelScheduleGroupName;\n\t\t\t\t});\n\n\t\t\t\tconst groupForGradeLevel = vm.schoolGradeLevelScheduleGroups?.find((group) => group.gradeLevelIDs.includes(vm.transfer.student.gradeLevelID));\n\t\t\t\tif (groupForGradeLevel) {\n\t\t\t\t\tvm.selectedGradeLevelID = groupForGradeLevel.primaryGradeLevelIDForGroup;\n\t\t\t\t\tvm.groupForGradeLevel = groupForGradeLevel;\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\tloadMarkingPeriods();\n\t\tloadTransferCourseSections();\n\t\tif (vm.transfer.fromCourseSectionGroup) {\n\t\t\tloadTransferCourseSectionGroups(vm.transfer.fromCourseSectionGroup, vm.transfer.studentCourses.find(sc => sc.isSBG));\n\t\t}\n\n\t\tlog('vm.transfer', vm.transfer);\n\t}\n\n\t/** Public **/\n\tfunction termDisplay(s) {\n\t\treturn termService.termDisplay(s, vm.schoolMarkingPeriods);\n\t}\n\n\tfunction gradeLevelChanged() {\n\t\tloadTransferCourseSections();\n\t\tif (vm.transfer.fromCourseSectionGroup) {\n\t\t\tloadTransferCourseSectionGroups(vm.transfer.fromCourseSectionGroup, vm.transfer.studentCourses.find(sc => sc.isSBG));\n\t\t}\n\t}\n\n\tfunction courseSectionGroupChanged() {\n\t\tpopulateCourseSectionTransfers();\n\t}\n\n\tfunction effectiveDateChanged() {\n\t\tvm.transfer.toCourseSectionGroupId = null;\n\n\t\t_.forEach(vm.transfer.studentCourses, function (transferCourseSection) {\n\t\t\tif (transferCourseSection.transferToCourseList) {\n\t\t\t\ttransferCourseSection.transferToCourseList = [];\n\t\t\t}\n\t\t});\n\n\t\tgradeLevelChanged();\n\t}\n\n\tfunction filterCourseList(cs) {\n\t\t/** check if a date has been selected */\n\t\tif (vm.transfer.effectiveDate === null) return true;\n\n\t\tif (!cs.beginDate || !cs.endDate) return true;\n\t\t/** check the course section groups begin/end dates */\n\t\tvar beginDate = moment(new Date(parseInt(cs.beginDate.substring(6))));\n\t\tvar endDate = moment(new Date(parseInt(cs.endDate.substring(6))));\n\n\t\t/** check if the transfer date is between the begin and end dates */\n\t\treturn vm.transfer.effectiveDate.isBetween(beginDate, endDate);\n\t}\n\n\tfunction filterCourseSectionGroups(csg) {\n\t\t/** check if a date has been selected */\n\t\tif (vm.transfer.effectiveDate === null) return true;\n\n\t\tif (!csg.beginDate || !csg.endDate) return true;\n\n\t\t/** check the course section groups begin/end dates */\n\t\tvar beginDate = moment(new Date(parseInt(csg.beginDate.substring(6))));\n\t\tvar endDate = moment(new Date(parseInt(csg.endDate.substring(6))));\n\n\t\t/** check if the transfer date is between the begin and end dates */\n\t\treturn vm.transfer.effectiveDate.isBetween(beginDate, endDate);\n\t}\n\n\tfunction doCancel() {\n\t\ttransferContextService.transfer = null;\n\t\t$state.go('student.courses.overview', {}, { reload: true });\n\t}\n\n\tfunction doNext() {\n\t\tif(this.transfer.courseTransfers){\n\t\t\tupdateStudentCourses();\n\t\t}\n\n\t\tif(this.transfer.courseTransfers){\n\t\t\tthis.transfer.courseTransfers.forEach(function (course) {\n\t\t\t\tif(course.isExcelerateCourse !== course.toIsExcelerateCourse)\n\t\t\t\t{\n\t\t\t\t\tif(course.isExcelerateCourse == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\ttoastr.success('EXCEL-erate','You are transferring a student into an EXCEL-erate course.', {\n\t\t\t\t\t\t\tpositionClass: 'toast-bottom-center',\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttoastr.success('EXCEL-erate','You are transferring a student out of an EXCEL-erate course.', {\n\t\t\t\t\t\t\tpositionClass: 'toast-bottom-center',\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tupdateStudentCourses();\n\t\t$state.go('student.courses.transfer-confirmation');\n\t}\n\n\t/** Exports **/\n\tvm.termDisplay = termDisplay;\n\tvm.gradeLevelChanged = gradeLevelChanged;\n\tvm.courseSectionGroupChanged = courseSectionGroupChanged;\n\tvm.filterCourseList = filterCourseList;\n\tvm.filterCourseSectionGroups = filterCourseSectionGroups;\n\tvm.effectiveDateChanged = effectiveDateChanged;\n\tvm.doCancel = doCancel;\n\tvm.doNext = doNext;\n\n\tinit();\n}\n\nangular.module('nha.schedule').controller('StudentCoursesTransferCoursesCtrl', StudentCoursesTransferCoursesCtrl);\n\nStudentCoursesTransferCoursesCtrl.$inject = [\n\t'$state',\n\t'schoolMarkingPeriodService',\n\t'termService',\n\t'courseSectionGroupService',\n\t'courseSectionService',\n\t'errorSvc',\n\t'transferContextService',\n\t'schoolGradeLevelService',\n\t'$q',\n\t'toastr'\n];\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.roster.roster-import', {\n url: '/import',\n views: {\n '@': {\n templateUrl: 'app/course/roster/import/import-from.html',\n controller: 'CourseRosterImportFromCtrl as CourseRosterImportVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Import',\n parent:'course',\n skip: true\n },\n title: 'Roster Import',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n .state('new-course.roster.roster-import', {\n url: '/import',\n views: {\n '@': {\n templateUrl: 'app/course/roster/import/import-from.html',\n controller: 'CourseRosterImportFromCtrl as CourseRosterImportVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Roster Import',\n parent: 'new-course',\n skip: true\n },\n title: 'Roster Import',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n .state('course.roster.roster-import-to', {\n url: '/import/{importFromCourseID:int}/to',\n views: {\n '@': {\n templateUrl: 'app/course/roster/import/import-to.html',\n controller: 'CourseRosterImportToCtrl as CourseRosterImportVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Import',\n parent: 'course',\n skip: true\n },\n title: 'Roster Import',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n .state('new-course.roster.roster-import-to', {\n url: '/import/{importFromCourseID:int}/to',\n views: {\n '@': {\n templateUrl: 'app/course/roster/import/import-to.html',\n controller: 'CourseRosterImportToCtrl as CourseRosterImportVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Roster Import',\n parent: 'new-course',\n skip: true\n },\n title: 'Roster Import',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n ;\n }]);\n\n\n","\n\n angular.module('nha.schedule')\n .factory('filteredRepositoryFactory', ['repositoryFactory', function (repositoryFactory) {\n\n return function (endpoint, restangular) {\n \n var repo = new repositoryFactory(endpoint, restangular);\n\n repo.pageSize = 50;\n repo.moreExist = true;\n repo.loadedCount = 0;\n repo.textSearchFields = [];\n\n this.setSortOrder = function (parameters, sortSetting) {\n var sortString = \"\";\n\n for (var i = 0; i < sortSetting.column.length; i++) {\n sortString += sortSetting.column[i];\n if (i === 0 && sortSetting.descending) {\n sortString += \" desc\";\n }\n if (i + 1 < sortSetting.column.length) {\n sortString += \", \";\n }\n }\n\n parameters.$orderby = sortString;\n }\n\n repo.setFilters = function (parameters, filters, searchText) {\n if (filters) {\n if (filters.AcademicYear) {\n var selectedYear = _.head(_.filter(filters.AcademicYear.items, 'selected'));\n if (selectedYear) {\n parameters.academicYearId = selectedYear.id;\n }\n }\n\n if (filters.School) {\n var selectedSchool = _.head(_.filter(filters.School.items, 'selected'));\n if (selectedSchool) {\n parameters.schoolId = selectedSchool.id;\n }\n }\n\n if (filters.GradeLevel) {\n var selectedIds = _.map(_.filter(filters.GradeLevel.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.gradeLevelIds = selectedIds;\n } else {\n parameters.gradeLevelIds = [];\n }\n } else {\n parameters.gradeLevelIds = [];\n }\n\n\n if (filters.MarkingPeriod) {\n var selectedIds = _.map(_.filter(filters.MarkingPeriod.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.markingPeriodIds = selectedIds;\n } else {\n parameters.markingPeriodIds = [];\n }\n } else {\n parameters.markingPeriodIds = [];\n }\n\n _utils.setSearchFilter(parameters, searchText, repo.textSearchFields);\n }\n }\n\n return repo;\n }\n\n }]);\n\n","\n\n angular.module('nha.schedule')\n .service('schoolSubjectService', ['baseService', 'repositoryFactory', 'MasterSchedulingRestangular',\n function (baseService, repositoryFactory, masterSchedulingRestangular) {\n\t\t\t\tvar service = new repositoryFactory('SchoolSubjects', masterSchedulingRestangular);\n\n\t\t\t\tservice.getFilters = function (schoolID ) {\n\n\t\t\t\t\treturn baseService.getSingle(`schoolSubjects/filters/${schoolID}`, null, false, true, masterSchedulingRestangular);\n\t\t\t\t}\n\t\t\t\tservice.getForSchoolGradeLevel = function (academicYearID, schoolID, gradeLevelID) {\n\t\t\t\t\treturn baseService.getList(`schoolSubjects/${academicYearID}/${schoolID}/${gradeLevelID}`, null, false, true, masterSchedulingRestangular);\n\t\t\t\t}\n\n\t\t\t\treturn service;\n }\n ]);\n","\n\n angular.module('nha.schedule')\n .service('courseSectionStaffService', [\n 'baseService', 'appSettings', 'MasterSchedulingRestangular',\n function (baseService, appSettings, masterSchedulingRestangular) {\n\n var service = {\n appSettings: appSettings,\n getAll: getAll,\n get: get,\n remove: remove,\n insert: insert\n };\n\n return service;\n\n function getAll() {\n var params: any = {};\n return baseService.getList('courseSectionStaff', params, false, true, masterSchedulingRestangular);\n }\n\n function get(courseSectionStaffId) {\n return baseService.getSingle('courseSectionStaff', { courseSectionStaffId: courseSectionStaffId }, false, true, masterSchedulingRestangular);\n }\n\n function insert(statusChanges) {\n return masterSchedulingRestangular.all('courseSectionStaff').post(statusChanges);\n }\n\n function remove(statusChanges) {\n return masterSchedulingRestangular.all('courseSectionStaff/delete').post(statusChanges);\n }\n }\n ]);\n","angular.module('nha.schedule').controller('CourseOverviewCtrl', CourseOverviewCtrl);\n\nCourseOverviewCtrl.$inject = [\n\t'$scope',\n\t'$q',\n\t'$state',\n\t'schoolMarkingPeriodCombinedService',\n\t'schoolGradeLevelService',\n\t'schoolGradeLevelSectionService',\n\t'schoolMarkingPeriodGroupOptionService',\n\t'roomRepository',\n\t'errorSvc',\n\t'courseDataManagerService',\n\t'gradeLevelRepository',\n\t'apiSecurityService',\n\t'$uibModal',\n\t'userContextService',\n];\n\nfunction CourseOverviewCtrl(\n\t$scope,\n\t$q,\n\t$state,\n\tschoolMarkingPeriodCombinedService,\n\tschoolGradeLevelService,\n\tschoolGradeLevelSectionService,\n\tschoolMarkingPeriodGroupOptionService,\n\troomRepository,\n\terrorService,\n\tcourseDataManagerService,\n\tgradeLevelRepository,\n\tapiSecurityService,\n\t$uibModal,\n\tuserContextService\n) {\n\tvar vm = this;\n\n\tvm.isNewMeetingBlockFeature = true;\n\n\tvm.allowMultiSelectMeetingBlock = courseDataManagerService.allowMultiSelectMeetingBlock();\n\tvm.masterScheduleTypeID = function () {\n\t\treturn courseDataManagerService.getEffectiveMasterScheduleTypeID();\n\t};\n\n\t$scope.$watch(\n\t\tfunction () {\n\t\t\treturn vm.masterScheduleTypeID();\n\t\t},\n\t\tfunction (newVal, oldVal) {\n\t\t\tvm.meetingBlockSelectorSettings = {\n\t\t\t\tgroupBy: newVal !== 4 ? 'meetingBlockGroupName' : null,\n\t\t\t\tselectAll: newVal !== 4,\n\t\t\t\tselectionLimit: newVal !== 4 ? 0 : 1,\n\t\t\t\toptionLabel: 'meetingBlockTimeName',\n\t\t\t\toptionID: 'meetingBlockTimeID',\n\t\t\t};\n\t\t\tvm.showTagCloud = newVal !== 4;\n\t\t}\n\t);\n\n\tvm.viewState = { pageLoading: true };\n\tvm.meetingBlockOptions = [];\n\tvm.overviewForm = {};\n\n\tvm.disableGradeLevelChange = function () {\n\t\treturn $state && $state.params && $state.params.courseID;\n\t};\n\n\tvm.meetingBlocksToDisplay = [];\n\n\tvar previousGradeLevel = null;\n\n\tvm.showTagCloud = function (courseSubject) {\n\t\t// don't show for Half day schedules\n\t\treturn courseSubject.editMode && _.includes([1, 2, 3], vm.masterScheduleTypeID());\n\t};\n\n\t// Course Data Manager provides a getter to retrieve course from course model service.\n\n\tvm.markingPeriodChanged = function () {\n\t\tif (vm.course.markingPeriodGroup === 'year') {\n\t\t\tvm.course.schoolMarkingPeriods = _.filter(vm.markingPeriods, function (smp) {\n\t\t\t\treturn _.includes([1, 2, 7], smp.markingPeriod.markingPeriodGroupID);\n\t\t\t});\n\t\t\t//vm.course.selectedMarkingPeriod = _.head(vm.course.schoolMarkingPeriods);\n\t\t} else {\n\t\t\tcourseDataManagerService.getSchedulesForCourse().then(function (schedules) {\n\t\t\t\tif (schedules.length <= 1) {\n\t\t\t\t\tvm.course.schoolMarkingPeriods = _.filter(vm.markingPeriods, function (smp) {\n\t\t\t\t\t\treturn smp.markingPeriod.markingPeriodGroupID == vm.course.markingPeriodGroup;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tvm.setCourseSubjectNames = function () {\n\t\t_.each(vm.course.courseSubjects, function (courseSubject, key) {\n\t\t\tvm.course.courseSubjects[key].courseSection.courseSubjectDisplayName = _.replace(\n\t\t\t\tvm.course.courseSubjects[key].courseSection.courseSubjectDisplayName,\n\t\t\t\t/\\sVIR/g,\n\t\t\t\t''\n\t\t\t);\n\t\t});\n\t};\n\n\tvm.isDayChecked = function (markingPeriod, day) {\n\t\tvar currentMarkingPeriod = _.find(vm.course.markingPeriodHybridLearningDays, function (markingPeriodHybridLearningDays) {\n\t\t\treturn markingPeriodHybridLearningDays.schoolMarkingPeriodID === markingPeriod.schoolMarkingPeriodID;\n\t\t});\n\n\t\tif (currentMarkingPeriod) {\n\t\t\treturn currentMarkingPeriod[day];\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tvm.toggleDayToMarkingPeriod = function (markingPeriod, selectedDay) {\n\t\tvar isAfterMarkingPeriodBeginDate = moment(new Date()).isAfter(markingPeriod.beginDate);\n\n\t\tif (isAfterMarkingPeriodBeginDate) {\n\t\t\tvm.course.isEditMode = true;\n\t\t}\n\n\t\t//Get the marking period\n\t\tvar currentlySelectedMarkingPeriodIndex = _.findIndex(vm.course.markingPeriodHybridLearningDays, function (mp) {\n\t\t\treturn markingPeriod.schoolMarkingPeriodID === mp.schoolMarkingPeriodID;\n\t\t});\n\n\t\t//Change the true/false for the day on the object\n\t\tif (currentlySelectedMarkingPeriodIndex !== -1) {\n\t\t\tangular.forEach(vm.course.markingPeriodHybridLearningDays[currentlySelectedMarkingPeriodIndex], function (value, key) {\n\t\t\t\tif (key === selectedDay) {\n\t\t\t\t\tvm.course.markingPeriodHybridLearningDays[currentlySelectedMarkingPeriodIndex][key] = !value;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvm.course.markingPeriodHybridLearningDays.push({\n\t\t\t\tschoolMarkingPeriodID: markingPeriod.schoolMarkingPeriodID,\n\t\t\t\tmonday: selectedDay === 'monday' ? true : false,\n\t\t\t\ttuesday: selectedDay === 'tuesday' ? true : false,\n\t\t\t\twednesday: selectedDay === 'wednesday' ? true : false,\n\t\t\t\tthursday: selectedDay === 'thursday' ? true : false,\n\t\t\t\tfriday: selectedDay === 'friday' ? true : false,\n\t\t\t});\n\t\t}\n\t};\n\n\t/** Private **/\n\tfunction loadSchoolGradeLevels(schoolId, academicYearId) {\n\t\treturn schoolGradeLevelService.get(schoolId, academicYearId);\n\t}\n\n\tfunction loadSchoolGradeLevelScheduleGroups(academicYearId, schoolId) {\n\t\tvar courseSchedulingService = (window).myNHA.GetApiService('MasterScheduling', 'CourseSchedulingService');\n\t\treturn courseSchedulingService?.getGradeLevelGroups(academicYearId, schoolId);\n\t}\n\n\tfunction loadGradeLevels() {\n\t\treturn gradeLevelRepository.getAll();\n\t}\n\n\tfunction loadMarkingPeriods(schoolId, academicYearId) {\n\t\treturn schoolMarkingPeriodCombinedService.get(schoolId, academicYearId).then(function (markingPeriods) {\n\t\t\t_.forEach(markingPeriods, function (mp) {\n\t\t\t\tmp.beginDate = _utils.inSpecifiedTimezone(mp.beginDate);\n\t\t\t\tmp.endDate = _utils.inSpecifiedTimezone(mp.endDate);\n\t\t\t});\n\n\t\t\treturn markingPeriods;\n\t\t});\n\t}\n\n\tfunction loadRooms(schoolId, academicYearId) {\n\t\treturn roomRepository.getAll({ schoolID: schoolId, academicYearID: academicYearId });\n\t}\n\n\tfunction loadMarkingPeriodGroupOptions(schoolId, academicYearId) {\n\t\treturn schoolMarkingPeriodGroupOptionService.getAll({ schoolId: schoolId, academicYearId: academicYearId });\n\t}\n\n\tfunction loadSchoolGradeLevelSections(schoolId, academicYearId) {\n\t\treturn schoolGradeLevelSectionService.getForSchool(schoolId, academicYearId);\n\t}\n\n\tfunction getGradeLevelSections() {\n\t\treturn _.filter(vm.schoolGradeLevelSections, function (sgls) {\n\t\t\treturn sgls.gradeLevelID === vm.course.schoolGradeLevel.gradeLevelID;\n\t\t});\n\t}\n\n\tfunction setupMeetingBlockTimes() {\n\t\tvar masterScheduleTypeID = vm.masterScheduleTypeID();\n\t\t// Full Day - Select All\n\t\tif (masterScheduleTypeID === 3) {\n\t\t\tvar options = courseDataManagerService.getMeetingBlockOptions();\n\t\t\tif (!_.isEmpty(options)) {\n\t\t\t\tvar meetingBlockTimes = _.flatten(_.map(options, 'children'));\n\t\t\t\tvm.course.courseSectionGroupMeetingBlockTimes = _.cloneDeep(meetingBlockTimes);\n\t\t\t}\n\t\t} else if (masterScheduleTypeID !== -1) {\n\t\t\tvar _options = courseDataManagerService.getMeetingBlockOptions();\n\t\t\tvm.meetingBlockOptions = _options;\n\t\t}\n\t}\n\n\tvm.markingPeriodIsSelected = function (item) {\n\t\treturn _.some(vm.course.schoolMarkingPeriods, { schoolMarkingPeriodID: item.schoolMarkingPeriodID });\n\t};\n\n\tvm.toggleMarkingPeriod = function (item) {\n\t\tif (vm.course.schoolMarkingPeriods) {\n\t\t\t_.each(vm.course.markingPeriodHybridLearningDays, function (markingPeriod) {\n\t\t\t\tif (markingPeriod.schoolMarkingPeriodID === item.schoolMarkingPeriodID) {\n\t\t\t\t\tmarkingPeriod.monday = false;\n\t\t\t\t\tmarkingPeriod.tuesday = false;\n\t\t\t\t\tmarkingPeriod.wednesday = false;\n\t\t\t\t\tmarkingPeriod.thursday = false;\n\t\t\t\t\tmarkingPeriod.friday = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (_.some(vm.course.schoolMarkingPeriods, { schoolMarkingPeriodID: item.schoolMarkingPeriodID })) {\n\t\t\t\t_.remove(vm.course.schoolMarkingPeriods, { schoolMarkingPeriodID: item.schoolMarkingPeriodID });\n\t\t\t\tif (item.schoolMarkingPeriodID === vm.course.selectedMarkingPeriod.schoolMarkingPeriodID) {\n\t\t\t\t\t//vm.course.selectedMarkingPeriod = _.head(vm.course.schoolMarkingPeriods);\n\t\t\t\t\tcourseDataManagerService.setSelectedMarkingPeriod();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvm.course.schoolMarkingPeriods.push(item);\n\t\t\t\tvm.course.schoolMarkingPeriods = _.sortBy(vm.course.schoolMarkingPeriods, 'beginDate');\n\t\t\t\t//vm.course.selectedMarkingPeriod = _.head(vm.course.schoolMarkingPeriods);\n\t\t\t\tcourseDataManagerService.setSelectedMarkingPeriod();\n\t\t\t}\n\t\t} else {\n\t\t\tvm.course.schoolMarkingPeriods = [item];\n\t\t\tvm.course.selectedMarkingPeriod = item;\n\t\t}\n\n\t\tcourseDataManagerService.getSchedulesForSelectedMarkingPeriods().then(function (schedules) {\n\t\t\tif (schedules.length > 1) {\n\t\t\t\tswal(\n\t\t\t\t\t'Conflicting Schedules Detected',\n\t\t\t\t\t'The selected marking periods have conflicting schedules associated. Please select an acceptable marking period assignment',\n\t\t\t\t\t'error'\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsetupMeetingBlockTimes();\n\t\t\t}\n\t\t});\n\t};\n\n\tvm.gradeLevelChange = function (schoolGradeLevel) {\n\t\tlog('previousGradeLevel', previousGradeLevel, 'schoolGradeLevel', schoolGradeLevel);\n\n\t\tif (vm.course && !_.isEmpty(previousGradeLevel) && vm.course.courseSubjects && !vm.course.isDefaultSubjects && vm.course.courseSubjects.length > 0) {\n\t\t\tswal(\n\t\t\t\t{\n\t\t\t\t\ttitle: 'Are you sure you want to change the grade level?',\n\t\t\t\t\ttext: 'By changing the grade, it will clear out any subjects, teachers and rosters that you might have setup.',\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\tshowCancelButton: true,\n\t\t\t\t\tconfirmButtonColor: '#DD6B55',\n\t\t\t\t\tconfirmButtonText: 'Yes, change it!',\n\t\t\t\t\tcloseOnConfirm: true,\n\t\t\t\t},\n\t\t\t\tfunction (isConfirm) {\n\t\t\t\t\tif (isConfirm) {\n\t\t\t\t\t\t// remember our previous selected grade level\n\t\t\t\t\t\tpreviousGradeLevel = schoolGradeLevel;\n\n\t\t\t\t\t\t// set our school grade level\n\t\t\t\t\t\tvm.course.schoolGradeLevel = schoolGradeLevel;\n\n\t\t\t\t\t\tcourseDataManagerService.loadDimensions(true);\n\n\t\t\t\t\t\tvm.course.selectedGradeLevelSections = getGradeLevelSections();\n\n\t\t\t\t\t\tsetupMeetingBlocks(true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// user did not want to change, change it back\n\t\t\t\t\t\tvm.course.schoolGradeLevel = previousGradeLevel;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tvm.course.courseSectionGroupMeetingBlockTimes = [];\n\t\t\t// remember our previous selected grade level\n\t\t\tpreviousGradeLevel = schoolGradeLevel;\n\n\t\t\tcourseDataManagerService.loadDimensions(true).then(function () {\n\t\t\t\tcourseDataManagerService.getSchedulesForCourse().then(function (schedules) {\n\t\t\t\t\tlog('vm.schedules', schedules);\n\t\t\t\t\tvm.schedules = schedules;\n\n\t\t\t\t\tif (vm.course.selectedSchoolSchedule) {\n\t\t\t\t\t\tvm.showFullYear = true;\n\t\t\t\t\t\tif (!vm.course.markingPeriodGroup) {\n\t\t\t\t\t\t\tvm.course.markingPeriodGroup = 'year';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetupMeetingBlockTimes();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvm.showFullYear = false;\n\t\t\t\t\t\tvm.course.courseSectionGroupMeetingBlockTimes = [];\n\t\t\t\t\t\tvm.course.schoolMarkingPeriods = [];\n\t\t\t\t\t\tvm.meetingBlockOptions = [];\n\t\t\t\t\t\tif (vm.course.markingPeriodGroup === 'year') {\n\t\t\t\t\t\t\tvm.course.markingPeriodGroup = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsetupMeetingBlocks(true);\n\t\t\t\t});\n\t\t\t\tvm.course.selectedGradeLevelSections = getGradeLevelSections();\n\t\t\t});\n\t\t}\n\t};\n\n\tvm.courseSpecificationGradeLevelRadioChanged = function () {\n\t\t// ensure we only have one selected\n\t\tswitch (vm.course.curriculum.curriculumType) {\n\t\t\tcase 1: // general\n\t\t\t\tvm.course.courseSectionGroup.modifiedCurriculumGradeLevelID = null;\n\t\t\t\tvm.course.courseSectionGroup.advancedCurriculumGradeLevelID = null;\n\t\t\t\tbreak;\n\t\t\tcase 2: // modified\n\t\t\t\tvm.course.courseSectionGroup.advancedCurriculumGradeLevelID = null;\n\t\t\t\tbreak;\n\t\t\tcase 3: // advanced\n\t\t\t\tvm.course.courseSectionGroup.modifiedCurriculumGradeLevelID = null;\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tvm.courseSpecificationGradeLevelChange = function () {\n\t\tcourseDataManagerService.loadDimensions(true);\n\t};\n\n\tvm.getTermMarkingPeriods = function () {\n\t\tif (vm.course && vm.course.markingPeriodGroup === 'year') {\n\t\t\treturn _.filter(vm.markingPeriods, function (mp) {\n\t\t\t\treturn _.includes([1, 2, 7], mp.markingPeriod.markingPeriodGroupID);\n\t\t\t});\n\t\t} else {\n\t\t\treturn _.filter(vm.markingPeriods, function (mp) {\n\t\t\t\treturn mp.markingPeriod.markingPeriodGroupID == vm.course.markingPeriodGroup;\n\t\t\t});\n\t\t}\n\t};\n\n\tvm.meetingBlocksChanged = function (items) {\n\t\tif (vm.masterScheduleTypeID() === 4) {\n\t\t\tvm.course.courseSectionGroupMeetingBlockTimes = vm.selectedMeetingBlock.children;\n\t\t} else {\n\t\t\tvm.course.courseSectionGroupMeetingBlockTimes = _.reject(items, function (i) {\n\t\t\t\treturn i.children && i.children.length;\n\t\t\t});\n\t\t}\n\t};\n\n\tvm.meetingBlockModal = function (schoolGradeLevel) {\n\t\tvar modalInstance = $uibModal.open({\n\t\t\tanimation: true,\n\t\t\tsize: 'md',\n\t\t\ttemplateUrl: 'app/course/overview/meeting-blocks/meeting-blocks.html',\n\t\t\tcontroller: 'CourseOverviewMeetingBlocksController as CourseOverviewMeetingBlocksModalVM',\n\t\t\tresolve: {\n\t\t\t\tmasterScheduleTypeID: function () {\n\t\t\t\t\treturn vm.masterScheduleTypeID();\n\t\t\t\t},\n\t\t\t\tmeetingBlockOptions: function () {\n\t\t\t\t\treturn vm.meetingBlockOptions;\n\t\t\t\t},\n\t\t\t\tselectedMeetingBlockItems: function () {\n\t\t\t\t\treturn vm.selectedMeetingBlockItems;\n\t\t\t\t},\n\t\t\t\tcourse: function () {\n\t\t\t\t\treturn vm.course;\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tmodalInstance.result.then(function (selectedMeetingBlockItems) {\n\t\t\tvm.selectedMeetingBlockItems = selectedMeetingBlockItems;\n\t\t\tsetupMeetingBlocks();\n\n\t\t\t// Update `isAttendanceRequired` based on the MeetingBlockType's IsAttendanceDefault value\n\t\t\tconst meetingBlockTimeID = _.first(selectedMeetingBlockItems, 'meetingBlockTimeID')?.meetingBlockTimeID;\n\n\t\t\tconst isAttendanceDefault = _.find(_.flatMap(vm.meetingBlockOptions, 'children'), child => child.meetingBlockTimeID === meetingBlockTimeID)?.isAttendanceDefault;\n\n\t\t\tvm.course.courseSectionGroup.isAttendance = isAttendanceDefault\n\n\t\t\t// set it as our save list\n\t\t\tvm.course.courseSectionGroupMeetingBlockTimes = selectedMeetingBlockItems;\n\t\t});\n\t};\n\n\tvm.meetingBlockOptionClicked = function (meetingBlockToDisplay) {\n\t\tif (!meetingBlockToDisplay.isSelected) {\n\t\t\tmeetingBlockToDisplay.isSelected = true;\n\t\t}\n\n\t\tvar match = _.find(vm.meetingBlockOptions, function (mbo) {\n\t\t\treturn mbo.name === meetingBlockToDisplay.meetingBlockName;\n\t\t});\n\n\t\tvar firstChild = _.first(match.children);\n\n\t\tvar courseSectionGroupMeetingBlockTimeID = -1;\n\n\t\tif (vm.course.courseSectionGroupMeetingBlockTimes) {\n\t\t\tvar match = _.first(vm.course.courseSectionGroupMeetingBlockTimes);\n\t\t\tif (match) {\n\t\t\t\tcourseSectionGroupMeetingBlockTimeID = match.courseSectionGroupMeetingBlockTimeID;\n\t\t\t}\n\t\t}\n\n\t\tvar formattedSelectedMeetingBlockTimes = [];\n\t\tformattedSelectedMeetingBlockTimes.push({\n\t\t\tcourseSectionGroupID: vm.course.courseSectionGroup.courseSectionGroupID,\n\t\t\tmeetingBlockTimeID: firstChild.meetingBlockTimeID,\n\t\t\tid: firstChild.meetingBlockTimeID,\n\t\t\tcourseSectionGroupMeetingBlockTimeID: courseSectionGroupMeetingBlockTimeID,\n\t\t});\n\n\t\t//log('formattedSelectedMeetingBlockTimes', firstChild, formattedSelectedMeetingBlockTimes);\n\n\t\t// set it as our save list\n\t\tvm.course.courseSectionGroupMeetingBlockTimes = formattedSelectedMeetingBlockTimes;\n\t};\n\n\tfunction setupMeetingBlocks(getNewMeetingBlocks = false) {\n\t\tvar meetingBlocksToDisplay = [];\n\n\t\t// load them if they are empty, for example when we change the grade level\n\t\tif (_.isEmpty(vm.meetingBlockOptions) || getNewMeetingBlocks) {\n\t\t\tvm.meetingBlockOptions = courseDataManagerService.getMeetingBlockOptions();\n\t\t}\n\n\t\tlog('setupMeetingBlocks', vm.masterScheduleTypeID(), vm.selectedMeetingBlockItems);\n\n\t\tswitch (vm.masterScheduleTypeID()) {\n\t\t\tcase 1:\n\t\t\tcase 2:\n\t\t\t\t// map our start and end times\n\t\t\t\tif (vm.meetingBlockOptions && vm.selectedMeetingBlockItems) {\n\t\t\t\t\t_.forEach(vm.selectedMeetingBlockItems, function (selectedMbt) {\n\t\t\t\t\t\t// lookup the details of each selected meeting block and add to our list to display\n\t\t\t\t\t\t_.forEach(vm.meetingBlockOptions, function (mbo) {\n\t\t\t\t\t\t\tif (mbo.children) {\n\t\t\t\t\t\t\t\t_.forEach(mbo.children, function (child) {\n\t\t\t\t\t\t\t\t\tif (selectedMbt.meetingBlockTimeID === child.meetingBlockTimeID) {\n\t\t\t\t\t\t\t\t\t\tmeetingBlocksToDisplay.push({\n\t\t\t\t\t\t\t\t\t\t\tmeetingBlockName: child.name,\n\t\t\t\t\t\t\t\t\t\t\tmeetingBlockStartTime: child.startTime,\n\t\t\t\t\t\t\t\t\t\t\tmeetingBlockEndTime: child.endTime,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// formatted meeting block times\n\t\t\t\t\tvm.meetingBlocksToDisplay = meetingBlocksToDisplay;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tlog('self contained meeting blocks', vm.meetingBlockOptions);\n\n\t\t\t\t// map our start and end times\n\t\t\t\tif (vm.meetingBlockOptions) {\n\t\t\t\t\t_.forEach(vm.meetingBlockOptions, function (mbo) {\n\t\t\t\t\t\tif (mbo.children) {\n\t\t\t\t\t\t\t_.forEach(mbo.children, function (child) {\n\t\t\t\t\t\t\t\tmeetingBlocksToDisplay.push({\n\t\t\t\t\t\t\t\t\tmeetingBlockName: child.name,\n\t\t\t\t\t\t\t\t\tmeetingBlockStartTime: child.startTime,\n\t\t\t\t\t\t\t\t\tmeetingBlockEndTime: child.endTime,\n\t\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\t\tchild.name +\n\t\t\t\t\t\t\t\t\t\t' (' +\n\t\t\t\t\t\t\t\t\t\tmoment(child.startTime, 'HH:mm:ss').format('LT') +\n\t\t\t\t\t\t\t\t\t\t' - ' +\n\t\t\t\t\t\t\t\t\t\tmoment(child.endTime, 'HH:mm:ss').format('LT') +\n\t\t\t\t\t\t\t\t\t\t')',\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// formatted meeting block times\n\t\t\t\t\tvm.meetingBlocksToDisplay = meetingBlocksToDisplay;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tvar selectedMeetingBlockID = _.first(vm.selectedMeetingBlockItems.meetingBlockTimeID);\n\n\t\t\t\t// map our start and end times\n\t\t\t\tif (vm.meetingBlockOptions && vm.selectedMeetingBlockItems) {\n\t\t\t\t\t_.forEach(vm.meetingBlockOptions, function (mbo) {\n\t\t\t\t\t\tif (mbo.children) {\n\t\t\t\t\t\t\t_.forEach(mbo.children, function (child) {\n\t\t\t\t\t\t\t\tmeetingBlocksToDisplay.push({\n\t\t\t\t\t\t\t\t\tmeetingBlockName: child.name,\n\t\t\t\t\t\t\t\t\tmeetingBlockStartTime: child.startTime,\n\t\t\t\t\t\t\t\t\tmeetingBlockEndTime: child.endTime,\n\t\t\t\t\t\t\t\t\tisSelected: selectedMeetingBlockID === child.meetingBlockID,\n\t\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\t\tchild.name +\n\t\t\t\t\t\t\t\t\t\t' (' +\n\t\t\t\t\t\t\t\t\t\tmoment(child.startTime, 'HH:mm:ss').format('LT') +\n\t\t\t\t\t\t\t\t\t\t' - ' +\n\t\t\t\t\t\t\t\t\t\tmoment(child.endTime, 'HH:mm:ss').format('LT') +\n\t\t\t\t\t\t\t\t\t\t')',\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// formatted meeting block times\n\t\t\t\tvm.meetingBlocksToDisplay = meetingBlocksToDisplay;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tvm.checkHybridLearningPermissions = function (markingPeriod) {\n\t\tvar userIsSisAdmin = userContextService.getUserContext().role.contains('SIS Admin');\n\t\tvar courseHasBeenCreated = vm.course && vm.course.courseSectionGroup.courseSectionGroupID > 0;\n\t\tvar isAfterMarkingPeriodBeginDate = moment(new Date()).isAfter(markingPeriod.beginDate);\n\t\tvar markingPeriodHybridDays = _.filter(vm.course.markingPeriodHybridLearningDays, function (markingPeriodsHybridDays) {\n\t\t\treturn markingPeriod.schoolMarkingPeriodID === markingPeriodsHybridDays.schoolMarkingPeriodID;\n\t\t});\n\n\t\tif (isAfterMarkingPeriodBeginDate && courseHasBeenCreated && !vm.course.isEditMode) {\n\t\t\tif (userIsSisAdmin) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(vm.courseHasBeenCreated && _.isEmpty(markingPeriodHybridDays)) ||\n\t\t\t\t(!markingPeriodHybridDays[0].monday &&\n\t\t\t\t\t!markingPeriodHybridDays[0].tuesday &&\n\t\t\t\t\t!markingPeriodHybridDays[0].wednesday &&\n\t\t\t\t\t!markingPeriodHybridDays[0].thursday &&\n\t\t\t\t\t!markingPeriodHybridDays[0].friday)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tfunction init() {\n\t\terrorService.dismissAllErrors();\n\n\t\tvm.showFullYear = true;\n\n\t\tcourseDataManagerService.ensureAppContext().then(\n\t\t\tfunction (context) {\n\t\t\t\tvm.course = context;\n\n\t\t\t\tvm.course.isEditMode = false;\n\n\t\t\t\tsetupMeetingBlockTimes();\n\t\t\t\tvm.meetingBlockOptions = courseDataManagerService.getMeetingBlockOptions();\n\n\t\t\t\t// Populate Hierarchy selector from previously saved course.\n\t\t\t\tvm.selectedMeetingBlockItems = vm.course.courseSectionGroupMeetingBlockTimes;\n\t\t\t\t_.each(vm.meetingBlockOptions, function (option) {\n\t\t\t\t\tvar foundCount = 0;\n\t\t\t\t\t_.each(option.children, function (childOption) {\n\t\t\t\t\t\tvar item = _.find(vm.selectedMeetingBlockItems, { id: childOption.id });\n\t\t\t\t\t\tif (item) {\n\t\t\t\t\t\t\titem.name = childOption.name;\n\t\t\t\t\t\t\tchildOption._hsmeta = { selected: true };\n\t\t\t\t\t\t\tfoundCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (foundCount === option.children.length) {\n\t\t\t\t\t\tvm.selectedMeetingBlock = option;\n\t\t\t\t\t\t_.each(option.children, function (childOpt) {\n\t\t\t\t\t\t\tvar item = _.find(vm.selectedMeetingBlockItems, { id: childOpt.id });\n\t\t\t\t\t\t\titem._hsmeta = { isParentSelected: true };\n\t\t\t\t\t\t\tchildOpt._hsmeta.isParentSelected = true;\n\t\t\t\t\t\t\tvm.selectedMeetingBlockItems.push(option);\n\t\t\t\t\t\t\toption._hsmeta = { selected: true };\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvm.selectedMeetingBlockItems = vm.selectedMeetingBlockItems;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tsetupMeetingBlocks();\n\n\t\t\t\tvar academicYearId = vm.course.courseSectionGroup.academicYearID;\n\t\t\t\tvar schoolId = vm.course.courseSectionGroup.schoolID;\n\n\t\t\t\t// default to year for new\n\t\t\t\tif (!vm.disableGradeLevelChange() && vm.course && !vm.course.markingPeriodGroup) {\n\t\t\t\t\tvm.course.markingPeriodGroup = 'year';\n\t\t\t\t}\n\n\t\t\t\tif (schoolId && academicYearId) {\n\t\t\t\t\t$q.all([\n\t\t\t\t\t\tloadGradeLevels(),\n\t\t\t\t\t\tloadSchoolGradeLevels(schoolId, academicYearId),\n\t\t\t\t\t\tloadSchoolGradeLevelSections(schoolId, academicYearId),\n\t\t\t\t\t\tloadMarkingPeriodGroupOptions(schoolId, academicYearId),\n\t\t\t\t\t\tloadMarkingPeriods(schoolId, academicYearId),\n\t\t\t\t\t\tloadRooms(schoolId, academicYearId),\n\t\t\t\t\t\tapiSecurityService.isAccessAllowed('CourseManagementIsAttendanceCheckbox', 'Get'),\n\t\t\t\t\t\tloadSchoolGradeLevelScheduleGroups(academicYearId, schoolId),\n\t\t\t\t\t]).then(\n\t\t\t\t\t\t_.spread(function (\n\t\t\t\t\t\t\tgradeLevels,\n\t\t\t\t\t\t\tschoolGradeLevels,\n\t\t\t\t\t\t\tgradeLevelSections,\n\t\t\t\t\t\t\tmarkingPeriodGroups,\n\t\t\t\t\t\t\tmarkingPeriods,\n\t\t\t\t\t\t\trooms,\n\t\t\t\t\t\t\taccessAllowed,\n\t\t\t\t\t\t\tschoolGradeLevelScheduleGroups\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tvm.gradeLevels = _.filter(gradeLevels, function (gl) {\n\t\t\t\t\t\t\t\treturn gl.gradeLevelID >= 1 && gl.gradeLevelID <= 9; // just show K thru 8\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tvm.schoolGradeLevels = schoolGradeLevels;\n\t\t\t\t\t\t\tvm.schoolGradeLevelSections = gradeLevelSections;\n\t\t\t\t\t\t\tvm.schoolMarkingPeriodGroupOptions = markingPeriodGroups;\n\t\t\t\t\t\t\tvm.markingPeriods = markingPeriods;\n\t\t\t\t\t\t\tvm.rooms = rooms;\n\t\t\t\t\t\t\tvm.isAttendanceRequiredCheckboxDisabled = !accessAllowed;\n\n\t\t\t\t\t\t\tvm.schoolGradeLevelScheduleGroups = schoolGradeLevelScheduleGroups;\n\t\t\t\t\t\t\tvm.gradeLevelGroups = schoolGradeLevels;\n\n\t\t\t\t\t\t\tvm.course.selectedGradeLevelSections = getGradeLevelSections();\n\n\t\t\t\t\t\t\tif (vm.course.selectedSchoolSchedule && vm.course.schoolMarkingPeriods.length > 0) {\n\t\t\t\t\t\t\t\tvar markingPeriodGroupID = _.head(vm.course.schoolMarkingPeriods).markingPeriod.markingPeriodGroupID;\n\t\t\t\t\t\t\t\tvar markingPeriodGroup = _.find(markingPeriodGroups, { markingPeriodGroupID: markingPeriodGroupID });\n\n\t\t\t\t\t\t\t\t//Only if not a term. I.E. 6 Week, 9 Week, etc.\n\t\t\t\t\t\t\t\tif (markingPeriodGroup && !markingPeriodGroup.isTerm) {\n\t\t\t\t\t\t\t\t\tvar availableMarkingPeriods = _.filter(markingPeriods, function (mp) {\n\t\t\t\t\t\t\t\t\t\treturn mp.markingPeriod.markingPeriodGroupID === markingPeriodGroupID;\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tif (availableMarkingPeriods.length === vm.course.schoolMarkingPeriods.length) {\n\t\t\t\t\t\t\t\t\t\tmarkingPeriodGroupID = 'year';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvm.course.markingPeriodGroup = markingPeriodGroupID;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// remember our previous selected grade level\n\t\t\t\t\t\t\tpreviousGradeLevel = vm.course.schoolGradeLevel;\n\n\t\t\t\t\t\t\tif (!vm.course.curriculum.curriculumType) {\n\t\t\t\t\t\t\t\tvm.course.curriculum.curriculumType = 1;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvm.schoolGradeLevelScheduleGroups?.forEach((sglsg) => {\n\t\t\t\t\t\t\t\tvm.gradeLevelGroups = vm.gradeLevelGroups.filter(\n\t\t\t\t\t\t\t\t\t(glg) => !sglsg.gradeLevelIDs.includes(glg.gradeLevelID) || sglsg.primaryGradeLevelIDForGroup == glg.gradeLevelID\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tvar primaryGradeLevelForGroup = vm.gradeLevelGroups.find((glg) => glg.gradeLevelID === sglsg.primaryGradeLevelIDForGroup);\n\t\t\t\t\t\t\t\tprimaryGradeLevelForGroup.gradeLevel.description = sglsg.schoolGradeLevelScheduleGroupName;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tvm.viewState.pageLoading = false;\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading option data.');\n\t\t\t\t\t\t\tvm.viewState.pageLoading = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading course data.');\n\t\t\t\tvm.viewState.pageLoading = false;\n\t\t\t}\n\t\t);\n\t}\n\n\tinit();\n}\n","angular.module('nha.schedule').config([\n\t'$stateProvider',\n\t'appSettings',\n\tfunction config($stateProvider, appSettings) {\n\t\t$stateProvider.state('courses', {\n\t\t\turl: '/courses',\n\t\t\ttemplateUrl: 'app/courses/courses.html',\n\t\t\tcontroller: 'CoursesCtrl as coursesVM',\n\t\t\tncyBreadcrumb: {\n\t\t\t\tskip: true,\n\t\t\t},\n\t\t\ttitle: 'Courses',\n\t\t\tresolve: {\n\t\t\t\tauthorization: [\n\t\t\t\t\t'stateTransitionSecurityCheck',\n\t\t\t\t\tfunction (stateTransitionSecurityCheck) {\n\t\t\t\t\t\treturn stateTransitionSecurityCheck.resolveAuthorization('Courses');\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tsecurity: {\n\t\t\t\t\trequiredResource: 'Role|SIS Admin',\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t},\n]);\n","\n\n function TransferConfirmationCtrl($state, $uibModal, transferStudentsContextManagerService, studentTransfersRepository, errorService, appSettings, courseDataManagerService, businessResponseService) {\n\n var vm = this;\n\n /** Private **/\n function init() {\n\n errorService.dismissAllErrors();\n vm.transfer = transferStudentsContextManagerService.getTransfer();\n log('init - vm.transfer', vm.transfer);\n }\n\n /** Public **/\n function doCancel() {\n transferStudentsContextManagerService.resetTransfer();\n $state.go('^');\n }\n\n function doTransfer() {\n vm.updating = true;\n var saveObject = {\n fromCourseSectionGroupId: vm.transfer.fromCourseSectionGroup.courseSectionGroupID,\n students: vm.transfer.selectedStudents\n }\n\n _.forEach(saveObject.students, function(student) {\n //remove the \"Do not transfer\" and \"No course found\" items from the student course transfers collection\n student.studentCourseTransfers = _.reject(student.studentCourseTransfers, function(s) {\n return !(s.toCourseSectionId > 0);\n });\n\n });\n\n _.forEach(saveObject.students, function (student) {\n student.studentCourseTransfers = _.reject(student.studentCourseTransfers, function (s) {\n return !((s.courseStudentCurrentMasterStatusID = 23) || (s.courseStudentCurrentMasterStatusID = 46));\n });\n });\n\n studentTransfersRepository.put(saveObject).then(function (response) {\n vm.updating = false;\n swal('All transfers were successfully completed', '', \"success\");\n courseDataManagerService.resetCourse();\n doCancel();\n }, function (error) {\n vm.updating = false;\n vm.hasError = true;\n businessResponseService.showBusinessResponse(error.data, \"The student transfer could not be completed\");\n });\n }\n\n /** Exports **/\n vm.doCancel = doCancel;\n vm.doTransfer = doTransfer;\n\n init();\n }\n\n angular.module('nha.schedule').controller('TransferConfirmationCtrl', TransferConfirmationCtrl);\n\n TransferConfirmationCtrl.$inject = ['$state', '$uibModal', 'transferStudentsContextManagerService', 'studentTransfersRepository', 'errorSvc', 'appSettings', 'courseDataManagerService', 'businessResponseService'];\n\n\n","function CourseAddStudentsCtrl(\n\t$scope,\n\t$filter,\n\t$state,\n\t$uibModal,\n\taddStudentService,\n\tcourseDataManagerService,\n\terrorService,\n\tappSettings,\n\tbusinessResponseService,\n\tacademicYearRepository\n) {\n\tvar vm = this;\n\tvm.viewState = { rightPannelLoading: true };\n\tvm.selectedAcademicYear = { minDate: moment(), maxDate: moment() };\n\tvm.selectedStudents = [];\n\n\tvm.course = courseDataManagerService.getCourse();\n\n\tvm.loadingViewState = { studentPageLoading: true };\n\tvm.nameSortCriteria = [\n\t\t{ criteria: 'LastName', displayName: 'Last Name' },\n\t\t{ criteria: 'FirstName', displayName: 'First Name' },\n\t];\n\n\tvm.sort = [\n\t\t{ criteria: 'LastName', descending: false },\n\t\t{ criteria: 'FirstName', descending: false },\n\t];\n\n\t/** Private **/\n\tvar requestPending;\n\tvar resetOnCancel = false;\n\n\tvar courseGradeLevel, courseAY, courseSchool, filterLoadCount;\n\n\tfunction initFilterConfig() {\n\t\t// Filter Configuration\n\t\t$scope.filterConfig = {\n\t\t\tfilters: {\n\t\t\t\tAcademicYear: { name: 'AcademicYear', displayName: 'Academic Year', type: 'radio', isHidden: true, persist: true, defaultId: courseAY },\n\t\t\t\tSchool: { name: 'School', displayName: 'School', type: 'radio', isHidden: true, persist: true, defaultId: courseSchool },\n\t\t\t\tGradeLevel: {\n\t\t\t\t\tname: 'GradeLevel',\n\t\t\t\t\tdisplayName: 'Grade Level',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\titems: null,\n\t\t\t\t\tisCollapsed: false,\n\t\t\t\t\tdefaultId: courseGradeLevel,\n\t\t\t\t},\n\t\t\t\tMarkingPeriod: { name: 'MarkingPeriod', displayName: 'Marking Period', type: 'checkbox', items: null, isCollapsed: false },\n\t\t\t\tMasterStatus: {\n\t\t\t\t\tname: 'MasterStatus',\n\t\t\t\t\tdisplayName: 'Enrollment Status',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tisCollapsed: false,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{ id: 6, description: 'Accepted', selected: false },\n\t\t\t\t\t\t{ id: 2, description: 'Enrolled', selected: false },\n\t\t\t\t\t\t{ id: 9, description: 'Reenrolled', selected: false },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\tSecondaryMasterStatus: {\n\t\t\t\t\tname: 'SecondaryMasterStatus',\n\t\t\t\t\tdisplayName: 'Secondary Enrollment Status',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tisCollapsed: false,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{ id: 70, description: 'Requested Secondary', selected: false },\n\t\t\t\t\t\t{ id: 71, description: 'Enrolled Secondary', selected: false },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\tSchedule: {\n\t\t\t\t\tname: 'Schedule',\n\t\t\t\t\tdisplayName: 'Schedule',\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tisCollapsed: false,\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{ id: 0, description: 'All', selected: true },\n\t\t\t\t\t\t{ id: 1, description: 'Scheduled', selected: false, oDataExpression: 'CourseCount gt 0' },\n\t\t\t\t\t\t{ id: 2, description: 'Not Scheduled', selected: false, oDataExpression: 'CourseCount eq 0' },\n\t\t\t\t\t],\n\t\t\t\t\tselectedID: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\thideCountsIfZero: true,\n\t\t};\n\t\tfilterLoadCount = 1;\n\t}\n\n\t$scope.$on(\n\t\t'filterChange',\n\t\tfunction (event, filters) {\n\t\t\tvm.selectedFilters = filters.selectedFilters;\n\n\t\t\tif (filterLoadCount === 1) {\n\t\t\t\tconst gradeLevelFilter = $scope.filterConfig.filters['GradeLevel'];\n\t\t\t\tconst selectedGradeLevels = vm.selectedFilters['GradeLevel'].items;\n\t\t\t\tconst selectedGradeLevelIDs = selectedGradeLevels.map((gl) => gl.id);\n\t\t\t\tconst groupForGradeLevel = vm.schoolGradeLevelScheduleGroups?.find((group) => group.gradeLevelIDs.includes(gradeLevelFilter.defaultId));\n\n\t\t\t\tif (groupForGradeLevel) {\n\t\t\t\t\tconst nonSelectedGroupGradeLevels = gradeLevelFilter.items.filter((i) => {\n\t\t\t\t\t\treturn groupForGradeLevel.gradeLevelIDs.includes(i.id) && !selectedGradeLevelIDs.includes(i.id);\n\t\t\t\t\t});\n\t\t\t\t\tnonSelectedGroupGradeLevels.forEach((grade) => {\n\t\t\t\t\t\tselectedGradeLevels.push(grade);\n\t\t\t\t\t\t$scope.selectCheckbox(grade.id, 'GradeLevel', false);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloadStudents();\n\t\t\tfilterLoadCount++;\n\t\t},\n\t\ttrue\n\t);\n\n\tfunction setFilterCounts(filterCounts, filters) {\n\t\t_.forEach(filterCounts, function (c) {\n\t\t\tif (c.typeName.toUpperCase() === filters.AcademicYear.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.AcademicYear.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.School.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.School.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.MasterStatus.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.MasterStatus.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.SecondaryMasterStatus.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.SecondaryMasterStatus.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.GradeLevel.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.GradeLevel.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.MarkingPeriod.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.MarkingPeriod.items);\n\t\t\t} else {\n\t\t\t\tlog('setFilterCounts encountered counts for unexpected filter type. Filter Type == ' + c.typeName);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction loadStudents() {\n\t\tvm.loadingViewState.studentPageLoading = true;\n\n\t\tvm.students = [];\n\n\t\trequestPending = true;\n\t\tvar parameters: any = {};\n\n\t\tparameters.courseSectionGroupID = vm.course.courseSectionGroup.courseSectionGroupID;\n\n\t\tparameters.meetingBlockTimeIDs = _.map(vm.course.courseSectionGroupMeetingBlockTimes, 'meetingBlockTimeID');\n\n\t\tif (vm.sort) {\n\t\t\tparameters.sortOrder = vm.sort;\n\t\t}\n\t\tif (vm.searchText) {\n\t\t\tparameters.searchText = vm.searchText;\n\t\t}\n\n\t\taddStudentService.getStudents(parameters, vm.selectedFilters).then(function (response) {\n\t\t\tvm.students = response.results;\n\n\t\t\trequestPending = false;\n\t\t\t$scope.isDisabled = true;\n\t\t\tvm.loadingViewState.studentPageLoading = false;\n\n\t\t\tsetFilterCounts(response.filters, $scope.filterConfig.filters);\n\n\t\t\tvm.noResults = vm.students.length === 0;\n\t\t});\n\t}\n\n\t/** Public **/\n\tvm.sortChanged = function (expression) {\n\t\tvm.sort = expression;\n\t\tloadStudents();\n\t};\n\n\tvm.searchTextChanged = function (value) {\n\t\t//vm.searchText = value.replace('\\'', '\\'\\'');\n\t\tloadStudents();\n\t};\n\n\tvm.isSelected = function (s) {\n\t\treturn _.some(vm.selectedStudents, { studentInSchoolID: s.studentInSchoolID });\n\t};\n\n\tvm.toggleSelected = function (s) {\n\t\tif (vm.selectedStudents) {\n\t\t\tif (_.some(vm.selectedStudents, { studentInSchoolID: s.studentInSchoolID })) {\n\t\t\t\t_.remove(vm.selectedStudents, { studentInSchoolID: s.studentInSchoolID });\n\t\t\t} else {\n\t\t\t\tvm.selectedStudents.push(s);\n\t\t\t}\n\t\t} else {\n\t\t\tvm.selectedStudents = [s];\n\t\t}\n\t};\n\n\tfunction setDateRange() {\n\t\t//sets min and max date by the start and end date of the trimesters\n\t\tif (vm.course.schoolMarkingPeriods.length > 0) {\n\t\t\tvm.course.schoolMarkingPeriods.sort(function (a, b) {\n\t\t\t\treturn moment(a.beginDate) - moment(b.beginDate);\n\t\t\t});\n\t\t\tvm.courseMinStartDate = moment(_.head(vm.course.schoolMarkingPeriods).beginDate);\n\t\t\tvm.courseMaxEndDate = moment(_.last(vm.course.schoolMarkingPeriods).endDate);\n\t\t}\n\t\tvar now = moment();\n\n\t\tif (!vm.effectiveDate) {\n\t\t\tif (vm.courseMinStartDate.isAfter(now)) {\n\t\t\t\tvm.effectiveDate = vm.courseMinStartDate;\n\t\t\t} else if (vm.courseMaxEndDate.isBefore(now)) {\n\t\t\t\tvm.effectiveDate = vm.courseMaxEndDate;\n\t\t\t}\n\t\t}\n\t}\n\n\tvm.cancel = function () {\n\t\tif (resetOnCancel) {\n\t\t\tcourseDataManagerService.resetCourse();\n\t\t}\n\t\t$state.go('^');\n\t};\n\n\tvm.addToCourse = function () {\n\t\tif (!vm.effectiveDate) {\n\t\t\tswal('Effective date is required.', 'Please enter an effective date', 'error');\n\t\t\treturn;\n\t\t}\n\t\tif (vm.effectiveDate < vm.selectedAcademicYear.minDate || vm.effectiveDate > vm.selectedAcademicYear.maxDate) {\n\t\t\tswal(\n\t\t\t\t'Effective Date Error',\n\t\t\t\t\"The selected effective date is not within the School's Academic Year. Please select an effective date between \" +\n\t\t\t\t\tvm.selectedAcademicYear.minDate.format('MM/DD/YYYY') +\n\t\t\t\t\t' and ' +\n\t\t\t\t\tvm.selectedAcademicYear.maxDate.format('MM/DD/YYYY') +\n\t\t\t\t\t'.',\n\t\t\t\t'error'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif ($state.params.courseID) {\n\t\t\t//adding students to an existing course section group\n\t\t\tvm.adding = true;\n\n\t\t\t_.remove(vm.course.courseSubjects, function (subject) {\n\t\t\t\treturn !subject.schoolSubject || subject.schoolSubject < 0;\n\t\t\t});\n\n\t\t\t_.forEach(vm.course.courseSubjects, function (subject) {\n\t\t\t\tif (subject.selected) {\n\t\t\t\t\tsubject.students = _.map(vm.selectedStudents, function (s) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tschoolID: vm.course.courseSectionGroup.schoolID,\n\t\t\t\t\t\t\tcourseSection: vm.course.courseSectionGroup,\n\t\t\t\t\t\t\tcourseSectionID: subject.courseSection.courseSectionID,\n\t\t\t\t\t\t\tstudentInSchoolID: s.studentInSchoolID,\n\t\t\t\t\t\t\tstudentID: s.studentID,\n\t\t\t\t\t\t\tstudent: {\n\t\t\t\t\t\t\t\tstudentID: s.studentID,\n\t\t\t\t\t\t\t\tfirstName: s.firstName,\n\t\t\t\t\t\t\t\tlastName: s.lastName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatusHistory: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdate: vm.effectiveDate,\n\t\t\t\t\t\t\t\t\tisCurrent: true,\n\t\t\t\t\t\t\t\t\tmasterStatusID: 23,\n\t\t\t\t\t\t\t\t\tmasterStatus: {\n\t\t\t\t\t\t\t\t\t\tmasterStatusID: 23,\n\t\t\t\t\t\t\t\t\t\tstatus: 'Active',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tsubject._selected = subject.selected;\n\t\t\t\tsubject.selected = false;\n\t\t\t});\n\t\t\tcourseDataManagerService.saveCourse().then(\n\t\t\t\tfunction (result) {\n\t\t\t\t\tvm.adding = false;\n\t\t\t\t\tcourseDataManagerService.resetCourse();\n\t\t\t\t\t$state.go('^');\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\tresetOnCancel = true;\n\t\t\t\t\tvm.adding = false;\n\t\t\t\t\tbusinessResponseService.showBusinessResponse(error.data, 'The students could not be added to the course roster');\n\t\t\t\t\t//we failed so setup subject selections\n\t\t\t\t\t_.forEach(vm.course.courseSubjects, function (subject) {\n\t\t\t\t\t\tsubject.selected = subject._selected;\n\t\t\t\t\t\tdelete subject._selected;\n\t\t\t\t\t\tif (subject.selected) {\n\t\t\t\t\t\t\t//need to clear out students who were added to reset for second save attempt\n\t\t\t\t\t\t\tsubject.students = _.filter(subject.students, function (student) {\n\t\t\t\t\t\t\t\treturn student.courseSectionRosterID > 0;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\t//adding students to a new course section group - json only\n\t\t\t_.forEach(vm.course.courseSubjects, function (subject) {\n\t\t\t\tif (subject.selected) {\n\t\t\t\t\tif (!subject.students) {\n\t\t\t\t\t\tsubject.students = [];\n\t\t\t\t\t}\n\t\t\t\t\tsubject.students = subject.students.concat(\n\t\t\t\t\t\t_.map(vm.selectedStudents, function (s) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstudentInSchoolID: s.studentInSchoolID,\n\t\t\t\t\t\t\t\tstudentID: s.studentID,\n\t\t\t\t\t\t\t\tstudent: {\n\t\t\t\t\t\t\t\t\tstudentID: s.studentID,\n\t\t\t\t\t\t\t\t\tfirstName: s.firstName,\n\t\t\t\t\t\t\t\t\tlastName: s.lastName,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tstatusHistory: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tdate: vm.effectiveDate,\n\t\t\t\t\t\t\t\t\t\tisCurrent: true,\n\t\t\t\t\t\t\t\t\t\tmasterStatusID: 23,\n\t\t\t\t\t\t\t\t\t\tmasterStatus: {\n\t\t\t\t\t\t\t\t\t\t\tmasterStatusID: 23,\n\t\t\t\t\t\t\t\t\t\t\tstatus: 'Active',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tsubject.selected = false;\n\t\t\t});\n\t\t\t$state.go('^');\n\t\t}\n\t};\n\n\tvm.isValid = function () {\n\t\treturn _.some(vm.course.courseSubjects, 'selected') && !_.isEmpty(vm.selectedStudents) && vm.effectiveDate;\n\t};\n\n\tvm.selectAll = function () {\n\t\t_.each(vm.students, function (student) {\n\t\t\tif (!_.some(vm.selectedStudents, { studentInSchoolID: student.studentInSchoolID })) vm.selectedStudents.push(student);\n\t\t});\n\t};\n\tvm.selectNone = function () {\n\t\tvm.selectedStudents = [];\n\t};\n\n\tvm.selectedSubjects = $filter('filter')(vm.course.courseSubjects, { selected: true });\n\n\tfunction convertToMoment(dateToConvert) {\n\t\treturn dateToConvert instanceof moment ? dateToConvert : moment(_.trimStart(dateToConvert, \"''\"));\n\t}\n\n\tfunction loadSchoolGradeLevelScheduleGroups(academicYearId, schoolId) {\n\t\tvar courseSchedulingService = (window).myNHA.GetApiService('MasterScheduling', 'CourseSchedulingService');\n\t\treturn courseSchedulingService?.getGradeLevelGroups(academicYearId, schoolId).then((groups) => {\n\t\t\tvm.schoolGradeLevelScheduleGroups = groups;\n\t\t});\n\t}\n\n\tfunction init() {\n\t\tcourseDataManagerService.ensureAppContext().then(function (course) {\n\t\t\tvm.course = course;\n\t\t\t$scope.course = course;\n\n\t\t\tsetDateRange();\n\n\t\t\t_.each(vm.course.courseSubjects, function (cs) {\n\t\t\t\tcs.selected = true;\n\t\t\t});\n\n\t\t\tvar academicYearID = vm.course.courseSectionGroup.academicYearID;\n\n\t\t\tacademicYearRepository.getByAcademicYearId(academicYearID).then(function (academicYear) {\n\t\t\t\t// setup min and max dates\n\t\t\t\tvm.selectedAcademicYear = academicYear;\n\t\t\t\tvm.selectedAcademicYear.minDate = convertToMoment(academicYear.beginDate); // the min calendar date should be the begin date of the Academic AY that is selected\n\t\t\t\tvm.selectedAcademicYear.maxDate = convertToMoment(academicYear.endDate); // the max calendar date should be the begin date of the Academic AY that is selected\n\t\t\t});\n\n\t\t\tcourseSchool = vm.course.courseSectionGroup.schoolID;\n\t\t\tcourseAY = vm.course.courseSectionGroup.academicYearID;\n\t\t\tcourseGradeLevel = vm.course.courseSectionGroup.gradeLevelID || vm.course.schoolGradeLevel.gradeLevelID;\n\n\t\t\tloadSchoolGradeLevelScheduleGroups(courseAY, courseSchool);\n\n\t\t\tinitFilterConfig();\n\n\t\t\tvm.viewState.rightPannelLoading = false;\n\t\t});\n\t}\n\n\tinit();\n}\n\nangular.module('nha.schedule').controller('CourseAddStudentsCtrl', CourseAddStudentsCtrl);\n\nCourseAddStudentsCtrl.$inject = [\n\t'$scope',\n\t'$filter',\n\t'$state',\n\t'$uibModal',\n\t'addStudentService',\n\t'courseDataManagerService',\n\t'errorSvc',\n\t'appSettings',\n\t'businessResponseService',\n\t'academicYearRepository',\n];\n","\n\n angular.module('nha.schedule').directive('courseProgressIndicator', CourseProgressIndicatorDirective);\n\n CourseProgressIndicatorDirective.$inject = ['appSettings'];\n\n function CourseProgressIndicatorDirective(appSettings) {\n return {\n templateUrl: 'app/directives/course-progress-indicator/course-progress-indicator.html',\n restrict:'E',\n scope: {\n complete: '='\n }\n }\n }\n\n\n\n\n","\n\n angular.module('nha.schedule').directive('dualListSelector', dualListSelector);\n\n dualListSelector.$inject = ['appSettings'];\n\n function dualListSelector(appSettings) {\n return {\n templateUrl: 'app/directives/dual-list-selector/dual-list-selector.html',\n restrict: 'E',\n scope: {\n availableItems: '=',\n selectedItems: '=',\n availableListLabel: '@',\n selectedListLabel: '@',\n noAvailableItemsMessage: '@'\n },\n link: function (scope, el, attrs) {\n\n var showFilterItemCount = 8;\n\n scope.maxItems = 0;\n\n scope.addItems = function () {\n\n //log('addItems', 'selectedLeftItems', scope.selectedLeftItems, 'selectedItems', scope.selectedItems, 'availableItems', scope.availableItems);\n\n if (scope.selectedLeftItems) {\n _.forEach(scope.selectedLeftItems,\n function (selectedItem) {\n scope.selectedItems.push(selectedItem);\n\n // remove from original list\n scope.availableItems.remove(selectedItem);\n });\n }\n }\n\n scope.removeItems = function () {\n\n //log('removeItems', 'selectedRightItems', scope.selectedRightItems, 'selectedItems', scope.selectedItems, 'availableItems', scope.availableItems);\n\n if (scope.selectedRightItems) {\n _.forEach(scope.selectedRightItems,\n function (selectedItem) {\n scope.availableItems.push(selectedItem);\n\n // remove from original list\n scope.selectedItems.remove(selectedItem);\n });\n }\n }\n\n //scope.selectedItemsChanged = function () {\n // // alert('selectedItemsChanged');\n // $emit('selectedItemsChanged', scope.selectedItems);\n //}\n\n scope.showFilter = function () {\n\n return true;\n\n if (scope.availableItems && scope.maxItems) {\n return scope.maxItems.length >= showFilterItemCount;\n }\n\n return false;\n }\n\n function init() {\n\n if (!scope.availableListLabel) {\n scope.availableListLabel = 'Available';\n }\n\n if (!scope.selectedListLabel) {\n scope.selectedListLabel = 'Selected';\n }\n\n if (!scope.noAvailableItemsMessage) {\n scope.noAvailableItemsMessage = 'No available items';\n }\n\n if (!scope.selectedItems) {\n scope.selectedItems = [];\n scope.selectedRightItems = [];\n }\n\n if (scope.availableItems) {\n scope.maxItems = scope.availableItems.length;\n }\n }\n\n init();\n }\n }\n }\n\n\n","\n\n function StudentCoursesTransferConfirmationCtrl($state, $uibModal, transferStudentsContextManagerService, studentTransfersRepository, errorService, transferContextService, appSettings) {\n\n var vm = this;\n\n /** Private **/\n function init() {\n\n errorService.dismissAllErrors();\n vm.transfer = transferContextService.transfer;\n }\n\n /** Public **/\n function doCancel() {\n transferContextService.transfer = null;\n $state.go('student.courses.overview', {}, { reload: true });\n }\n\n function doTransfer() {\n\n if (!vm.transfer.effectiveDate) {\n swal('Effective Date Required', 'Effective date is required before student can be transferred.', 'error');\n return;\n }\n\n vm.updating = true;\n\n var student = {\n courseSectionGroupId: vm.transfer.fromCourseSectionGroup ? vm.transfer.fromCourseSectionGroup.courseSectionGroupID : 99999999,\n schoolId: vm.transfer.student.schoolID,\n academicYearId: vm.transfer.student.academicYearID,\n studentInSchoolId: vm.transfer.student.studentInSchoolID,\n studentId: vm.transfer.student.studentID,\n gradeLevelId: vm.transfer.student.gradeLevelID,\n gradeLevelName: vm.transfer.student.gradeLevel,\n gradeLevelDescription: vm.transfer.student.gradeLevel,\n firstName: vm.transfer.student.student.firstName,\n lastName: vm.transfer.student.student.lastName,\n middleName: vm.transfer.student.student.middleName,\n effectiveDate: vm.transfer.effectiveDate,\n studentCourseTransfers: _.reject(vm.transfer.courseTransfers, function(ct) {\n return !(ct.toCourseSectionId > 0);\n })\n };\n\n var saveObject = {\n fromCourseSectionGroupId: student.courseSectionGroupId,\n students: []\n }\n\n saveObject.students.push(student);\n\n studentTransfersRepository.put(saveObject).then(function (response) {\n vm.updating = false;\n swal('Student course transfers were successfully completed');\n doCancel();\n }, function (error) {\n vm.updating = false;\n if (error.status === 400) {\n //business rules failed, display popup listing violated rules.\n var displayModal = {\n businessResponse: error.data,\n title: \"The student course transfers could not be completed\",\n message: \"The student course transfers could not be completed due to the following business rules:\"\n }\n\n\n var modalInstance = $uibModal.open({\n templateUrl: appSettings.coreWebRootUrl + 'app/templates/business-response-modal.html',\n controller: 'BusinessResponseModalCtrl',\n resolve: {\n displayModal: function () {\n return displayModal;\n }\n },\n size: 'sm'\n });\n } else {\n vm.hasError = true;\n log('error', error);\n errorService.getUnhandledError(error, 'An error occurred while processing student course transfers.');\n }\n });\n }\n\n /** Exports **/\n vm.doCancel = doCancel;\n vm.doTransfer = doTransfer;\n\n init();\n }\n\n angular.module('nha.schedule').controller('StudentCoursesTransferConfirmationCtrl', StudentCoursesTransferConfirmationCtrl);\n\n StudentCoursesTransferConfirmationCtrl.$inject = ['$state', '$uibModal', 'transferStudentsContextManagerService', 'studentTransfersRepository', 'errorSvc', 'transferContextService', 'appSettings'];\n\n\n","\n\n angular.module('nha.schedule')\n .service('courseRosterImportRepository', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('CourseRosterImports', masterSchedulingRestangular);\n }\n ]);\n\n //angular.module('nha.schedule')\n // .service('courseRosterImportRepository', ['baseService', 'MasterSchedulingRestangular',\n // function (baseService, masterSchedulingRestangular) {\n\n // var service = {\n // post: post\n // };\n \n // return service;\n\n // function post(courseRosterImport) {\n // return masterSchedulingRestangular.all('CourseRosterImports').post(courseRosterImport);\n // }\n // }\n // ]);\n\n\n","\n\n angular.module('nha.schedule')\n .service('courseScheduleMeetingBlockService', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('CourseScheduleMeetingBlocks', masterSchedulingRestangular);\n }\n ]);\n","\n angular\n .module(\"nha.schedule\")\n .service('addCoursesContextService', addCoursesContextService);\n\n addCoursesContextService.$inject = ['baseService'];\n\n function addCoursesContextService(baseService) {\n\n // This service acts as a us model. This shouldn't be for http calls\n\n var model = {\n context: null\n };\n\n return model;\n\n }\n\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.overview', {\n url: '',\n templateUrl: 'app/course/overview/overview.html',\n controller: 'CourseOverviewCtrl as CourseOverviewVM',\n ncyBreadcrumb: {\n label: 'Overview',\n },\n title: 'Course',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses'\n }\n }\n })\n .state('new-course.overview', {\n url: '',\n templateUrl: 'app/course/overview/overview.html',\n controller: 'CourseOverviewCtrl as CourseOverviewVM',\n ncyBreadcrumb: {\n label: 'Overview',\n },\n title: 'Course',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n ;\n }]);\n\n\n","import {CourseSectionGroup} from \"../../types/course.type\";\n\nangular.module('nha.schedule').service('courseDataManagerService', [\n\t'courseDataService',\n\t'$q',\n\t'$state',\n\t'$stateParams',\n\t'$timeout',\n\t'courseService',\n\t'academicYearRepository',\n\t'ipCookie',\n\t'courseScheduleMeetingBlockService',\n\t'userContextService',\n\t'schoolSubjectService',\n\t'schoolGradeLevelMasterScheduleRepository',\n\t'schoolMarkingPeriodService',\n\t'apiSecurityService',\n\t'MasterSchedulingRestangular',\n\t'$rootScope',\n\tfunction (\n\t\tcourseDataService,\n\t\t$q,\n\t\t$state,\n\t\t$stateParams,\n\t\t$timeout,\n\t\tcourseService,\n\t\tacademicYearRepository,\n\t\tipCookie,\n\t\tcourseScheduleMeetingBlockService,\n\t\tuserContextService,\n\t\tschoolSubjectService,\n\t\tschoolGradeLevelMasterScheduleRepository,\n\t\tschoolMarkingPeriodService,\n\t\tapiSecurityService,\n\t\tmasterSchedulingRestangular,\n\t\t$rootScope\n\t) {\n\t\tvar service = {\n\t\t\tgetCourse: getCourse,\n\t\t\tsaveCourse: saveCourse,\n\t\t\tgetAcademicYearId: getAcademicYearId,\n\t\t\tsetAcademicYearId: setAcademicYearId,\n\t\t\tgetSchoolId: getSchoolId,\n\t\t\tareTransfersAllowed: areTransfersAllowed,\n\t\t\tloadMeetingBlocks: loadMeetingBlocks,\n\t\t\tgetSubjectsGradeLevel: getSubjectsGradeLevel,\n\t\t\tgetMeetingBlockOptions: getMeetingBlockOptions,\n\t\t\treconcileOnsiteFacilitatorAccess: reconcileOnsiteFacilitatorAccess,\n\t\t\tgetSubjectOptions: getSubjectOptions,\n\t\t\tgetSchoolSubjectFilters: getSchoolSubjectFilters,\n\t\t\tallowMultiSelectMeetingBlock: allowMultiSelectMeetingBlock,\n\t\t\tloadDimensions: loadDimensions,\n\t\t\tloadSchoolSubjects: loadSchoolSubjects,\n\t\t\tloadSchoolSubjectFilters: loadSchoolSubjectFilters,\n\t\t\tgetEffectiveMasterScheduleTypeID: getEffectiveMasterScheduleTypeID,\n\t\t\taddCourseSubject: addCourseSubject,\n\t\t\tensureAppContext: ensureAppContext,\n\t\t\tresetCourse: resetCourse,\n\t\t\tcanUpdateCourse: canUpdateCourse,\n\t\t\tsetCourseCancelState: setCourseCancelState,\n\t\t\tcourseCancelled: courseCancelled,\n\t\t\tgetSchedulesForCourse: getSchedulesForCourse,\n\t\t\tgetSchedulesForSelectedMarkingPeriods: getSchedulesForSelectedMarkingPeriods,\n\t\t\tsetSelectedMarkingPeriod: setSelectedMarkingPeriod,\n\t\t\tconvertToMoment: convertToMoment,\n\t\t\tupdatePrimary: updatePrimary,\n\t\t\tcanUpdatePrimary: canUpdatePrimary,\n\t\t};\n\n\t\t/* our master scheudle type Id. 4 options.\n 1 Period\n 2 Block\n 3 Self-Contained\n 4 Half Day\n */\n\n\t\tvar course = getCourse();\n\n\t\tvar subjectOptions = [];\n\t\tvar meetingBlockOptions = [];\n\t\tvar schoolGradeLevelMasterSchedules = [];\n\t\tvar schoolSubjectFilters = {};\n\n\t\tfunction canUpdateCourse() {\n\t\t\treturn apiSecurityService.isAccessAllowed('Courses', 'Put', masterSchedulingRestangular);\n\t\t}\n\n\t\tfunction getCourse() {\n\t\t\treturn courseDataService.course;\n\t\t}\n\n\t\tfunction getMeetingBlockOptions() {\n\t\t\treturn meetingBlockOptions;\n\t\t}\n\n\t\tfunction convertToMoment(dateToConvert) {\n\t\t\treturn dateToConvert instanceof moment ? dateToConvert : moment(_.trimStart(dateToConvert, \"''\"));\n\t\t}\n\n\t\tfunction setSelectedMarkingPeriod() {\n\t\t\tvar today = moment(moment.utc().startOf('day').format('LL')).startOf('day');\n\t\t\tvar currentMarkingPeriod = _.find(course.schoolMarkingPeriods, function (smp) {\n\t\t\t\treturn smp.beginDate <= today && today <= smp.endDate;\n\t\t\t});\n\t\t\tif (!currentMarkingPeriod) {\n\t\t\t\tvar maxEndDate = _.max(_.map(course.schoolMarkingPeriods, 'endDate'));\n\t\t\t\tvar maxMoment = convertToMoment(maxEndDate);\n\t\t\t\tif (today.isAfter(maxMoment)) {\n\t\t\t\t\tcurrentMarkingPeriod = _.last(course.schoolMarkingPeriods);\n\t\t\t\t} else {\n\t\t\t\t\tcurrentMarkingPeriod = _.head(course.schoolMarkingPeriods);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcourse.selectedMarkingPeriod = currentMarkingPeriod;\n\t\t}\n\n\t\tfunction reconcileOnsiteFacilitatorAccess() {\n\t\t\tvar courseSchedulingService = (window).myNHA.GetApiService('MasterScheduling', 'OnsiteFacilitatorAccessService');\n\t\t\tcourseSchedulingService?.reconcileAccessForCourseSectionGroup(course.courseSectionGroup.courseSectionGroupID);\n\t\t}\n\n\t\tfunction loadMarkingPeriods() {\n\t\t\tif (course && !_.isEmpty(course.schoolMarkingPeriods)) {\n\t\t\t\tif (\n\t\t\t\t\tcourse.courseSectionGroup.schoolID !== course.schoolMarkingPeriods[0].schoolID ||\n\t\t\t\t\tcourse.courseSectionGroup.academicYearID !== course.schoolMarkingPeriods[0].academicYearID\n\t\t\t\t) {\n\t\t\t\t\tcourse.schoolMarkingPeriods = [];\n\t\t\t\t\tcourse.selectedMarkingPeriod = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn schoolMarkingPeriodService.get(course.courseSectionGroup.schoolID, course.courseSectionGroup.academicYearID).then(function (mps) {\n\t\t\t\tif (!course.schoolMarkingPeriods || course.schoolMarkingPeriods.length === 0) {\n\t\t\t\t\tcourse.schoolMarkingPeriods = _.filter(mps, function (smp) {\n\t\t\t\t\t\treturn _.includes([1, 2, 7], smp.markingPeriod.markingPeriodGroupID);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (_.isEmpty(course.selectedMarkingPeriod)) {\n\t\t\t\t\tsetSelectedMarkingPeriod();\n\t\t\t\t\t//course.selectedMarkingPeriod = _.head(course.schoolMarkingPeriods);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction getSubjectOptions() {\n\t\t\treturn subjectOptions;\n\t\t}\n\n\t\tfunction getSchoolSubjectFilters() {\n\t\t\treturn schoolSubjectFilters;\n\t\t}\n\n\t\tfunction allowMultiSelectMeetingBlock() {\n\t\t\tif (course && course.schoolGradeLevel && course.schoolGradeLevel.masterScheduleTypeID) {\n\t\t\t\treturn _.includes([2, 3, 4], course.schoolGradeLevel.masterScheduleTypeID);\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfunction getSchoolId() {\n\t\t\tvar schoolId = -1;\n\n\t\t\t// get what they have access to from a security perspective and default it\n\t\t\tvar defaultSchool = userContextService.getDefaultSchool();\n\t\t\tif (defaultSchool > 0) {\n\t\t\t\tschoolId = defaultSchool;\n\t\t\t}\n\n\t\t\t// if they have chosen something in one of the filters as their school, use that\n\t\t\tvar schoolCookie = ipCookie('filter-School');\n\t\t\tif (schoolCookie) {\n\t\t\t\tschoolId = parseInt(schoolCookie, 10);\n\t\t\t}\n\t\t\treturn schoolId;\n\t\t}\n\n\t\tfunction getAcademicYearId() {\n\t\t\treturn courseDataService.selectedAcademicYear || -1;\n\t\t}\n\n\t\tfunction setAcademicYearId(selectedAcademicYear) {\n\t\t\tcourseDataService.selectedAcademicYear = selectedAcademicYear;\n\t\t}\n\n\t\tfunction areTransfersAllowed(now) {\n\t\t\tvar course = getCourse();\n\t\t\tvar today = moment({ year: now.year(), month: now.month(), day: now.date() });\n\n\t\t\tif (course && course.schoolMarkingPeriods) {\n\t\t\t\tif(course.markingPeriodGroup && course.markingPeriodGroup === \"8\"){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar markingPeriods = _.filter(course.schoolMarkingPeriods, function (smp) {\n\t\t\t\t\treturn moment(smp.beginDate) <= today;\n\t\t\t\t});\n\t\t\t\treturn markingPeriods.length > 0;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction loadMeetingBlocks() {\n\t\t\tvar deferred = $q.defer();\n\n\t\t\tif (\n\t\t\t\tcourse &&\n\t\t\t\tcourse.courseSectionGroup &&\n\t\t\t\tcourse.courseSectionGroup.academicYearID &&\n\t\t\t\tcourse.courseSectionGroup.schoolID &&\n\t\t\t\tcourse.schoolGradeLevel.gradeLevelID &&\n\t\t\t\tcourse.selectedSchoolSchedule\n\t\t\t) {\n\t\t\t\tcourseScheduleMeetingBlockService\n\t\t\t\t\t.getAll({\n\t\t\t\t\t\tAcademicYearID: course.courseSectionGroup.academicYearID,\n\t\t\t\t\t\tSchoolID: course.courseSectionGroup.schoolID,\n\t\t\t\t\t\tGradeLevelID: course.schoolGradeLevel.gradeLevelID,\n\t\t\t\t\t\tSchoolScheduleID: course.selectedSchoolSchedule,\n\t\t\t\t\t})\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfunction (options) {\n\t\t\t\t\t\t\tvar _meetingBlockOptions = _(_.orderBy(_.uniqBy(options, 'meetingBlockTimeName'), ['groupDisplayOrder', 'timeDisplayOrder']));\n\n\t\t\t\t\t\t\t// log('start loadMeetingBlocks _meetingBlockOptions', _meetingBlockOptions)\n\n\t\t\t\t\t\t\t// shape down to be ready for hiearchical control\n\t\t\t\t\t\t\tmeetingBlockOptions = _meetingBlockOptions\n\t\t\t\t\t\t\t\t.map(function (o, key) {\n\t\t\t\t\t\t\t\t\t// set the properties so we can use them downstream\n\t\t\t\t\t\t\t\t\to.id = o.meetingBlockTimeID;\n\t\t\t\t\t\t\t\t\to.name = o.meetingBlockTimeName;\n\t\t\t\t\t\t\t\t\t(o.startTime = o.startTime), (o.endTime = o.endTime);\n\t\t\t\t\t\t\t\t\treturn o;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.groupBy('meetingBlockGroupID')\n\t\t\t\t\t\t\t\t.tap(function (groupedOptions) {\n\t\t\t\t\t\t\t\t\t// tap in and get our group display order so we can properly sort later (group by doesn't preserve order)\n\t\t\t\t\t\t\t\t\t_.forOwn(groupedOptions, function (value, key) {\n\t\t\t\t\t\t\t\t\t\tvalue.groupDisplayOrder = _.first(value).groupDisplayOrder;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.sortBy('groupDisplayOrder')\n\t\t\t\t\t\t\t\t.map(function (o, key) {\n\t\t\t\t\t\t\t\t\t// now sort it based on our previous groupDisplayOrder\n\t\t\t\t\t\t\t\t\treturn { id: key, name: _.first(o).meetingBlockGroupName, children: o };\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.value();\n\n\t\t\t\t\t\t\t//log('ready loadMeetingBlocks meetingBlockOptions', meetingBlockOptions)\n\n\t\t\t\t\t\t\tdeferred.resolve(meetingBlockOptions);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tmeetingBlockOptions = [];\n\t\t\t\tdeferred.resolve(meetingBlockOptions);\n\t\t\t}\n\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction getSubjectsGradeLevel() {\n\t\t\tvar effectiveGradeLevelId = null;\n\n\t\t\tif (course && course.courseSectionGroup && course.schoolGradeLevel) {\n\t\t\t\t// default this to our selected grade level\n\t\t\t\teffectiveGradeLevelId = course.schoolGradeLevel.gradeLevelID;\n\n\t\t\t\tif (course.courseSectionGroup.advancedCurriculumGradeLevelID > 0) {\n\t\t\t\t\teffectiveGradeLevelId = course.courseSectionGroup.advancedCurriculumGradeLevelID;\n\t\t\t\t} else if (course.courseSectionGroup.modifiedCurriculumGradeLevelID > 0) {\n\t\t\t\t\teffectiveGradeLevelId = course.courseSectionGroup.modifiedCurriculumGradeLevelID;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn effectiveGradeLevelId;\n\t\t}\n\n\t\tfunction getEffectiveMasterScheduleTypeID() {\n\t\t\tvar masterScheduleTypeID = -1;\n\n\t\t\tif (course && course.schoolGradeLevel && course.courseSectionGroup && schoolGradeLevelMasterSchedules) {\n\t\t\t\tvar schoolSchedules = _.filter(schoolGradeLevelMasterSchedules, {\n\t\t\t\t\tacademicYearID: course.courseSectionGroup.academicYearID,\n\t\t\t\t\tschoolID: course.courseSectionGroup.schoolID,\n\t\t\t\t\tgradeLevelID: course.schoolGradeLevel.gradeLevelID,\n\t\t\t\t});\n\t\t\t\tif (schoolSchedules.length > 0) {\n\t\t\t\t\t//we can have multiple schedules for a school/academic year/grade level combination. If we don't, we just use the only schedule.\n\t\t\t\t\t//if we do we need to try to match against the course selected marking periods (if any). if there are none then we can't\n\t\t\t\t\t//make a determination\n\n\t\t\t\t\tif (schoolSchedules.length === 1) {\n\t\t\t\t\t\tmasterScheduleTypeID = schoolSchedules[0].masterScheduleTypeID;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (course.schoolMarkingPeriods) {\n\t\t\t\t\t\t\tvar firstSelectedMarkingPeriod = _.head(course.schoolMarkingPeriods);\n\t\t\t\t\t\t\tif (firstSelectedMarkingPeriod) {\n\t\t\t\t\t\t\t\tvar schoolSchedule = _.find(schoolSchedules, function (schedule) {\n\t\t\t\t\t\t\t\t\tvar scheduleSchoolMarkingPeriodIds = _.map(schedule.schoolMarkingPeriods, 'schoolMarkingPeriodID');\n\t\t\t\t\t\t\t\t\treturn _.includes(scheduleSchoolMarkingPeriodIds, firstSelectedMarkingPeriod.schoolMarkingPeriodID);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (schoolSchedule) {\n\t\t\t\t\t\t\t\t\tmasterScheduleTypeID = schoolSchedule.masterScheduleTypeID;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn masterScheduleTypeID;\n\t\t}\n\n\t\tfunction addCourseSubject(subject) {\n\t\t\tif((subject.subjectClassificationID !== 6 || subject.subjectClassificationID !== 7 || subject.subjectClassificationID !== 8 || subject.subjectClassificationID !== 10) && subject.isOnline !== true)\n\t\t\t{\n\n\t\t\t\tcourse.courseSectionGroup.isSafetyAttendance = false;\n\t\t\t\tcourse.courseSectionGroup.isAttendance = true;\n\t\t\t\tcourse.courseSectionGroup.attendanceOption = 'Attendance';\n\n\t\t\t\tswal({\n\t\t\t\t\ttitle: \"The attendance requirement has been updated to Attendance Required\",\n\t\t\t\t\ttype: \"info\",\n\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\tshowConfirmButton: false,\n\t\t\t\t\ttimer: 2000\n\t\t\t\t})\n\t\t\t}\n\t\t\tif(subject.subjectClassificationID == 6 || subject.subjectClassificationID == 10 || subject.isOnline == true)\n\t\t\t{\n\t\t\t\tcourse.courseSectionGroup.isSafetyAttendance = true;\n\t\t\t\tcourse.courseSectionGroup.isAttendance = false;\n\t\t\t\tcourse.courseSectionGroup.attendanceOption = 'Safety';\n\n\t\t\t\tswal({\n\t\t\t\t\ttitle: \"The attendance requirement has been updated to Safety Attendance\",\n\t\t\t\t\ttype: \"info\",\n\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\tshowConfirmButton: false,\n\t\t\t\t\ttimer: 2000\n\t\t\t\t})\n\t\t\t}\n\t\t\tif((subject.subjectClassificationID == 7 || subject.subjectClassificationID == 8) && subject.isOnline !== true)\n\t\t\t{\n\t\t\t\tcourse.courseSectionGroup.isSafetyAttendance = false;\n\t\t\t\tcourse.courseSectionGroup.isAttendance = false;\n\t\t\t\tcourse.courseSectionGroup.attendanceOption = 'None';\n\n\t\t\t\tswal({\n\t\t\t\t\ttitle: \"The attendance requirement has been updated to None\",\n\t\t\t\t\ttype: \"info\",\n\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\tshowConfirmButton: false,\n\t\t\t\t\ttimer: 2000\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tcourse.courseSubjects = course.courseSubjects || [];\n\t\t\tcourse.courseSubjects = [...course.courseSubjects, {\n\t\t\t\tmeetingBlock: {},\n\t\t\t\tschoolSubject: subject,\n\t\t\t\tcourseSection: {\n\t\t\t\t\tcourseSectionID: -1,\n\t\t\t\t\tsubjectLevel1ID: subject.subjectLevel1ID,\n\t\t\t\t\tcourseSubjectDisplayName: subject.subjectName,\n\t\t\t\t\tcourseSectionGroupID: course.courseSectionGroup.courseSectionGroupID,\n\t\t\t\t},\n\t\t\t}];\n\t\t}\n\n\t\tfunction setDefaultSubjectsForNewCourse(data) {\n\t\t\t/*\n * 1.1.0.1.\tThe subjects tab under the Section Tab, when selected, will auto populate with all the subjects whose base subject is set to Core or Moral Focus.\n * Currently, the subjects listed as Homeroom/Moral Focus, Mathematics, English Language Arts, Science and Social Studies.\n •\tNote: Moral Focus is currently the homeroom subject, however this may change and a new subject called Homeroom may be in its place for July 2016.\n If both exist, moral focus will take the place of homeroom.\n */\n\t\t\tif (course.isDefaultSubjects) {\n\t\t\t\tcourse.courseSubjects = [];\n\t\t\t}\n\n\t\t\t// Only default subjects for self-contained courses\n\t\t\tif (_.includes([3, 4], getEffectiveMasterScheduleTypeID())) {\n\t\t\t\t// only run this if we haven't loaded any courses before\n\t\t\t\tif (course.courseSubjects.length === 0) {\n\t\t\t\t\tvar subjectsTypesToDefaultTo = _.filter(data, function (s) {\n\t\t\t\t\t\treturn s.gradeLevelID === course.schoolGradeLevel.gradeLevelID && (s.subjectTypeID === 1 || s.subjectTypeID === 4);\n\t\t\t\t\t});\n\t\t\t\t\t//reverse because addCourseSubject is shared and inserts subjects at the front of the list.\n\t\t\t\t\t_.forEach(_.orderBy(subjectsTypesToDefaultTo, ['subjectName'], ['desc']), function (s) {\n\t\t\t\t\t\taddCourseSubject(s);\n\t\t\t\t\t});\n\n\t\t\t\t\tlog('setDefaultSubjectsForNewCourse - course', course);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction getCourseDisplayName() {\n\t\t\tvar text = $state.params.courseID ? course.courseSectionGroup.courseSectionGroupName : 'New Course';\n\t\t\tcourse.displayName = _.truncate(text.replace(new RegExp('/', 'g'), '/ '), { length: 50, separator: ' ' });\n\t\t}\n\n\t\tfunction loadSchoolSubjects(forceReset, gradeLevelID) {\n\t\t\tsubjectOptions = [];\n\n\t\t\t// the list of subjects can change based on the modified or advanced\n\t\t\tif(!gradeLevelID){\n\t\t\t\tgradeLevelID = getSubjectsGradeLevel();\n\t\t\t}\n\n\t\t\treturn schoolSubjectService\n\t\t\t\t.getForSchoolGradeLevel(course.courseSectionGroup.academicYearID, course.courseSectionGroup.schoolID, gradeLevelID || 0)\n\t\t\t\t.then(function (data) {\n\t\t\t\t\tsubjectOptions = data;\n\t\t\t\t\t// only call this for a new course\n\t\t\t\t\tif ((!$stateParams.courseID && _.isEmpty(course.courseSubjects)) || forceReset) {\n\t\t\t\t\t\tsetDefaultSubjectsForNewCourse(data);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t}\n\n\t\tfunction loadSchoolSubjectFilters() {\n\t\t\treturn schoolSubjectService.getFilters(getSchoolId());\n\t\t}\n\n\t\tfunction loadSchoolSchedules() {\n\t\t\tvar params: any = { AcademicYearID: course.courseSectionGroup.academicYearID, SchoolID: course.courseSectionGroup.schoolID };\n\t\t\treturn schoolGradeLevelMasterScheduleRepository.getAll(params).then(function (resp) {\n\t\t\t\tschoolGradeLevelMasterSchedules = resp;\n\t\t\t});\n\t\t}\n\n\t\t// These lookup values need to change based on course data or grade level\n\t\tfunction loadDimensions(forceReset = false) {\n\t\t\tvar deferred = $q.defer();\n\n\t\t\tloadSchoolSchedules().then(\n\t\t\t\tfunction () {\n\t\t\t\t\t$q.all([\n\t\t\t\t\t\t//loadMeetingBlocks(),\n\t\t\t\t\t\tloadSchoolSubjects(forceReset, null),\n\t\t\t\t\t\tloadMarkingPeriods(),\n\t\t\t\t\t]).then(\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tdeferred.resolve();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction resetCourse() {\n\t\t\tvar deferred = $q.defer();\n\n\t\t\tsubjectOptions = [];\n\t\t\tmeetingBlockOptions = [];\n\t\t\tschoolGradeLevelMasterSchedules = [];\n\n\t\t\t// if not id, give us a starter stub for a course\n\t\t\tdelete course.courseSectionStaff;\n\t\t\tcourse.courseSectionGroup = { schoolID: getSchoolId(), academicYearID: getAcademicYearId(), isAttendance: true, isSafetyAttendance: false } as CourseSectionGroup;\n\t\t\tcourse.schoolSchedule = [];\n\t\t\tcourse.isAttendanceRequired = true;\n\t\t\tcourse.curriculum = {\n\t\t\t\tcurriculumType: 1,\n\t\t\t\tgradeLevel: null,\n\t\t\t};\n\t\t\tcourse.selectedAcademicYear = getAcademicYearId();\n\t\t\tcourse.displayName = undefined;\n\t\t\tcourse.schoolGradeLevel = {};\n\t\t\tcourse.students = [];\n\t\t\tcourse.teachers = [];\n\t\t\tcourse.courseSubjects = [];\n\t\t\tcourse.markingPeriodGroup = '';\n\t\t\tcourse.rosterImport = {};\n\t\t\tcourse.courseSectionGroupMeetingBlockTimes = [];\n\t\t\tcourse.isDefaultSubjects = true;\n\t\t\tcourse.areSubjectsVerified = false;\n\t\t\tcourse.selectedMarkingPeriod = {};\n\t\t\tcourse.schoolMarkingPeriods = [];\n\t\t\tcourse.selectedCourseSubject = undefined;\n\t\t\tcourse.markingPeriodHybridLearningDays = [];\n\t\t\tcourse.courseOverallPrimaryStaffIds = [];\n\t\t\tcourse.primaries = [];\n\t\t\tdelete course.selectedSchoolSchedule;\n\n\t\t\tif (course.courseSectionGroup.academicYearID < 0) {\n\t\t\t\tacademicYearRepository.getCurrentAcademicYear().then(\n\t\t\t\t\tfunction (currentAcademicYear) {\n\t\t\t\t\t\tcourse.courseSectionGroup.academicYearID = currentAcademicYear.academicYearID;\n\t\t\t\t\t\tcourse.selectedAcademicYear = currentAcademicYear.academicYearID;\n\t\t\t\t\t\tdeferred.resolve(course);\n\t\t\t\t\t\tcourse.initialized = true;\n\t\t\t\t\t},\n\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcourse.initialized = true;\n\t\t\t\tdeferred.resolve(course);\n\t\t\t}\n\n\t\t\t$rootScope.$broadcast('master-scheduling-course-unloaded', {});\n\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction syncFiltersToCourse(course) {\n\t\t\tvar args = {\n\t\t\t\tschoolID: course.courseSectionGroup.schoolID,\n\t\t\t\tacademicYearID: course.courseSectionGroup.academicYearID,\n\t\t\t};\n\n\t\t\t$rootScope.$broadcast('master-scheduling-course-loaded', args);\n\t\t}\n\n\t\tfunction loadCourse() {\n\t\t\treturn courseService.get($stateParams.courseID).then(function (data) {\n\t\t\t\t_.assign(course, data);\n\n\t\t\t\tcourseService.getOverallPrimariesforCourse($stateParams.courseID).then(function (primaries) {\n\t\t\t\t\tcourse.primaries = primaries;\n\t\t\t\t});\n\n\t\t\t\t// fix dates\n\t\t\t\t_.forEach(course.courseSubjects, function (cs) {\n\t\t\t\t\t_.forEach(cs.students, function (s) {\n\t\t\t\t\t\t_.forEach(s.statusHistory, function (sh) {\n\t\t\t\t\t\t\tsh.date = _utils.inSpecifiedTimezone(sh.date);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t_.forEach(cs.staff, function (s) {\n\t\t\t\t\t\t_.forEach(s.statusHistory, function (sh) {\n\t\t\t\t\t\t\tsh.date = _utils.inSpecifiedTimezone(sh.date);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t//course.selectedCourseSubject = _.head(course.courseSubjects);\n\t\t\t\t//course.selectedMarkingPeriod = _.head(course.schoolMarkingPeriods);\n\t\t\t\tcourse.selectedMarkingPeriod = null;\n\t\t\t\tcourse.selectedCourseSubject = null;\n\t\t\t\tcourse.courseSectionGroup.gradeLevel = { gradeLevelID: course.courseSectionGroup.gradeLevelID };\n\n\t\t\t\tif (course.courseSectionGroup.modifiedCurriculumGradeLevelID) {\n\t\t\t\t\tcourse.curriculum.curriculumType = 2;\n\t\t\t\t\tcourse.curriculum.gradeLevel = course.courseSectionGroup.modifiedCurriculumGradeLevelID;\n\t\t\t\t} else if (course.courseSectionGroup.advancedCurriculumGradeLevelID) {\n\t\t\t\t\tcourse.curriculum.curriculumType = 3;\n\t\t\t\t\tcourse.curriculum.gradeLevel = course.courseSectionGroup.advancedCurriculumGradeLevelID;\n\t\t\t\t} else {\n\t\t\t\t\tcourse.curriculum.curriculumType = 1;\n\t\t\t\t\tcourse.curriculum.gradeLevel = course.courseSectionGroup.gradeLevelID;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction loadCourseSupplementalData() {\n\t\t\treturn getSchedulesForSelectedMarkingPeriods().then(function (schedules) {\n\t\t\t\tif (course.courseSectionGroupMeetingBlockTimes) {\n\t\t\t\t\t_.forEach(course.courseSectionGroupMeetingBlockTimes, function (csgmbt) {\n\t\t\t\t\t\t// our id is different from the dropdown, map it\n\t\t\t\t\t\tcsgmbt.id = csgmbt.meetingBlockTimeID;\n\t\t\t\t\t\tcsgmbt.selected = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tsyncFiltersToCourse(course);\n\t\t\t});\n\t\t}\n\n\t\tfunction ensureAppContext() {\n\t\t\tvar deferred = $q.defer();\n\t\t\t//return promise with context - can call other services to pull data down\n\t\t\tif ($stateParams.courseID) {\n\t\t\t\tif (!course.courseSectionGroup.entityId || course.courseSectionGroup.entityId !== $stateParams.courseID) {\n\t\t\t\t\tloadCourse().then(\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tloadSchoolSchedules().then(\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\tloadDimensions().then(\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\tloadCourseSupplementalData().then(\n\t\t\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\t\t\tgetCourseDisplayName();\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.resolve(course);\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tsyncFiltersToCourse(course);\n\t\t\t\t\tdeferred.resolve(course);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!course.initialized) {\n\t\t\t\t\tresetCourse().then(function () {\n\t\t\t\t\t\tloadSchoolSchedules().then(function () {\n\t\t\t\t\t\t\tloadDimensions().then(function () {\n\t\t\t\t\t\t\t\tsyncFiltersToCourse(course);\n\t\t\t\t\t\t\t\tgetCourseDisplayName();\n\t\t\t\t\t\t\t\tdeferred.resolve(course);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tgetCourseDisplayName();\n\t\t\t\t\tdeferred.resolve(course);\n\t\t\t\t\tsyncFiltersToCourse(course);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction saveCourse() {\n\t\t\t// ensure grade level is set\n\t\t\tcourse.courseSectionGroup.gradeLevelID = course.schoolGradeLevel.gradeLevelID;\n\n\t\t\t// fix course subjects structure\n\t\t\tif (course.courseSubjects) {\n\t\t\t\t_.forEach(course.courseSubjects, function (cs) {\n\t\t\t\t\tif (cs.courseSection) {\n\t\t\t\t\t\tvar firstCourseSectionSubject = _.head(cs.courseSection.subjectLevel1ID);\n\t\t\t\t\t\tif (firstCourseSectionSubject) {\n\t\t\t\t\t\t\tcs.courseSection.subjectLevel1ID = firstCourseSectionSubject.id;\n\t\t\t\t\t\t\tcs.courseSection.courseSubjectDisplayName = firstCourseSectionSubject.name;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cs.courseSectionGroupMeetingBlockTimes) {\n\t\t\t\t\t\t_.forEach(cs.courseSectionGroupMeetingBlockTimes, function (csmbt) {\n\t\t\t\t\t\t\t// our id is different from teh dropdown, map it\n\t\t\t\t\t\t\tcsmbt.meetingBlockTimeID = csmbt.id;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (course.courseSectionGroupMeetingBlockTimes)\n\t\t\t\t\tcourse.courseSectionGroupMeetingBlockTimes = _.reject(course.courseSectionGroupMeetingBlockTimes, function (i) {\n\t\t\t\t\t\treturn i.children && i.children.length;\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tlog('vm.course to save', course);\n\t\t\treturn courseService.save(course);\n\t\t}\n\n\t\tfunction setCourseCancelState(state) {\n\t\t\tgetCourse().courseCancelState = state;\n\t\t}\n\n\t\tfunction courseCancelled() {\n\t\t\t$rootScope.$broadcast('master-scheduling-course-unloaded', {});\n\t\t\tvar cancelState = getCourse().courseCancelState;\n\t\t\tif (cancelState) {\n\t\t\t\t$state.go(cancelState, {}, { reload: true });\n\t\t\t\tdelete getCourse().courseCancelState;\n\t\t\t} else {\n\t\t\t\t$state.go('courses', {}, { reload: true });\n\t\t\t}\n\t\t}\n\n\t\tfunction setSelectedSchedule(schoolScheduleIds) {\n\t\t\tvar deferred = $q.defer();\n\n\t\t\tif (schoolScheduleIds.length === 1) {\n\t\t\t\tif (course.selectedSchoolSchedule !== schoolScheduleIds[0]) {\n\t\t\t\t\tcourse.selectedSchoolSchedule = schoolScheduleIds[0];\n\t\t\t\t\tloadMeetingBlocks().then(\n\t\t\t\t\t\tfunction (meetingBlocks) {\n\t\t\t\t\t\t\tdeferred.resolve(meetingBlocks);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolve();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete course.selectedSchoolSchedule;\n\t\t\t\tmeetingBlockOptions = [];\n\t\t\t\tdeferred.resolve(meetingBlockOptions);\n\t\t\t}\n\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction getSchedulesForCourse() {\n\t\t\tvar deferred = $q.defer();\n\t\t\tvar schoolScheduleIds = [];\n\n\t\t\tif (course && schoolGradeLevelMasterSchedules && (course.schoolGradeLevel || course.courseSectionGroup)) {\n\t\t\t\tvar gradeLevelID = course.schoolGradeLevel ? course.schoolGradeLevel.gradeLevelID : course.courseSectionGroup.gradeLevelID;\n\t\t\t\tvar gradeLevelSchedules = _.filter(schoolGradeLevelMasterSchedules, function (schedule) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tschedule.gradeLevelID === gradeLevelID &&\n\t\t\t\t\t\tschedule.academicYearID === course.courseSectionGroup.academicYearID &&\n\t\t\t\t\t\tschedule.schoolID === course.courseSectionGroup.schoolID\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tschoolScheduleIds = _.map(gradeLevelSchedules, 'schoolScheduleID');\n\t\t\t}\n\n\t\t\tsetSelectedSchedule(schoolScheduleIds).then(\n\t\t\t\tfunction (meetingBlocks) {\n\t\t\t\t\tlog('meetingBlocks', meetingBlocks);\n\t\t\t\t\tcourse.meetingBlocks = meetingBlocks;\n\n\t\t\t\t\tdeferred.resolve(_.uniq(schoolScheduleIds));\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction getSchedulesForSelectedMarkingPeriods() {\n\t\t\tvar deferred = $q.defer();\n\n\t\t\tvar schoolScheduleIds = [];\n\n\t\t\tif (course && course.schoolMarkingPeriods && schoolGradeLevelMasterSchedules) {\n\t\t\t\tvar markingPeriodIds = _.map(course.schoolMarkingPeriods, 'schoolMarkingPeriodID');\n\t\t\t\tvar gradeLevelID = course.schoolGradeLevel ? course.schoolGradeLevel.gradeLevelID : course.courseSectionGroup.gradeLevelID;\n\t\t\t\tvar gradeLevelSchedules = _.filter(schoolGradeLevelMasterSchedules, function (schedule) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tschedule.gradeLevelID === gradeLevelID &&\n\t\t\t\t\t\tschedule.academicYearID === course.courseSectionGroup.academicYearID &&\n\t\t\t\t\t\tschedule.schoolID === course.courseSectionGroup.schoolID\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tif (gradeLevelSchedules.length > 1) {\n\t\t\t\t\t_.forEach(gradeLevelSchedules, function (glSchedule) {\n\t\t\t\t\t\t_.forEach(_.map(glSchedule.schoolMarkingPeriods, 'schoolMarkingPeriodID'), function (id) {\n\t\t\t\t\t\t\tif (_.includes(markingPeriodIds, id)) {\n\t\t\t\t\t\t\t\tschoolScheduleIds.push(glSchedule.schoolScheduleID);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (gradeLevelSchedules.length === 1) {\n\t\t\t\t\t\tschoolScheduleIds.push(gradeLevelSchedules[0].schoolScheduleID);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar results = _.uniq(schoolScheduleIds);\n\n\t\t\tsetSelectedSchedule(results).then(\n\t\t\t\tfunction () {\n\t\t\t\t\tdeferred.resolve(results);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\tdeferred.reject(error);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn deferred.promise;\n\t\t}\n\n\t\tfunction updatePrimary(csgID, staffID, newStatus) {\n\t\t\treturn courseService.setOverallPrimary(csgID, staffID, newStatus);\n\t\t}\n\n\t\tfunction canUpdatePrimary() {\n\t\t\treturn apiSecurityService.isAccessAllowed('CourseDesignatedTeachers', 'AddStaffTooCourseSectionGroup', masterSchedulingRestangular);\n\t\t}\n\n\t\treturn service;\n\t},\n]);\n","\n\n\tfunction CourseTeachersCtrl(\n\t\t$scope,\n\t\t$state,\n\t\t$uibModal,\n\t\tappSettings,\n\t\tcourseDataManagerService,\n\t\tstaffHistoryService,\n\t\tacademicYearRepository,\n\t\terrorService,\n\t\tuiAlertService,\n\t\tbusinessResponseService\n\t) {\n\t\tvar vm = this;\n\t\tvar endAcademicYear;\n\t\tvm.teacherForm = {};\n\n\t\tvm.selectedAcademicYear = { minDate: moment(), maxDate: moment() };\n\n\t\tvm.loadingViewState = { staffLoading: true };\n\n\t\t$scope.courseDataManagerService = courseDataManagerService;\n\n\t\tvm.mostRecentStatus = function (history) {\n\t\t\treturn _.last(history);\n\t\t};\n\n\n\t\tvm.isActiveDuringMarkingPeriod = function (teacher) {\n\t\t\tvar startDate, endDate;\n\t\t\tif (vm.course.selectedMarkingPeriod) {\n\t\t\t\tstartDate = moment(vm.course.selectedMarkingPeriod.beginDate);\n\t\t\t\tendDate = moment(vm.course.selectedMarkingPeriod.endDate);\n\t\t\t\tif (_.all(teacher.statusHistory, { masterStatusID: 21 })) {\n\t\t\t\t\tvar status = _.last(teacher.statusHistory);\n\t\t\t\t\treturn moment(status.date).isBefore(endDate);\n\t\t\t\t} else {\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvm.sort = [{ criteria: 'staff.lastName', descending: false }];\n\n\t\tvm.sortChanged = function (expression) {\n\t\t\tvm.sort = _.map(expression, function (crit) {\n\t\t\t\treturn (crit.descending ? '-' : '') + crit.criteria;\n\t\t\t});\n\t\t};\n\n\t\tvm.noTeachers = function () {\n\t\t\tif (vm.course) {\n\t\t\t\treturn !_.some(vm.course.courseSubjects, function (subject) {\n\t\t\t\t\treturn subject.staff && subject.staff.length;\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tvm.calculateMaxDate = function () {\n\t\t\tvar endCourseMarkingPeriod = moment(_.last(vm.course.schoolMarkingPeriods).endDate);\n\n\t\t\tif (endCourseMarkingPeriod && endAcademicYear >= endCourseMarkingPeriod) {\n\t\t\t\treturn endCourseMarkingPeriod;\n\t\t\t} else {\n\t\t\t\treturn endAcademicYear;\n\t\t\t}\n\t\t};\n\n\t\tfunction convertToMoment(dateToConvert) {\n\t\t\treturn dateToConvert instanceof moment ? dateToConvert : moment(_.trimStart(dateToConvert, \"''\"));\n\t\t}\n\n\t\tfunction setupHistoryInfo(teacher) {\n\t\t\tteacher.currentStatus = _.find(teacher.statusHistory, 'isCurrent') || _.last(teacher.statusHistory);\n\n\t\t\tfor (var i = teacher.statusHistory.length - 1; i >= 0; i--) {\n\t\t\t\tteacher.statusHistory[i].originalDate = convertToMoment(teacher.statusHistory[i].date);\n\t\t\t\tteacher.statusHistory[i].editMode = false;\n\t\t\t\tif (i === teacher.statusHistory.length - 1) {\n\t\t\t\t\tteacher.statusHistory[i].expanded = false;\n\t\t\t\t\tteacher.statusHistory[i].maxDate = vm.selectedAcademicYear.maxDate;\n\t\t\t\t} else {\n\t\t\t\t\tteacher.statusHistory[i].maxDate = convertToMoment(teacher.statusHistory[i + 1].date);\n\t\t\t\t}\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tteacher.statusHistory[i].minDate = vm.selectedAcademicYear.minDate;\n\t\t\t\t} else {\n\t\t\t\t\tteacher.statusHistory[i].minDate = convertToMoment(teacher.statusHistory[i - 1].date);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvm.resetEditRow = function (statusHistory, $event) {\n\t\t\t$event.stopPropagation();\n\t\t\tstatusHistory.editMode = false;\n\t\t\tstatusHistory.date = statusHistory.originalDate;\n\t\t};\n\n\t\tvm.remove = function () {\n\t\t\tif (vm.course.courseSectionGroup && vm.course.courseSectionGroup.courseSectionGroupID) {\n\t\t\t\t$state.go('course.remove-teachers', { reload: true });\n\t\t\t} else {\n\t\t\t\t$state.go('new-course.remove-teachers');\n\t\t\t}\n\t\t};\n\n\t\tvm.setEditMode = function (status, $event) {\n\t\t\t$event.stopPropagation();\n\t\t\tif (status) {\n\t\t\t\tstatus.editMode = true;\n\t\t\t}\n\t\t};\n\n\t\tvm.removeStatus = function (s, $event) {\n\t\t\t$event.stopPropagation();\n\n\t\t\tif (!s.courseSectionStaffID) {\n\t\t\t\tlog('removeStatus -> vm.course, statusToRemove', vm.course, s);\n\n\t\t\t\tvar subjectToEdit = _.find(vm.course.courseSubjects, function (subject) {\n\t\t\t\t\treturn subject.courseSection.subjectLevel1ID === s.courseSection.subjectLevel1ID;\n\t\t\t\t});\n\t\t\t\tlog('subjectToEdit', subjectToEdit);\n\t\t\t\tif (subjectToEdit) {\n\t\t\t\t\t_.remove(subjectToEdit.staff, function (teacher) {\n\t\t\t\t\t\treturn teacher === s;\n\t\t\t\t\t});\n\t\t\t\t\t$state.go($state.current, {}, { reload: true });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswal(\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: 'Are you sure?',\n\t\t\t\t\t\ttext: 'This will remove this teacher status if they were added by accident. If you want to fully remove the teacher, please use the Remove button. Are you sure you want to delete this status?',\n\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\tshowCancelButton: true,\n\t\t\t\t\t\tconfirmButtonColor: '#DD6B55',\n\t\t\t\t\t\tconfirmButtonText: 'Yes, delete the status!',\n\t\t\t\t\t\tcloseOnConfirm: true,\n\t\t\t\t\t},\n\t\t\t\t\tfunction (isConfirmed) {\n\t\t\t\t\t\tif (isConfirmed) {\n\t\t\t\t\t\t\tvar courseSectionStaffStatusHistoryId = _.last(s.statusHistory).courseSectionStaffStatusHistoryID;\n\t\t\t\t\t\t\tstaffHistoryService.remove(courseSectionStaffStatusHistoryId).then(\n\t\t\t\t\t\t\t\tfunction (result) {\n\t\t\t\t\t\t\t\t\tlog('result', result);\n\t\t\t\t\t\t\t\t\tif (result.operationResult.passed) {\n\t\t\t\t\t\t\t\t\t\tcourseDataManagerService.resetCourse();\n\t\t\t\t\t\t\t\t\t\t$state.go($state.current, {}, { reload: true });\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// did not pass\n\t\t\t\t\t\t\t\t\t\tswal('the teacher status remove failed!', 'something went wrong, you cannot remove this status now', 'warning');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\t\t\tvm.hasError = true;\n\t\t\t\t\t\t\t\t\tbusinessResponseService.showBusinessResponse(error.data, 'The teacher status delete process could not be completed');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tvm.goToStaffRecord = function (staff, $event) {\n\t\t\tif ($event) {\n\t\t\t\t$event.stopPropagation();\n\t\t\t}\n\n\t\t\t_utils.openUrl(appSettings.staffWebRootUrl + 'staff-record/' + staff.staffID, true);\n\t\t};\n\n\t\tvm.setStatusDate = function (teacher, statusHistory, $event) {\n\t\t\t$event.stopPropagation();\n\n\t\t\tif (!statusHistory.date) {\n\t\t\t\tstatusHistory.hasDateError = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstatusHistory.hasDateError = false;\n\n\t\t\tif (!teacher.courseSectionStaffID || !statusHistory.courseSectionStaffStatusHistoryID) {\n\t\t\t\tstatusHistory.originalDate = statusHistory.date;\n\t\t\t\tstatusHistory.editMode = false;\n\t\t\t} else {\n\t\t\t\tvm.saving = true;\n\t\t\t\tvar statusChange = {\n\t\t\t\t\tId: teacher.courseSectionStaffID,\n\t\t\t\t\tHistoryId: statusHistory.courseSectionStaffStatusHistoryID,\n\t\t\t\t\tStartDate: _utils.stripTimeFromDate(statusHistory.date),\n\t\t\t\t\tEndDate: _utils.stripTimeFromDate(statusHistory.originalDate),\n\t\t\t\t\tMasterStatusId: statusHistory.masterStatusID,\n\t\t\t\t\tignoreWarnings: false,\n\t\t\t\t};\n\n\t\t\t\tstaffHistoryService.put(statusChange).then(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tvm.saving = false;\n\t\t\t\t\t\tsetupHistoryInfo(teacher);\n\t\t\t\t\t\tuiAlertService.success('Status changes were saved successfully.', 'Save Successful');\n\t\t\t\t\t},\n\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\tvm.saving = false;\n\t\t\t\t\t\tvm.hasError = true;\n\t\t\t\t\t\tlog('error', error);\n\t\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred while updating a teacher status date.');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tvm.togglePrimary = function (staffID) {\n\t\t\tif (vm.course.courseOverallPrimaryStaffIds.includes(staffID)) {\n\t\t\t\tvar deleteIndex = vm.course.courseOverallPrimaryStaffIds.indexOf(staffID);\n\t\t\t\tvm.course.courseOverallPrimaryStaffIds.splice(deleteIndex, 1);\n\t\t\t} else {\n\t\t\t\tvm.course.courseOverallPrimaryStaffIds.push(staffID);\n\t\t\t}\n\t\t};\n\n\t\tvm.getPrimary = function (staffID) {\n\t\t\tif (vm.primaries) {\n\t\t\t\treturn vm.primaries.find(function (p) {\n\t\t\t\t\treturn p.staffID === staffID;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\n\t\tfunction getOverallPrimaryTeachersStaffIds() {\n\t\t\tif (vm.primaries) {\n\t\t\t\tvar isOverallPrimaryTeachers = vm.primaries.filter(function (staff) {\n\t\t\t\t\treturn staff.isOverallPrimary == true;\n\t\t\t\t});\n\n\t\t\t\tvar isOverallPrimaryTeacherIds = isOverallPrimaryTeachers.map(function (staff) {\n\t\t\t\t\treturn staff.staffID;\n\t\t\t\t});\n\t\t\t\treturn isOverallPrimaryTeacherIds;\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\n\t\tvm.orderByDate = function (a) {\n\t\t\treturn moment(a.date);\n\t\t};\n\n\t\tvm.updateSelectedCourseSubject = function (cs) {\n\t\t\tvm.course.selectedCourseSubject = cs;\n\t\t};\n\n\t\tvm.shouldRemoveButtonBeDisabled = function () {\n\t\t\treturn (\n\t\t\t\t!vm.course ||\n\t\t\t\t!vm.course.courseSectionGroup ||\n\t\t\t\t!vm.course.courseSectionGroup.courseSectionGroupID ||\n\t\t\t\tvm.course.courseSectionGroup.courseSectionGroupID <= 0\n\t\t\t);\n\t\t};\n\n\t\tvm.hasOnlineCourse = function () {\n\t\t\treturn (\n\t\t\t\tvm.course &&\n\t\t\t\tvm.course.courseSubjects.some(function (cs) {\n\t\t\t\t\treturn cs.schoolSubject.isOnline ||\n\t\t\t\t\t\tcs.schoolSubject.subjectClassificationID === 7 || // subjectClassificationID of 7 = Career Tech\n\t\t\t\t\t\tcs.schoolSubject.subjectClassificationID === 8 || // subjectClassificationID of 8 = College\n\t\t\t\t\t\tcs.schoolSubject.subjectClassificationID === 10 || // subjectClassificationID of 10 = Credit Recovery\n\t\t\t\t\t\tcs.schoolSubject.subjectClassificationID === 11; // subjectClassificationID of 11 = Prep\n\t\t\t\t})\n\t\t\t);\n\t\t};\n\n\t\tvm.isStaffOverallPrimary = function (staffID) {\n\t\t\treturn vm.course.courseOverallPrimaryStaffIds.includes(staffID);\n\t\t};\n\n\t\tvm.isTeacherStatusActive = function (subjects, staffID) {\n\t\t\treturn (\n\t\t\t\t_.filter(subjects, function (subject) {\n\t\t\t\t\treturn subject.staffID === staffID && subject.currentStatus.masterStatus.description == 'Active';\n\t\t\t\t}).length == 0\n\t\t\t);\n\t\t};\n\n\t\tfunction isAnyTeacherAddedToCourse() {\n\t\t\tvar returnValue = false;\n\t\t\tvm.staffGroups.forEach(function (subjectGroup) {\n\t\t\t\tsubjectGroup.forEach(function (subject) {\n\t\t\t\t\tif (returnValue !== true && !!subject.staffID) {\n\t\t\t\t\t\treturnValue = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn returnValue;\n\t\t}\n\n\t\tfunction init() {\n\t\t\tcourseDataManagerService.ensureAppContext().then(function (course) {\n\t\t\t\tvm.course = course;\n\n\t\t\t\tvar courseSubjects = _(vm.course.courseSubjects);\n\n\t\t\t\tvm.staffGroups = courseSubjects\n\t\t\t\t\t.map('staff')\n\t\t\t\t\t.flatten()\n\t\t\t\t\t.omitBy(_.isUndefined)\n\t\t\t\t\t.groupBy('staffID')\n\t\t\t\t\t.tap(function (val) {\n\t\t\t\t\t\tvm.staffGroups = val;\n\t\t\t\t\t})\n\t\t\t\t\t.keys()\n\t\t\t\t\t.map(function (key) {\n\t\t\t\t\t\treturn vm.staffGroups[key];\n\t\t\t\t\t})\n\t\t\t\t\t.sortBy(function (teachers) {\n\t\t\t\t\t\tif (teachers.length) {\n\t\t\t\t\t\t\t// make sure we don't have any null staff items here\n\t\t\t\t\t\t\tvar headTeachers = _.head(teachers);\n\t\t\t\t\t\t\tif (headTeachers && headTeachers.staff && headTeachers.staff.lastName && headTeachers.staff.firstName) {\n\t\t\t\t\t\t\t\treturn [headTeachers.staff.lastName, headTeachers.staff.firstName].join('_');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.value();\n\n\t\t\t\tvm.primaries = course.primaries;\n\n\t\t\t\tcourseDataManagerService.canUpdatePrimary().then(function (result) {\n\t\t\t\t\tvm.canUpdatePrimary = result;\n\t\t\t\t});\n\n\t\t\t\tlog(vm.staffGroups);\n\n\t\t\t\tif (vm.course.selectedMarkingPeriod) {\n\t\t\t\t\tacademicYearRepository.getByAcademicYearId(vm.course.selectedMarkingPeriod.academicYearID).then(function (academicYear) {\n\t\t\t\t\t\t// setup min and max dates\n\t\t\t\t\t\tvm.selectedAcademicYear = academicYear;\n\t\t\t\t\t\tvm.selectedAcademicYear.minDate = convertToMoment(academicYear.beginDate); // the min calendar date should be the begin date of the Academic AY that is selected\n\t\t\t\t\t\tvm.selectedAcademicYear.maxDate = convertToMoment(academicYear.endDate); // the max calendar date should be the begin date of the Academic AY that is selected\n\n\t\t\t\t\t\t// setup begin and end dates\n\t\t\t\t\t\tvm.beginAcademicYear = convertToMoment(academicYear.beginDate);\n\t\t\t\t\t\tendAcademicYear = convertToMoment(academicYear.endDate);\n\n\t\t\t\t\t\t_.forEach(vm.course.courseSubjects, function (subject) {\n\t\t\t\t\t\t\tif (subject.staff) {\n\t\t\t\t\t\t\t\t_.map(subject.staff, function (s) {\n\t\t\t\t\t\t\t\t\ts.currentStatus = vm.mostRecentStatus(s.statusHistory);\n\t\t\t\t\t\t\t\t\tsetupHistoryInfo(s);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tvm.loadingViewState.staffLoading = false;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvm.loadingViewState.staffLoading = false;\n\t\t\t\t}\n\n\t\t\t\t// initialize default sort\n\t\t\t\tvm.sortChanged(vm.sort);\n\t\t\t});\n\t\t}\n\n\t\tinit();\n\t}\n\n\tangular.module('nha.schedule').controller('CourseTeachersCtrl', CourseTeachersCtrl);\n\n\tCourseTeachersCtrl.$inject = [\n\t\t'$scope',\n\t\t'$state',\n\t\t'$uibModal',\n\t\t'appSettings',\n\t\t'courseDataManagerService',\n\t\t'staffHistoryService',\n\t\t'academicYearRepository',\n\t\t'errorSvc',\n\t\t'uiAlertService',\n\t\t'businessResponseService',\n\t];\n\n","\n\n angular.module('nha.schedule')\n .service('schoolScheduleRepository', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('SchoolSchedule', masterSchedulingRestangular);\n }\n ]);\n","\n\n function CourseAddTeachersCtrl($scope, $state, courseTeacherService, courseDataManagerService, academicYearRepository, schoolMarkingPeriodCombinedService) {\n\n var vm = this;\n\n vm.loadingViewState = { teachersLoading: true };\n vm.showDateRangeWarning = false;\n vm.selectedAcademicYear = { minDate: moment(), maxDate: moment() };\n vm.isOnsiteFacilitatorFlow = $state.params.flowType === 'onsite-facilitator';\n\n vm.nameSortCriteria = [ { criteria: 'LastName', displayName: 'Last Name' }, { criteria: 'FirstName', displayName: 'First Name' }];\n vm.sort = [ { criteria: 'LastName', descending: false }, { criteria: 'FirstName', descending: false }];\n\n\t\tvm.schoolYearEndDate = vm.selectedAcademicYear.maxDate;\n\n /** Private **/\n var requestPending;\n\n /** Integrations **/\n function loadTeachers() {\n vm.loadingViewState.teachersLoading = true;\n\n vm.students = [];\n\n requestPending = true;\n\n var parameters: any = { append: false };\n\n if (vm.sort) {\n parameters.sortOrder = vm.sort;\n }\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n var includeAllPostitionTypes = vm.isOnsiteFacilitatorFlow;\n\n courseTeacherService.getAvailableTeachers(parameters, vm.filters, includeAllPostitionTypes)\n .then(function (result) {\n vm.teachers = result;\n requestPending = false;\n\n // Check for any pre-selected teachers\n if (vm.course.selectedTeachers) {\n vm.selectedTeachers = vm.course.selectedTeachers;\n _.each(vm.course.selectedTeachers, function (t) {\n var tch = _.find(vm.teachers, { teacherStaffId: t.teacherStaffId });\n if (tch) {\n tch.selected = true;\n }\n });\n }\n\n vm.loadingViewState.teachersLoading = false;\n\n vm.noResults = result.length === 0;\n }, function(error) {\n vm.loadingViewState.teachersLoading = false;\n requestPending = false;\n });\n }\n\n vm.selectedTeachers = [];\n\n vm.isSelected = function (s) {\n return _.some(vm.selectedTeachers, { 'teacherStaffId': s.teacherStaffId });\n }\n\n vm.toggleSelected = function (s) {\n if (vm.selectedTeachers) {\n if (_.some(vm.selectedTeachers, { teacherStaffId: s.teacherStaffId })) {\n _.remove(vm.selectedTeachers, { teacherStaffId: s.teacherStaffId });\n } else {\n vm.selectedTeachers.push(s);\n }\n } else {\n vm.selectedTeachers = [s];\n }\n }\n\n function loadMoreTeachers() {\n if (requestPending || !courseTeacherService.moreExist)\n return;\n\n var parameters: any = {\n append: true\n };\n if (vm.sort) {\n parameters.sort = vm.sort;\n }\n\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n vm.loadingViewState.teacherPageLoading = true;\n requestPending = true;\n\n courseTeacherService.getAvailableTeachers(parameters, vm.filters).then(function (response) {\n if (vm.teachers) {\n vm.teachers = vm.teachers.concat(response);\n } else {\n vm.teachers = response;\n }\n\n vm.loadingViewState.teacherPageLoading = false;\n requestPending = false;\n\n }, function (error) {\n vm.loadingViewState.teacherPageLoading = false;\n requestPending = false;\n });\n }\n\n function convertToMoment(dateToConvert) {\n return dateToConvert instanceof moment ? dateToConvert : moment(_.trimStart(dateToConvert, \"'\\'\"));\n }\n\n\t\tfunction loadMarkingPeriodEndDAtes(schoolId, academicYearId) {\n\t\t\treturn schoolMarkingPeriodCombinedService.get(schoolId, academicYearId).then(function (markingPeriods) {\n\t\t\t\tif(markingPeriods){\n\t\t\t\t_.forEach(markingPeriods, function (mp) {\n\t\t\t\t\tif(_utils.inSpecifiedTimezone(mp.endDate) > vm.schoolYearEndDate){\n\t\t\t\t\t\tvm.schoolYearEndDate = _utils.inSpecifiedTimezone(mp.endDate);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t});\n\t\t}\n\n /** Public **/\n vm.setSelected = function () {\n vm.course.selectedTeachers = _.each(vm.selectedTeachers, function (tch) {\n tch.effectiveDate = vm.effectiveDate;\n });\n }\n\n vm.sortChanged = function (expression) {\n vm.sort = expression;\n loadTeachers();\n }\n\n vm.searchTextChanged = function (value) {\n //vm.searchText = value.replace('\\'', '\\'\\'');\n loadTeachers();\n }\n\n vm.cancel = function () {\n vm.course.courseSectionStaff = [];\n vm.course.selectedTeachers = [];\n vm.course.effectiveDate = null;\n $state.go('^');\n }\n\n vm.next = function () {\n if (!vm.effectiveDate) {\n swal(\"Effective date is required.\", 'Please enter an effective date', 'error');\n return;\n }\n if (vm.effectiveDate < vm.selectedAcademicYear.minDate || vm.effectiveDate > vm.schoolYearEndDate) {\n swal(\"Effective Date Error\", \"The selected effective date is not within the School's Academic Year. Please select an effective date between \" + vm.selectedAcademicYear.minDate.format('MM/DD/YYYY') + \" and \" + vm.schoolYearEndDate.format('MM/DD/YYYY') + \".\", \"error\");\n return;\n }\n else {\n vm.course.effectiveDate = vm.effectiveDate;\n vm.course.selectedTeachers = vm.selectedTeachers;\n $state.go(\"^.add-teachers-subjects\",{ flowType: $state.params.flowType});\n }\n }\n\n /** Exports **/\n vm.loadMoreTeachers = loadMoreTeachers;\n\n function init() {\n courseDataManagerService.ensureAppContext().then(function (course) {\n vm.course = course;\n $scope.course = course;\n\n var schoolID = vm.course.courseSectionGroup.schoolID || 372;\n var academicYearID = vm.course.courseSectionGroup.academicYearID;\n\n academicYearRepository.getByAcademicYearId(academicYearID).then(function (academicYear) {\n // setup min and max dates\n vm.selectedAcademicYear = academicYear;\n vm.selectedAcademicYear.minDate = convertToMoment(academicYear.beginDate); // the min calendar date should be the begin date of the Academic AY that is selected\n vm.selectedAcademicYear.maxDate = convertToMoment(academicYear.endDate); // the max calendar date should be the begin date of the Academic AY that is selected\n\n // show warning to user just so they know that the current date wouldn't fall into the start and end range of the course academic year\n vm.showDateRangeWarning = moment().isBefore(vm.selectedAcademicYear.minDate) || moment().isAfter(vm.selectedAcademicYear.maxDate);\n\n // we have to default this to something when in the scenario of\n if (vm.showDateRangeWarning) {\n var defaultMinDateToSet = vm.selectedAcademicYear.minDate.clone();\n vm.effectiveDate = defaultMinDateToSet;\n }\n\n // Mocking Our selected filters structure to not require a new service.\n vm.filters = {\n AcademicYear: {\n items: [{ id: academicYearID, selected: true }]\n },\n School: {\n items: [{ id: schoolID, selected: true }]\n }\n }\n loadTeachers();\n\t\t\t\t\tloadMarkingPeriodEndDAtes(schoolID, academicYearID);\n });\n\n if (vm.course.effectiveDate) {\n vm.effectiveDate = vm.course.effectiveDate;\n }\n\n });\n\n }\n\n init();\n\n }\n\n angular.module('nha.schedule').controller('CourseAddTeachersCtrl', CourseAddTeachersCtrl);\n\n CourseAddTeachersCtrl.$inject = ['$scope', '$state', 'courseTeacherService', 'courseDataManagerService', 'academicYearRepository', 'schoolMarkingPeriodCombinedService'];\n\n\n","\n\n angular.module('nha.schedule')\n .service('courseSectionGroupService', ['baseService', 'MasterSchedulingRestangular',\n function (baseService, masterSchedulingRestangular) {\n\n var service = {\n get: getCourseSectionGroup,\n getTransferAlternatives: getTransferAlternatives,\n\t\t\t\t\tgetAlternativesWithSameContentAreaForGradeLevel: getAlternativesWithSameContentAreaForGradeLevel,\n\t\t\t\t\tgetAlternativesWithSameBaseSubjectForGradeLevel: getAlternativesWithSameBaseSubjectForGradeLevel,\n post: saveCourseSectionGroup,\n };\n\n function getCourseSectionGroup(id) {\n if (!id)\n return false;\n\n return baseService.getSingle('CourseSectionGroup', id, true, true, masterSchedulingRestangular);\n }\n\n\t\t\t\tfunction getTransferAlternatives(courseSectionGroup) {\n\t\t\t\t\tvar academicYearID = courseSectionGroup.academicYearID;\n\t\t\t\t\tvar schoolID = courseSectionGroup.schoolID;\n\t\t\t\t\tvar gradeLevelID = courseSectionGroup.gradeLevelID;\n\t\t\t\t\tvar excludedID = courseSectionGroup.courseSectionGroupID;\n\n\t\t\t\t\tvar filter = 'AcademicYearID eq ' + academicYearID + ' and SchoolID eq ' + schoolID + ' and GradeLevelID eq ' + gradeLevelID + ' and CourseSectionGroupID ne ' + excludedID;\n\n var orderby = 'CourseSectionGroupName';\n\n var params: any = {\n $filter: filter,\n $orderby: orderby\n };\n\n return baseService.getList('CourseSectionGroup', params, true, true, masterSchedulingRestangular);\n }\n\n\t\t\t\tfunction getAlternativesWithSameContentAreaForGradeLevel(courseSectionGroupID: number, gradeLevelID: number) {\n\t\t\t\t\treturn baseService.getList('CourseSectionGroup/alternatives/content-area/' + courseSectionGroupID + '/' + gradeLevelID, null, true, true, masterSchedulingRestangular);\n\t\t\t\t}\n\n\t\t\t\tfunction getAlternativesWithSameBaseSubjectForGradeLevel(courseSectionGroupID: number, gradeLevelID: number) {\n\t\t\t\t\treturn baseService.getList('CourseSectionGroup/alternatives/base-subject/' + courseSectionGroupID + '/' + gradeLevelID, null, true, true, masterSchedulingRestangular);\n\t\t\t\t}\n\n function saveCourseSectionGroup() {\n //TODO: Create Save Endpoint\n }\n\n return service;\n\n\n }\n ]);\n","\n\n function TransferCoursesCtrl($state, transferStudentsContextManagerService, schoolMarkingPeriodService, termService, courseSectionGroupService, courseSectionService, errorService, courseDataManagerService, schoolGradeLevelService) {\n\n var vm = this;\n\t\tvm.selectedGradeLevelID = null;\n\n var activeStudentRosterStatuses = [23, 46]; //CourseSectionRosterMasterStatus.Active, CourseSectionRosterMasterStatus.TransferredIn\n\n /** Private **/\n function populateCourseSectionTransfers() {\n\n var courseSections = vm.courseSections;\n if (vm.transfer.toCourseSectionGroupId) {\n courseSections = _.filter(courseSections, { 'courseSectionGroupID': vm.transfer.toCourseSectionGroupId });\n }\n\n\t\t\t_.forEach(vm.transfer.courseSections, function (transferCourseSection) {\n\n transferCourseSection.toCourseSectionGroupId = vm.transfer.toCourseSectionGroupId;\n\n var filteredCourseSections = _.filter(_.reject(courseSections, { 'courseSectionID': transferCourseSection.courseSectionId }), { 'baseSubjectID': transferCourseSection.baseSubjectID });\n\n if (!filteredCourseSections.length) {\n\n filteredCourseSections.push({ courseSectionID: -1, courseSectionSystemGeneratedName: 'No course found' });\n transferCourseSection.transferToCourseList = filteredCourseSections;\n transferCourseSection.selectedItem = filteredCourseSections[0];\n\n } else {\n\n transferCourseSection.transferToCourseList = _.sortBy(filteredCourseSections, 'courseSectionSystemGeneratedName');\n transferCourseSection.transferToCourseList.unshift({ courseSectionID: -2, courseSectionSystemGeneratedName: 'Do not transfer' });\n if (transferCourseSection.transferToCourseList.length === 2) {\n transferCourseSection.selectedItem = transferCourseSection.transferToCourseList[1];\n }\n\n }\n\n });\n\n }\n\n\t\tfunction loadGradeLevels() {\n\t\t\tvar academicYearId = vm.transfer.fromCourseSectionGroup.academicYearID;\n var schoolId = vm.transfer.fromCourseSectionGroup.schoolID;\n\n\t\t\treturn schoolGradeLevelService.get(schoolId, academicYearId).then(function(gradeLevels) {\n\t\t\t\tvm.gradeLevels = gradeLevels;\n\t\t\t});\n\t\t}\n\n function loadMarkingPeriods() {\n var academicYearId = vm.transfer.fromCourseSectionGroup.academicYearID;\n var schoolId = vm.transfer.fromCourseSectionGroup.schoolID;\n\n return schoolMarkingPeriodService.get(schoolId, academicYearId).then(function (schoolMarkingPeriods) {\n vm.schoolMarkingPeriods = schoolMarkingPeriods;\n });\n }\n\n function loadTransferCourseSectionGroups(fromCourseSectionGroup) {\n\t\t\treturn courseSectionGroupService.getTransferAlternatives(fromCourseSectionGroup).then(function(response) {\n vm.courseSectionGroups = response;\n }, function(error) {\n errorService.getUnhandledError(error, 'An error occurred loading the list of alternative course section groups');\n });\n\n }\n\n function loadTransferCourseSections() {\n\t\t\tconst academicYearID = vm.transfer.fromCourseSectionGroup.academicYearID;\n\t\t\tconst schoolID = vm.transfer.fromCourseSectionGroup.schoolID;\n\n\n\t\t\treturn courseSectionService.getCourseSections(schoolID, academicYearID, vm.selectedGradeLevelID).then(function (response) {\n\t\t\t\tvm.courseSections = response;\n\t\t\t\tpopulateCourseSectionTransfers();\n\t\t\t}, function(error) {\n\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading the list of alternative course sections');\n\t\t\t});\n }\n\n function updateStudentCourses(student) {\n _.forEach(student.studentCourseTransfers, function(studentCourseTransfer) {\n var transferCourseSection = _.head(_.filter(vm.transfer.courseSections, { courseSectionId: studentCourseTransfer.courseSectionId }));\n if (transferCourseSection) {\n if (transferCourseSection.selectedItem) {\n var filteredStatuses = _.filter(activeStudentRosterStatuses, function(activeStatus) {\n return activeStatus === studentCourseTransfer.courseStudentCurrentMasterStatusID;\n });\n\n if (filteredStatuses.length > 0) {\n studentCourseTransfer.toCourseSectionGroupId = transferCourseSection.selectedItem.courseSectionGroupID;\n studentCourseTransfer.toCourseSectionId = transferCourseSection.selectedItem.courseSectionID;\n studentCourseTransfer.toCourseSectionSystemGeneratedName = transferCourseSection.selectedItem.courseSectionSystemGeneratedName;\n studentCourseTransfer.toCourseSubjectDisplayName = transferCourseSection.selectedItem.courseSubjectDisplayName;\n } else {\n studentCourseTransfer.toCourseSectionGroupId = transferCourseSection.selectedItem.courseSectionGroupID;\n studentCourseTransfer.toCourseSectionId = -1;\n studentCourseTransfer.toCourseSectionSystemGeneratedName = \"Cannot transfer student\";\n studentCourseTransfer.toCourseSubjectDisplayName = \"current status is \" + studentCourseTransfer.courseStudentMasterStatusText;\n }\n }\n\n }\n\n });\n\n }\n\n function updateStudents() {\n _.forEach(vm.transfer.selectedStudents, function(student) {\n student.effectiveDate = vm.transfer.effectiveDate;\n updateStudentCourses(student);\n });\n }\n\n function showAlternateCourseSectionGroupsList() {\n return _.includes([3, 4], courseDataManagerService.getEffectiveMasterScheduleTypeID());\n }\n\n\t\tfunction init() {\n\t\t\terrorService.dismissAllErrors();\n\t\t\tvm.transfer = transferStudentsContextManagerService.getTransfer();\n\n\t\t\t/** get the default grade level */\n\t\t\tvm.selectedGradeLevelID = vm.transfer.fromCourseSectionGroup.gradeLevelID;\n\n\t\t\t/** load required data */\n\t\t\tloadGradeLevels();\n\t\t\tloadMarkingPeriods();\n\t\t\tloadTransferCourseSections();\n\t\t\tif (showAlternateCourseSectionGroupsList()) {\n loadTransferCourseSectionGroups(vm.transfer.fromCourseSectionGroup);\n }\n\n\t\t\tlog('vm.transfer', vm.transfer);\n\t\t}\n\n /** Public **/\n function termDisplay(s) {\n return termService.termDisplay(s, vm.schoolMarkingPeriods);\n }\n\n\t\tfunction gradeLevelChanged() {\n\t\t\tloadTransferCourseSections();\n\t\t\tif (vm.transfer.fromCourseSectionGroup) {\n\t\t\t\tloadTransferCourseSectionGroups(vm.transfer.fromCourseSectionGroup);\n\t\t\t}\n\t\t}\n\n function courseSectionGroupChanged() {\n populateCourseSectionTransfers();\n }\n\n function doCancel() {\n transferStudentsContextManagerService.resetTransfer();\n $state.go('^');\n }\n\n function doNext() {\n updateStudents();\n $state.go('^.transfer-confirmation');\n }\n\n /** Exports **/\n vm.termDisplay = termDisplay;\n\t\tvm.gradeLevelChanged = gradeLevelChanged;\n vm.courseSectionGroupChanged = courseSectionGroupChanged;\n vm.doCancel = doCancel;\n vm.doNext = doNext;\n vm.showAlternateCourseSectionGroupsList = showAlternateCourseSectionGroupsList;\n\n init();\n }\n\n angular.module('nha.schedule').controller('TransferCoursesCtrl', TransferCoursesCtrl);\n\n TransferCoursesCtrl.$inject = ['$state', 'transferStudentsContextManagerService', 'schoolMarkingPeriodService', 'termService', 'courseSectionGroupService', 'courseSectionService', 'errorSvc', 'courseDataManagerService', 'schoolGradeLevelService'];\n\n\n","\n\n angular.module(\"nha.schedule\")\n .service(\"courseSectionService\", [\"baseService\", 'appSettings', \"MasterSchedulingRestangular\",\n function (baseService, appSettings, masterSchedulingRestangular) {\n\n var service = {\n appSettings: appSettings,\n getCourseSections: getCourseSections,\n deleteCourseSection: deleteCourseSection\n };\n\n return service;\n\n function getCourseSections(schoolId, academicYearId, gradeLevelId, subjectLevel1ID = null) {\n\t\t\t\t\tlet filter = 'CourseSectionGroup/AcademicYearID eq ' + academicYearId + ' and CourseSectionGroup/SchoolID eq ' + schoolId;\n\t\t\t\t\tif (subjectLevel1ID) {\n\t\t\t\t\t\tfilter += ' and SubjectLevel1ID eq ' + subjectLevel1ID;\n\t\t\t\t\t}\n\n if (gradeLevelId) {\n filter += ' and CourseSectionGroup/GradeLevelID eq ' + gradeLevelId;\n }\n\n\t\t\t\t\tconst params: any = {\n\t\t\t\t\t\t$filter: filter\n\t\t\t\t\t};\n\n\t\t\t\t\treturn baseService.getList(\"CourseSections\", params, false, true, masterSchedulingRestangular);\n }\n\n function deleteCourseSection(courseSectionGroupId) {\n\n return masterSchedulingRestangular.one('courseSections', courseSectionGroupId).remove();\n }\n }\n ]);\n","\n\n angular.module('nha.schedule')\n .service('subjectTypeRepository', ['repositoryFactory', 'CurriculumRestangular',\n function (repositoryFactory, curriculumRestangular) {\n return new repositoryFactory('SubjectType', curriculumRestangular);\n }\n ]);\n","(function (w) {\n\t/** check for the myNHA global */\n\tif (w['myNHA'] !== undefined) {\n\t\tvar myNHA = w['myNHA'];\n\t\tvar service = myNHA.ApiServiceFactory('masterSchedulingServicesV2RootUrl', 'OnsiteFacilitatorAccess');\n\n\t\tservice.reconcileAccessForCourseSectionGroup = function (courseSectionGroupID) {\n\t\t\treturn service.put(`?courseSectionGroupID=${courseSectionGroupID}`);\n\t\t};\n\n\t\tmyNHA.RegisterApiService('MasterScheduling', 'OnsiteFacilitatorAccessService', service);\n\t}\n})(window);\n","\n\n angular.module('nha.schedule').config(['$stateProvider', function config($stateProvider) {\n $stateProvider\n .state('main', {\n url: '/main',\n templateUrl: 'app/main/main.html',\n controller: 'MainCtrl',\n ncyBreadcrumb: {\n skip: true\n }\n });\n }]);\n\n","\n\n\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('403', {\n url: '/403',\n templateUrl: appSettings.coreWebRootUrl + 'app/templates/403.html',\n ncyBreadcrumb: {\n label: 'No Access',\n parent: 'main'\n },\n title: 'No Access'\n });\n }]);\n\n","\n\n angular.module('nha.schedule')\n .service('courseService', ['baseService', 'appSettings', 'MasterSchedulingRestangular',\n function (baseService, appSettings, masterSchedulingRestangular) {\n\n var service: any = {\n appSettings: appSettings,\n pageSize: 50,\n moreExist: true,\n loadedCount: 0,\n get: get,\n getCourses: getCourses,\n getCourseDetails: getCourseDetails,\n\t\t\t\t\tgetCourseCounts: getCourseCounts,\n\t\t\t\t\tgetOverallPrimariesforCourse: getOverallPrimariesforCourse,\n\t\t\t\t\tsetOverallPrimary: setOverallPrimary,\n save: save,\n termDisplay: termDisplay,\n deleteCourse: deleteCourse,\n copy: copy\n };\n\n service.textSearchFields = ['CourseName'];\n\n return service;\n\n function get(id) {\n var parms = { id: id };\n return baseService.getList('Courses', parms, false, true, masterSchedulingRestangular);\n }\n\n function getCourses(parameters, selectedFilters) {\n if (!parameters.append) {\n service.loadedCount = 0;\n service.moreExist = true;\n }\n\n var params: any = {};\n\n setFilters(params, selectedFilters);\n params.$top = service.pageSize;\n params.$skip = service.loadedCount;\n\n _utils.setOrderByParameters(params, parameters.sort);\n\n _utils.setSearchFilter(params, parameters.searchText, service.textSearchFields);\n\n return baseService.getList('Courses', params, false, true, masterSchedulingRestangular).then(function (response) {\n service.loadedCount += response.length;\n if (response.length < service.pageSize) {\n service.moreExist = false;\n }\n return response;\n });\n }\n\n function getCourseDetails(schoolId, academicYearId, subjectId, gradeLevelId, displayName, filters) {\n var parameters: any = {\n schoolId: schoolId,\n academicYearId: academicYearId,\n subjectId: subjectId,\n gradeLevelId: gradeLevelId,\n displayName: displayName\n }\n\n //Apply Detail level filters\n if (filters.MarkingPeriod) {\n var selectedIds = _.map(_.filter(filters.MarkingPeriod.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.markingPeriodIds = selectedIds;\n } else {\n parameters.markingPeriodIds = [];\n }\n } else {\n parameters.markingPeriodIds = [];\n }\n\n if (filters.SchoolGradeLevelSection) {\n var selectedIds = _.map(_.filter(filters.SchoolGradeLevelSection.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.sectionGroupIds = selectedIds;\n } else {\n parameters.sectionGroupIds = [];\n }\n } else {\n parameters.sectionGroupIds = [];\n }\n\n // Course Types\n if (filters.CourseType) {\n var selectedIds = _.map(_.filter(filters.CourseType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.courseTypeIds = selectedIds;\n } else {\n parameters.courseTypeIds = [];\n }\n } else {\n parameters.courseTypeIds = [];\n }\n\n // Subject Types\n if (filters.SubjectType) {\n var selectedIds = _.map(_.filter(filters.SubjectType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.subjectTypeIds = selectedIds;\n } else {\n parameters.subjectTypeIds = [];\n }\n } else {\n parameters.subjectTypeIds = [];\n }\n\n if (filters.Homeroom) {\n var selectedIds = _.map(_.filter(filters.Homeroom.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.staffIds = selectedIds;\n } else {\n parameters.staffIds = [];\n }\n } else {\n parameters.staffIds = [];\n }\n\n if (filters.Assigned) {\n var selectedIds = _.map(_.filter(filters.Assigned.items, 'selected'), 'id');\n if (selectedIds) {\n\n // map those to the enums\n // &assignedFilterIds=NoActiveTeachers&assignedFilterIds=NoActiveStudents\n var selectedEnumValues = [];\n if (_.includes(selectedIds, 1)) {\n selectedEnumValues.push('NoActiveTeachers');\n }\n\n if (_.includes(selectedIds, 2)) {\n selectedEnumValues.push('NoActiveStudents');\n }\n\n parameters.assignedFilterIds = selectedEnumValues;\n\n } else {\n parameters.assignedFilterIds = [];\n }\n } else {\n parameters.assignedFilterIds = [];\n }\n\n return baseService.getList('CourseSummaryDetails', parameters, false, true, masterSchedulingRestangular);\n }\n\n\t\t\t\tfunction getOverallPrimariesforCourse(csgID) {\n\t\t\t\t\tif (!csgID)\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\treturn baseService.getList('courseDesignatedTeachers/' + csgID, true, true, masterSchedulingRestangular);\n\t\t\t\t}\n\n\t\t\t\tfunction setOverallPrimary(csgID, staffID, newStatus) {\n\t\t\t\t\tif (!csgID) return false;\n\t\t\t\t\tif (!staffID) return false;\n\n\t\t\t\t\tif (newStatus)\n\t\t\t\t\t\treturn masterSchedulingRestangular.all('courseDesignatedTeachers/' + csgID + '/add/' + staffID).post()\n\t\t\t\t\telse\n\t\t\t\t\t\treturn masterSchedulingRestangular.all('applicationforschool/addStatuses/' + csgID + '/remove/' + staffID).post()\n\t\t\t\t}\n\n function termDisplay(s, schoolMarkingPeriods) {\n\n if (s && s.markingPeriods) {\n\n // unique list of marking periods\n var markingPeriods = _.map(schoolMarkingPeriods, 'markingPeriod');\n\n if (markingPeriods) {\n // get list of school marking periods that match our row\n var courseSchoolMarkingPeriods = _.filter(schoolMarkingPeriods, function (smp) {\n return _.includes(s.markingPeriods, smp.schoolMarkingPeriodID);\n });\n\n if (courseSchoolMarkingPeriods) {\n var markingPeriodGroup = _.head(courseSchoolMarkingPeriods);\n if (markingPeriodGroup && markingPeriodGroup.markingPeriod) {\n // get our MarkingPeriodGroupId off of any record, the first will do, since they should all be the same\n var markingPeriodGroupId = markingPeriodGroup.markingPeriod.markingPeriodGroupID;\n\n // count the number of records that we have MarkingPeriodGroup, that should be the total possible for that AY/School\n var count = _.filter(markingPeriods, { markingPeriodGroupID: markingPeriodGroupId }).length;\n\n // if the number of items in the two matches the number totally available, then that means we have all of them, so return 'Year'\n if (courseSchoolMarkingPeriods.length === count) {\n return 'Year';\n } else {\n return _.map(courseSchoolMarkingPeriods, 'markingPeriodShortName').join(', ');\n }\n }\n }\n }\n }\n }\n\n function save(course) {\n log('Attempting to save course: ', course);\n if (course && course.courseSectionGroup) {\n if (course.courseSectionGroup.courseSectionGroupID > 0) {\n return baseService.put('Courses', course, course.courseSectionGroup.courseSectionGroupID, true, masterSchedulingRestangular);\n } else {\n return masterSchedulingRestangular.all('Courses').post(course);\n }\n } else {\n log('No valid course or course.courseSectionGroup was specified');\n return baseService.q.reject({ 'operationResult': { 'passed': false } });\n }\n }\n\n function copy(academicYearId: number, schoolID: number, courseID: number, partBSubjectLevel1ID: number) {\n log('Attempting to copy course: ', courseID);\n\n if (courseID > 0) {\n console.log(courseID);\n return masterSchedulingRestangular.all(`courses/copy/${academicYearId}/${schoolID}/${courseID}/${partBSubjectLevel1ID}`).post();\n } else {\n log('No valid courseID provided');\n return baseService.q.reject({ 'operationResult': { 'passed': false } });\n }\n }\n\n function getCourseCounts(parameters, selectedFilters) {\n var params: any = {};\n\n setFilters(params, selectedFilters);\n\n if (parameters.searchText) {\n params.searchText = parameters.searchText;\n } else {\n params.searchText = \"\";\n }\n\n return baseService.getList('coursesFilterCounts', params, false, true, masterSchedulingRestangular);\n }\n\n function setFilters(parameters, filters) {\n if (filters) {\n if (filters.AcademicYear) {\n var selectedYear = _.head(_.filter(filters.AcademicYear.items, 'selected'));\n if (selectedYear) {\n parameters.academicYearId = selectedYear.id;\n }\n }\n\n if (filters.School) {\n var selectedSchool = _.head(_.filter(filters.School.items, 'selected'));\n if (selectedSchool) {\n parameters.schoolId = selectedSchool.id;\n }\n }\n\n if (filters.GradeLevel) {\n var selectedIds = _.map(_.filter(filters.GradeLevel.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.gradeLevelIds = selectedIds;\n } else {\n parameters.gradeLevelIds = [];\n }\n } else {\n parameters.gradeLevelIds = [];\n }\n\n\n if (filters.MarkingPeriod) {\n var selectedIds = _.map(_.filter(filters.MarkingPeriod.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.markingPeriodIds = selectedIds;\n } else {\n parameters.markingPeriodIds = [];\n }\n } else {\n parameters.markingPeriodIds = [];\n }\n\n if (filters.SchoolGradeLevelSection) {\n var selectedIds = _.map(_.filter(filters.SchoolGradeLevelSection.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.sectionGroupIds = selectedIds;\n } else {\n parameters.sectionGroupIds = [];\n }\n } else {\n parameters.sectionGroupIds = [];\n }\n\n if (filters.SubjectType) {\n var selectedIds = _.map(_.filter(filters.SubjectType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.subjectTypeIds = selectedIds;\n } else {\n parameters.subjectTypeIds = [];\n }\n } else {\n parameters.subjectTypeIds = [];\n }\n\n if (filters.CourseType) {\n var selectedIds = _.map(_.filter(filters.CourseType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.courseTypeIds = selectedIds;\n } else {\n parameters.courseTypeIds = [];\n }\n } else {\n parameters.courseTypeIds = [];\n }\n\n if (filters.Assigned) {\n var selectedIds = _.map(_.filter(filters.Assigned.items, 'selected'), 'id');\n if (selectedIds) {\n\n // map those to the enums\n // &assignedFilterIds=NoActiveTeachers&assignedFilterIds=NoActiveStudents\n var selectedEnumValues = [];\n if (_.includes(selectedIds, 1)) {\n selectedEnumValues.push('NoActiveTeachers');\n }\n\n if (_.includes(selectedIds, 2)) {\n selectedEnumValues.push('NoActiveStudents');\n }\n\n parameters.assignedFilterIds = selectedEnumValues;\n\n } else {\n parameters.assignedFilterIds = [];\n }\n } else {\n parameters.assignedFilterIds = [];\n }\n\n if (filters.Homeroom) {\n var selectedIds = _.map(_.filter(filters.Homeroom.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.staffIds = selectedIds;\n } else {\n parameters.staffIds = [];\n }\n } else {\n parameters.staffIds = [];\n }\n\n log('parameters', parameters);\n\n }\n }\n\n function deleteCourse(courseId) {\n return masterSchedulingRestangular.one('courses', courseId).remove();\n }\n }\n ]);\n","\n angular\n .module(\"nha.schedule\")\n .service('transferStudentsContextService', transferStudentsContextService);\n\n transferStudentsContextService.$inject = ['baseService'];\n\n function transferStudentsContextService(baseService) {\n\n // This service acts as a us model. This shouldn't be for http calls\n\n var model = {\n transfer: null\n };\n\n return model;\n\n }\n\n","\n\n angular.module('nha.schedule')\n .service('staffHistoryService', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('CourseSectionStaffStatusHistory', masterSchedulingRestangular);\n }\n ]);\n","\n\n angular.module('nha.schedule')\n .service('schoolGradeLevelSectionService', ['baseService', 'CoreRestangular',\n function (baseService, coreRestangular) {\n \n var service = {\n getForSchool: getForSchool\n };\n\n return service;\n\n function getForSchool(schoolID, academicYearID) {\n\t var oDataFilter = {\n\t SchoolID: schoolID,\n AcademicYearID: academicYearID\n\t };\n\t var params: any = _utils.getODataRequest({ 'filter': oDataFilter });\n\n\t return baseService.getList('SchoolGradeLevelSection', params, true, true, coreRestangular);\n }\n }\n ]);\n","\n\n angular.module('nha.schedule')\n .service(\"courseTeacherDetailService\", [\"filteredRepositoryFactory\", 'baseService', 'MasterSchedulingRestangular',\n function (filteredRepositoryFactory, baseService, masterSchedulingRestangular) {\n\n var repo = new filteredRepositoryFactory('TeacherCourse', masterSchedulingRestangular);\n\n /*** private service methods ***/\n repo.setFilters = function (parameters, filters) {\n\n if (filters) {\n if (filters.AcademicYear) {\n var selectedYear = _.head(_.filter(filters.AcademicYear.items, 'selected'));\n if (selectedYear) {\n parameters.academicYearId = selectedYear.id;\n }\n }\n\n if (filters.School) {\n var selectedSchool = _.head(_.filter(filters.School.items, 'selected'));\n if (selectedSchool) {\n parameters.schoolId = selectedSchool.id;\n }\n }\n\n if (filters.GradeLevel) {\n var selectedIds = _.map(_.filter(filters.GradeLevel.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.gradeLevelIds = selectedIds;\n } else {\n parameters.gradeLevelIds = [];\n }\n } else {\n parameters.gradeLevelIds = [];\n }\n\n\n if (filters.MarkingPeriod) {\n var selectedIds = _.map(_.filter(filters.MarkingPeriod.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.markingPeriodIds = selectedIds;\n } else {\n parameters.markingPeriodIds = [];\n }\n } else {\n parameters.markingPeriodIds = [];\n }\n\n if (filters.SchoolGradeLevelSection) {\n var selectedIds = _.map(_.filter(filters.SchoolGradeLevelSection.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.sectionGroupIds = selectedIds;\n } else {\n parameters.sectionGroupIds = [];\n }\n } else {\n parameters.sectionGroupIds = [];\n }\n\n if (filters.SubjectType) {\n var selectedIds = _.map(_.filter(filters.SubjectType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.subjectTypeIds = selectedIds;\n } else {\n parameters.subjectTypeIds = [];\n }\n } else {\n parameters.subjectTypeIds = [];\n }\n }\n }\n\n // /*** public service methods ***/\n repo.getAll = function (parameters, filters) {\n\n if (!parameters.append) {\n repo.loadedCount = 0;\n repo.moreExist = true;\n }\n\n var apiParameters: any = {\n academicYearId: parameters.academicYearId,\n schoolId: parameters.schoolId,\n staffId: parameters.staffId,\n $top: repo.pageSize,\n $skip: repo.loadedCount\n };\n\n //setSortOrder(apiParameters, parameters.sortOrder);\n _utils.setOrderByParameters(apiParameters, parameters.sortOrder);\n repo.setFilters(apiParameters, filters);\n\n return baseService.getList(\"TeacherCourseDetail\", apiParameters, true, true, masterSchedulingRestangular).then(function (response) {\n\n repo.loadedCount += response.length;\n if (response.length < repo.pageSize) {\n repo.moreExist = false;\n }\n return response;\n\n });\n }\n\n return repo;\n }\n ]);\n","\n\n\tangular.module('nha.schedule').config(config);\n\n\tconfig.$inject = ['$stateProvider', 'appSettings'];\n\n\tfunction config($stateProvider, appSettings) {\n\t\t$stateProvider\n\t\t\t.state('course.teachers.remove-teachers', {\n\t\t\t\turl: '/remove',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/remove-teachers/remove-teachers.html',\n\t\t\t\t\t\tcontroller: 'CourseRemoveTeachersCtrl as CourseRemoveTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Remove Staff Members',\n\t\t\t\t\tparent: 'course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Remove Staff Members',\n\t\t\t})\n\t\t\t.state('new-course.teachers.remove-teachers', {\n\t\t\t\turl: '/remove',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/remove-teachers/remove-teachers.html',\n\t\t\t\t\t\tcontroller: 'CourseRemoveTeachersCtrl as CourseRemoveTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Remove Staff Members',\n\t\t\t\t\tparent: 'new-course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Remove Staff Members',\n\t\t\t})\n\t\t\t.state('course.teachers.remove-teachers-from', {\n\t\t\t\turl: '/remove/subjects',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/remove-teachers/remove-from-subjects.html',\n\t\t\t\t\t\tcontroller: 'CourseRemoveTeachersCtrl as CourseRemoveTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Remove Staff Members',\n\t\t\t\t\tparent: 'course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Remove Staff Members',\n\t\t\t})\n\t\t\t.state('new-course.teachers.remove-teachers-from', {\n\t\t\t\turl: '/remove/subjects',\n\t\t\t\tviews: {\n\t\t\t\t\t'@': {\n\t\t\t\t\t\ttemplateUrl: 'app/course/teachers/remove-teachers/remove-from-subjects.html',\n\t\t\t\t\t\tcontroller: 'CourseRemoveTeachersCtrl as CourseRemoveTeachersVM',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tncyBreadcrumb: {\n\t\t\t\t\tlabel: 'Remove Staff Members',\n\t\t\t\t\tparent: 'new-course',\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t\ttitle: 'Remove Staff Members',\n\t\t\t});\n\t}\n\n","\n\n angular.module('nha.schedule')\n .service('courseSummaryRepository', ['baseService', 'MasterSchedulingRestangular',\n function (baseService, masterSchedulingRestangular) {\n\n var service: any = {\n get: get,\n pageSize: 50,\n moreExist: true,\n loadedCount: 0,\n getCounts: getCounts\n };\n\n service.textSearchFields = ['CourseName'];\n\n return service;\n\n function get(parameters, selectedFilters) {\n\n if (!parameters.append) {\n service.loadedCount = 0;\n service.moreExist = true;\n }\n\n var params: any = {};\n\n if (selectedFilters) {\n setFilters(params, selectedFilters);\n }\n\n if (parameters.courseSectionGroupId) {\n\t\t\t\t\t\tparams.courseSectionGroupId = parameters.courseSectionGroupId\n }\n\n if (parameters.searchText) {\n params.searchText = parameters.searchText;\n }\n\n params.$top = service.pageSize;\n params.$skip = service.loadedCount;\n\n _utils.setOrderByParameters(params, parameters.sort);\n\n\n return baseService.getList('CourseSummaries', params, false, true, masterSchedulingRestangular).then(function (response) {\n service.loadedCount += response.length;\n if (response.length < service.pageSize) {\n service.moreExist = false;\n }\n return response;\n });\n\n }\n\n\n function getCounts(parameters, selectedFilters) {\n\n var params: any = {}\n\n if (selectedFilters) {\n setFilters(params, selectedFilters);\n }\n\n if (parameters.searchText) {\n params.searchText = parameters.searchText;\n }\n\n return baseService.getList('CourseSummaryFilterCounts', params, false, true, masterSchedulingRestangular);\n }\n\n function setFilters(parameters, filters) {\n if (filters) {\n if (filters.AcademicYear) {\n var selectedYear = _.head(_.filter(filters.AcademicYear.items, 'selected'));\n if (selectedYear) {\n parameters.academicYearId = selectedYear.id;\n }\n }\n\n if (filters.School) {\n var selectedSchool = _.head(_.filter(filters.School.items, 'selected'));\n if (selectedSchool) {\n parameters.schoolId = selectedSchool.id;\n }\n }\n\n if (filters.GradeLevel) {\n var selectedIds = _.map(_.filter(filters.GradeLevel.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.gradeLevelIds = selectedIds;\n } else {\n parameters.gradeLevelIds = [];\n }\n } else {\n parameters.gradeLevelIds = [];\n }\n\n\n if (filters.MarkingPeriod) {\n var selectedIds = _.map(_.filter(filters.MarkingPeriod.items, 'selected'), 'id');\n\n if (selectedIds) {\n parameters.markingPeriodIds = selectedIds;\n } else {\n parameters.markingPeriodIds = [];\n }\n } else {\n parameters.markingPeriodIds = [];\n }\n\n if (filters.SchoolGradeLevelSection) {\n var selectedIds = _.map(_.filter(filters.SchoolGradeLevelSection.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.sectionGroupIds = selectedIds;\n } else {\n parameters.sectionGroupIds = [];\n }\n } else {\n parameters.sectionGroupIds = [];\n }\n\n if (filters.SubjectType) {\n var selectedIds = _.map(_.filter(filters.SubjectType.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.subjectTypeIds = selectedIds;\n } else {\n parameters.subjectTypeIds = [];\n }\n } else {\n parameters.subjectTypeIds = [];\n }\n\n if (filters.Staff) {\n var selectedIds = _.map(_.filter(filters.Staff.items, 'selected'), 'id');\n if (selectedIds) {\n parameters.staffIds = selectedIds;\n } else {\n parameters.staffIds = [];\n }\n } else {\n parameters.staffIds = [];\n }\n\n if (filters.Assigned) {\n var selectedIds = _.map(_.filter(filters.Assigned.items, 'selected'), 'id');\n if (selectedIds) {\n\n // map those to the enums\n // &assignedFilterIds=NoActiveTeachers&assignedFilterIds=NoActiveStudents\n var selectedEnumValues = [];\n if (_.includes(selectedIds, 1)) {\n selectedEnumValues.push('NoActiveTeachers');\n }\n\n if (_.includes(selectedIds, 2)) {\n selectedEnumValues.push('NoActiveStudents');\n }\n\n parameters.assignedFilterIds = selectedEnumValues;\n\n } else {\n parameters.assignedFilterIds = [];\n }\n } else {\n parameters.assignedFilterIds = [];\n }\n\n }\n }\n\n }\n ]);\n\n\n","function StudentCoursesCtrl(\n\t$scope,\n\t$q,\n\t$state,\n\t$stateParams,\n\t$uibModal,\n\tappSettings,\n\terrorService,\n\tschoolMarkingPeriodCombinedService,\n\tstudentCoursesService,\n\ttransferContextService,\n\trosterHistoryService,\n\taddCoursesContextService,\n\tuiAlertService,\n\tmatchmedia,\n\twhereStudentInSchoolIsCurrentlyRepository,\n\tgradeLevelRepository,\n\tuserContextService,\n\tapiSecurityService\n) {\n\tvar vm = this;\n\n\tvm.viewState = {};\n\tvm.onMarkingPeriodChange = onMarkingPeriodChange;\n\tvm.showActiveCoursesOnly = false;\n\tvm.defaultSortOrder = [{ criteria: 'Name', descending: false }];\n\t// determine if we are on phone (small width viewport)\n\tmatchmedia.onPhone(function (mediaQueryList) {\n\t\tvm.isPhone = matchmedia.isPhone();\n\t});\n\n\t/** Private **/\n\tfunction loadMarkingPeriods(schoolId, academicYearId) {\n\t\treturn schoolMarkingPeriodCombinedService.get(schoolId, academicYearId);\n\t}\n\n\tfunction onMarkingPeriodChange(mp) {\n\t\tif (mp) {\n\t\t\tvm.selectedMarkingPeriod = mp;\n\t\t}\n\t\tloadStudentCourses();\n\t}\n\n\tfunction loadStudentCourses() {\n\t\tvm.studentCourses = [];\n\t\tvm.activeStudentCourses = [];\n\t\tvm.inactiveStudentCourses = [];\n\t\tvm.viewState.pageLoading = true;\n\n\t\tstudentCoursesService\n\t\t\t.getForStudent(vm.student.studentInSchoolID, vm.selectedMarkingPeriod.academicYearID, vm.selectedMarkingPeriod.markingPeriodID)\n\t\t\t.then(function (courses) {\n\t\t\t\tvm.viewState.pageLoading = false;\n\n\t\t\t\t// remove any dupes\n\t\t\t\tcourses = _.uniqBy(courses, 'courseSectionRosterID');\n\n\t\t\t\t// setup history data for each course\n\t\t\t\t_.forEach(courses, function (c) {\n\t\t\t\t\tsetupHistoryInfo(c);\n\n\t\t\t\t\tvar courseGradeLevelGroup = vm.schoolGradeLevelScheduleGroups.find((group) =>\n\t\t\t\t\t\tgroup.gradeLevelIDs.includes(c.courseSectionGroup.gradeLevelID)\n\t\t\t\t\t);\n\t\t\t\t\tif (courseGradeLevelGroup) {\n\t\t\t\t\t\tc.gradeLevelName = courseGradeLevelGroup.schoolGradeLevelScheduleGroupShortName;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvm.activeStudentCourses = _.filter(courses, function (course) {\n\t\t\t\t\tvar activeStatus = _.find(course.statusHistory, function (statusHistory) {\n\t\t\t\t\t\treturn statusHistory.isCurrent;\n\t\t\t\t\t});\n\n\t\t\t\t\treturn activeStatus?.masterStatus.isActive;\n\t\t\t\t});\n\n\t\t\t\tvm.inactiveStudentCourses = _.filter(courses, function (course) {\n\t\t\t\t\tvar activeStatus = _.find(course.statusHistory, function (statusHistory) {\n\t\t\t\t\t\treturn statusHistory.isCurrent;\n\t\t\t\t\t});\n\n\t\t\t\t\treturn !activeStatus?.masterStatus.isActive;\n\t\t\t\t});\n\n\t\t\t\tvm.studentCourses = vm.showActiveCoursesOnly ? vm.activeStudentCourses : vm.activeStudentCourses.concat(vm.inactiveStudentCourses);\n\t\t\t\tvm.updateCourseSortOrder(vm.defaultSortOrder);\n\n\t\t\t\tvm.setAllowTransfers();\n\t\t\t});\n\t}\n\n\tfunction loadGradeLevels() {\n\t\tvm.gradeLevels = [];\n\t\treturn gradeLevelRepository.getByStudentInSchool(vm.student.studentInSchoolID).then(function (gradeLevels) {\n\t\t\tconst gradeLevelsSorted = gradeLevels.sort((a, b) => a.displayOrder - b.displayOrder);\n\t\t\tvm.gradeLevels = gradeLevelsSorted;\n\t\t});\n\t}\n\n\tfunction convertToMoment(dateToConvert) {\n\t\treturn dateToConvert instanceof moment ? dateToConvert : moment(_.trimStart(dateToConvert, \"''\"));\n\t}\n\n\tfunction setupHistoryInfo(course) {\n\t\tif (course.statusHistory) {\n\t\t\tfor (var i = 0; i < course.statusHistory.length; i++) {\n\t\t\t\tcourse.statusHistory[i].originalDate = convertToMoment(course.statusHistory[i].date);\n\t\t\t\tcourse.statusHistory[i].editMode = false;\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tcourse.statusHistory[i].expanded = false;\n\t\t\t\t\tcourse.statusHistory[i].maxDate = convertToMoment(vm.selectedYear.lastMarkingDate);\n\t\t\t\t} else {\n\t\t\t\t\tcourse.statusHistory[i].maxDate = convertToMoment(course.statusHistory[i - 1].date);\n\t\t\t\t}\n\t\t\t\tif (i === course.statusHistory.length - 1) {\n\t\t\t\t\tcourse.statusHistory[i].minDate = convertToMoment(vm.selectedYear.beginDate);\n\t\t\t\t} else {\n\t\t\t\t\tcourse.statusHistory[i].minDate = convertToMoment(course.statusHistory[i + 1].date);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvm.resetEditRow = function (statusHistory) {\n\t\tstatusHistory.editMode = false;\n\t\tstatusHistory.date = statusHistory.originalDate;\n\t};\n\n\tvm.setStatusDate = function (course, statusHistory) {\n\t\tvar statusChange = {\n\t\t\tId: statusHistory.courseSectionRosterID,\n\t\t\tHistoryId: statusHistory.courseSectionRosterStatusHistoryID,\n\t\t\tStartDate: _utils.stripTimeFromDate(statusHistory.date),\n\t\t\tEndDate: _utils.stripTimeFromDate(statusHistory.originalDate),\n\t\t\tMasterStatusId: statusHistory.masterStatusID,\n\t\t\tignoreWarnings: false,\n\t\t};\n\n\t\trosterHistoryService.put(statusChange).then(\n\t\t\tfunction () {\n\t\t\t\tuiAlertService.success('Status changes were saved successfully.', 'Save Successful');\n\t\t\t\tsetupHistoryInfo(course);\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\tif (error.status === 400) {\n\t\t\t\t\t//business rules failed, display popup listing violated rules.\n\t\t\t\t\tvar displayModal = {\n\t\t\t\t\t\tbusinessResponse: error.data,\n\t\t\t\t\t\ttitle: 'The course status date update process could not be completed',\n\t\t\t\t\t\tmessage: 'The course status date update could not be completed due the following business rules:',\n\t\t\t\t\t};\n\n\t\t\t\t\tvar modalInstance = $uibModal.open({\n\t\t\t\t\t\ttemplateUrl: appSettings.coreWebRootUrl + 'app/templates/business-response-modal.html',\n\t\t\t\t\t\tcontroller: 'BusinessResponseModalCtrl',\n\t\t\t\t\t\tresolve: {\n\t\t\t\t\t\t\tdisplayModal: function () {\n\t\t\t\t\t\t\t\treturn displayModal;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsize: 'sm',\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvm.hasError = true;\n\t\t\t\t\tlog('error', error);\n\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred while updating a course status date.');\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n\n\tvm.setAllowTransfers = function () {\n\t\tvar selectedCourses = _.filter(vm.studentCourses, { selected: true });\n\n\t\tif (vm.markingPeriods.length > 0 && selectedCourses.length > 0) {\n\t\t\tvar now = moment();\n\t\t\tvar today = moment({ year: now.year(), month: now.month(), day: now.date() });\n\n\t\t\tvar markingPeriods = _.filter(vm.markingPeriods, function (smp) {\n\t\t\t\treturn moment(smp.beginDate) <= today;\n\t\t\t});\n\t\t\tvm.allowTransfers = markingPeriods.length > 0;\n\t\t} else {\n\t\t\tvm.allowTransfers = false;\n\t\t}\n\t};\n\n\tfunction addCoursesPrompt(title, action, message, studentGradeLevelID, gradeLevels) {\n\t\treturn $uibModal.open({\n\t\t\twindowClass: 'nha-modal',\n\t\t\ttemplateUrl: appSettings.masterSchedulingWebRootUrl + 'app/modals/effective-date-modal/effective-date-modal.html',\n\t\t\tcontroller: 'EffectiveDateModalCtrl as EffectiveDateVM',\n\t\t\tsize: 'sm',\n\t\t\tresolve: {\n\t\t\t\ttitle: function () {\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\taction: function () {\n\t\t\t\t\treturn action;\n\t\t\t\t},\n\t\t\t\tmessage: function () {\n\t\t\t\t\treturn message;\n\t\t\t\t},\n\t\t\t\tstudentGradeLevelID: function () {\n\t\t\t\t\treturn studentGradeLevelID;\n\t\t\t\t},\n\t\t\t\tgradeLevels: function () {\n\t\t\t\t\treturn gradeLevels;\n\t\t\t\t},\n\t\t\t\tlistItems: function () {\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tfunction removeCoursePrompt(title, action, message, listItems) {\n\t\treturn $uibModal.open({\n\t\t\twindowClass: 'nha-modal',\n\t\t\ttemplateUrl: appSettings.masterSchedulingWebRootUrl + 'app/modals/effective-date-modal/effective-date-modal.html',\n\t\t\tcontroller: 'EffectiveDateModalCtrl as EffectiveDateVM',\n\t\t\tsize: 'sm',\n\t\t\tresolve: {\n\t\t\t\ttitle: function () {\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\taction: function () {\n\t\t\t\t\treturn action;\n\t\t\t\t},\n\t\t\t\tmessage: function () {\n\t\t\t\t\treturn message;\n\t\t\t\t},\n\t\t\t\tlistItems: function () {\n\t\t\t\t\treturn listItems;\n\t\t\t\t},\n\t\t\t\tstudentGradeLevelID: function () {\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t\tgradeLevels: function () {\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\t/** Public **/\n\tvm.notImplemented = function () {\n\t\tswal('Not Implemented', 'Not Implemented Yet');\n\t};\n\n\tvm.print = function () {\n\t\twindow.print();\n\t};\n\n\tvm.add = function () {\n\t\taddCoursesContextService.context = {};\n\t\taddCoursesContextService.context.student = vm.student;\n\t\taddCoursesContextService.context.courses = [];\n\t\taddCoursesContextService.context.effectiveDate = null;\n\t\taddCoursesContextService.context.schoolMarkingPeriodId = vm.selectedMarkingPeriod.schoolMarkingPeriodID;\n\t\taddCoursesContextService.context.gradeLevels = vm.gradeLevels;\n\n\t\tvar HighSchoolGradeLevels: number[] = [405, 406, 407, 410];\n\t\tvm.gradeLevels.forEach(function (gradeLevel) {\n\t\t\tif (_.includes(HighSchoolGradeLevels, gradeLevel.gradeLevelID)) {\n\t\t\t\tvm.gradeLevels = vm.gradeLevels.filter(function (gradeLevel2) {\n\t\t\t\t\treturn gradeLevel2.gradeLevelID !== gradeLevel.gradeLevelID;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (gradeLevel.gradeLevelID === 404) {\n\t\t\t\tgradeLevel.description = 'High School';\n\t\t\t}\n\t\t});\n\n\t\tif (HighSchoolGradeLevels.includes(addCoursesContextService.context.student.gradeLevelID)) {\n\t\t\taddCoursesContextService.context.student.gradeLevelID = 404;\n\t\t}\n\n\t\tvar message = 'Enter the date on which the student will be added to the new courses.';\n\t\tvar modal = addCoursesPrompt('Add Courses', 'Add', message, vm.student.gradeLevelID, vm.gradeLevels);\n\n\t\tmodal.result.then(\n\t\t\tfunction (formValues) {\n\t\t\t\taddCoursesContextService.context.effectiveDate = formValues.effectiveDate;\n\t\t\t\taddCoursesContextService.context.gradeLevelID = formValues.gradeLevelID;\n\t\t\t\t$state.go('student.courses.add');\n\t\t\t},\n\t\t\tfunction () {}\n\t\t);\n\t};\n\n\tvm.transfer = function (student) {\n\t\tlog('student to transfer', student);\n\t\ttransferContextService.transfer = {};\n\t\ttransferContextService.transfer.courseTransfers = [];\n\t\ttransferContextService.transfer.effectiveDate = null;\n\t\ttransferContextService.transfer.student = student;\n\t\ttransferContextService.transfer.studentCourses = [];\n\n\t\ttransferContextService.transfer.studentCourses = _.filter(vm.studentCourses, function (c) {\n\t\t\treturn c.selected && (_.head(c.statusHistory).masterStatusID === 23 || _.head(c.statusHistory).masterStatusID == 46);\n\t\t});\n\n\t\tvar courseSectionGroupIds = _.uniq(_.map(transferContextService.transfer.studentCourses, 'courseSectionGroupID'));\n\n\t\tif (courseSectionGroupIds.length === 1) {\n\t\t\ttransferContextService.transfer.fromCourseSectionGroup = transferContextService.transfer.studentCourses[0].courseSectionGroup;\n\t\t}\n\n\t\t$state.go('student.courses.transfer-courses');\n\t};\n\n\tfunction mapRemovals(coursesToRemove, effectiveDate, masterStatusId, ignoreWarnings) {\n\t\treturn _.map(coursesToRemove, function (c) {\n\t\t\treturn { Id: c.courseSectionRosterID, StartDate: effectiveDate.toDate(), MasterStatusId: masterStatusId, IgnoreWarnings: ignoreWarnings };\n\t\t});\n\t}\n\n\tfunction processRemovals(statusChanges) {\n\t\trosterHistoryService.post(statusChanges).then(\n\t\t\tfunction () {\n\t\t\t\tloadStudentCourses();\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\tif (error.status === 400) {\n\t\t\t\t\t//business rules failed, display popup listing violated rules.\n\t\t\t\t\tvar displayModal = {\n\t\t\t\t\t\tbusinessResponse: error.data,\n\t\t\t\t\t\ttitle: 'The student course removal could not be completed',\n\t\t\t\t\t\tmessage: 'The student course removal could not be completed due the following business rules',\n\t\t\t\t\t\twarningMessage: 'The following data will be deleted if you proceed:',\n\t\t\t\t\t\tcheckboxLabel: 'I understand that the above data will be deleted for the student',\n\t\t\t\t\t\tcheckboxWarning: true,\n\t\t\t\t\t\tconfirmButtonText: 'Yes - Delete the Data',\n\t\t\t\t\t};\n\n\t\t\t\t\tvar modalInstance = $uibModal.open({\n\t\t\t\t\t\ttemplateUrl: appSettings.coreWebRootUrl + 'app/templates/business-response-modal.html',\n\t\t\t\t\t\tcontroller: 'BusinessResponseModalCtrl',\n\t\t\t\t\t\tresolve: {\n\t\t\t\t\t\t\tdisplayModal: function () {\n\t\t\t\t\t\t\t\treturn displayModal;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsize: 'sm',\n\t\t\t\t\t});\n\n\t\t\t\t\tmodalInstance.result.then(function (results) {\n\t\t\t\t\t\tif (results.ignoreWarnings) {\n\t\t\t\t\t\t\tvm.remove(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tvm.hasError = true;\n\t\t\t\t\tlog('error', error);\n\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred while removing student from courses.');\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\tvm.remove = function (ignoreWarnings) {\n\t\tvar coursesToRemove = _.filter(vm.studentCourses, function (c) {\n\t\t\tvar currentStatus = _.head(c.statusHistory).masterStatus;\n\t\t\treturn c.selected && currentStatus.isActive;\n\t\t});\n\n\t\tvar removeMasterStatusId = 24; //matches CourseSectionRosterMasterStatus.Removed enum\n\n\t\tif (ignoreWarnings) {\n\t\t\tprocessRemovals(mapRemovals(coursesToRemove, vm.effectiveDate, removeMasterStatusId, ignoreWarnings));\n\t\t} else {\n\t\t\tvar message = 'Enter the date the student will be removed from the selected courses.';\n\t\t\tvar modal = removeCoursePrompt('Remove Courses', 'Remove', message, _.map(coursesToRemove, 'systemGeneratedName'));\n\t\t\tmodal.result.then(function (formValues) {\n\t\t\t\tvm.effectiveDate = formValues.effectiveDate;\n\t\t\t\tvar statusChanges = mapRemovals(coursesToRemove, vm.effectiveDate, removeMasterStatusId, ignoreWarnings);\n\t\t\t\tprocessRemovals(statusChanges);\n\t\t\t});\n\t\t}\n\t};\n\n\tvm.removeStatus = function (course) {\n\t\tswal(\n\t\t\t{\n\t\t\t\ttitle: 'Are you sure?',\n\t\t\t\ttext: 'This will remove this course status if it was added by accident. If you want to fully remove the student, please use the Remove button. Are you sure you want to delete this status?',\n\t\t\t\ttype: 'warning',\n\t\t\t\tshowCancelButton: true,\n\t\t\t\tconfirmButtonColor: '#DD6B55',\n\t\t\t\tconfirmButtonText: 'Yes, delete the status!',\n\t\t\t\tcloseOnConfirm: true,\n\t\t\t},\n\t\t\tfunction (isConfirmed) {\n\t\t\t\tif (isConfirmed) {\n\t\t\t\t\tvar courseSectionRosterStatusHistoryId = _.head(course.statusHistory).courseSectionRosterStatusHistoryID;\n\t\t\t\t\trosterHistoryService.remove(courseSectionRosterStatusHistoryId).then(\n\t\t\t\t\t\tfunction (result) {\n\t\t\t\t\t\t\tlog('result', result);\n\t\t\t\t\t\t\tif (result.operationResult.passed) {\n\t\t\t\t\t\t\t\tloadStudentCourses();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// did not pass\n\t\t\t\t\t\t\t\tswal('The course status remove failed!', 'Something went wrong, you can not remove this status now', 'warning');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\t\tif (error.status === 400) {\n\t\t\t\t\t\t\t\t//business rules failed, display popup listing violated rules.\n\t\t\t\t\t\t\t\tvar displayModal = {\n\t\t\t\t\t\t\t\t\tbusinessResponse: error.data,\n\t\t\t\t\t\t\t\t\ttitle: 'The student status delete process could not be completed',\n\t\t\t\t\t\t\t\t\tmessage: 'The student status deletion could not be completed due the following business rules:',\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tvar modalInstance = $uibModal.open({\n\t\t\t\t\t\t\t\t\ttemplateUrl: appSettings.coreWebRootUrl + 'app/templates/business-response-modal.html',\n\t\t\t\t\t\t\t\t\tcontroller: 'BusinessResponseModalCtrl',\n\t\t\t\t\t\t\t\t\tresolve: {\n\t\t\t\t\t\t\t\t\t\tdisplayModal: function () {\n\t\t\t\t\t\t\t\t\t\t\treturn displayModal;\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tsize: 'sm',\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvm.hasError = true;\n\t\t\t\t\t\t\t\tlog('error', error);\n\t\t\t\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred while deleting a student status.');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n\n\tvm.goToMasterSchedulingCourse = function (c) {\n\t\tif (apiSecurityService.hasSaviyntEntitlement('MasterScheduling:Feature|CourseManagement:View')) {\n\t\t\t_utils.openUrl(appSettings.masterSchedulingV2WebRootUrl + 'course-management/' + c.courseSectionGroupID, true);\n\t\t} else {\n\t\t\t_utils.openUrl(appSettings.masterSchedulingWebRootUrl + 'course/' + c.courseSectionGroupID, true);\n\t\t}\n\t};\n\n\tvm.notEligibleForCourses = function () {\n\t\tif (vm.student) {\n\t\t\treturn ![2, 6, 9].includes(vm.student.currentStudentInSchoolStatusId) && ![70, 71].includes(vm.student.currentStudentInSchoolSecondaryStatusId);\n\t\t}\n\t\treturn true;\n\t};\n\n\tvm.isOnsiteFacilitator = function () {\n\t\tif (userContextService.getUserContext().role.contains('Onsite Facilitator')) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvm.hasAccessToCourseEdit = function () {\n\t\tif (userContextService.getUserContext().role.contains('Registrar')) {\n\t\t\treturn true;\n\t\t}\n\t\tif (userContextService.getUserContext().role.contains('Principal')) {\n\t\t\treturn true;\n\t\t}\n\t\tif (userContextService.getUserContext().role.contains('Dean')) {\n\t\t\treturn true;\n\t\t}\n\t\tif (userContextService.getUserContext().role.contains('Office Administrator')) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\t// determine if this is the current course\n\tvm.isCurrentCourse = function (c) {\n\t\tif ($scope.currentLocation) {\n\t\t\treturn _.some($scope.currentLocation, { courseSectionGroupID: c.courseSectionGroupID });\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tvm.goToMasterScheduling = function () {\n\t\t_utils.openUrl(appSettings.masterSchedulingWebRootUrl, true);\n\t};\n\n\tvm.updateCourseSortOrder = function (expression) {\n\t\tvar criteria = _.first(expression).criteria;\n\t\tvar order = _.first(expression).descending ? 'desc' : 'asc';\n\n\t\tvm.studentCourses = _.orderBy(\n\t\t\tvm.studentCourses,\n\t\t\tfunction (course) {\n\t\t\t\tswitch (criteria) {\n\t\t\t\t\tcase 'Name':\n\t\t\t\t\t\treturn course.subjectName;\n\t\t\t\t\tcase 'Teacher':\n\t\t\t\t\t\tvar staff = _.first(course.staff).staff;\n\t\t\t\t\t\treturn staff.lastName + ', ' + staff.firstName;\n\t\t\t\t\tcase 'Grade':\n\t\t\t\t\t\treturn course.gradeLevelName + course.sectionGroupLetter;\n\t\t\t\t\tcase 'MeetingBlock':\n\t\t\t\t\t\treturn _.first(course.courseSummaryMeetingBlocks).meetingBlockName;\n\t\t\t\t\tcase 'Status':\n\t\t\t\t\t\treturn _.first(course.statusHistory).masterStatus.status;\n\t\t\t\t\tcase 'StatusDate':\n\t\t\t\t\t\treturn _.first(course.statusHistory).date;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[order]\n\t\t);\n\t};\n\n\tvm.toggleActiveCourses = function () {\n\t\tvm.showActiveCoursesOnly = !vm.showActiveCoursesOnly;\n\t\tvm.studentCourses = vm.showActiveCoursesOnly ? vm.activeStudentCourses : vm.activeStudentCourses.concat(vm.inactiveStudentCourses);\n\t\tvm.updateCourseSortOrder(vm.defaultSortOrder);\n\t};\n\n\tfunction loadSchoolGradeLevelScheduleGroups(academicYearId, schoolId) {\n\t\tvar courseSchedulingService = (window).myNHA.GetApiService('MasterScheduling', 'CourseSchedulingService');\n\t\treturn courseSchedulingService?.getGradeLevelGroups(academicYearId, schoolId);\n\t}\n\n\tfunction init() {\n\t\tvar academicYearId = vm.student.academicYearID;\n\t\tvar schoolId = vm.student.schoolID;\n\t\tvm.viewState.loadingOptions = true;\n\n\t\tloadGradeLevels();\n\n\t\t$q.all([loadMarkingPeriods(schoolId, academicYearId), loadSchoolGradeLevelScheduleGroups(academicYearId, schoolId)])\n\t\t\t.then(\n\t\t\t\t_.spread(function (markingPeriods, schoolGradeLevelScheduleGroups) {\n\t\t\t\t\tvm.markingPeriods = _.filter(markingPeriods, 'isDisplayedInFilters');\n\n\t\t\t\t\tvar currentMarkingPeriod = _.find(vm.markingPeriods, function (mp) {\n\t\t\t\t\t\treturn moment().isAfter(moment(mp.beginDate)) && moment().isBefore(moment(mp.endDate));\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!currentMarkingPeriod) {\n\t\t\t\t\t\tvar maxEndDate = _.max(_.map(vm.markingPeriods, 'endDate'));\n\t\t\t\t\t\tif (moment().isAfter(convertToMoment(maxEndDate))) {\n\t\t\t\t\t\t\tcurrentMarkingPeriod = _.last(vm.markingPeriods);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentMarkingPeriod = _.head(vm.markingPeriods);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvm.selectedMarkingPeriod = currentMarkingPeriod;\n\t\t\t\t\tvm.setAllowTransfers();\n\t\t\t\t\tvm.viewState.loadingOptions = false;\n\n\t\t\t\t\tloadStudentCourses();\n\n\t\t\t\t\tvm.schoolGradeLevelScheduleGroups = schoolGradeLevelScheduleGroups;\n\t\t\t\t}),\n\t\t\t\tfunction (error) {\n\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading option data.');\n\t\t\t\t\tvm.viewState.loadingOptions = false;\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then(function () {\n\t\t\t\t// get where the student currently is\n\t\t\t\twhereStudentInSchoolIsCurrentlyRepository.getAll({ id: vm.student.studentInSchoolID }).then(function (data) {\n\t\t\t\t\t$scope.currentLocation = data;\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\t$scope.$on('selectedYear', function (event, data) {\n\t\tvm.selectedYear = data.selectedYear;\n\t\tlog('vm.selectedYear', vm.selectedYear);\n\t\tif (vm.student) {\n\t\t\tinit(); // init only if I'm loaded second\n\t\t}\n\t});\n\n\t$scope.$on('studentLoad', function (event, data) {\n\t\tvm.student = data.student;\n\t\tvm.viewState.pageLoading = true;\n\n\t\tif (vm.selectedYear) {\n\t\t\tinit(); // init only if I'm loaded second\n\t\t}\n\t});\n\n\t/** Exports **/\n}\n\nangular.module('nha.schedule').controller('StudentCoursesCtrl', StudentCoursesCtrl);\n\nStudentCoursesCtrl.$inject = [\n\t'$scope',\n\t'$q',\n\t'$state',\n\t'$stateParams',\n\t'$uibModal',\n\t'appSettings',\n\t'errorSvc',\n\t'schoolMarkingPeriodCombinedService',\n\t'studentCoursesService',\n\t'transferContextService',\n\t'rosterHistoryService',\n\t'addCoursesContextService',\n\t'uiAlertService',\n\t'matchmedia',\n\t'whereStudentInSchoolIsCurrentlyRepository',\n\t'gradeLevelRepository',\n\t'userContextService',\n\t'apiSecurityService',\n];\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('teachers', {\n url: '/teachers',\n templateUrl: 'app/teachers/teachers.html',\n controller: 'TeachersCtrl as teachersVM',\n ncyBreadcrumb: {\n label: 'Teachers',\n parent: 'main',\n },\n title: 'Teachers',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses'\n }\n }\n });\n }]);\n\n","angular.module('nha.schedule').controller('MainCtrl', [\r\n\t'$scope',\r\n\t'$state',\r\n\t'userContextService',\r\n\t'appSettings',\r\n\t'courseDataManagerService',\r\n\tfunction MainCtrl($scope, $state, userContextService, appSettings, courseDataManagerService) {\r\n\t\t$scope.userContextService = userContextService;\r\n\t\t//$scope.claimTypes = claimTypes;\r\n\r\n\t\t$scope.goToStaffQueue = function () {\r\n\t\t\tlocation.href = appSettings.staffManagementWebRootUrl + 'staff-queue';\r\n\t\t};\r\n\r\n\t\t$scope.toToQuestionaire = function () {\r\n\t\t\tlocation.href = appSettings.questionnaireWebRootUrl;\r\n\t\t};\r\n\r\n\t\t$scope.goToNewCourse = function () {\r\n\t\t\tcourseDataManagerService.resetCourse().then(function () {\r\n\t\t\t\tcourseDataManagerService.setCourseCancelState($state.current);\r\n\t\t\t\t$state.go('new-course.overview');\r\n\t\t\t});\r\n\t\t};\r\n\t},\r\n]);\r\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.roster.roster-transfer', {\n url: '/transfer/students',\n views: {\n '@': {\n templateUrl: 'app/course/roster/transfer/transfer-students.html',\n controller: 'TransferStudentsCtrl as TransferStudentsVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Transfer Students',\n skip: true\n },\n title: 'Transfer Students',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('StudentTransfers', 'MasterScheduling');\n }]\n },\n data: {\n security: {\n requiredResource: 'StudentTransfers',\n api: 'MasterScheduling'\n }\n }\n })\n ;\n }]);\n\n\n","\n\n angular.module('nha.schedule').controller('CourseOverviewMeetingBlocksController', CourseOverviewMeetingBlocksController);\n\n CourseOverviewMeetingBlocksController.$inject = ['$uibModalInstance', 'errorSvc', '$uibModal', 'appSettings', '$q', '$state', '$timeout', 'masterScheduleTypeID', 'meetingBlockOptions', 'selectedMeetingBlockItems', 'course'];\n\n function CourseOverviewMeetingBlocksController($uibModalInstance, errorService, $uibModal, appSettings, $q, $state, $timeout, masterScheduleTypeID, meetingBlockOptions, selectedMeetingBlockItems, course) {\n\n var vm = this;\n vm.viewStatus = { viewLoading: true, isDirty: false };\n\n // imported data from main page\n vm.masterScheduleTypeID = masterScheduleTypeID;\n vm.meetingBlockOptions = meetingBlockOptions;\n vm.selectedMeetingBlockItems = selectedMeetingBlockItems;\n\n vm.periodMeetingBlockOptionDays = [\n { displayName: 'Mon', matchKey: 'M' },\n { displayName: 'Tues', matchKey: 'T' },\n { displayName: 'Wed', matchKey: 'W' },\n { displayName: 'Thurs', matchKey: 'Th' },\n { displayName: 'Fri', matchKey: 'F', isLast: true }\n ];\n\n function closeModal() {\n // reset our selected list\n vm.selectedMeetingBlockItems = [];\n\n _.forEach(vm.meetingBlockOptions, function (mbo) {\n delete mbo.selected;\n });\n\n $uibModalInstance.dismiss('cancel');\n }\n\n vm.cancel = function () {\n\n if (vm.viewStatus.isDirty) {\n swal({\n 'title': 'Are you sure you want to cancel?',\n 'text': 'You have made changes to the meeting blocks',\n 'type': 'warning',\n 'showCancelButton': true,\n 'confirmButtonText': 'Yes, cancel'\n }, function (isConfirm) {\n /** check the isConfirm flag */\n if (isConfirm) {\n closeModal();\n }\n });\n }\n else {\n closeModal();\n }\n }\n\n vm.meetingBlockOptionClicked = function (mbt) {\n\n vm.viewStatus.isDirty = true;\n\n mbt.selected = (mbt.selected ? false : true);\n\n if (!mbt.selected) {\n _.forEach(mbt.children, function (c) {\n c.selected = false;\n });\n }\n }\n\n vm.meetingBlockOptionChildClicked = function (child) {\n vm.viewStatus.isDirty = true;\n child.selected = (child.selected ? false : true);\n }\n\n vm.periodDailyMeetingBlockOptionClicked = function (option) {\n\n vm.viewStatus.isDirty = true;\n option.selected = (option.selected ? false : true);\n }\n\n vm.meetingBlockCheckAllOptionClicked = function (child) {\n vm.viewStatus.isDirty = true;\n var isAllCheckboxChecked = (child.allCheckboxSelected ? false : true);\n if (child.children) {\n _.forEach(child.children, function (c) {\n c.selected = isAllCheckboxChecked;\n });\n }\n }\n\n vm.periodEverydayClicked = function () {\n\n vm.viewStatus.isDirty = true;\n\n var toggle = !vm.isPeriodEverydayChecked();\n\n // select all the days\n _.forEach(vm.periodMeetingBlockOptionDays, function (periodMeetingBlockOptionDay) {\n periodMeetingBlockOptionDay.selected = toggle;\n });\n }\n\n vm.isPeriodEverydayChecked = function () {\n return _.every(vm.periodMeetingBlockOptionDays, 'selected');\n }\n\n vm.isAllCheckboxChecked = function (mbt) {\n\n var totalChildrenCount = mbt.children.length;\n var selectedChildren = _.filter(mbt.children, 'selected');\n var selectedChildrenCount = selectedChildren.length;\n\n var isChecked = false;\n if (!mbt.children) {\n isChecked = true;\n }\n else if (mbt.children.length === 1 && selectedChildrenCount === 1) {\n isChecked = true;\n }\n else {\n isChecked = (totalChildrenCount === selectedChildrenCount);\n }\n\n mbt.allCheckboxSelected = isChecked;\n\n return isChecked;\n }\n\n vm.isBlockOptionCheckboxChecked = function (mbt, child) {\n var isChecked = false;\n if (child.selected) {\n isChecked = true;\n }\n\n return isChecked;\n }\n\n\t\tvm.isRecaptureRow = (mbt) => {\n\t\t\treturn mbt.children.some(child => child.meetingBlockCategoryID === 4)\n\t\t}\n\n function validate(formattedSelectedMeetingBlockTimes) {\n var isValid = true;\n\n if (_.isEmpty(formattedSelectedMeetingBlockTimes)) {\n swal('Select at least one meeting block', 'A course requires at least one meeting block selected.', 'error');\n isValid = false;\n }\n else {\n\n var validations = [];\n _.forEach(vm.meetingBlockOptions, function (item) {\n if (item.selected && item.children && !_.some(item.children, 'selected')) {\n validations.push(item.name + ' needs at least one meeting block selected');\n }\n });\n\n var selectedMeetingBlockOptions = _.filter(vm.meetingBlockOptions, 'selected');\n\n const selectedCategories = _.reduce(selectedMeetingBlockOptions, (agg, meetingBlockOption) => {\n if (agg.hasInstructionalTimeSelected === false) {\n agg.hasInstructionalTimeSelected = meetingBlockOption.children.some(child => child.meetingBlockCategoryID === 1 /** Instructional Time */)\n }\n\n if (agg.hasOtherInstructionalTimeSelected === false) {\n agg.hasOtherInstructionalTimeSelected = meetingBlockOption.children.some(child => child.meetingBlockCategoryID === 4 /** Other Instructional Time */)\n }\n\n return agg;\n }, { hasInstructionalTimeSelected: false, hasOtherInstructionalTimeSelected: false });\n\n if (selectedCategories.hasInstructionalTimeSelected && selectedCategories.hasOtherInstructionalTimeSelected) {\n validations.push(\"Recapture cannot be combined with any other period. Please adjust the periods.\");\n }\n\n if (!_.isEmpty(validations)) {\n\n swal({\n title: 'Error',\n text: validations.join('
'),\n type: \"error\",\n html: true\n });\n\n isValid = false;\n }\n }\n\n return isValid;\n }\n\n function formatMeetingBlockTimesInSaveFormat() {\n\n var formattedSelectedMeetingBlockTimes = [];\n\n _.forEach(_.filter(vm.meetingBlockOptions, 'selected'), function (option) {\n\n var courseSectionGroupMeetingBlockTimeID = -1;\n\n // if only one, ensure its checked\n if (option.allCheckboxSelected && option.children.length === 1) {\n var firstChild = _.first(option.children);\n if (firstChild) {\n firstChild.selected = true;\n }\n }\n\n // does this match an existing, one?\n if (option.meetingBlockTimeID) {\n if (course.courseSectionGroupMeetingBlockTimes) {\n var match = _.find(course.courseSectionGroupMeetingBlockTimes, { meetingBlockTimeID: option.meetingBlockTimeID });\n if (match) {\n courseSectionGroupMeetingBlockTimeID = match.courseSectionGroupMeetingBlockTimeID;\n }\n }\n\n formattedSelectedMeetingBlockTimes.push({\n courseSectionGroupID: course.courseSectionGroup.courseSectionGroupID,\n meetingBlockTimeID: option.meetingBlockTimeID,\n id: option.meetingBlockTimeID,\n courseSectionGroupMeetingBlockTimeID: courseSectionGroupMeetingBlockTimeID,\n });\n }\n\n if (vm.masterScheduleTypeID === 1) { // period based have a diff format of times\n\n _.forEach(_.filter(vm.periodMeetingBlockOptionDays, 'selected'), function (periodMeetingBlockOptionDay) {\n\n _.forEach(option.children, function (child) {\n\n // if the day of the week name matches, then add that child\n if (periodMeetingBlockOptionDay.matchKey === child.displayName) {\n\n child.selected = true;\n\n var meetingBlockTimeID = child.meetingBlockTimeID;\n var courseSectionGroupMeetingBlockTimeID = -1;\n\n // does this match an existing, one?\n if (course.courseSectionGroupMeetingBlockTimes) {\n var match = _.find(course.courseSectionGroupMeetingBlockTimes, { meetingBlockTimeID: child.meetingBlockTimeID });\n if (match) {\n courseSectionGroupMeetingBlockTimeID = match.courseSectionGroupMeetingBlockTimeID;\n }\n }\n\n formattedSelectedMeetingBlockTimes.push({\n courseSectionGroupID: course.courseSectionGroup.courseSectionGroupID,\n meetingBlockTimeID: meetingBlockTimeID,\n id: child.meetingBlockTimeID,\n courseSectionGroupMeetingBlockTimeID: courseSectionGroupMeetingBlockTimeID,\n });\n }\n });\n });\n }\n else {\n\n _.forEach(_.filter(option.children, 'selected'), function (child) {\n\n var courseSectionGroupMeetingBlockTimeID = -1;\n\n // does this match an existing, one?\n if (course.courseSectionGroupMeetingBlockTimes) {\n var match = _.find(course.courseSectionGroupMeetingBlockTimes, { meetingBlockTimeID: child.meetingBlockTimeID });\n if (match) {\n courseSectionGroupMeetingBlockTimeID = match.courseSectionGroupMeetingBlockTimeID;\n }\n }\n\n formattedSelectedMeetingBlockTimes.push({\n courseSectionGroupID: course.courseSectionGroup.courseSectionGroupID,\n meetingBlockTimeID: child.meetingBlockTimeID,\n id: child.meetingBlockTimeID,\n courseSectionGroupMeetingBlockTimeID: courseSectionGroupMeetingBlockTimeID,\n });\n });\n }\n });\n\n //log('formattedSelectedMeetingBlockTimes', formattedSelectedMeetingBlockTimes);\n\n return formattedSelectedMeetingBlockTimes;\n }\n\n vm.done = function () {\n\n // populate our data structure with the result in the proper format\n var formattedSelectedMeetingBlockTimes = formatMeetingBlockTimesInSaveFormat();\n\n if (validate(formattedSelectedMeetingBlockTimes)) {\n $uibModalInstance.close(formattedSelectedMeetingBlockTimes);\n }\n }\n\n function setSelectedInMeetingBlockOptions() {\n _.forEach(vm.meetingBlockOptions, function (mbo) {\n if (mbo.children) {\n _.forEach(mbo.children, function (child) {\n child.displayName = _.trim(_.replace(_.replace(child.name, mbo.name, ''), '-', '')); // remove the main part to just leave the end, such as 1st Period MW, becomes just MW\n })\n }\n });\n\n if (vm.masterScheduleTypeID === 1) { // period based have a diff format of times\n\n // select the blocks that should be selected\n _.forEach(vm.selectedMeetingBlockItems, function (selectedMeetingBlockItem) {\n\n var match = _.find(vm.meetingBlockOptions, function (child) {\n return _.some(child.children, { meetingBlockTimeID: selectedMeetingBlockItem.id });\n });\n\n if (match) {\n match.selected = true;\n }\n\n // children selected or not\n _.forEach(vm.meetingBlockOptions, function (mbo) {\n if (mbo.children) {\n _.forEach(mbo.children, function (child) {\n if (selectedMeetingBlockItem.meetingBlockTimeID === child.meetingBlockTimeID) {\n\n child.selected = true;\n\n // if at least one of these are selected, then they all are since the system doesn't allow otherwise.\n var periodMeetingBlockOptionDay = _.find(vm.periodMeetingBlockOptionDays, function (_periodMeetingBlockOptionDay) {\n return _.startsWith(_periodMeetingBlockOptionDay.displayName, child.displayName);\n });\n\n if (periodMeetingBlockOptionDay) {\n periodMeetingBlockOptionDay.selected = true;\n }\n }\n });\n }\n });\n });\n\n }\n else {\n // select the blocks that should be selected\n _.forEach(vm.selectedMeetingBlockItems, function (selectedMeetingBlockItem) {\n\n var match = _.find(vm.meetingBlockOptions, function (child) {\n return _.some(child.children, { meetingBlockTimeID: selectedMeetingBlockItem.id });\n });\n\n if (match) {\n match.selected = true;\n }\n\n // children selected or not\n _.forEach(vm.meetingBlockOptions, function (mbo) {\n if (mbo.children) {\n _.forEach(mbo.children, function (child) {\n if (selectedMeetingBlockItem.meetingBlockTimeID === child.meetingBlockTimeID) {\n child.selected = true;\n }\n });\n }\n });\n });\n }\n }\n\n function init() {\n setSelectedInMeetingBlockOptions();\n\n vm.viewStatus.viewLoading = false;\n }\n\n init();\n }\n\n\n","function StudentCoursesAddCoursesCtrl($state, $uibModal, studentCoursesService, addCoursesContextService, errorService, appSettings, businessResponseService) {\n\tvar vm = this;\n\tvm.viewState = {};\n\tvm.filteredCourses = [];\n\tvm.sort = [\n\t\t{ criteria: 'courseSubjectDisplayName', descending: false },\n\t\t{ criteria: 'primaryTeachers', descending: false },\n\t\t{ criteria: 'meetingBlocks', descending: false },\n\t\t{ criteria: 'markingPeriods', descending: false },\n\t];\n\n\t/** Private **/\n\tfunction loadAvailableStudentCourses(academicYearID: number, schoolID: number, studentInSchoolId: number, gradeLevelIds: number[]) {\n\t\tvm.viewState.pageLoading = true;\n\t\tstudentCoursesService.getAvailable(schoolID, academicYearID, studentInSchoolId, gradeLevelIds).then(\n\t\t\tfunction (courses) {\n\t\t\t\tvm.viewState.pageLoading = false;\n\t\t\t\tvm.courses = courses;\n\t\t\t\tvm.filteredCourses = courses;\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading the available courses for the student.');\n\t\t\t\tvm.viewState.pageLoading = false;\n\t\t\t}\n\t\t);\n\t}\n\n\t/** Public **/\n\n\tfunction init() {\n\t\tvm.courses = addCoursesContextService.context.courses;\n\t\tvm.student = addCoursesContextService.context.student;\n\t\tvm.effectiveDate = addCoursesContextService.context.effectiveDate;\n\t\tvm.schoolMarkingPeriodId = addCoursesContextService.context.schoolMarkingPeriodId;\n\t\tvm.gradeLevels = addCoursesContextService.context.gradeLevels;\n\t\tvm.gradeLevelID = addCoursesContextService.context.gradeLevelID;\n\t\tvm.hasError = false;\n\t\tvm.adding = false;\n\n\t\tvar HighSchoolGradeLevels: number[] = [405, 406, 407, 410];\n\t\tvm.gradeLevels.forEach(function (gradeLevel) {\n\t\t\tif (_.includes(HighSchoolGradeLevels, gradeLevel.gradeLevelID)) {\n\t\t\t\tvm.gradeLevels = vm.gradeLevels.filter(function (gradeLevel2) {\n\t\t\t\t\treturn gradeLevel2.gradeLevelID !== gradeLevel.gradeLevelID;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (gradeLevel.gradeLevelID === 404) {\n\t\t\t\tgradeLevel.description = 'High School';\n\t\t\t}\n\t\t});\n\n\t\tvar gradeLevelIDs: number[];\n\t\tif (HighSchoolGradeLevels.includes(vm.gradeLevelID) || vm.gradeLevelID === 404) {\n\t\t\tgradeLevelIDs = [404, 405, 406, 407, 410];\n\t\t} else {\n\t\t\tgradeLevelIDs = [vm.gradeLevelID];\n\t\t}\n\n\t\tloadAvailableStudentCourses(vm.student.academicYearID, vm.student.schoolID, vm.student.studentInSchoolID, gradeLevelIDs);\n\t}\n\n\tfunction selectGradeChange() {\n\t\tvar gradeLevelIDs: number[] = [vm.gradeLevelID];\n\n\t\tloadAvailableStudentCourses(vm.student.academicYearID, vm.student.schoolID, vm.student.studentInSchoolID, gradeLevelIDs);\n\t}\n\n\tfunction doCancel() {\n\t\taddCoursesContextService.context = null;\n\t\t$state.go('student.courses.overview', {}, { reload: true });\n\t}\n\n\tfunction doAdd() {\n\t\tvm.adding = true;\n\t\tvar courseSectionsIDs = _.map(_.filter(vm.courses, 'selected'), 'courseSectionID');\n\n\t\tvar coursesToAdd = {\n\t\t\tstudentID: vm.student.studentID,\n\t\t\tstudentInSchoolID: vm.student.studentInSchoolID,\n\t\t\tacademicYearID: vm.student.academicYearID,\n\t\t\tschoolID: vm.student.schoolID,\n\t\t\teffectiveDate: vm.effectiveDate.format('MM/DD/YYYY'),\n\t\t\tcourseSectionIDs: courseSectionsIDs,\n\t\t};\n\n\t\tif (!_.isEmpty(coursesToAdd.courseSectionIDs)) {\n\t\t\tstudentCoursesService.addCoursesToStudent(coursesToAdd).then(\n\t\t\t\tfunction (response) {\n\t\t\t\t\tvm.adding = false;\n\t\t\t\t\tswal('Student added to course(s)', 'The courses were successfully added for the student.', 'success');\n\t\t\t\t\tdoCancel();\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\tvm.adding = false;\n\t\t\t\t\tif (error.status === 400) {\n\t\t\t\t\t\t//business rules failed, display popup listing violated rules.\n\t\t\t\t\t\tbusinessResponseService.showBusinessResponse(\n\t\t\t\t\t\t\terror.data,\n\t\t\t\t\t\t\t'The course(s) could not be added for this student due to the following business rules:'\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvm.hasError = true;\n\t\t\t\t\t\tbusinessResponseService.showBusinessResponse(error.data, 'An error occurred while processing student transfers.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tvm.adding = false;\n\t\t\tswal('Select courses to add', 'Select one or more courses to add for this student', 'error');\n\t\t}\n\t}\n\n\tfunction searchTextChanged(val: string): void {\n\t\tconst value: string = val.toLowerCase();\n\t\tvm.filteredCourses = vm.courses.filter((c) => {\n\t\t\treturn (\n\t\t\t\tc.courseSubjectDisplayName.toLowerCase().contains(value) ||\n\t\t\t\tc.courseSectionSystemGeneratedName.toLowerCase().contains(value) ||\n\t\t\t\tc.primaryTeachers.toLowerCase().contains(value) ||\n\t\t\t\tc.markingPeriods.filter((mp) => mp.toLowerCase().contains(value)).length > 0 ||\n\t\t\t\tc.meetingBlocks.filter((mb) => mb.toLowerCase().contains(value)).length > 0\n\t\t\t);\n\t\t});\n\t}\n\n\tfunction sortChanged(expression): void {\n\t\tvm.sort = expression;\n\t\tconst sortColumns = vm.sort.map((e) => e.criteria);\n\t\tconst sortColumnsDirection = vm.sort.map((e) => (e.descending ? 'desc' : 'asc'));\n\t\tvm.filteredCourses = _.orderBy(vm.filteredCourses, sortColumns, sortColumnsDirection);\n\t}\n\n\t/** Exports **/\n\tvm.selectGradeChange = selectGradeChange;\n\tvm.doCancel = doCancel;\n\tvm.doAdd = doAdd;\n\tvm.searchTextChanged = searchTextChanged;\n\tvm.sortChanged = sortChanged;\n\n\tinit();\n}\n\nangular.module('nha.schedule').controller('StudentCoursesAddCoursesCtrl', StudentCoursesAddCoursesCtrl);\n\nStudentCoursesAddCoursesCtrl.$inject = [\n\t'$state',\n\t'$uibModal',\n\t'studentCoursesService',\n\t'addCoursesContextService',\n\t'errorSvc',\n\t'appSettings',\n\t'businessResponseService',\n];\n","\n\n function CourseRosterImportToCtrl($scope, $state, courseDataManagerService, courseSummaryRepository, schoolMarkingPeriodService, courseService, termService, errorService, courseRosterImportRepository, appSettings, businessResponseService) {\n\n var vm = this;\n\n\n vm.courses = [];\n vm.selectedCourses = [];\n vm.fromCourseSectionId = -1;\n\n vm.sort = [\n { criteria: 'CourseName', descending: false },\n { criteria: 'GradeDisplayOrder', descending: false }\n ];\n\n\n\n vm.loadingViewState = { pageLoading: true, importing: false };\n\n /** Private **/\n var requestPending;\n\n var loadMarkingPeriods = function () {\n\n if (vm.course && vm.course.courseSectionGroup) {\n\n var academicYearId = vm.course.courseSectionGroup.academicYearID;\n var schoolId = vm.course.courseSectionGroup.schoolID;\n\n //// fake it until you make it\n //if (!academicYearId) {\n // academicYearId = 2014;\n // schoolId = courseDataManagerService.getSchoolId();\n //}\n\n // load marking periods data\n schoolMarkingPeriodService.get(schoolId, academicYearId).then(function (schoolMarkingPeriods) {\n vm.schoolMarkingPeriods = schoolMarkingPeriods;\n });\n }\n }\n\n function termDisplay(s) {\n return termService.termDisplay(s, vm.schoolMarkingPeriods);\n }\n\n function loadCourses() {\n vm.loadingViewState.pageLoading = true;\n\n vm.courses = [];\n\n requestPending = true;\n\n var parameters: any = { append: false };\n\n if (vm.sort) {\n parameters.sort = vm.sort;\n }\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n if ($state.params.courseID) {\n parameters.courseSectionGroupId = $state.params.courseID;\n }\n\n var academicYearId = vm.course.courseSectionGroup.academicYearID;\n var schoolId = vm.course.courseSectionGroup.schoolID;\n\n // fake it until you make it\n //if (!academicYearId) {\n // academicYearId = 2014;\n // schoolId = courseDataManagerService.getSchoolId();\n //}\n\n // since this page doesn't use filters, put this criteria in a filter format, so we can call the same method\n var selectedFilters: any = {};\n selectedFilters.AcademicYear = { items: [] };\n selectedFilters.AcademicYear.items.push({ id: academicYearId, selected: true });\n selectedFilters.School = { items: [] };\n selectedFilters.School.items.push({ id: schoolId, selected: true });\n\n log('selectedFilters', selectedFilters);\n\n courseSummaryRepository.get(parameters, selectedFilters).then(function (courses) {\n vm.loadingViewState.pageLoading = false;\n vm.courses = _.filter(courses, function (cs) { return cs.courseSectionId !== vm.fromCourseSectionId });\n updateCoursesSort();\n requestPending = false;\n }, function (error) {\n errorService.getUnhandledError(error, 'An error occurred loading courses list.');\n requestPending = false;\n vm.loadingViewState.pageLoading = false;\n });\n }\n\n function loadMoreCourses() {\n if (requestPending || !courseSummaryRepository.moreExist)\n return;\n\n var parameters: any = { append: true };\n\n if (vm.sort) {\n parameters.sort = vm.sort;\n }\n\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n vm.loadingViewState.loadingMore = true;\n requestPending = true;\n\n if ($state.params.courseID) {\n parameters.CourseSectionGroupId = $state.params.courseID;\n }\n\n var academicYearId = vm.course.courseSectionGroup.academicYearID;\n var schoolId = vm.course.courseSectionGroup.schoolID;\n\n if ($state.params.courseID) {\n parameters.courseSectionGroupId = $state.params.courseID;\n }\n\n // since this page doesn't use filters, put this criteria in a filter format, so we can call the same method\n var selectedFilters: any = {};\n selectedFilters.AcademicYear = { items: [] };\n selectedFilters.AcademicYear.items.push({ id: academicYearId, selected: true });\n selectedFilters.School = { items: [] };\n selectedFilters.School.items.push({ id: schoolId, selected: true });\n\n courseSummaryRepository.get(parameters, selectedFilters).then(function (courses) {\n if (vm.courses) {\n vm.courses = vm.courses.concat(_.filter(courses, function (cs) { return cs.courseSectionId !== vm.fromCourseSectionId }));\n } else {\n vm.courses = _.filter(courses, function (cs) { return cs.courseSectionId !== vm.fromCourseSectionId });\n }\n\n vm.loadingViewState.loadingMore = false;\n requestPending = false;\n }, function (error) {\n errorService.getUnhandledError(error, 'An error occurred loading courses list.');\n requestPending = false;\n vm.loadingViewState.loadingMore = false;\n });\n }\n\n /** Public **/\n vm.sortChanged = function (expression) {\n vm.sort = expression;\n updateCoursesSort();\n }\n\n function updateCoursesSort() {\n const sortColumns = vm.sort.map(e => e.criteria);\n const sortColumnsDirection = vm.sort.map(e => e.descending ? 'desc' : 'asc');\n vm.courses = _.orderBy(vm.courses, sortColumns, sortColumnsDirection);\n }\n\n vm.searchTextChanged = function (value) {\n //vm.searchText = value.replace('\\'', '\\'\\'');\n loadCourses();\n }\n\n vm.import = function () {\n\n if ($state.params && !$state.params.courseID) {\n swal(\"No Import available\", 'Importing to a new course is not implemented yet.');\n return;\n }\n\n // validate that they have at least one course selected\n if (vm.selectedCourses().length > 0 && vm.course && vm.course.rosterImport) {\n\n vm.loadingViewState.importing = true;\n\n var courseRosterImport = { fromCourseSectionId: vm.importFromCourseID, toCourseSectionIds: _.map(vm.selectedCourses(), 'courseSectionId') };\n\n log('about to post courseRosterImport', courseRosterImport);\n\n courseRosterImportRepository.post(courseRosterImport).then(function (response) {\n\n log('courseRosterImport POST response', response);\n\n vm.loadingViewState.importing = false;\n\n // TODO: check operation result is passed\n if (response.operationResult && response.operationResult.passed) {\n courseDataManagerService.resetCourse();\n $state.go('^', {}, { reload: true });\n } else {\n swal(\"Import failed\", 'The import was not successful. check the console log to see what was sent and what the response was.', \"error\");\n }\n\n }, function (error) {\n\n vm.loadingViewState.importing = false;\n vm.hasError = true;\n businessResponseService.showBusinessResponse(error.data, \"The roster import process could not be completed\");\n });\n } else {\n swal(\"No Course Selected\", \"You must specify at least one course to import into!\", \"error\");\n }\n }\n\n vm.selectedCourses = function () {\n vm.course.rosterImport.selectedToCourses = _.filter(vm.courses, 'selected');\n return vm.course.rosterImport.selectedToCourses;\n }\n\n vm.selectCourse = function (course) {\n course.selected = !course.selected;\n }\n\n vm.unselectCourse = function (course) {\n course.selected = false;\n }\n\n vm.goToStaffRecord = function (staff, $event) {\n\n if ($event) {\n $event.stopPropagation();\n }\n\n _utils.openUrl(appSettings.staffWebRootUrl + 'staff-record/' + staff.staffId, true);\n }\n\n function init() {\n courseDataManagerService.ensureAppContext().then(function (course) {\n vm.course = course;\n $scope.course = course;\n\n vm.course.rosterImport.selectedToCourses = [];\n\n if ($state.params && $state.params.importFromCourseID) {\n vm.importFromCourseID = $state.params.importFromCourseID;\n } else {\n swal(\"No From Course Selected\", \"You must specify a course to import in the previous screen\", \"error\");\n $state.go('^.roster-import');\n }\n\n loadMarkingPeriods();\n loadCourses();\n });\n }\n\n init();\n\n /** Exports **/\n vm.loadMoreCourses = loadMoreCourses;\n vm.termDisplay = termDisplay;\n }\n\n angular.module('nha.schedule').controller('CourseRosterImportToCtrl', CourseRosterImportToCtrl);\n\n CourseRosterImportToCtrl.$inject = ['$scope', '$state', 'courseDataManagerService', 'courseSummaryRepository', 'schoolMarkingPeriodService', 'courseService', 'termService', 'errorSvc', 'courseRosterImportRepository', 'appSettings', 'businessResponseService'];\n\n\n","angular.module('nha.schedule').controller('CoursesCtrl', CoursesCtrl);\n\nCoursesCtrl.$inject = [\n\t'$scope',\n\t'$state',\n\t'$uibModal',\n\t'courseService',\n\t'courseDataManagerService',\n\t'errorSvc',\n\t'courseSectionService',\n\t'schoolMarkingPeriodService',\n\t'termService',\n\t'appSettings',\n\t'schoolGradeLevelSectionRepository',\n\t'subjectTypeRepository',\n\t'businessResponseService',\n\t'$rootScope',\n\t'toastr',\n];\n\nfunction CoursesCtrl(\n\t$scope,\n\t$state,\n\t$uibModal,\n\tcourseService,\n\tcourseDataManagerService,\n\terrorService,\n\tcourseSectionService,\n\tschoolMarkingPeriodService,\n\ttermService,\n\tappSettings,\n\tschoolGradeLevelSectionRepository,\n\tsubjectTypeRepository,\n\tbusinessResponseService,\n\t$rootScope,\n\ttoastr\n) {\n\tvar vm = this;\n\n\t/** Private **/\n\tvar requestPending;\n\tvar selectedFilters: any = {};\n\n\t/** Public Properties **/\n\tvm.sort = [\n\t\t{ criteria: 'GradeLevelOrder', descending: false },\n\t\t{ criteria: 'CourseName', descending: false },\n\t];\n\n\tvm.courseTypeOptions = [\n\t\t{ id: 1, description: 'General' },\n\t\t{ id: 2, description: 'Modified' },\n\t\t{ id: 3, description: 'Advanced' },\n\t];\n\n\tvm.assignedOptions = [\n\t\t{ id: 1, description: 'No Active Teachers' },\n\t\t{ id: 2, description: 'No Active Students' },\n\t];\n\n\tvm.messageText = '';\n\tvm.messageDetailText = '';\n\n\t// init filter config\n\t$scope.filterConfig = {\n\t\tfilters: {},\n\t};\n\n\t$scope.shouldShowHighSchoolInGradeLevels = true;\n\n\tvar loadMarkingPeriods = function (selectedFilters) {\n\t\tif (selectedFilters.AcademicYear) {\n\t\t\tvar academicYearId = _.head(_.filter(selectedFilters.AcademicYear.items, 'selected')).id;\n\t\t\tvar schoolId = _.head(_.filter(selectedFilters.School.items, 'selected')).id;\n\n\t\t\t// load marking periods data\n\t\t\tschoolMarkingPeriodService.get(schoolId, academicYearId).then(function (schoolMarkingPeriods) {\n\t\t\t\tvm.schoolMarkingPeriods = schoolMarkingPeriods;\n\t\t\t});\n\t\t}\n\t};\n\n\t$scope.$on(\n\t\t'filterChange',\n\t\tfunction (event, filters) {\n\t\t\terrorService.dismissAllErrors();\n\t\t\tselectedFilters = filters.selectedFilters;\n\n\t\t\tif (selectedFilters.AcademicYear) {\n\t\t\t\tvar selectedYear = _.head(_.filter(selectedFilters.AcademicYear.items, 'selected'));\n\t\t\t\tif (selectedYear) {\n\t\t\t\t\tcourseDataManagerService.setAcademicYearId(selectedYear.id);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloadSchoolGradeLevelScheduleGroups(selectedFilters);\n\t\t\tgetCourses(true);\n\t\t\tloadMarkingPeriods(selectedFilters);\n\t\t},\n\t\ttrue\n\t);\n\n\tfunction getCourses(showSpinner) {\n\t\tif (selectedFilters.AcademicYear) {\n\t\t\tvar parameters: any = {\n\t\t\t\tappend: false,\n\t\t\t};\n\n\t\t\tvm.courses = [];\n\n\t\t\tif (vm.sort) {\n\t\t\t\tparameters.sort = vm.sort;\n\t\t\t}\n\n\t\t\tif (vm.searchText) {\n\t\t\t\tparameters.searchText = vm.searchText;\n\t\t\t}\n\n\t\t\trequestPending = true;\n\t\t\tvm.viewState.pageLoading = showSpinner;\n\n\t\t\tcourseService.getCourses(parameters, selectedFilters).then(\n\t\t\t\tfunction (data) {\n\t\t\t\t\tvm.courses = data;\n\t\t\t\t\trequestPending = false;\n\t\t\t\t\tvm.viewState.pageLoading = false;\n\t\t\t\t\tgetFilterCounts();\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading courses list.');\n\t\t\t\t\trequestPending = false;\n\t\t\t\t\tvm.viewState.pageLoading = false;\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tvm.courses = [];\n\t\t}\n\t}\n\n\tfunction getFilterCounts() {\n\t\t// feature toggle of filter counts\n\t\tif (appSettings.disableFilterCounts) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar parameters: any = {};\n\n\t\tif (vm.searchText) {\n\t\t\tparameters.searchText = vm.searchText;\n\t\t}\n\n\t\tcourseService.getCourseCounts(parameters, selectedFilters).then(\n\t\t\tfunction (response) {\n\t\t\t\tsetFilterCounts(response, $scope.filterConfig.filters);\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading courses list filter counts.');\n\t\t\t}\n\t\t);\n\t}\n\n\tfunction setFilterCounts(counts, filters) {\n\t\t_.forEach(counts, function (c) {\n\t\t\tif (c.typeName.toUpperCase() === filters.AcademicYear.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.AcademicYear.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.School.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.School.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.GradeLevel.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.GradeLevel.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.MarkingPeriod.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.MarkingPeriod.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.SchoolGradeLevelSection.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.SchoolGradeLevelSection.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.SubjectType.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.SubjectType.items);\n\t\t\t} else if (c.typeName.toUpperCase() === filters.Homeroom.name.toUpperCase()) {\n\t\t\t\t$scope.syncItemCounts(c.items, filters.Homeroom.items);\n\t\t\t} else {\n\t\t\t\tlog('setFilterCounts encountered counts for unexpected filter type. Filter Type == ' + c.typeName);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Public **/\n\tvar viewState: any = { pageLoading: true };\n\n\tfunction toggleCourseDetailPanel(course) {\n\t\tcourse.isOpen = !course.isOpen;\n\t\tif (course.isOpen) {\n\t\t\tloadCourseDetailPanel(course);\n\t\t}\n\t}\n\n\tfunction loadCourseDetailPanel(course) {\n\t\tcourse.viewState = {\n\t\t\tdetailsLoading: true,\n\t\t};\n\t\tcourseService.getCourseDetails(course.schoolId, course.academicYearId, course.subjectId, course.gradeLevelId, course.displayName, selectedFilters).then(\n\t\t\tfunction (data) {\n\t\t\t\t// assign the returned data filtered by course type ID\n\t\t\t\tcourse.details = _.filter(data, function (d) {\n\t\t\t\t\treturn d.courseTypeID === course.courseTypeID;\n\t\t\t\t});\n\t\t\t\tcourse.sectionCount = course.details.length;\n\t\t\t\tcourse.viewState.detailsLoading = false;\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading course details.');\n\t\t\t\tcourse.viewState.detailsLoading = false;\n\t\t\t\trequestPending = false;\n\t\t\t}\n\t\t);\n\t}\n\n\tfunction courseCanCopy(courseSection) {\n\t\tconst hasBCourse = courseSection.subjectLevel1Group != null && courseSection.subjectLevel1Group.partBSubjectLevel1ID != courseSection.subjectId;\n\t\tconst term = termDisplay(courseSection);\n\t\tconst is18W1OrS1 = term === '18w1' || term === 'S1';\n\t\tconst hasActiveStudents = courseSection.studentCount > 0;\n\t\tconst hasMoreThanOneSubject = courseSection.subjectCount > 1;\n\n\t\treturn hasBCourse && is18W1OrS1 && hasActiveStudents && !hasMoreThanOneSubject;\n\t}\n\n\tfunction searchTextChanged() {\n\t\tgetCourses(true);\n\t}\n\n\tfunction sortChanged(expression) {\n\t\tvm.sort = expression;\n\t\tgetCourses(true);\n\t}\n\n\tfunction termDisplay(s) {\n\t\treturn termService.termDisplay(s, vm.schoolMarkingPeriods);\n\t}\n\n\tfunction loadMoreCourses() {\n\t\tif (requestPending || !courseService.moreExist || !selectedFilters || !selectedFilters.School || !selectedFilters.AcademicYear) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar parameters: any = {\n\t\t\tappend: true,\n\t\t};\n\t\tif (vm.sort) {\n\t\t\tparameters.sort = vm.sort;\n\t\t}\n\n\t\tif (vm.searchText) {\n\t\t\tparameters.searchText = vm.searchText;\n\t\t}\n\n\t\tviewState.coursePageLoading = true;\n\t\trequestPending = true;\n\n\t\tcourseService.getCourses(parameters, selectedFilters).then(\n\t\t\tfunction (response) {\n\t\t\t\tif (vm.courses) {\n\t\t\t\t\tvm.courses = vm.courses.concat(response);\n\t\t\t\t} else {\n\t\t\t\t\tvm.courses = response;\n\t\t\t\t}\n\n\t\t\t\tviewState.coursePageLoading = false;\n\t\t\t\trequestPending = false;\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\terrorService.getUnhandledError(error, 'An error occurred loading courses list.');\n\t\t\t\tviewState.coursePageLoading = false;\n\t\t\t\trequestPending = false;\n\t\t\t}\n\t\t);\n\t}\n\n\tfunction setupFilters() {\n\t\t// get our list of subject types\n\t\tsubjectTypeRepository.getAll().then(\n\t\t\tfunction (subjectTypes) {\n\t\t\t\t// format our list of subject types to fit filter config\n\t\t\t\tvar subjectTypesFilterItems = [];\n\t\t\t\tif (subjectTypes) {\n\t\t\t\t\tsubjectTypesFilterItems = _.map(subjectTypes, function (st) {\n\t\t\t\t\t\treturn { id: st.subjectTypeID, description: st.subjectTypeName };\n\t\t\t\t\t});\n\n\t\t\t\t\t// Moral Focus should not be shown, rather aggregated with Core\n\t\t\t\t\tsubjectTypesFilterItems = _.remove(subjectTypesFilterItems, function (stfi) {\n\t\t\t\t\t\treturn stfi.id !== 4;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Filter Configuration\n\t\t\t\t$scope.filterConfig = {\n\t\t\t\t\tfilters: {\n\t\t\t\t\t\tAcademicYear: { name: 'AcademicYear', displayName: 'Academic Year', type: 'radio', persist: true },\n\t\t\t\t\t\tSchool: { name: 'School', displayName: 'School', type: 'radio', persist: true },\n\t\t\t\t\t\tGradeLevel: { name: 'GradeLevel', displayName: 'Grade Level', type: 'checkbox', isCollapsed: true, persist: true },\n\t\t\t\t\t\tMarkingPeriod: { name: 'MarkingPeriod', displayName: 'Marking Period', type: 'checkbox', isCollapsed: true, persist: true },\n\t\t\t\t\t\tSchoolGradeLevelSection: {\n\t\t\t\t\t\t\tname: 'SchoolGradeLevelSection',\n\t\t\t\t\t\t\tdisplayName: 'Section Group',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tisCollapsed: true,\n\t\t\t\t\t\t\tpersist: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSubjectType: {\n\t\t\t\t\t\t\tname: 'SubjectType',\n\t\t\t\t\t\t\tdisplayName: 'Course Category',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tisCollapsed: true,\n\t\t\t\t\t\t\titems: subjectTypesFilterItems,\n\t\t\t\t\t\t\tpersist: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tHomeroom: { name: 'Homeroom', displayName: 'Homeroom', type: 'checkbox', isCollapsed: true, persist: true },\n\t\t\t\t\t\tCourseType: {\n\t\t\t\t\t\t\tname: 'CourseType',\n\t\t\t\t\t\t\tdisplayName: 'Course Type',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tisCollapsed: true,\n\t\t\t\t\t\t\tpersist: true,\n\t\t\t\t\t\t\titems: vm.courseTypeOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tAssigned: {\n\t\t\t\t\t\t\tname: 'Assigned',\n\t\t\t\t\t\t\tdisplayName: 'Assigned',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tisCollapsed: true,\n\t\t\t\t\t\t\tpersist: true,\n\t\t\t\t\t\t\titems: vm.assignedOptions,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\tfunction (error) {\n\t\t\t\terrorService.getUnhandledError(error, 'An error occurred initiating filter data.');\n\t\t\t}\n\t\t);\n\t}\n\n\tfunction copyCourse(course, courseSection, $event) {\n\t\t$event.stopPropagation();\n\n\t\tcourseService\n\t\t\t.copy(\n\t\t\t\tcourseSection.academicYearId,\n\t\t\t\tcourseSection.schoolId,\n\t\t\t\tcourseSection.courseSectionGroupId,\n\t\t\t\tcourseSection.subjectLevel1Group.partBSubjectLevel1ID\n\t\t\t)\n\t\t\t.then(\n\t\t\t\tfunction () {\n\t\t\t\t\ttoastr.success('', 'The course was copied successfully.');\n\n\t\t\t\t\tconst coursesOpen = vm.courses.filter((course) => course.isOpen);\n\t\t\t\t\tvar parameters: any = {\n\t\t\t\t\t\tappend: false,\n\t\t\t\t\t};\n\t\t\t\t\tif (vm.sort) {\n\t\t\t\t\t\tparameters.sort = vm.sort;\n\t\t\t\t\t}\n\t\t\t\t\tif (vm.searchText) {\n\t\t\t\t\t\tparameters.searchText = vm.searchText;\n\t\t\t\t\t}\n\t\t\t\t\tcourseService.getCourses(parameters, selectedFilters).then(function (data) {\n\t\t\t\t\t\tvm.courses = data;\n\n\t\t\t\t\t\tcoursesOpen.forEach((course) => {\n\t\t\t\t\t\t\tconst courseMatch = vm.courses.find((c) => c.subjectId == course.subjectId && c.gradeLevelId === course.gradeLevelId);\n\t\t\t\t\t\t\tif (!!courseMatch) {\n\t\t\t\t\t\t\t\tcourseMatch.isOpen = true;\n\t\t\t\t\t\t\t\tloadCourseDetailPanel(courseMatch);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\tswal({\n\t\t\t\t\t\ttitle: 'This course could not be copied.',\n\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\ttext: error.data.exceptionMessage,\n\t\t\t\t\t\thtml: true,\n\t\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\tconfirmButtonColor: '#DD6B55',\n\t\t\t\t\t\tconfirmButtonText: 'Ok',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tfunction remove(course, courseSection, $event) {\n\t\t// don't bubble up this event to our row level click\n\t\t$event.stopPropagation();\n\n\t\tswal(\n\t\t\t{\n\t\t\t\ttitle: 'You are about to remove this course subject - continue?',\n\t\t\t\ttype: 'warning',\n\t\t\t\tshowCancelButton: true,\n\t\t\t\tconfirmButtonColor: '#DD6B55',\n\t\t\t\tconfirmButtonText: 'Yes, remove it.',\n\t\t\t\tcloseOnConfirm: true,\n\t\t\t},\n\t\t\tfunction () {\n\t\t\t\tcourseSectionService.deleteCourseSection(courseSection.courseSectionId).then(\n\t\t\t\t\tfunction (response) {\n\t\t\t\t\t\tif (course.details.length > 1) {\n\t\t\t\t\t\t\tloadCourseDetailPanel(course);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tgetCourses(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tfunction (error) {\n\t\t\t\t\t\tsetMessageAndMessageDetailsText(error);\n\n\t\t\t\t\t\tswal(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: 'The course could not be deleted',\n\t\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\t\ttext: vm.messageText,\n\t\t\t\t\t\t\t\thtml: true,\n\t\t\t\t\t\t\t\tshowCancelButton: vm.messageDetailText.length !== 0,\n\t\t\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\t\t\tconfirmButtonColor: '#DD6B55',\n\t\t\t\t\t\t\t\tcancelButtonText: 'Show Details',\n\t\t\t\t\t\t\t\tconfirmButtonText: 'Ok',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfunction (value) {\n\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\t\t\t\tswal({\n\t\t\t\t\t\t\t\t\t\t\ttitle: 'Dependent Data Details',\n\t\t\t\t\t\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\t\t\t\t\t\ttext: vm.messageDetailText,\n\t\t\t\t\t\t\t\t\t\t\tshowConfirmButton: true,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, 400);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}\n\n\tfunction setMessageAndMessageDetailsText(error) {\n\t\tvar messages = [];\n\t\tvar messageDetails = [];\n\n\t\t_.forEach(error.data.operationResult.rules, function (rule) {\n\t\t\t_.forEach(rule.messages, function (message) {\n\t\t\t\tmessages.push(message);\n\t\t\t});\n\n\t\t\t_.forEach(rule.messageDetails, function (messageDetail) {\n\t\t\t\tmessageDetails.push(messageDetail);\n\t\t\t});\n\t\t});\n\n\t\tvm.messageText = messages.join('\\n\\n');\n\t\tvm.messageDetailText = messageDetails.join('\\n\\n');\n\t}\n\n\tfunction goToNewCourse() {\n\t\tcourseDataManagerService.resetCourse().then(function () {\n\t\t\tcourseDataManagerService.setCourseCancelState($state.current);\n\t\t\t$state.go('new-course.overview');\n\t\t});\n\t}\n\n\tfunction init() {\n\t\tsetupFilters();\n\t\t$rootScope.$broadcast('master-scheduling-course-unloaded', {});\n\t}\n\n\tfunction goToCourse(course) {\n\t\tif (course) {\n\t\t\tcourseDataManagerService.setCourseCancelState($state.current);\n\t\t\t$state.go('course.overview', { courseID: course.courseSectionGroupId }, { reload: true });\n\t\t}\n\t}\n\n\tvar loadSchoolGradeLevelScheduleGroups = function (selectedFilters) {\n\t\tif (selectedFilters.AcademicYear) {\n\t\t\tvar academicYearId = _.head(_.filter(selectedFilters.AcademicYear.items, 'selected')).id;\n\t\t\tvar schoolId = _.head(_.filter(selectedFilters.School.items, 'selected')).id;\n\n\t\t\tvar courseSchedulingService = (window).myNHA.GetApiService('MasterScheduling', 'CourseSchedulingService');\n\t\t\tcourseSchedulingService?.getGradeLevelGroups(academicYearId, schoolId).then((schoolGradeLevelScheduleGroups) => {\n\t\t\t\tvm.schoolGradeLevelScheduleGroups = schoolGradeLevelScheduleGroups;\n\t\t\t});\n\t\t}\n\t};\n\n\tvar getSectionGroupName = function (details) {\n\t\tvar courseGradeLevelGroup = vm.schoolGradeLevelScheduleGroups?.find((group) => group.gradeLevelIDs.includes(details.gradeLevelId));\n\t\tif (courseGradeLevelGroup) {\n\t\t\treturn courseGradeLevelGroup.schoolGradeLevelScheduleGroupShortName + details.sectionGroupLetter;\n\t\t}\n\t\treturn details.groupName;\n\t};\n\n\tvar getCourseGradeLevelName = function (course) {\n\t\tvar courseGradeLevelGroup = vm.schoolGradeLevelScheduleGroups?.find((group) => group.gradeLevelIDs.includes(course.gradeLevelId));\n\t\tif (courseGradeLevelGroup) {\n\t\t\treturn courseGradeLevelGroup.schoolGradeLevelScheduleGroupName;\n\t\t}\n\t\treturn course.gradeLevelName;\n\t};\n\n\tinit();\n\n\t/** Exports **/\n\tvm.viewState = viewState;\n\tvm.toggleCourseDetailPanel = toggleCourseDetailPanel;\n\tvm.loadMoreCourses = loadMoreCourses;\n\tvm.termDisplay = termDisplay;\n\tvm.searchTextChanged = searchTextChanged;\n\tvm.sortChanged = sortChanged;\n\tvm.remove = remove;\n\tvm.goToNewCourse = goToNewCourse;\n\tvm.goToCourse = goToCourse;\n\tvm.getSectionGroupName = getSectionGroupName;\n\tvm.getCourseGradeLevelName = getCourseGradeLevelName;\n\tvm.copyCourse = copyCourse;\n\tvm.courseCanCopy = courseCanCopy;\n}\n","\n\n function CourseRosterImportFromCtrl($scope, $state, courseDataManagerService, courseSummaryRepository, courseService, schoolMarkingPeriodService, errorService, termService, appSettings) {\n\n var vm = this;\n\n\n vm.loadingViewState = { pageLoading: true, loadingMore: false };\n\n vm.sort = [\n { criteria: 'CourseName', descending: false },\n { criteria: 'GradeDisplayOrder', descending: false }\n ];\n\n /** Private **/\n var requestPending;\n\n\n function initFilterConfig() {\n var courseGradeLevel = vm.course.courseSectionGroup.gradeLevelID || vm.course.schoolGradeLevel.gradeLevelID;\n // Filter Configuration\n $scope.filterConfig = {\n filters:\n {\n 'AcademicYear': { name: 'AcademicYear', displayName: 'Academic Year', type: 'radio', isHidden: true, defaultId: vm.course.courseSectionGroup.academicYearID },\n 'School': { name: 'School', displayName: 'School', type: 'radio', persist: true, isHidden: true, defaultId: vm.course.courseSectionGroup.schoolID },\n 'GradeLevel': { name: 'GradeLevel', displayName: 'Grade Level', type: 'checkbox', items: null, defaultId: courseGradeLevel },\n 'MarkingPeriod': { name: 'MarkingPeriod', displayName: 'Marking Period', type: 'checkbox' },\n 'Staff': { name: 'Staff', displayName: 'Teacher', type: 'checkbox' }\n }\n };\n }\n\n var loadMarkingPeriods = function (selectedFilters) {\n\n var academicYearId = _.head(_.filter(selectedFilters.AcademicYear.items, 'selected')).id;\n var schoolId = _.head(_.filter(selectedFilters.School.items, 'selected')).id;\n\n // load marking periods data\n schoolMarkingPeriodService.get(schoolId, academicYearId).then(function (schoolMarkingPeriods) {\n vm.schoolMarkingPeriods = schoolMarkingPeriods;\n });\n }\n\n function termDisplay(s) {\n return termService.termDisplay(s, vm.schoolMarkingPeriods);\n }\n\n function loadCourses() {\n vm.loadingViewState.pageLoading = true;\n\n vm.courses = [];\n\n requestPending = true;\n\n var parameters: any = { append: false };\n\n if (vm.sort) {\n parameters.sort = vm.sort;\n }\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n log('loadCourses parameters', parameters);\n\n courseSummaryRepository.get(parameters, vm.selectedFilters).then(function (courses) {\n vm.loadingViewState.pageLoading = false;\n vm.courses = courses;\n updateCoursesSort();\n getFilterCounts();\n requestPending = false;\n }, function (error) {\n errorService.getUnhandledError(error, 'An error occurred loading courses list.');\n requestPending = false;\n vm.loadingViewState.pageLoading = false;\n });\n }\n\n function loadMoreCourses() {\n if (requestPending || !courseSummaryRepository.moreExist)\n return;\n\n var parameters: any = {\n append: true\n };\n\n if (vm.sort) {\n parameters.sort = vm.sort;\n }\n\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n vm.loadingViewState.loadingMore = true;\n requestPending = true;\n\n courseSummaryRepository.get(parameters, vm.selectedFilters).then(function (response) {\n if (vm.courses) {\n vm.courses = vm.courses.concat(response);\n } else {\n vm.courses = response;\n }\n\n vm.loadingViewState.loadingMore = false;\n requestPending = false;\n\n }, function (error) {\n errorService.getUnhandledError(error, 'An error occurred while getting more courses.');\n vm.loadingViewState.loadingMore = false;\n requestPending = false;\n });\n\n }\n\n $scope.$on('filterChange', function (event, filters) {\n vm.selectedFilters = filters.selectedFilters;\n loadMarkingPeriods(vm.selectedFilters);\n loadCourses();\n\n vm.course.rosterImport.selectedFilters = vm.selectedFilters;\n\n }, true);\n\n /** Public **/\n vm.sortChanged = function (expression) {\n vm.sort = expression;\n updateCoursesSort();\n }\n\n function updateCoursesSort() {\n const sortColumns = vm.sort.map(e => e.criteria);\n const sortColumnsDirection = vm.sort.map(e => e.descending ? 'desc' : 'asc');\n vm.courses = _.orderBy(vm.courses, sortColumns, sortColumnsDirection);\n }\n\n vm.searchTextChanged = function (value) {\n //vm.searchText = value.replace('\\'', '\\'\\'');\n loadCourses();\n }\n\n vm.selectedCourses = function () {\n if (vm.course) {\n vm.course.rosterImport.selectedFromCourses = _.filter(vm.courses, 'selected');\n return vm.course.rosterImport.selectedFromCourses;\n }\n }\n\n vm.next = function () {\n\n var selectedCourse = vm.selectedCourses();\n\n // validate that they have at least one course selected\n if (selectedCourse && selectedCourse.length > 0) {\n\n var firstCourse = _.head(selectedCourse);\n var nextStateName = '^.roster-import-to';\n\n $state.go(nextStateName, { importFromCourseID: firstCourse.courseSectionId });\n\n } else {\n swal(\"No Course Selected\", \"You must specify a course to continue to the next screen!\", \"error\");\n }\n }\n\n vm.selectCourse = function (course) {\n\n // clear out any other seleted\n _.forEach(vm.courses, function (c) {\n if (c.selected && c.courseSectionId !== course.courseSectionId) {\n c.selected = false;\n }\n });\n\n course.selected = true;\n }\n\n function getFilterCounts() {\n var parameters: any = {\n };\n\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n courseSummaryRepository.getCounts(parameters, vm.selectedFilters).then(function (response) {\n setFilterCounts(response, $scope.filterConfig.filters);\n\n }, function (error) {\n errorService.getUnhandledError(error, 'An error occurred loading courses list filter counts.');\n });\n }\n\n function setFilterCounts(counts, filters) {\n\n _.forEach(counts, function (c) {\n if (c.typeName.toUpperCase() === filters.AcademicYear.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.AcademicYear.items);\n } else if (c.typeName.toUpperCase() === filters.School.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.School.items);\n }\n else if (c.typeName.toUpperCase() === filters.GradeLevel.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.GradeLevel.items);\n }\n else if (c.typeName.toUpperCase() === filters.MarkingPeriod.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.MarkingPeriod.items);\n }\n else if (c.typeName.toUpperCase() === filters.Staff.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.Staff.items);\n }\n else {\n log('setFilterCounts encountered counts for unexpected filter type. Filter Type == ' + c.typeName);\n }\n\n });\n }\n\n vm.goToStaffRecord = function (staff, $event) {\n\n if ($event) {\n $event.stopPropagation();\n }\n\n _utils.openUrl(appSettings.staffWebRootUrl + 'staff-record/' + staff.staffId, true);\n }\n\n function init() {\n log('import-from controller -> init()', $state.params);\n\n errorService.dismissAllErrors();\n\n courseDataManagerService.ensureAppContext().then(function (course) {\n vm.course = course;\n vm.course = courseDataManagerService.getCourse();\n $scope.course = course;\n\n initFilterConfig();\n vm.courses = [];\n vm.course.rosterImport.selectedFromCourses = [];\n });\n\n }\n\n init();\n\n /** Exports **/\n vm.loadMoreCourses = loadMoreCourses;\n vm.termDisplay = termDisplay;\n }\n\n angular.module('nha.schedule').controller('CourseRosterImportFromCtrl', CourseRosterImportFromCtrl);\n\n CourseRosterImportFromCtrl.$inject = ['$scope', '$state', 'courseDataManagerService', 'courseSummaryRepository', 'courseService', 'schoolMarkingPeriodService', 'errorSvc', 'termService', 'appSettings'];\n\n\n","\n\n function CourseRosterCtrl($state, $uibModal, appSettings, courseDataManagerService, rosterHistoryService, academicYearRepository,\n errorService, uiAlertService, courseValidationService, $timeout, businessResponseService) {\n\n var vm = this;\n var endAcademicYear;\n vm.rosterForm = {};\n\n vm.orderOptions = ['student.lastName', 'currentStatus.masterStatus.status', 'currentStatus.date'];\n vm.myOrder = 'student.lastName';\n\n vm.viewState = { listLoading: true };\n\n vm.rosterStudents = [];\n\n vm.sort = [\n { criteria: 'student.lastName', descending: false }\n ];\n\n vm.sortChanged = function (expression) {\n if (expression[0].criteria.indexOf('status') != -1) {\n expression.push({ criteria: 'student.lastName', descending: false });\n vm.sort = _.map(expression, function (crit) {\n return (crit.descending ? '-' : '') + crit.criteria;\n });\n }\n else {\n vm.sort = _.map(expression, function (crit) {\n return (crit.descending ? '-' : '') + crit.criteria;\n });\n }\n }\n\n vm.calculateMaxDate = function () {\n var endCourseMarkingPeriod = moment(_.last(vm.course.schoolMarkingPeriods).endDate);\n\n if (endCourseMarkingPeriod && endAcademicYear >= endCourseMarkingPeriod) {\n return endCourseMarkingPeriod;\n }\n else {\n return endAcademicYear;\n }\n }\n\n vm.import = function () {\n if ($state.params && $state.params.courseID) {\n $state.go('course.roster.roster-import');\n\n } else {\n swal({\n title: \"Cannot Import\",\n text: \"This import cannot be saved on a new unsaved course. Do you want to save the course? You can then import the roster for the course.\",\n type: \"warning\",\n showCancelButton: true,\n confirmButtonColor: \"#DD6B55\",\n confirmButtonText: \"Save Course\",\n closeOnConfirm: true\n }, function (isConfirmed) {\n if (isConfirmed) {\n vm.validations = courseValidationService.getValidations();\n if (!courseValidationService.isValid()) {\n swal('Unable to save course', 'Please correct errors before you can save this course', 'error');\n return;\n }\n\n vm.saving = true;\n log('saving course - import');\n\n courseDataManagerService.saveCourse(vm.course).then(function (resp) {\n log('course saved - import');\n vm.saving = false;\n\n log('saved business response', resp);\n vm.businessResponse = resp;\n\n if (resp.operationResult && resp.operationResult.passed) {\n\n if ($state.params.courseID) {\n uiAlertService.success('Course has been successfully updated. ' + resp.operationResult.result.courseSectionGroup.courseSectionGroupName, \"Course Updated\");\n } else {\n uiAlertService.success('A new course has been created named ' + resp.operationResult.result.courseSectionGroup.courseSectionGroupName, \"Course Created\");\n }\n log('saved course id:', resp.operationResult.result.courseSectionGroup.courseSectionGroupID);\n $timeout(function () {\n log('redirecting to import', resp.operationResult.result.courseSectionGroup.courseSectionGroupID);\n courseDataManagerService.resetCourse();\n $state.go('course.roster.roster-import', { courseID: resp.operationResult.result.courseSectionGroup.courseSectionGroupID });\n }, 50);\n }\n },\n function (error) {\n vm.saving = false;\n vm.hasError = true;\n businessResponseService.showBusinessResponse(error.data, \"The selected roster could not be imported\");\n });\n }\n });\n\n }\n }\n\n vm.setEditMode = function (h, $event) {\n $event.stopPropagation();\n h.editMode = true;\n }\n\n vm.removeStatus = function (s, $event) {\n\n $event.stopPropagation();\n\n\n if (!s.courseSectionRosterID) {\n _.remove(vm.course.selectedCourseSubject.students, function (student) {\n return student === s;\n });\n }\n else if (s.currentMarkingPeriodStatus.isLatestStatus === false) {\n swal({\n title: \"Cannot delete.\",\n text: \"This status cannot be deleted. This student has one or more status changes in the future.\",\n type: \"warning\",\n showCancelButton: false,\n confirmButtonColor: \"#DD6B55\",\n confirmButtonText: \"Ok\",\n closeOnConfirm: true\n });\n }\n else {\n swal({\n title: \"Are you sure?\",\n text: \"This will remove this status if it was added by accident. If you want to fully remove the student, please use the Remove button. Are you sure you want to delete this status?\",\n type: \"warning\",\n showCancelButton: true,\n confirmButtonColor: \"#DD6B55\",\n confirmButtonText: \"Yes, delete the status!\",\n closeOnConfirm: true\n }, function (isConfirmed) {\n\n if (isConfirmed) {\n\n var courseSectionRosterStatusHistoryId = _.find(s.statusHistory, {'isCurrent': true}).courseSectionRosterStatusHistoryID;\n rosterHistoryService.remove(courseSectionRosterStatusHistoryId).then(function (result) {\n log('result', result);\n if (result.operationResult.passed) {\n // passed\n if (s.statusHistory.length < 2) {\n _.remove(vm.course.selectedCourseSubject.students, s);\n } else {\n s.statusHistory = _.take(s.statusHistory, s.statusHistory.length - 1);\n }\n // refresh to get our current Status\n s.currentStatus = _.find(s.statusHistory, {'isCurrent': true});\n setupHistoryInfo(s);\n buildRosterStudents();\n } else {\n // did not pass\n swal(\"The student status remove failed!\", 'Something went wrong, you can not remove this status now', \"warning\");\n }\n }, function (error) {\n vm.hasError = true;\n businessResponseService.showBusinessResponse(error.data, \"The student status delete process could not be completed\");\n });\n }\n\n });\n }\n\n\n }\n\n function convertToMoment(dateToConvert) {\n return dateToConvert instanceof moment ? dateToConvert : moment(_.trimStart(dateToConvert, \"'\\'\"));\n }\n\n function setupHistoryInfo(student) {\n student.currentStatus = _.find(student.statusHistory, {'isCurrent': true});\n\n for (var i = student.statusHistory.length - 1; i >= 0; i--) {\n student.statusHistory[i].originalDate = convertToMoment(student.statusHistory[i].date);\n student.statusHistory[i].editMode = false;\n if (i === student.statusHistory.length - 1) {\n student.statusHistory[i].expanded = false;\n student.statusHistory[i].maxDate = vm.calculateMaxDate();\n } else {\n student.statusHistory[i].maxDate = convertToMoment(student.statusHistory[i + 1].date);\n }\n if (i === 0) {\n student.statusHistory[i].minDate = vm.beginAcademicYear;\n } else {\n student.statusHistory[i].minDate = convertToMoment(student.statusHistory[i - 1].date);\n }\n }\n }\n\n vm.resetEditRow = function (statusHistory, $event) {\n $event.stopPropagation();\n statusHistory.editMode = false;\n statusHistory.date = statusHistory.originalDate;\n }\n\n vm.setStatusDate = function (student, statusHistory, $event) {\n $event.stopPropagation();\n if (!student.courseSectionRosterID || !statusHistory.courseSectionRosterStatusHistoryID) {\n statusHistory.originalDate = statusHistory.date;\n statusHistory.editMode = false;\n } else {\n var statusChange: any = {\n Id: student.courseSectionRosterID,\n HistoryId: statusHistory.courseSectionRosterStatusHistoryID,\n StartDate: _utils.stripTimeFromDate(statusHistory.date),\n EndDate: _utils.stripTimeFromDate(statusHistory.originalDate),\n MasterStatusId: statusHistory.masterStatusID,\n ignoreWarnings: false\n }\n\n vm.saving = true;\n rosterHistoryService.put(statusChange).then(function () {\n uiAlertService.success('Status changes were saved successfully.', 'Save Successful');\n vm.saving = false;\n\n setupHistoryInfo(student);\n updateStudentCourseMarkingPeriodStatusDate(student.studentId, statusChange.startDate);\n buildRosterStudents();\n }, function (error) {\n vm.saving = false;\n vm.hasError = true;\n\n businessResponseService.showBusinessResponse(error.data, \"The student status date update process could not be completed\");\n });\n }\n\n }\n\n vm.orderByDate = function (a) {\n return moment(a.date);\n }\n\n vm.goToStudentRecord = function (s, $event) {\n\n if ($event) {\n $event.stopPropagation();\n }\n\n _utils.openUrl(appSettings.studentManagementWebRootUrl + s.studentInSchoolID + '/courses/overview', true);\n }\n\n\n vm.getStudentCountByMasterStatusIDs = function (ids) {\n if (vm.course.selectedCourseSubject && vm.course.selectedCourseSubject.students) {\n var counts = _.countBy(vm.course.selectedCourseSubject.students, function (s) {\n if (s.currentStatus) {\n return s.currentStatus.masterStatusID;\n }\n else {\n return s.currentMasterStatusID;\n }\n });\n }\n if (counts && ids) {\n return _.sumBy(ids, function (id) {\n return counts[id] || 0;\n });\n }\n return 0;\n }\n\n vm.updateSelectedCourseSubject = function (cs) {\n vm.course.selectedCourseSubject = cs;\n buildRosterStudents();\n }\n\n vm.updateSelectedMarkingPeriod = function (mp) {\n vm.course.selectedMarkingPeriod = mp;\n buildRosterStudents();\n }\n\n vm.shouldRemoveButtonBeDisabled = function () {\n\n var isRemoveButtonDisabled = true;\n\n if (vm.course && vm.course.selectedCourseSubject) {\n isRemoveButtonDisabled = !_.some(vm.course.selectedCourseSubject.students);\n }\n\n return isRemoveButtonDisabled;\n }\n\n function updateStudentCourseMarkingPeriodStatusDate( studentId, date)\n {\n var selectedMarkingPeriodID = vm.course.selectedMarkingPeriod.markingPeriodID;\n var selectedCourseSectionID = vm.course.selectedCourseSubject.courseSection.courseSectionID;\n\n // Get all student statuses that were active for the marking period.\n var status = _.find(vm.course.studentCourseMarkingPeriodStatuses, {\n 'courseSectionID': selectedCourseSectionID,\n 'markingPeriodID': selectedMarkingPeriodID,\n 'studentID': studentId\n });\n\n if (status !== undefined) {\n status.lastMarkingPeriodStatus.date = moment(date);\n }\n }\n\n\n // Filter the students to the ones with active status for the selected course and marking period\n function buildRosterStudents() {\n var selectedMarkingPeriodID = vm.course.selectedMarkingPeriod.markingPeriodID;\n var selectedCourseSectionID = vm.course.selectedCourseSubject.courseSection.courseSectionID;\n var studentsInCourse = vm.course.selectedCourseSubject.students;\n\n // Get all student statuses that were active for the marking period.\n var markingPeriodStudentStatuses = _.filter(vm.course.studentCourseMarkingPeriodStatuses, {\n 'courseSectionID': selectedCourseSectionID,\n 'markingPeriodID': selectedMarkingPeriodID\n });\n\n // Add marking period specific properties to the student to display on the page.\n vm.rosterStudents = [];\n\n _.each(markingPeriodStudentStatuses, function (statusInfo) {\n var lastMarkingPeriodStatus = statusInfo.lastMarkingPeriodStatus ? statusInfo.lastMarkingPeriodStatus : {};\n var student = _.find(studentsInCourse, { 'studentID': statusInfo.studentID });\n\n if (student !== undefined) {\n\n // Include only the status history items for this marking period and before.\n student.markingPeriodStatusHistory = _.reject(student.statusHistory, function (statusHist) {\n if (lastMarkingPeriodStatus.date) {\n return moment(statusHist.date).isAfter(lastMarkingPeriodStatus.date, 'day');\n }\n });\n\n student.currentMarkingPeriodStatus = _.find(student.markingPeriodStatusHistory, {'isCurrent': true});\n if (student.currentMarkingPeriodStatus !== undefined) {\n // If the current marking period status is the same as the current status, add an 'isLatestStatus' flag. This will allow us to delete it in the UI.\n student.currentMarkingPeriodStatus.isLatestStatus = lastMarkingPeriodStatus.courseSectionRosterStatusHistoryID === student.currentStatus.courseSectionRosterStatusHistoryID;\n vm.rosterStudents.push(student);\n }\n }\n });\n }\n\n\n function init() {\n\n errorService.dismissAllErrors();\n\n courseDataManagerService.ensureAppContext().then(function (course) {\n vm.course = course;\n\n var now = moment();\n\n vm.allowTransfers = courseDataManagerService.areTransfersAllowed(now);\n\n if (vm.course.selectedMarkingPeriod) {\n academicYearRepository.getByAcademicYearId(vm.course.selectedMarkingPeriod.academicYearID).then(function (academicYear) {\n // setup begin and end dates\n vm.beginAcademicYear = convertToMoment(academicYear.beginDate);\n endAcademicYear = convertToMoment(academicYear.endDate);\n\n log('beginAcademicYear, endAcademicYear', vm.beginAcademicYear, endAcademicYear);\n\n // set our current status so we can sort and have it at the top level\n _.forEach(vm.course.courseSubjects, function (subject) {\n if (subject.students) {\n _.map(subject.students, function (s) {\n setupHistoryInfo(s);\n });\n }\n });\n buildRosterStudents();\n vm.viewState.listLoading = false;\n });\n }\n else {\n vm.viewState.listLoading = false;\n }\n\n // initialize default sort\n vm.sortChanged(vm.sort);\n\n //Default to first option if none selected\n if (!vm.course.selectedCourseSubject) {\n vm.course.selectedCourseSubject = _.head(vm.course.courseSubjects);\n }\n });\n }\n\n init();\n\n }\n\n angular.module('nha.schedule').controller('CourseRosterCtrl', CourseRosterCtrl);\n\n CourseRosterCtrl.$inject = ['$state', '$uibModal', 'appSettings', 'courseDataManagerService', 'rosterHistoryService', 'academicYearRepository', 'errorSvc', 'uiAlertService', 'courseValidationService', '$timeout', 'businessResponseService'];\n\n\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.teachers', {\n url: '/teachers',\n templateUrl: 'app/course/teachers/teachers.html',\n controller: 'CourseTeachersCtrl as CourseTeachersVM',\n ncyBreadcrumb: {\n label: 'Teachers'\n },\n title: 'Teachers',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses'\n }\n }\n })\n .state('new-course.teachers', {\n url: '/teachers',\n templateUrl: 'app/course/teachers/teachers.html',\n controller: 'CourseTeachersCtrl as CourseTeachersVM',\n ncyBreadcrumb: {\n label: 'Teachers'\n },\n title: 'Teachers',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n ;\n }]);\n\n\n"," angular\n .module(\"nha.schedule\")\n .service('transferStudentsContextManagerService', transferStudentsContextManagerService);\n \n transferStudentsContextManagerService.$inject = [\"baseService\", '$rootScope', '$state', '$stateParams', 'studentTransfersRepository', 'transferStudentsContextService'];\n\n function transferStudentsContextManagerService(baseService, $rootScope, $state, $stateParams, studentTransfersRepository, transferStudentContextService) {\n\n //Service as a service\n var service = {\n getTransfer: getTransfer,\n saveTransfer: saveTransfer,\n resetTransfer: resetTransfer,\n ensureTransferStudentsContext: ensureTransferStudentsContext,\n persistTransferStudentsContext: persistTransferStudentsContext\n };\n\n return service;\n\n function saveTransfer(transfer) {\n return studentTransfersRepository.put(transfer);\n }\n\n function getTransfer() {\n return transferStudentContextService.transfer;\n }\n\n function resetTransfer() {\n transferStudentContextService.transfer = null;\n }\n\n function loadTransfer() {\n var deferred = baseService.q.defer();\n\n if ($stateParams.courseID) {\n if (!getTransfer() || (getTransfer().fromCourseSectionGroup.entityId !== $stateParams.courseID)) {\n var courseSectionGroupId = $stateParams.courseID;\n\n studentTransfersRepository.get(courseSectionGroupId).then(function(transfer) {\n log('transfer', transfer);\n transfer.selectedStudents = [];\n transferStudentContextService.transfer = transfer;\n deferred.resolve();\n });\n\n } else {\n deferred.resolve();\n }\n } else {\n deferred.resolve();\n }\n\n return deferred.promise;\n }\n\n function stateChangeIsReady() {\n var deferred = baseService.q.defer();\n // we want to make sure that all ui routes are ready and params are available\n $rootScope.$on(\"$stateChangeSuccess\", function (event, toState, toParams, fromState, fromParams) {\n deferred.resolve();\n });\n }\n\n function ensureTransferStudentsContext() {\n //return promise with context - can call other services to pull data down \n return baseService.q.all([\n stateChangeIsReady(),\n loadTransfer()\n ]);\n }\n\n function persistTransferStudentsContext(context) {\n //persist app context how you please\n }\n }\n\n","\n\n angular.module('nha.schedule')\n .service('teacherCourseService', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('TeacherCourse', masterSchedulingRestangular);\n }\n ]);\n","\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('new-course.roster.add-students', {\n url: '/add',\n views: {\n '@': {\n templateUrl: 'app/course/roster/add-students/add-students.html',\n controller: 'CourseAddStudentsCtrl as CourseAddStudentsVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Add Students',\n parent: 'new-course',\n skip: true\n },\n title: 'Add Students'\n })\n .state('course.roster.add-students', {\n url: '/add',\n views: {\n '@': {\n templateUrl: 'app/course/roster/add-students/add-students.html',\n controller: 'CourseAddStudentsCtrl as CourseAddStudentsVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Add Students',\n parent: 'course',\n skip: true\n },\n title: 'Add Students'\n });\n }]);\n\n\n"," angular\n .module(\"nha.schedule\")\n .service('transferContextService', transferContextService);\n\n transferContextService.$inject = ['baseService'];\n\n function transferContextService(baseService) {\n\n // This service acts as a us model. This shouldn't be for http calls\n\n var model = {\n transfer: null\n };\n\n return model;\n\n }\n\n","\n\n\tangular.module('nha.schedule').controller('TeachersCtrl', TeachersCtrl);\n\n\tTeachersCtrl.$inject = ['$scope', '$state', '$uibModal', 'courseTeacherService', 'errorSvc', 'courseSectionStaffService', 'schoolMarkingPeriodService', 'courseTeacherDetailService', 'teacherCourseFilterCountsService', 'termService', 'appSettings', 'schoolGradeLevelSectionRepository', 'subjectTypeRepository', 'courseDataManagerService', '$rootScope', 'businessResponseService'];\n\n\tfunction TeachersCtrl($scope, $state, $uibModal, courseTeacherService, errorService, courseSectionStaffService, schoolMarkingPeriodService, courseTeacherDetailService, teacherCourseFilterCountsService, termService, appSettings, schoolGradeLevelSectionRepository, subjectTypeRepository, courseDataManagerService, $rootScope, businessResponseService) {\n\n\t var vm = this;\n\t vm.loadingViewState = { teachersLoading: true, teacherPageLoading: false, detailsLoading: false }; \n\t vm.searchText = null;\n\t vm.sort = [{ criteria: 'TeacherName', descending: false }];\n\t vm.teachers = [];\n\t vm.hasError = false;\n\t vm.courseTypeOptions = [{ id: 1, description: \"General\" }, { id: 2, description: \"Modified\" }, { id: 3, description: \"Advanced\" }];\n\n\t /** Private **/\n\t var requestPending = false;\n\t var selectedFilters: any = {};\n\n\t // Init Filter Configuration\n\t $scope.filterConfig = {\n\t filters: {}\n\t };\n\n function setFilterCounts(counts, filters) {\n _.forEach(counts, function (c) {\n if (c.typeName.toUpperCase() === filters.AcademicYear.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.AcademicYear.items);\n } else if (c.typeName.toUpperCase() === filters.School.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.School.items);\n } else if (c.typeName.toUpperCase() === filters.GradeLevel.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.GradeLevel.items);\n } else if (c.typeName.toUpperCase() === filters.MarkingPeriod.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.MarkingPeriod.items);\n } else if (c.typeName.toUpperCase() === filters.SchoolGradeLevelSection.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.SchoolGradeLevelSection.items);\n } else if (c.typeName.toUpperCase() === filters.SubjectType.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.SubjectType.items);\n } else if (c.typeName.toUpperCase() === filters.Homeroom.name.toUpperCase()) {\n $scope.syncItemCounts(c.items, filters.Homeroom.items);\n } else {\n log('setFilterCounts encountered counts for unexpected filter type. Filter Type == ' + c.typeName);\n }\n });\n }\n\n function getFilterCounts(filters) {\n\n // feature toggle of filter counts\n if (appSettings.disableFilterCounts) {\n return;\n }\n\n var parameters: any = { append: false };\n\n if (vm.sort) {\n parameters.sortOrder = vm.sort; \n }\n\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n teacherCourseFilterCountsService.getTeacherCounts(parameters, filters).then(function (response) {\n setFilterCounts(response, $scope.filterConfig.filters);\n }, function(error) {\n errorService.getUnhandledError(error, 'An error occurred loading teacher counts.');\n vm.hasError = true;\n });\n }\n\n function loadTeachers(showSpinner) {\n log('loadTeachers -> selected filters', selectedFilters);\n\t vm.loadingViewState.teachersLoading = showSpinner;\n\t requestPending = true;\n\t vm.hasError = false;\n\n\t vm.teachers = [];\n\n\t var parameters: any = { append: false };\n\n\t if (vm.sort) {\n parameters.sortOrder = vm.sort;\n }\n\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n\t courseTeacherService.getTeachers(parameters, selectedFilters).then(function(response) {\n\t vm.teachers = response;\n\t vm.loadingViewState.teachersLoading = false;\n\t requestPending = false;\n\n\t getFilterCounts(selectedFilters);\n\t }, function (error) {\n\t vm.loadingViewState.teachersLoading = false;\n\t requestPending = false;\n\t vm.hasError = true;\n\t errorService.getUnhandledError(error, 'An error occurred loading the teachers list.');\n\t });\n\t }\n\n\t function loadDetails(teacher) {\n\t teacher.detailsLoading = true;\n\t requestPending = true;\n\n\t var parameters: any = { academicYearId: vm.selectedYear.id, schoolId: vm.selectedSchool.id, staffId: teacher.teacherStaffId }; \n\n\t courseTeacherDetailService.getAll(parameters, selectedFilters).then(function (response) {\n\n\t teacher.teacherCourseDetails = response;\n\t teacher.courseCount = teacher.teacherCourseDetails.length;\n\t teacher.detailsLoading = false;\n\t requestPending = false;\n\n\t }, function (error) {\n\n\t teacher.detailsLoading = false;\n\t requestPending = false;\n\t errorService.getUnhandledError(error, 'An error occurred loading the course detail.');\n\t });\n\n\t }\n\n\t function loadPage() {\n\n\t // Make sure the last request finished before I try\n\t if (!requestPending) {\n\t vm.selectedYear = _.find(selectedFilters.AcademicYear.items, { 'selected': true });\n\t vm.selectedSchool = _.find(selectedFilters.School.items, { 'selected': true });\n\t loadTeachers(true);\n\t }\n\n\t }\n\n\t $scope.$on('filterChange', function (event, filters) {\n\n\t errorService.dismissAllErrors();\n\t selectedFilters = filters.selectedFilters;\n\n\t if (selectedFilters.AcademicYear) {\n\t var selectedYear = _.head(_.filter(selectedFilters.AcademicYear.items, 'selected'));\n\t if (selectedYear) {\n\t courseDataManagerService.setAcademicYearId(selectedYear.id);\n\t }\n\t }\n\n\t loadMarkingPeriods(selectedFilters);\n\t loadPage();\n\n\t }, true);\n\n\t function loadMoreTeachers() {\n\t log('loadMoreTeachers -> selected filters', selectedFilters);\n\t if (requestPending || !courseTeacherService.moreExist || !selectedFilters || !selectedFilters.School || !selectedFilters.AcademicYear) {\n\t return;\n\t }\n\n\t vm.loadingViewState.teachersPageLoading = true;\n\t requestPending = true;\n\n\t var parameters: any = { append: true };\n\n if (vm.sort) {\n parameters.sortOrder = vm.sort;\n }\n\n if (vm.searchText) {\n parameters.searchText = vm.searchText;\n }\n\n\t courseTeacherService.getTeachers(parameters, selectedFilters).then(function(response) {\n\n\t if (vm.teachers) {\n\t vm.teachers = vm.teachers.concat(response);\n\t } else {\n\t vm.teachers = response;\n\t }\n\n\t vm.loadingViewState.teachersPageLoading = false;\n\t requestPending = false;\n\n\t }, function(error) {\n\t vm.loadingViewState.teachersPageLoading = false;\n\t requestPending = false;\n\t vm.hasError = true;\n\t errorService.getUnhandledError(error, 'An error occurred loading the teachers list.');\n\t });\n\n\t }\n\n\t var loadMarkingPeriods = function (selectedFilters) {\n\n\t var academicYearId = _.head(_.filter(selectedFilters.AcademicYear.items, 'selected')).id;\n\t var schoolId = _.head(_.filter(selectedFilters.School.items, 'selected')).id;\n\n\t // load marking periods data\n\t schoolMarkingPeriodService.get(schoolId, academicYearId).then(function (schoolMarkingPeriods) {\n\t vm.schoolMarkingPeriods = schoolMarkingPeriods;\n\t });\n\t }\n\n\t function toggleDetails(teacher) {\n\t if (!teacher.isOpen) {\n\t loadDetails(teacher);\n\t teacher.isOpen = true;\n\t } else {\n\t teacher.isOpen = false;\n\t }\n\t }\n\n\t function termDisplay(s) {\n\t return termService.termDisplay(s, vm.schoolMarkingPeriods);\n\t }\n\n\t function remove(teacher, courseStaff, $event) {\n\n\t // don't bubble up this event to our row level click\n\t $event.stopPropagation();\n\n\t swal({\n\t title: \"Deleting this course section from this course will give the teacher a removed status as of today and the teacher will no longer be assigned to this course. Are you sure you want to remove this teacher?\",\n\t type: \"warning\",\n\t showCancelButton: true,\n\t confirmButtonColor: \"#DD6B55\",\n\t confirmButtonText: \"Yes, remove it.\",\n\t closeOnConfirm: true\n\t }, function () {\n\t var statusChanges = [{ Id: courseStaff.courseSectionStaffID, StartDate: moment().toDate() }];\n\t courseSectionStaffService.remove(statusChanges).then(function(response) {\n\t if (teacher.teacherCourseDetails.length > 1) {\n\t loadDetails(teacher);\n\t } else {\n\t loadTeachers(true);\n\t }\n\t }, function (error) {\n\n\t vm.hasError = true;\n\t businessResponseService.showBusinessResponse(error.data, \"The selected course section could not be deleted\");\n\t });\n\t });\n \t}\n\n\t //function cleanString(dirtyString) {\n\t // dirtyString = dirtyString.replace(/[|&;$%@\"<>()+,]/g, \"\");\n\t // dirtyString = dirtyString.replace('\\'', '\\'\\'');\n\t // dirtyString = dirtyString.replace(/'/g, '\\'\\'');\n\t // dirtyString = dirtyString.replace(/&/g, '%26');\n\t // return dirtyString;\n\t //}\n\n\t vm.getCourseTypeDescription = function (courseTypeID) {\n\t var courseTypeDescription = 'General';\n\t if (vm.courseTypeOptions) {\n\t courseTypeDescription = _.find(vm.courseTypeOptions, { id: courseTypeID }).description;\n\t }\n\t return courseTypeDescription;\n\t }\n\n\t function searchTextChanged(value) {\n\t //vm.searchText = cleanString(vm.searchText);\n\t loadTeachers(true);\n\t }\n\n function sortChanged(expression) {\n vm.sort = expression;\n loadTeachers(true);\n }\n\n function setupFilters() {\n\n // get our list of subject types\n subjectTypeRepository.getAll().then(function (subjectTypes) {\n\n // format our list of subject types to fit filter config\n var subjectTypesFilterItems = [];\n if (subjectTypes) {\n subjectTypesFilterItems = _.map(subjectTypes, function (st) {\n return { id: st.subjectTypeID, description: st.subjectTypeName };\n });\n }\n\n // Filter Configuration\n $scope.filterConfig = {\n filters:\n {\n 'AcademicYear': { name: 'AcademicYear', displayName: 'Academic Year', type: 'radio', persist: true },\n 'School': { name: 'School', displayName: 'School', type: 'radio', persist: true },\n 'GradeLevel': { name: 'GradeLevel', displayName: 'Grade Level', type: 'checkbox', isCollapsed: true, persist: true },\n 'MarkingPeriod': { name: 'MarkingPeriod', displayName: 'Marking Period', type: 'checkbox', isCollapsed: true, persist: true },\n \"SchoolGradeLevelSection\": { name: \"SchoolGradeLevelSection\", displayName: \"Section Group\", type: \"checkbox\", isCollapsed: true, persist: true },\n \"SubjectType\": { name: \"SubjectType\", displayName: \"Course Category\", type: \"checkbox\", isCollapsed: true, items: subjectTypesFilterItems, persist: true },\n \"Homeroom\": { name: \"Homeroom\", displayName: \"Homeroom\", type: \"checkbox\", isCollapsed: true, persist: true },\n \"CourseType\": {\n name: \"CourseType\", displayName: \"Course Type\", type: \"checkbox\", isCollapsed: true, persist: true,\n items: vm.courseTypeOptions\n }\n }\n };\n }, function (error) {\n errorService.getUnhandledError(error, 'An error occurred initiating filter data.');\n });\n }\n\n function goToCourse(course) {\n if (course) {\n courseDataManagerService.setCourseCancelState($state.current);\n $state.go('course.overview', { courseID: course.courseSectionGroupID }, { reload: true });\n }\n }\n\n function init() {\n setupFilters();\n $rootScope.$broadcast('master-scheduling-course-unloaded', {});\n }\n\n init();\n\n\t /** Exports **/\n vm.remove = remove;\n vm.searchTextChanged = searchTextChanged;\n vm.termDisplay = termDisplay;\n\t vm.loadMoreTeachers = loadMoreTeachers;\n\t vm.sortChanged = sortChanged;\n\t vm.toggleDetails = toggleDetails;\n\t vm.goToCourse = goToCourse;\n\t}\n\n\n","\n\n angular.module('nha.schedule')\n .service('schoolMarkingPeriodGroupOptionService', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('SchoolMarkingPeriodGroupOption', masterSchedulingRestangular);\n }\n ]);\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.subjects', {\n url: '/subjects',\n templateUrl: 'app/course/subjects/subjects.html',\n controller: 'CourseSubjectsCtrl as CourseSubjectsVM',\n ncyBreadcrumb: {\n label: 'Subjects',\n },\n title: 'Subjects',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses'\n }\n }\n })\n .state('new-course.subjects', {\n url: '/subjects',\n templateUrl: 'app/course/subjects/subjects.html',\n controller: 'CourseSubjectsCtrl as CourseSubjectsVM',\n ncyBreadcrumb: {\n label: 'Subjects',\n },\n title: 'Subjects',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('Courses:Post');\n }]\n },\n data: {\n security: {\n requiredResource: 'Courses:Post'\n }\n }\n })\n ;\n }]);\n\n\n","\n\n angular.module('nha.schedule')\n .service('courseSectionRosterService', [\n 'baseService', 'appSettings', 'MasterSchedulingRestangular',\n function (baseService, appSettings, masterSchedulingRestangular) {\n\n var service = {\n appSettings: appSettings,\n getAll: getAll,\n get: get\n };\n\n return service;\n\n function getAll() {\n var params: any = {};\n return baseService.getList('courseSectionRoster', params, false, true, masterSchedulingRestangular);\n }\n\n function get(courseSectionRosterId) {\n return baseService.getSingle('courseSectionRoster', { courseSectionRosterId: courseSectionRosterId }, false, true, masterSchedulingRestangular);\n }\n\n }\n ]);\n"," angular.module('nha.schedule')\n .service('courseValidationService', ['courseDataManagerService',\n function (courseDataManagerService) {\n\n var validations = [];\n\n var severity = {\n critical: 3,\n error: 2,\n warning: 1,\n info: 0\n }\n\n function isFormComplete(frmName) {\n return _.isEmpty(getValidations(frmName));\n }\n\n function isValid() {\n return !_.some(getValidations(), function (v) {\n return v.severity > severity.warning;\n });\n }\n\n function getValidations(formName = null) {\n\n\t\t const validations = [];\n\n\t\t const course = courseDataManagerService.getCourse();\n\n\t\t // check grade level\n if (course.schoolGradeLevel && !course.schoolGradeLevel.gradeLevelID) {\n validations.push({ message: 'Grade Level is required.', form: 'overview', severity: severity.error });\n }\n else {\n // section group\n if (!course.courseSectionGroup.gradeLevelSectionID) {\n validations.push({ message: 'Section Group is required.', form: 'overview', severity: severity.error });\n }\n }\n\n // marking periods\n if (_.isEmpty(course.schoolMarkingPeriods)) {\n validations.push({ message: 'Marking Periods are not specified.', form: 'overview', severity: severity.error });\n }\n\n // Meeting Block Times\n if (_.isEmpty(course.courseSectionGroupMeetingBlockTimes)) {\n validations.push({ message: 'Meeting Block Times are not specified.', form: 'overview', severity: severity.error });\n }\n\n if (course.curriculum.curriculumType == 2 && !course.courseSectionGroup.modifiedCurriculumGradeLevelID) {\n validations.push({ message: 'You must select a modified curriculum grade level when the modified curriculum option is marked.', form: 'overview', severity: severity.error });\n }\n\n if (course.curriculum.curriculumType == 3 && !course.courseSectionGroup.advancedCurriculumGradeLevelID) {\n validations.push({ message: 'You must select an advanced curriculum grade level when the advanced curriculum option is marked.', form: 'overview', severity: severity.error });\n }\n\n if (course.courseSectionGroup.capacity) {\n if (course.courseSectionGroup.capacity < 0 || course.courseSectionGroup.capacity % 1 !== 0) {\n validations.push({ message: 'Capacity must be a non-negative whole number or left empty.', form: 'overview', severity: severity.error });\n }\n }\n\n // subjects\n if (_.isEmpty(course.courseSubjects)) {\n validations.push({ message: 'No subjects were specified.', form: 'subjects', severity: severity.error });\n }\n if (!course.courseSectionGroup.courseSectionGroupID && !course.areSubjectsVerified) {\n validations.push({ message: 'Please verify course subjects.', form: 'subjects', severity: severity.warning });\n }\n\n var invalidSubjects = _.filter(course.courseSubjects, function (cs) {\n return cs.schoolSubject === -1;\n });\n\n if (invalidSubjects.length > 0) {\n validations.push({ message: 'Valid Subject is required.', form: 'subjects', severity: severity.error });\n }\n\n //Teachers\n if (!_.isEmpty(course.subjects)) {\n validations.push({ message: 'At least one teacher is required.', form: 'teachers', severity: severity.warning });\n } else {\n var noStaff = _.every(course.courseSubjects, function (cs) {\n return _.isEmpty(cs.staff);\n });\n if (noStaff) {\n validations.push({ message: 'At least one teacher is required.', form: 'teachers', severity: severity.warning });\n }\n }\n\n //Students\n if (!_.isEmpty(course.subjects)) {\n validations.push({ message: 'At least one student is required.', form: 'roster', severity: severity.warning });\n } else {\n var noStudents = _.every(course.courseSubjects, function (cs) {\n return _.isEmpty(cs.students);\n });\n if (noStudents) {\n validations.push({ message: 'At least one student is required.', form: 'roster', severity: severity.warning });\n }\n }\n\n if (formName) {\n return _.filter(validations, { 'form': formName });\n }\n\n return validations;\n }\n\n var service = {\n severityLevels: severity,\n getValidations: getValidations,\n isFormComplete: isFormComplete,\n isValid: isValid\n };\n\n return service;\n }\n ]);\n","\n\n angular.module('nha.schedule').factory('addStudentService',\n ['appSettings', 'baseService', 'MasterSchedulingRestangular', 'EnrollmentRestangular',\n\n function (appSettings, baseService, masterSchedulingRestangular, enrollmentRestangular) {\n var svc = this;\n svc.getStudents = getStudents;\n\t\tsvc.getEnrollmentPreferences = getEnrollmentPreferences;\n\n svc.textSearchFields = ['LastName', 'FirstName'];\n\n return svc;\n\n function getStudents(parameters, filters) {\n\t\t\tvar apiParameters: any = {};\n\n\t\t\t// Parameters\n\t\t\tapiParameters.courseSectionGroupID = parameters.courseSectionGroupID;\n\t\t\tif (!apiParameters.courseSectionGroupID) {\n\t\t\t\tapiParameters.courseSectionGroupID = 0;\n\t\t\t}\n\n\t\t\tif (_.some(parameters.meetingBlockTimeIDs)) {\n\t\t\t\tapiParameters.meetingBlockTimeIDs = parameters.meetingBlockTimeIDs;\n\t\t\t}\n\n\t\t\tapiParameters.searchText = parameters.searchText;\n\t\t\tsetFilters(apiParameters, filters);\n\t\t\t_utils.setOrderByParameters(apiParameters, parameters.sortOrder);\n\n\t\t\t// Filters\n\t\t\tapiParameters.academicYearID = _.find(filters.AcademicYear.items, 'selected').id\n\t\t\tapiParameters.schoolID = _.find(filters.School.items, 'selected').id\n\t\t\tapiParameters.gradeLevelIDs = _(filters.GradeLevel.items).filter('selected').map('id').value();\n\n\t\t\tif (filters.MarkingPeriod) {\n\t\t\t\tapiParameters.markingPeriodIDs = _(filters.MarkingPeriod.items).filter('selected').map('id').value();\n\t\t\t}\n\n\t\t\tif (filters.MasterStatus) {\n\t\t\t\tapiParameters.masterStatusIDs = _(filters.MasterStatus.items).filter('selected').map('id').value();\n\t\t\t}\n\n if (filters.SecondaryMasterStatus) {\n\t\t\t\tapiParameters.secondaryMasterStatusIDs = _(filters.SecondaryMasterStatus.items).filter('selected').map('id').value();\n\t\t\t}\n\n if (filters.Schedule) {\n var selectedID = _.find(filters.Schedule.items, 'selected').id;\n if (selectedID) {\n apiParameters.scheduled = selectedID === 1;\n }\n\t\t\t}\n\n\t\t\treturn baseService.getList('CourseStudentDetail', apiParameters, false, true, masterSchedulingRestangular)\n\t\t\t\t.then(function (response) {\n\t\t\t\t\treturn response;\n\t\t\t\t});\n }\n\n function setFilters(parameters, filters) {\n if (filters) {\n var oDataFilter = {};\n\n _utils.setFilterODataItem(oDataFilter, filters, 'AcademicYear', 'AcademicYearID');\n _utils.setFilterODataItem(oDataFilter, filters, 'School', 'SchoolID');\n _utils.setFilterODataItem(oDataFilter, filters, 'GradeLevel', 'GradeLevelID');\n _utils.setFilterODataItem(oDataFilter, filters, 'MasterStatus', 'MasterStatusID');\n _utils.setFilterODataItem(oDataFilter, filters, 'SecondaryMasterStatus', 'SecondaryMasterStatusID');\n\n\n // now build out our actual OData query\n if (!_.isEmpty(oDataFilter)) {\n _.assign(parameters, _utils.getODataRequest({ filter: oDataFilter }));\n }\n }\n }\n\n function getEnrollmentPreferences() {\n\n return baseService.getList('EnrollmentPreference', null, true, true, enrollmentRestangular);\n }\n }]);\n\n","angular.module('nha.schedule').controller('courseSubjectsModalController', courseSubjectsModalController);\n\ncourseSubjectsModalController.$inject = ['$uibModalInstance', '$timeout', 'courseDataManagerService'];\n\nfunction courseSubjectsModalController($uibModalInstance, $timeout, courseDataManagerService) {\n\tvar vm = this;\n\tvm.viewState = { loading: true, subjectsLoading: true };\n\tvm.selectedSubjects = [];\n\tvm.subjectFilters = {};\n\tvm.subjects = [];\n\n\tvm.addSubject = (subject) => {\n\t\tvm.selectedSubjects.push(subject);\n\t};\n\n\tvm.removeSubject = (subject) => {\n\t\tvm.selectedSubjects = vm.selectedSubjects.filter((s) => {\n\t\t\treturn s.subjectLevel1ID !== subject.subjectLevel1ID;\n\t\t});\n\t};\n\n\tvm.subjectSelected = (subject) => {\n\t\treturn vm.selectedSubjects.some((s) => {\n\t\t\treturn s.subjectLevel1ID === subject.subjectLevel1ID;\n\t\t});\n\t};\n\n\n\tvm.getVendorName = (vendorID) => {\n\t\tif (vm.subjectFilters && vm.subjectFilters.vendors) {\n\t\t\tvar vendor = vm.subjectFilters.vendors.find((v) => {\n\t\t\t\treturn v.vendorID === vendorID;\n\t\t\t});\n\t\t\treturn vendor ? vendor.vendorName : '';\n\t\t}\n\t\treturn '';\n\t};\n\n\tvm.getSubjectClassificationName = (subjectClassificationID) => {\n\t\tif (vm.subjectFilters && vm.subjectFilters.subjectClassifications) {\n\t\t\tvar subjectClassification = vm.subjectFilters.subjectClassifications.find((sc) => {\n\t\t\t\treturn sc.subjectClassificationID === subjectClassificationID;\n\t\t\t});\n\t\t\treturn subjectClassification ? subjectClassification.subjectClassificationName : '';\n\t\t}\n\t\treturn '';\n\t};\n\n\tvm.courseTypeSelected = (courseType) => {\n\t\tvm.subjects = filteredSubjects();\n\t}\n\n\tvm.courseTypeClick = (courseType) => {\n\t\tvar index = vm.subjectFilters.courseTypes.findIndex(ct => ct.subjectClassificationID === courseType.subjectClassificationID);\n\t\tvm.subjectFilters.courseTypes[index].selected = !vm.subjectFilters.courseTypes[index].selected;\n\n\t\tvm.courseTypeSelected(courseType);\n\t}\n\n\tvm.cancel = () => {\n\t\t$uibModalInstance.dismiss();\n\t};\n\n\tvm.done = () => {\n\t\t$uibModalInstance.close(vm.selectedSubjects);\n\t};\n\n\tvm.gradeLevelChange = () => {\n\t\tvm.viewState.subjectsLoading = true;\n\t\tvm.subjectOptions = [];\n\n\t\tcourseDataManagerService.loadSchoolSubjects(false, vm.gradeLevelID).then(() => {\n\t\t\tvm.subjectOptions = courseDataManagerService.getSubjectOptions();\n\t\t\tvm.subjects = filteredSubjects();\n\n\t\t\tvm.viewState.subjectsLoading = false;\n\t\t});\n\n\t}\n\n\tvm.filterchange = () => {\n\t\tvm.subjects = filteredSubjects();\n\t}\n\n\n\tfunction filteredSubjects(){\n\t\treturn vm.subjectOptions.filter((s) => {\n\t\t\treturn (\n\t\t\t\t(vm.searchText ? s.subjectName.toLowerCase().contains(vm.searchText.toLowerCase()) : true) &&\n\t\t\t\t(vm.onlineOnly === 'yes' ? s.isOnline : true) &&\n\t\t\t\t(+vm.subjectTypeID ? s.subjectTypeID === +vm.subjectTypeID : true) &&\n\t\t\t\t(+vm.creditTypeID ? s.creditTypeID === +vm.creditTypeID : true) &&\n\t\t\t\tfilterSubjectClassifications(s) &&\n\t\t\t\t(+vm.vendorID ? s.vendorID === +vm.vendorID : true)\n\t\t\t);\n\t\t});\n\t};\n\n\tfunction filterSubjectClassifications(subject){\n\t\tvar x = false;\n\t\tvm.subjectFilters.courseTypes.forEach(ct => {\n\t\t\tif(ct.selected && ct.subjectClassificationID === subject.subjectClassificationID){\n\t\t\t\tx = true;\n\t\t\t}\n\t\t})\n\t\treturn x;\n\t}\n\n\tfunction init() {\n\t\tcourseDataManagerService.ensureAppContext().then((course) => {\n\t\t\tvm.subjects = [];\n\t\t\tvm.course = course;\n\n\t\t\tcourseDataManagerService.loadSchoolSubjects().then(() =>{\n\t\t\t\tvm.selectedSubjects = vm.course.courseSubjects.map((cs) => cs.schoolSubject);\n\t\t\t\tvm.subjectOptions = courseDataManagerService.getSubjectOptions();\n\n\t\t\t\tcourseDataManagerService.loadSchoolSubjectFilters().then((data) => {\n\t\t\t\t\tvm.subjectFilters.vendors = data.vendors;\n\t\t\t\t\tvm.subjectFilters.subjectTypes = data.subjectTypes;\n\t\t\t\t\tvm.subjectFilters.creditTypes = data.creditTypes;\n\t\t\t\t\tvm.subjectFilters.gradeLevels = data.gradeLevels;\n\t\t\t\t\tvm.subjectFilters.courseTypes = data.courseTypes;\n\t\t\t\t\tvm.subjectFilters.courseTypes.forEach(ct => {\n\t\t\t\t\t\t// All should be selected except for credit recovery\n\t\t\t\t\t\tif(ct.subjectClassificationID !== 10){\n\t\t\t\t\t\t\tct.selected = true;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tct.selected = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tif (course && course.courseSectionGroup && course.schoolGradeLevel) {\n\t\t\t\t\t\tvm.gradeLevelID = course.schoolGradeLevel.gradeLevelID;\n\t\t\t\t\t}\n\n\t\t\t\t\tvm.subjects = filteredSubjects();\n\t\t\t\t\tvm.viewState.loading = false;\n\t\t\t\t\tvm.viewState.subjectsLoading = false;\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t});\n\t}\n\n\tinit();\n}\n","\n\n angular.module('nha.schedule').factory('courseTeachersService',\n ['appSettings', 'baseService', 'CoreRestangular', 'EnrollmentRestangular',\n\n function (appSettings, baseService, coreRestangular, enrollmentRestangular) {\n var svc = this;\n svc.pageSize = 50;\n svc.moreExist = true;\n svc.loadedCount = 0;\n svc.getTeachers = getTeachers;\n svc.getEnrollmentPreferences = getEnrollmentPreferences;\n\n svc.textSearchFields = ['LastName', 'FirstName', 'MiddleName'];\n\n return svc;\n\n function getTeachers(parameters, filters) {\n if (!parameters.append) {\n svc.loadedCount = 0;\n svc.moreExist = true;\n }\n\n if (parameters.resetPageSize) {\n svc.pageSize = svc.defaultPageSize;\n }\n\n var apiParameters: any = _utils.getODataRequest({ 'filter': filters });\n\n apiParameters.$top = svc.pageSize;\n apiParameters.$skip = svc.loadedCount;\n\n\n _utils.setOrderByParameters(apiParameters, parameters.sortOrder);\n _utils.setSearchFilter(apiParameters, parameters.searchText, svc.textSearchFields);\n\n var endPoint = 'staffQueue';\n\n\n return baseService.getList(endPoint, apiParameters, false, true, coreRestangular).then(function (response) {\n\n //log('svc.loadedCount', svc.loadedCount, 'response.length', response.length);\n\n // paging logic\n svc.loadedCount += response.length;\n if (response.length < svc.pageSize) {\n\n svc.moreExist = false;\n }\n\n return response;\n });\n }\n\n\n function getEnrollmentPreferences() {\n\n return baseService.getList('EnrollmentPreference', null, true, true, enrollmentRestangular);\n\t\t}\n\n\n }]);\n\n","\n\n function EffectiveDateModalCtrl($scope, $uibModalInstance, title, action, message, listItems, studentGradeLevelID, gradeLevels) {\n\n var vm = this;\n vm.title = title;\n vm.action = action;\n vm.message = message;\n vm.listItems = listItems;\n vm.gradeLevels = gradeLevels;\n vm.studentGradeLevelID = studentGradeLevelID;\n vm.viewState = { showAddForm: gradeLevels && gradeLevels.length && !listItems }\n\n \n vm.confirm = function () {\n if (!vm.effectiveDate) {\n vm.effectiveDate = moment();\n }\n\n var returnVal: any = { effectiveDate: vm.effectiveDate }\n\n if (!vm.viewState.showAddForm) {\n $uibModalInstance.close(returnVal);\n } else {\n vm.form.gradeLevel.$setDirty();\n\n if (vm.form.$valid) {\n returnVal.gradeLevelID = vm.studentGradeLevelID;\n $uibModalInstance.close(returnVal)\n }\n }\n };\n\n vm.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n\n angular.module('nha.schedule').controller('EffectiveDateModalCtrl', EffectiveDateModalCtrl);\n\n EffectiveDateModalCtrl.$inject = ['$scope', '$uibModalInstance', 'title', 'action', 'message', 'listItems', 'studentGradeLevelID', 'gradeLevels'];\n\n\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.roster.transfer-confirmation', {\n url: '/transfer/students/confirmation',\n views: {\n '@': {\n templateUrl: 'app/course/roster/transfer/transfer-confirmation/transfer-confirmation.html',\n controller: 'TransferConfirmationCtrl as TransferConfirmationVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Transfer Confirmation',\n skip: true\n },\n title: 'Transfer Confirmation',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('StudentTransfers');\n }]\n },\n data: {\n security: {\n requiredResource: 'StudentTransfers'\n }\n }\n })\n ;\n }]);\n\n\n","angular.module('nha.schedule').config([\n\t'$stateProvider',\n\t'$urlRouterProvider',\n\t'$locationProvider',\n\t'$breadcrumbProvider',\n\t'$sceDelegateProvider',\n\t'$compileProvider',\n\t'RestangularProvider',\n\t'appSettings',\n\tfunction config(\n\t\t$stateProvider,\n\t\t$urlRouterProvider,\n\t\t$locationProvider,\n\t\t$breadcrumbProvider,\n\t\t$sceDelegateProvider,\n\t\t$compileProvider,\n\t\tRestangularProvider,\n\t\tappSettings\n\t) {\n\t\t// this allow angular to talk to other angular and support CORS\n\t\t$sceDelegateProvider.resourceUrlWhitelist([\n\t\t\t'self',\n\t\t\t'https://*.nhatest.com/**',\n\t\t\t'https://*.mynhadev.com/**',\n\t\t\t'https://*.mynhadev.com:**',\n\t\t\t'https://*.nhaschools.com/**',\n\t\t\t'https://*.mynha.com/**',\n\t\t\t'https://*.mynhadev.com:**',\n\t\t\t'https://mynha.com/**',\n\t\t]);\n\n\t\t// Disable debug info attributes. This is new in 1.3 and is a perf optimization\n\t\tif (appSettings.environment != 'dev' && appSettings.environment != 'ci') {\n\t\t\t$compileProvider.debugInfoEnabled(false);\n\t\t}\n\n\t\t// grab our breadcrumb template root\n\t\t$breadcrumbProvider.setOptions({\n\t\t\tincludeAbstract: true,\n\t\t\ttemplateUrl: appSettings.coreWebRootUrl + 'app/directives/breadcrumb/breadcrumb.html',\n\t\t});\n\n\t\t$urlRouterProvider.otherwise('/courses');\n\n\t\t$locationProvider.html5Mode({ enabled: true, requireBase: false });\n\t\t$locationProvider.hashPrefix('!');\n\n\t\t// default base url to Staff Api\n\t\tRestangularProvider.setBaseUrl(appSettings.masterSchedulingServicesRootUrl);\n\t},\n]);\n\n// what to run when the app first loads\nangular.module('nha.schedule').run([\n\t'$location',\n\t'$state',\n\t'$rootScope',\n\t'stateTransitionSecurityCheck',\n\t'userContextService',\n\t'appSettings',\n\tfunction ($location, $state, $rootScope, stateTransitionSecurityCheck, userContextService, appSettings) {\n\t\tstateTransitionSecurityCheck.attachStateChangeListener();\n\n\t\tuserContextService.ensureUserContext().then(function (user) {\n\t\t\tvar myNHA = window['myNHA'];\n\t\t\tvar tagManager = new myNHA.TagManagerService();\n\t\t\ttagManager.setupUserID();\n\t\t});\n\n\t\tvar pageTitleAppName = ' | NHA Student Information System';\n\t\tvar defaultPageTitle = 'Master Scheduling' + pageTitleAppName;\n\n\t\t// whenever the UI Route change, fire off this event to update the page title\n\t\t$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\n\t\t\tif (toState.hasOwnProperty('title')) {\n\t\t\t\tdocument.title = toState.title + pageTitleAppName;\n\t\t\t} else if (document.title !== defaultPageTitle) {\n\t\t\t\tdocument.title = defaultPageTitle;\n\t\t\t}\n\n\t\t\t// let's capture the previous and current state, for nav reasons\n\t\t\t$rootScope.previousState = fromState.name;\n\t\t\t$rootScope.currentState = toState.name;\n\t\t\t_utils.enableScrollToTopOnStateChangeSuccess();\n\t\t});\n\n\t\t$rootScope.$on('$stateChangeStart', function (evt, to, params) {\n\t\t\tif (to.redirectTo) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\t$state.go(to.redirectTo, params);\n\t\t\t}\n\t\t});\n\t},\n]);\n","// \n\n\n function CourseRemoveTeachersCtrl($scope, $state, courseDataManagerService, courseSectionStaffService, businessResponseService) {\n\n var vm = this;\n\n vm.course = courseDataManagerService.getCourse();\n $scope.course = vm.course;\n\n vm.nameSortCriteria = [\n { criteria: 'staff.lastName', displayName: 'Last Name' },\n { criteria: 'staff.firstName', displayName: 'First Name' }\n ];\n\n //vm.effectiveDate = moment();\n\n vm.sort = [];\n\n vm.clearSelectedCourseSubjects = {};\n\n vm.loadingViewState = { teachersLoading: false };\n\n vm.goToRemoveSubjects = function () {\n\n _.forEach(vm.teachers, function (t) {\n if (t.selected) {\n t.effectiveDate = vm.effectiveDate;\n }\n });\n\n $state.go('^.remove-teachers-from');\n }\n\t\t// { 'staffID': staffID, 'masterStatusID': 21 }\n function getTeacherSubjects(staffID) {\n // Get the subjects the staff member is part of.\n var temp = _.map(_.filter(vm.course.courseSubjects, function (cs) {\n return _.some(cs.staff, function(staff) {\n\t\t\t\t\treturn staff.staffID === staffID && staff.currentStatus.masterStatusID === 21\n\t\t\t\t});\n }), function (cs) {\n // Strip out the parts we don't need to prevent massive model\n return { id: _.find(cs.staff, { 'staffID': staffID }).courseSectionStaffID, name: cs.courseSection.courseSubjectDisplayName };\n\t\t\t});\n\n\t\t\treturn temp;\n }\n\n\n $scope.$watch(function () {\n return courseDataManagerService.getCourse();\n },\n function () {\n if (vm.course.courseSubjects.length && !vm.teachers) {\n var teachers = _.uniqBy(_.flatten(_.map(vm.course.courseSubjects, 'staff')), 'staffID');\n _.each(teachers, function (teacher) {\n teacher.subjects = getTeacherSubjects(teacher.staffID);\n });\n vm.teachers = teachers;\n }\n }\n , true);\n\n vm.sortChanged = function (expression) {\n vm.sort = _.map(expression, function (crit) {\n return (crit.descending ? '-' : '') + crit.criteria;\n });\n }\n\n vm.searchFilter = function (item) {\n if (!item.staff) {\n return false;\n }\n return !vm.searchBoxDisplay || _.some([item.staff.firstName, item.staff.lastName], function (str) {\n return _.includes(str.toUpperCase(), vm.searchBoxDisplay.toUpperCase());\n });\n }\n\n vm.remove = function () {\n var statusChanges = [];\n _.each(vm.teachers, function(t) {\n _.each(t.subjects, function (s) {\n if (s.selected) {\n statusChanges.push({ Id: s.id, StartDate: t.effectiveDate.toDate() });\n }\n });\n });\n courseSectionStaffService.remove(statusChanges).then(function () {\n courseDataManagerService.resetCourse();\n $state.go('^', {}, { reload: true });\n }, function(error) {\n businessResponseService.showBusinessResponse(error.data, \"The teacher could not be removed\");\n });\n }\n\t}\n\n angular.module('nha.schedule').controller('CourseRemoveTeachersCtrl', CourseRemoveTeachersCtrl);\n\n CourseRemoveTeachersCtrl.$inject = ['$scope', '$state', 'courseDataManagerService', 'courseSectionStaffService', 'businessResponseService'];\n\n\n","\n\n angular.module('nha.schedule')\n .service('courseSectionGroupDetailRepository', ['repositoryFactory', 'MasterSchedulingRestangular',\n function (repositoryFactory, masterSchedulingRestangular) {\n return new repositoryFactory('CourseSectionGroupDetail', masterSchedulingRestangular);\n }\n ]);\n","\n\n angular.module('nha.schedule').config(['$stateProvider', 'appSettings', function config($stateProvider, appSettings) {\n $stateProvider\n .state('course.roster.transfer-courses', {\n url: '/transfer/students/courses',\n views: {\n '@': {\n templateUrl: 'app/course/roster/transfer/transfer-courses/transfer-courses.html',\n controller: 'TransferCoursesCtrl as TransferCoursesVM',\n }\n },\n ncyBreadcrumb: {\n label: 'Transfer Courses',\n skip: true\n },\n title: 'Transfer Courses',\n resolve: {\n authorization: ['stateTransitionSecurityCheck', function (stateTransitionSecurityCheck) {\n return stateTransitionSecurityCheck.resolveAuthorization('StudentTransfers', 'MasterScheduling');\n }]\n },\n data: {\n security: {\n requiredResource: 'StudentTransfers'\n }\n }\n })\n ;\n }]);\n\n\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import { ISchoolSubject } from 'app/types';\n\nangular.module('nha.schedule').controller('CourseSubjectsCtrl', CourseSubjectsCtrl);\n\nCourseSubjectsCtrl.$inject = [\n\t'errorSvc',\n\t'courseDataManagerService',\n\t'courseSectionService',\n\t'uiAlertService',\n\t'$timeout',\n\t'businessResponseService',\n\t'$uibModal',\n];\n\nfunction CourseSubjectsCtrl(\n\terrorService,\n\tcourseDataManagerService,\n\tcourseSectionService,\n\tuiAlertService,\n\t$timeout,\n\tbusinessResponseService,\n\t$uibModal\n) {\n\tvar vm = this;\n\n\tvm.viewState = { pageLoading: true };\n\tvm.course = courseDataManagerService.getCourse();\n\tvm.subjectOptions = [];\n\tvm.subjectForm = {};\n\n\tvm.openSubjectsModal = () => {\n\t\tvar modalInstance = $uibModal.open({\n\t\t\tanimation: true,\n windowClass: 'subjects-modal-window',\n\t\t\ttemplateUrl: 'app/course/subjects/subjects-modal/subjects-modal.html',\n\t\t\tcontroller: 'courseSubjectsModalController as vm',\n\t\t});\n\n\t\tmodalInstance.result.then((selectedSubjects: ISchoolSubject[]) => {\n\t\t\tconst existingSubjectLevel1IDs = vm.course.courseSubjects.map((cs) => cs.schoolSubject.subjectLevel1ID);\n\t\t\tconst selectedSubjectLevel1IDs = selectedSubjects.map((ss) => ss.subjectLevel1ID);\n\t\t\tconst subjectsToAdd = selectedSubjects.filter((ss) => !existingSubjectLevel1IDs.includes(ss.subjectLevel1ID));\n\t\t\tconst subjectsToDelete = vm.course.courseSubjects.filter((cs) => !selectedSubjectLevel1IDs.includes(cs.schoolSubject.subjectLevel1ID));\n\n subjectsToDelete.forEach(cs => {\n vm.deleteLineItem(cs);\n });\n\n subjectsToAdd.forEach(ss=> {\n courseDataManagerService.addCourseSubject(ss);\n vm.course.isDefaultSubjects = false;\n })\n\t\t});\n\t};\n\n\tvm.deleteLineItem = (s) => {\n\t\tif (s.courseSection.courseSectionID < 1) {\n\t\t\tvm.course.isDefaultSubjects = false;\n\t\t\tvm.course.courseSubjects = vm.course.courseSubjects.filter(cs=> cs.schoolSubject.subjectLevel1ID !== s.schoolSubject.subjectLevel1ID);\n uiAlertService.success(`'${s.schoolSubject.subjectName}' was successfully removed from the course.`, 'Subject Removed');\n\t\t} else {\n\t\t\tcourseSectionService.deleteCourseSection(s.courseSection.courseSectionID).then(\n\t\t\t\t(response) => {\n\t\t\t\t\tvm.course.isDefaultSubjects = false;\n\t\t\t\t\tvm.course.courseSubjects = vm.course.courseSubjects.filter(cs=> cs.schoolSubject.subjectLevel1ID !== s.schoolSubject.subjectLevel1ID);\n\t\t\t\t\tuiAlertService.success(`'${s.schoolSubject.subjectName}' was successfully removed from the course.`, 'Subject Removed');\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tbusinessResponseService.showBusinessResponse(error.data, 'The selected course section could not be deleted');\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n\n\tvm.subjectChanged = (courseSubject) => {\n\t\tif (vm.course && vm.subjectOptions) {\n\t\t\t$timeout(() => {\n\t\t\t\tif (courseSubject.courseSection && courseSubject.schoolSubject) {\n\t\t\t\t\tvar isDuplicate = _.some(vm.course.courseSubjects, (s) => {\n\t\t\t\t\t\treturn s.courseSection.subjectLevel1ID === courseSubject.schoolSubject.subjectLevel1ID;\n\t\t\t\t\t});\n\t\t\t\t\tif (isDuplicate) {\n\t\t\t\t\t\tswal('Error', 'You cannot have duplicate subjects within a course.', 'error');\n\t\t\t\t\t\tcourseSubject.schoolSubject = null;\n\t\t\t\t\t\tcourseSubject.courseSection = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcourseSubject.courseSection.courseSectionID = -1;\n\t\t\t\t\t\tcourseSubject.courseSection.courseSubjectDisplayName = courseSubject.schoolSubject.subjectName;\n\t\t\t\t\t\tcourseSubject.courseSection.subjectLevel1ID = courseSubject.schoolSubject.subjectLevel1ID;\n\t\t\t\t\t\tcourseSubject.courseSection.courseSectionGroupID = vm.course.courseSectionGroup.CourseSectionGroupId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t}\n\t};\n\n\t//var modalInstance = $uibModal.open({});\n\n\t//var modalInstance = $uibModal.open({});\n\n\tfunction init() {\n\t\terrorService.dismissAllErrors();\n\n\t\tcourseDataManagerService.ensureAppContext().then((course) => {\n\t\t\tvm.course = course;\n\n\t\t\t_.each(course.courseSubjects, (courseSubject, key) => {\n\t\t\t\tcourse.courseSubjects[key].courseSection.courseSubjectDisplayName = _.replace(\n\t\t\t\t\tcourse.courseSubjects[key].courseSection.courseSubjectDisplayName,\n\t\t\t\t\t/\\sVIR/g,\n\t\t\t\t\t''\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tvm.course.areSubjectsVerified = true;\n\t\t\tvm.subjectOptions = courseDataManagerService.getSubjectOptions();\n\n\t\t\tvm.viewState.pageLoading = false;\n\t\t});\n\t}\n\n\tinit();\n}\n"],"names":["angular","module","service","repositoryFactory","baseService","masterSchedulingRestangular","repo","setFilters","parameters","filters","searchText","AcademicYear","selectedYear","_","head","filter","items","academicYearId","id","School","selectedSchool","schoolId","GradeLevel","selectedIds","map","gradeLevelIds","MarkingPeriod","markingPeriodIds","SchoolGradeLevelSection","sectionGroupIds","SubjectType","subjectTypeIds","_utils","setSearchFilter","textSearchFields","getTeacherCounts","apiParameters","getList","config","$stateProvider","appSettings","state","url","views","templateUrl","controller","ncyBreadcrumb","label","parent","skip","title","resolve","authorization","stateTransitionSecurityCheck","resolveAuthorization","data","security","requiredResource","CourseAddTeachersSubjectsCtrl","$scope","$state","$uibModal","courseSectionStaffService","courseDataManagerService","uiAlertService","businessResponseService","vm","this","isOnsiteFacilitatorFlow","params","flowType","loadingViewState","pageLoading","sort","criteria","descending","positions","name","shortName","typeId","resetOnCancel","flowTypeSubjectFilter","s","schoolSubject","isOnline","subjectClassificationID","courseSectionStaff","canAssignPrimaryTeacherOfRecord","courseSection","staffTypeId","css","courseSectionStaffTypeID","subjectLevel1ID","length","setTeacher","teacher","courseSectionID","courseSectionStaffType","pos","staff","lastName","firstName","isActive","push","assign","setAll","staffTypeID","subjectFilter","subjects","each","sub","some","teacherStaffId","availableTeachers","teachers","getTeachers","removeTeacher","$event","stopPropagation","remove","add","teachersToAdd","t","isLocked","academicYearID","course","courseSectionGroup","schoolID","staffID","positionTypeID","masterStatusID","statusHistory","date","effectiveDate","isCurrent","masterStatus","description","secondaryTeacherInNonSecondaryStaffType","isSecondaryTeacher","isSecondary","isEmpty","teacherNamesString","teacherNames","uniq","slice","join","swal","courseID","adding","courseSubjects","subject","forEach","concat","saveCourse","then","result","reconcileOnsiteFacilitatorAccess","success","resetCourse","selectedTeachers","go","error","showBusinessResponse","log","back","cancel","coreAndMoralFocus","includes","subjectTypeID","specialAndElective","console","ensureAppContext","flatten","tch","teacherName","courseSectionStaffID","$inject","get","studentInSchoolID","getForStudent","markingPeriodID","courses","c","sh","inSpecifiedTimezone","getAvailable","gradeLevelIDs","all","post","addCoursesToStudent","coursesToAdd","filteredRepositoryFactory","Homeroom","staffIds","append","loadedCount","moreExist","$top","pageSize","$skip","setOrderByParameters","sortOrder","response","getAvailableTeachers","includeAllPositionTypes","api","CourseCtrl","$timeout","$rootScope","courseService","courseValidationService","errorService","fromState","previousState","validations","initialized","iconUrl","severity","severityLevels","messageText","messageDetailText","isValid","isFormComplete","frmName","allStaffStatusHistories","getValidations","editMode","allStudentStatusHistories","courseSectionGroupName","indexOf","courseSectionGroupMeetingBlockTimes","isArray","csmbtArray","cloneDeep","isEditMode","orderBy","saving","businessResponse","resp","operationResult","passed","current","replace","courseSectionGroupID","reload","deleteCourse","type","showCancelButton","confirmButtonColor","confirmButtonText","closeOnConfirm","deleting","courseId","setMessageAndMessageDetailsText","text","html","showConfirmButton","cancelButtonText","value","setTimeout","messages","messageDetails","rules","rule","message","messageDetail","showDeleteButton","backToPrevious","courseCancelled","academicYearDisplay","parseInt","subjectCount","studentCount","reject","isUndefined","uniqBy","currentMasterStatusID","teacherCount","$on","event","initialState","canUpdateCourse","hasUpdateAccess","isAttendance","attendanceOption","isSafetyAttendance","redirectTo","CourseRemoveStudentsCtrl","rosterHistoryService","getStudentSubjects","cs","students","lastStatus","last","find","courseSectionRosterID","courseSubjectDisplayName","convertToMoment","dateToConvert","moment","trimStart","getCourse","nameSortCriteria","displayName","clearSelectedCourseSubjects","studentsLoading","checkAll","student","selected","uncheckAll","checkAllSubjects","uncheckAllSubjects","sortChanged","expression","crit","searchFilter","item","searchBoxDisplay","str","toUpperCase","attachSubjects","ignoreWarnings","dismissAllErrors","removing","valid","statusChanges","toDate","Id","StartDate","MasterStatusId","IgnoreWarnings","status","displayModal","warningMessage","checkboxLabel","checkboxWarning","open","coreWebRootUrl","size","results","hasError","context","minDate","schoolMarkingPeriods","beginDate","maxDate","endDate","now","isAfter","isBefore","TransferStudentsCtrl","transferStudentsContextManagerService","unselectStudent","transfer","selectedStudents","studentInSchoolId","setSelected","selectStudent","doCancel","resetTransfer","goToStudentRecord","openUrl","studentManagementWebRootUrl","courseSectionGroupId","ensureTransferStudentsContext","getTransfer","getUnhandledError","init","schoolSchedule","isAttendanceRequired","curriculum","curriculumType","gradeLevel","selectedAcademicYear","rosterImport","isDefaultSubjects","areSubjectsVerified","courseOverallPrimaryStaffIds","markingPeriodHybridLearningDays","_ng","moduleInit","studentTransfersRepository","put","fromCourseSectionGroupId","StudentCoursesTransferCoursesCtrl","schoolMarkingPeriodService","termService","courseSectionGroupService","courseSectionService","transferContextService","schoolGradeLevelService","$q","toastr","populateCourseSectionTransfers","courseSections","toCourseSectionGroupId","studentCourses","transferCourseSection","filteredCourseSections","baseSubjectID","transferToCourseList","sortBy","selectedItem","courseSectionSystemGeneratedName","loadTransferCourseSectionGroups","fromCourseSectionGroup","isSBG","courseSectionGroups","groupForGradeLevel","gl","selectedGradeLevelID","getAlternativesWithSameBaseSubjectForGradeLevel","gradeLevelID","getAlternativesWithSameContentAreaForGradeLevel","loadTransferCourseSections","reduce","acc","sc","baseSubjectIDs","subjectLevel1IDs","isSbgOrHighSchool","sl1ID","getCourseSections","updateStudentCourses","courseTransfers","studentCourseTransfer","alreadySet","findIndex","courseToTransfer","courseSectionId","subjectLevel1Id","scheduleBreakTypeId","systemGeneratedName","subjectName","courseSectionPrimaryTeacherDisplayName","markingPeriods","isExcelerateCourse","toCourseSectionId","toCourseSectionSystemGeneratedName","toCourseSubjectDisplayName","toIsExcelerateCourse","loadSchoolGradeLevelScheduleGroups","courseSchedulingService","window","myNHA","GetApiService","getGradeLevelGroups","gradeLevelChanged","termDisplay","courseSectionGroupChanged","filterCourseList","Date","substring","isBetween","filterCourseSectionGroups","csg","effectiveDateChanged","doNext","positionClass","spread","gradeLevels","schoolGradeLevelScheduleGroups","group","primaryGradeLevelIDForGroup","schoolGradeLevelScheduleGroupName","loadMarkingPeriods","factory","endpoint","restangular","setSortOrder","sortSetting","sortString","i","column","$orderby","getFilters","getSingle","getForSchoolGradeLevel","getAll","courseSectionStaffId","insert","CourseOverviewCtrl","schoolMarkingPeriodCombinedService","schoolGradeLevelSectionService","schoolMarkingPeriodGroupOptionService","roomRepository","gradeLevelRepository","apiSecurityService","userContextService","isNewMeetingBlockFeature","allowMultiSelectMeetingBlock","masterScheduleTypeID","getEffectiveMasterScheduleTypeID","$watch","newVal","oldVal","meetingBlockSelectorSettings","groupBy","selectAll","selectionLimit","optionLabel","optionID","showTagCloud","viewState","meetingBlockOptions","overviewForm","disableGradeLevelChange","meetingBlocksToDisplay","previousGradeLevel","loadSchoolGradeLevels","mp","loadRooms","loadMarkingPeriodGroupOptions","loadSchoolGradeLevelSections","getForSchool","getGradeLevelSections","schoolGradeLevelSections","sgls","schoolGradeLevel","setupMeetingBlockTimes","options","getMeetingBlockOptions","meetingBlockTimes","_options","setupMeetingBlocks","getNewMeetingBlocks","selectedMeetingBlockItems","selectedMbt","mbo","children","child","meetingBlockTimeID","meetingBlockName","meetingBlockStartTime","startTime","meetingBlockEndTime","endTime","format","selectedMeetingBlockID","first","isSelected","meetingBlockID","courseSubject","markingPeriodChanged","markingPeriodGroup","smp","markingPeriod","markingPeriodGroupID","getSchedulesForCourse","schedules","setCourseSubjectNames","key","isDayChecked","day","currentMarkingPeriod","schoolMarkingPeriodID","toggleDayToMarkingPeriod","selectedDay","currentlySelectedMarkingPeriodIndex","monday","tuesday","wednesday","thursday","friday","markingPeriodIsSelected","toggleMarkingPeriod","selectedMarkingPeriod","setSelectedMarkingPeriod","getSchedulesForSelectedMarkingPeriods","gradeLevelChange","isConfirm","loadDimensions","selectedGradeLevelSections","selectedSchoolSchedule","showFullYear","courseSpecificationGradeLevelRadioChanged","modifiedCurriculumGradeLevelID","advancedCurriculumGradeLevelID","courseSpecificationGradeLevelChange","getTermMarkingPeriods","meetingBlocksChanged","selectedMeetingBlock","meetingBlockModal","animation","isAttendanceDefault","flatMap","meetingBlockOptionClicked","meetingBlockToDisplay","match","firstChild","courseSectionGroupMeetingBlockTimeID","formattedSelectedMeetingBlockTimes","checkHybridLearningPermissions","userIsSisAdmin","getUserContext","role","contains","courseHasBeenCreated","isAfterMarkingPeriodBeginDate","markingPeriodHybridDays","markingPeriodsHybridDays","option","foundCount","childOption","_hsmeta","childOpt","isParentSelected","isAccessAllowed","schoolGradeLevels","gradeLevelSections","markingPeriodGroups","rooms","accessAllowed","schoolMarkingPeriodGroupOptions","isAttendanceRequiredCheckboxDisabled","gradeLevelGroups","isTerm","sglsg","glg","TransferConfirmationCtrl","doTransfer","updating","saveObject","studentCourseTransfers","courseStudentCurrentMasterStatusID","CourseAddStudentsCtrl","$filter","addStudentService","academicYearRepository","rightPannelLoading","studentPageLoading","courseGradeLevel","courseAY","courseSchool","filterLoadCount","loadStudents","meetingBlockTimeIDs","getStudents","selectedFilters","filterCounts","isDisabled","filterConfig","typeName","syncItemCounts","MasterStatus","SecondaryMasterStatus","noResults","defaultId","grade","selectCheckbox","searchTextChanged","toggleSelected","addToCourse","studentID","_selected","selectNone","selectedSubjects","a","b","courseMinStartDate","courseMaxEndDate","setDateRange","getByAcademicYearId","academicYear","groups","isHidden","persist","isCollapsed","Schedule","oDataExpression","selectedID","hideCountsIfZero","CourseProgressIndicatorDirective","restrict","scope","complete","directive","dualListSelector","availableItems","selectedItems","availableListLabel","selectedListLabel","noAvailableItemsMessage","link","el","attrs","maxItems","addItems","selectedLeftItems","removeItems","selectedRightItems","showFilter","StudentCoursesTransferConfirmationCtrl","studentId","gradeLevelId","gradeLevelName","gradeLevelDescription","middleName","ct","addCoursesContextService","courseDataService","$stateParams","ipCookie","courseScheduleMeetingBlockService","schoolSubjectService","schoolGradeLevelMasterScheduleRepository","firstCourseSectionSubject","csmbt","save","getAcademicYearId","setAcademicYearId","getSchoolId","areTransfersAllowed","today","year","month","loadMeetingBlocks","getSubjectsGradeLevel","reconcileAccessForCourseSectionGroup","getSubjectOptions","subjectOptions","getSchoolSubjectFilters","schoolSubjectFilters","loadSchoolSubjects","loadSchoolSubjectFilters","addCourseSubject","deferred","defer","entityId","syncFiltersToCourse","getOverallPrimariesforCourse","primaries","selectedCourseSubject","loadSchoolSchedules","csgmbt","getCourseDisplayName","promise","setCourseCancelState","courseCancelState","$broadcast","cancelState","schoolScheduleIds","schoolGradeLevelMasterSchedules","gradeLevelSchedules","schedule","setSelectedSchedule","meetingBlocks","updatePrimary","csgID","newStatus","setOverallPrimary","canUpdatePrimary","utc","startOf","maxMoment","max","defaultSchool","getDefaultSchool","schoolCookie","AcademicYearID","SchoolID","GradeLevelID","SchoolScheduleID","_meetingBlockOptions","o","meetingBlockTimeName","tap","groupedOptions","forOwn","groupDisplayOrder","meetingBlockGroupName","effectiveGradeLevelId","schoolSchedules","firstSelectedMarkingPeriod","scheduleSchoolMarkingPeriodIds","timer","meetingBlock","truncate","RegExp","separator","forceReset","subjectsTypesToDefaultTo","setDefaultSubjectsForNewCourse","mps","undefined","getCurrentAcademicYear","currentAcademicYear","args","glSchedule","schoolScheduleID","CourseTeachersCtrl","staffHistoryService","endAcademicYear","setupHistoryInfo","currentStatus","originalDate","expanded","teacherForm","staffLoading","mostRecentStatus","history","isActiveDuringMarkingPeriod","noTeachers","calculateMaxDate","endCourseMarkingPeriod","resetEditRow","setEditMode","removeStatus","isConfirmed","courseSectionStaffStatusHistoryId","courseSectionStaffStatusHistoryID","subjectToEdit","goToStaffRecord","staffWebRootUrl","setStatusDate","hasDateError","statusChange","HistoryId","stripTimeFromDate","EndDate","togglePrimary","deleteIndex","splice","getPrimary","p","orderByDate","updateSelectedCourseSubject","shouldRemoveButtonBeDisabled","hasOnlineCourse","isStaffOverallPrimary","isTeacherStatusActive","staffGroups","omitBy","val","keys","headTeachers","beginAcademicYear","CourseAddTeachersCtrl","courseTeacherService","requestPending","loadTeachers","teachersLoading","includeAllPostitionTypes","showDateRangeWarning","schoolYearEndDate","next","loadMoreTeachers","teacherPageLoading","defaultMinDateToSet","clone","getTransferAlternatives","TransferCoursesCtrl","activeStudentRosterStatuses","unshift","showAlternateCourseSectionGroupsList","activeStatus","courseStudentMasterStatusText","deleteCourseSection","one","curriculumRestangular","w","ApiServiceFactory","RegisterApiService","parms","getCourses","getCourseDetails","subjectId","CourseType","courseTypeIds","Assigned","selectedEnumValues","assignedFilterIds","getCourseCounts","q","courseSchoolMarkingPeriods","markingPeriodGroupId","count","copy","partBSubjectLevel1ID","transferStudentsContextService","coreRestangular","oDataFilter","getODataRequest","staffId","getCounts","Staff","StudentCoursesCtrl","studentCoursesService","matchmedia","whereStudentInSchoolIsCurrentlyRepository","loadStudentCourses","activeStudentCourses","inactiveStudentCourses","courseGradeLevelGroup","schoolGradeLevelScheduleGroupShortName","showActiveCoursesOnly","updateCourseSortOrder","defaultSortOrder","setAllowTransfers","lastMarkingDate","mapRemovals","coursesToRemove","masterStatusId","processRemovals","loadingOptions","getByStudentInSchool","gradeLevelsSorted","displayOrder","maxEndDate","currentLocation","onMarkingPeriodChange","onPhone","mediaQueryList","isPhone","courseSectionRosterStatusHistoryID","selectedCourses","allowTransfers","notImplemented","print","schoolMarkingPeriodId","studentGradeLevelID","HighSchoolGradeLevels","gradeLevel2","windowClass","masterSchedulingWebRootUrl","action","listItems","formValues","courseSectionRosterStatusHistoryId","goToMasterSchedulingCourse","hasSaviyntEntitlement","masterSchedulingV2WebRootUrl","notEligibleForCourses","currentStudentInSchoolStatusId","currentStudentInSchoolSecondaryStatusId","isOnsiteFacilitator","hasAccessToCourseEdit","isCurrentCourse","goToMasterScheduling","order","sectionGroupLetter","courseSummaryMeetingBlocks","toggleActiveCourses","goToStaffQueue","location","href","staffManagementWebRootUrl","toToQuestionaire","questionnaireWebRootUrl","goToNewCourse","CourseOverviewMeetingBlocksController","$uibModalInstance","closeModal","dismiss","viewStatus","viewLoading","isDirty","periodMeetingBlockOptionDays","matchKey","isLast","mbt","meetingBlockOptionChildClicked","periodDailyMeetingBlockOptionClicked","meetingBlockCheckAllOptionClicked","isAllCheckboxChecked","allCheckboxSelected","periodEverydayClicked","toggle","isPeriodEverydayChecked","periodMeetingBlockOptionDay","every","isChecked","totalChildrenCount","selectedChildrenCount","isBlockOptionCheckboxChecked","isRecaptureRow","meetingBlockCategoryID","done","formatMeetingBlockTimesInSaveFormat","selectedMeetingBlockOptions","selectedCategories","agg","meetingBlockOption","hasInstructionalTimeSelected","hasOtherInstructionalTimeSelected","validate","close","trim","selectedMeetingBlockItem","_periodMeetingBlockOptionDay","startsWith","StudentCoursesAddCoursesCtrl","loadAvailableStudentCourses","filteredCourses","selectGradeChange","doAdd","courseSectionsIDs","courseSectionIDs","toLowerCase","primaryTeachers","mb","sortColumns","e","sortColumnsDirection","CourseRosterImportToCtrl","courseSummaryRepository","courseRosterImportRepository","loadCourses","fromCourseSectionId","updateCoursesSort","importing","import","courseRosterImport","importFromCourseID","toCourseSectionIds","selectedToCourses","selectCourse","unselectCourse","loadMoreCourses","loadingMore","CourseSectionGroupId","CoursesCtrl","schoolGradeLevelSectionRepository","subjectTypeRepository","showSpinner","disableFilterCounts","counts","getFilterCounts","courseTypeOptions","assignedOptions","shouldShowHighSchoolInGradeLevels","loadCourseDetailPanel","detailsLoading","details","d","courseTypeID","sectionCount","subjectTypes","subjectTypesFilterItems","st","subjectTypeName","stfi","toggleCourseDetailPanel","isOpen","coursePageLoading","goToCourse","getSectionGroupName","groupName","getCourseGradeLevelName","copyCourse","subjectLevel1Group","coursesOpen","courseMatch","exceptionMessage","courseCanCopy","hasBCourse","term","is18W1OrS1","hasActiveStudents","hasMoreThanOneSubject","CourseRosterImportFromCtrl","selectedFromCourses","selectedCourse","firstCourse","CourseRosterCtrl","buildRosterStudents","selectedMarkingPeriodID","selectedCourseSectionID","studentsInCourse","markingPeriodStudentStatuses","studentCourseMarkingPeriodStatuses","rosterStudents","statusInfo","lastMarkingPeriodStatus","markingPeriodStatusHistory","statusHist","currentMarkingPeriodStatus","isLatestStatus","rosterForm","orderOptions","myOrder","listLoading","h","take","startDate","getStudentCountByMasterStatusIDs","ids","countBy","sumBy","updateSelectedMarkingPeriod","isRemoveButtonDisabled","transferStudentContextService","saveTransfer","toState","toParams","fromParams","loadTransfer","persistTransferStudentsContext","TeachersCtrl","courseTeacherDetailService","teacherCourseFilterCountsService","setFilterCounts","loadDetails","teacherCourseDetails","courseCount","getCourseTypeDescription","courseTypeDescription","courseStaff","teachersPageLoading","toggleDetails","courseSectionRosterId","critical","warning","info","formName","form","gradeLevelSectionID","capacity","v","enrollmentRestangular","svc","setFilterODataItem","markingPeriodIDs","masterStatusIDs","secondaryMasterStatusIDs","scheduled","getEnrollmentPreferences","courseSubjectsModalController","filteredSubjects","onlineOnly","creditTypeID","x","subjectFilters","courseTypes","vendorID","loading","subjectsLoading","addSubject","removeSubject","subjectSelected","getVendorName","vendors","vendor","vendorName","getSubjectClassificationName","subjectClassifications","subjectClassification","subjectClassificationName","courseTypeSelected","courseType","courseTypeClick","index","filterchange","creditTypes","resetPageSize","defaultPageSize","EffectiveDateModalCtrl","showAddForm","confirm","returnVal","$setDirty","$valid","$urlRouterProvider","$locationProvider","$breadcrumbProvider","$sceDelegateProvider","$compileProvider","RestangularProvider","resourceUrlWhitelist","environment","debugInfoEnabled","setOptions","includeAbstract","otherwise","html5Mode","enabled","requireBase","hashPrefix","setBaseUrl","masterSchedulingServicesRootUrl","run","$location","attachStateChangeListener","ensureUserContext","user","TagManagerService","setupUserID","pageTitleAppName","defaultPageTitle","hasOwnProperty","document","currentState","enableScrollToTopOnStateChangeSuccess","evt","to","preventDefault","CourseRemoveTeachersCtrl","goToRemoveSubjects","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","n","getter","__esModule","definition","Object","defineProperty","enumerable","obj","prop","prototype","call","CourseSubjectsCtrl","subjectForm","openSubjectsModal","existingSubjectLevel1IDs","selectedSubjectLevel1IDs","ss","subjectsToAdd","deleteLineItem","subjectChanged"],"sourceRoot":""}