--- /dev/null
+(function() {
+ "use strict";
+
+ angular
+ .module("nero.app.cdt")
+ .directive("filterDirective", filterDirective);
+
+ function filterDirective() {
+ return {
+ restrict: "E",
+ scope: {},
+ templateUrl: contextPath + "/js/filter/filter.html?t="+cdtTimestamp,
+ controller: FilterController,
+ controllerAs: "FilterCtrl",
+ bindToController: true
+ };
+ }
+
+ FilterController.$inject = ["cdtProperties", "panelService", "groupService", "teacherService", "userService", "configurationService",
+ "role_constants", "toastr", "$rootScope", "$filter", "$uibModal", "$translate"];
+
+ function FilterController(cdtProperties, panelService, groupService, teacherService, userService, configurationService,
+ roles, toastr, $rootScope, $filter, $uibModal, $translate) {
+
+ var vm = this;
+ vm.userProfile = -1;
+ vm.isTeacher = false;
+ vm.isPersonnal = false;
+ vm.isParent = false;
+ vm.isDirector = false;
+ vm.groups = [];
+ vm.selectedGroup = {};
+ vm.onSelectGroup = onSelectGroup;
+ vm.teachers = [];
+ vm.selectedTeacher = {};
+ vm.onSelectTeacher = onSelectTeacher;
+ vm.childrens = [];
+ vm.selectedChildren = {};
+ vm.onSelectChildren = onSelectChildren;
+ vm.onlyMySessions = false;
+ vm.isOnlyMySessionsDisabled = true;
+ vm.onToggleOnlyMySessions = onToggleOnlyMySessions;
+ vm.displayAddSessionWindow = displayAddSessionWindow;
+ vm.displayAddVisaWindow = displayAddVisaWindow;
+ vm.isCalendarPanelActive = panelService.isCalendarPanelActive;
+ vm.isSessionPanelActive = panelService.isSessionPanelActive;
+ vm.isHomeworksPanelActive = panelService.isHomeworksPanelActive;
+ vm.toggleCalendarPanelDisplay = toggleCalendarPanelDisplay;
+ vm.toggleSessionPanelDisplay = panelService.toggleSessionPanelDisplay;
+ vm.toggleHomeworksPanelDisplay = panelService.toggleHomeworksPanelDisplay;
+ vm.isSessionPanelEnabled = panelService.isSessionPanelEnabled;
+ vm.groupDropdownSettings = {};
+ vm.groupDropdownEvents = {};
+ vm.groupDropdownText = {};
+ vm.teacherDropdownSettings = {};
+ vm.teacherDropdownEvents = {};
+ vm.teacherDropdownText = {};
+ vm.childrenDropdownSettings = {};
+ vm.childrenDropdownEvents = {};
+ vm.childrenDropdownText = {};
+
+ /*
+ Group dropdown settings
+ */
+ vm.groupDropdownSettings = {
+ selectionLimit: 1,
+ idProp: "groupId",
+ displayProp: "groupName",
+ smartButtonMaxItems: 1,
+ externalIdProp: "",
+ showCheckAll: false,
+ keyboardControls: true,
+ closeOnSelect: true,
+ searchField: "groupName",
+ enableSearch: true,
+ scrollableHeight: "500px",
+ scrollable: true,
+ buttonClasses: ""
+ };
+
+ vm.groupDropdownEvents = {
+ onSelectionChanged: onSelectGroup
+ };
+
+ /*
+ $rootScope.$on('$translateChangeSuccess', function () {
+ $scope.pageTitle = $translate.instant('PAGE.TITLE');
+ });
+ */
+ vm.groupDropdownText = {};
+
+ $translate.onReady().then( function() {
+ vm.groupDropdownText = {
+ buttonDefaultText: $filter("translate")("nero.cdt.filter.select-group-button"),
+ searchPlaceholder: $filter("translate")("nero.cdt.filter.select-filter-label"),
+ uncheckAll: $filter("translate")("nero.cdt.filter.select-cancel-label")
+ };
+ });
+
+ /*
+ Teacher dropdown settings
+ */
+ vm.teacherDropdownSettings = {
+ selectionLimit: 1,
+ idProp: "userId",
+ template: "{{option.lastName}} {{option.firstName}}",
+ smartButtonMaxItems: 1,
+ smartButtonTextConverter: function(itemText, originalItem) {
+ return originalItem.lastName + " " + originalItem.firstName;
+ },
+ externalIdProp: "",
+ showCheckAll: false,
+ keyboardControls: true,
+ closeOnSelect: true,
+ enableSearch: true,
+ scrollableHeight: "500px",
+ scrollable: true
+ };
+
+ vm.teacherDropdownEvents = {
+ onSelectionChanged: onSelectTeacher
+ };
+
+ vm.teacherDropdownText = {};
+
+ $translate.onReady().then( function() {
+ vm.teacherDropdownText = {
+ buttonDefaultText: $filter("translate")("nero.cdt.filter.select-teacher-button"),
+ searchPlaceholder: $filter("translate")("nero.cdt.filter.select-filter-label"),
+ uncheckAll: $filter("translate")("nero.cdt.filter.select-cancel-label")
+ };
+ });
+
+ /*
+ Children dropdown settings
+ */
+ vm.childrenDropdownSettings = {
+ selectionLimit: 1,
+ idProp: "userId",
+ template: "{{option.lastName}} {{option.firstName}}",
+ smartButtonMaxItems: 1,
+ smartButtonTextConverter: function(itemText, originalItem) {
+ return originalItem.lastName + " " + originalItem.firstName;
+ },
+ externalIdProp: "",
+ showCheckAll: false,
+ showUncheckAll: false,
+ keyboardControls: true,
+ closeOnSelect: true
+ };
+
+ vm.childrenDropdownEvents = {
+ onSelectionChanged: onSelectChildren
+ };
+
+ /*
+ Get userProfile and initialize variables
+ */
+ cdtProperties.getCurrentUserProfile().then(function(profile) {
+ vm.userProfile = profile;
+
+ vm.isParent = (profile == roles["PARENT"]);
+ vm.isDirector = (profile == roles["DIRECTOR"]);
+ if (profile == roles["TEACHER"]) {
+ getClasses();
+ vm.isTeacher = true;
+ vm.onlyMySessions = true;
+ cdtProperties.setOnlyMySessions(vm.onlyMySessions);
+ }
+ else if (profile == roles["PERSONNAL"] || profile == roles["DIRECTOR"]) {
+ getClasses();
+ vm.isPersonnal = true;
+ getTeachers();
+ }
+ else if (profile == roles["PARENT"]) {
+ getMyChildren();
+ }
+ else {
+ onChangeFilters();
+ }
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+
+ /*
+ Update config for user's school
+ */
+ configurationService.getConfiguration()
+ .then(function(data) {
+ if (data.configuration.startDateSchool != undefined) {
+ cdtProperties.setSchoolConfigEnabled(true);
+ vm.startDateSchool = moment(data.configuration.startDateSchool, "DD/MM/YYYY HH:mm");
+ vm.endDateSchool = moment(data.configuration.endDateSchool, "DD/MM/YYYY HH:mm");
+ vm.startDayTime = data.configuration.startDayTime;
+ vm.endDayTime = data.configuration.endDayTime;
+ }
+ else {
+ //No config
+ cdtProperties.setSchoolConfigEnabled(false);
+ }
+ })
+ ["catch"](function(message){
+ toastr.error(message);
+ });
+
+ /*
+ Call user service to get parent's children list
+ */
+ function getMyChildren() {
+ userService.getMyChildren()
+ .then(function(childrens) {
+ vm.childrens = $filter('orderBy')(childrens, ["lastName", "firstName"]);
+ if (childrens.length > 0) {
+ vm.selectedChildren = {userId: childrens[0].userId};
+ onSelectChildren();
+ }
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ }
+
+ /*
+ Call teacher service to get teacher list
+ */
+ function getTeachers(groupId) {
+ teacherService.getTeachers(groupId).then(function(teachers) {
+ vm.teachers = $filter('orderBy')(teachers, ["lastName", "firstName"]);
+ var teacherIds = [];
+ var index;
+ for (index = 0 ; index < teachers.length ; ++index) {
+ if (teachers[index].userId != undefined) {
+ teacherIds.push(teachers[index].userId);
+ }
+ }
+ cdtProperties.setTeacherIds(teacherIds);
+
+ if (teachers.length > 0) {
+ onChangeFilters();
+ }
+ else {
+ toastr.error($filter("translate")("nero.cdt.filter.no-teacher-error-message"));
+ }
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ }
+
+ /*
+ Call group service to get class list
+ */
+ function getClasses(userId) {
+ groupService.getGroups(vm.userProfile, userId).then(function(schools) {
+ var groupIds = [];
+ var groups = [];
+ var schoolIndex;
+ var groupIndex;
+ for (schoolIndex = 0 ; schoolIndex < schools.length ; ++schoolIndex) {
+ for (groupIndex = 0 ; groupIndex < schools[schoolIndex].groups.length ; ++groupIndex) {
+ if (schools[schoolIndex].groups[groupIndex].groupId != undefined) {
+ groupIds.push(schools[schoolIndex].groups[groupIndex].groupId);
+ schools[schoolIndex].groups[groupIndex].schoolName = schools[schoolIndex].schoolName;
+ groups.push(schools[schoolIndex].groups[groupIndex]);
+ }
+ }
+ }
+ cdtProperties.setClassIds(groupIds);
+ vm.groups = $filter('orderBy')(groups, "groupName");
+ onChangeFilters();
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ }
+
+ /*
+ On select group set selected class, update teacher list and refresh interface
+ */
+ function onSelectGroup() {
+ if (cdtProperties.getSelectedClass().groupId != vm.selectedGroup.groupId) {
+ cdtProperties.setSelectedClass(vm.selectedGroup);
+ }
+ if (vm.selectedGroup.groupId == undefined && vm.isTeacher) {
+ vm.isOnlyMySessionsDisabled = true;
+ if (!vm.onlyMySessions) {
+ vm.onlyMySessions = true;
+ cdtProperties.setOnlyMySessions(vm.onlyMySessions);
+ }
+ }
+ else if (vm.isTeacher){
+ vm.isOnlyMySessionsDisabled = false;
+ }
+
+ // Close session panel if selected group is not concerned by the lesson
+ if ( panelService.isSessionPanelActive &&
+ vm.selectedGroup.groupId != cdtProperties.getSelectedSession().groupId) {
+
+ if (vm.selectedGroup.groupId != undefined ||
+ (vm.isPersonnal && vm.selectedTeacher.userId == undefined)) {
+ panelService.disableSessionPanel();
+ }
+ }
+
+ //If Personnal then update teacher list
+ if (vm.isPersonnal) {
+ getTeachers(vm.selectedGroup.groupId);
+ }
+ else {
+ onChangeFilters();
+ }
+ }
+
+ /*
+ On select teacher on filter, set selected user and refresh interface
+ */
+ function onSelectTeacher() {
+ if (cdtProperties.getSelectedUser().userId != vm.selectedTeacher.userId) {
+ cdtProperties.setSelectedUser(vm.selectedTeacher);
+ }
+
+ // Close session panel if selected teacher is not the current lesson teacher
+ if ( panelService.isSessionPanelActive &&
+ (vm.selectedTeacher.userId != undefined || vm.selectedGroup.groupId == undefined) &&
+ cdtProperties.getSelectedSession().teachers != undefined) {
+ var isCurrentSessionTeacher = false;
+ for (var idx = 0 ; idx < cdtProperties.getSelectedSession().teachers.length ; ++idx) {
+ if (cdtProperties.getSelectedSession().teachers[idx].userId == vm.selectedTeacher.userId) {
+ isCurrentSessionTeacher = true;
+ }
+ }
+ if (!isCurrentSessionTeacher) {
+ panelService.disableSessionPanel();
+ }
+ }
+
+ //Update group list
+ getClasses(vm.selectedTeacher.userId);
+ }
+
+ /*
+ On select children on filter, set selected user and refresh interface
+ */
+ function onSelectChildren() {
+ if (cdtProperties.getSelectedUser().userId != vm.selectedChildren.userId) {
+ cdtProperties.setSelectedUser(vm.selectedChildren);
+ }
+ // Unselect previous child session
+ panelService.disableSessionPanel();
+ onChangeFilters();
+ }
+
+ /*
+ On check my sessions only
+ */
+ function onToggleOnlyMySessions() {
+ if (cdtProperties.getOnlyMySessions() != vm.onlyMySessions) {
+ cdtProperties.setOnlyMySessions(vm.onlyMySessions);
+ if (cdtProperties.getOnlyMySessions()) {
+ panelService.disableSessionPanel();
+ }
+ onChangeFilters();
+ }
+ }
+
+ /*
+ Refresh calendar
+ */
+ function onChangeFilters(forceRefresh) {
+ // Broadcast event
+ $rootScope.$broadcast("refresh-calendar", {forceRefresh: forceRefresh});
+
+ // Refresh homework panel for parent with several childs
+ if (vm.isParent || vm.isTeacher) {
+ $rootScope.$broadcast("refresh-homeworks");
+ }
+ }
+
+ /*
+ Open modal window to display form allowing to add a session
+ */
+ function displayAddSessionWindow() {
+ var modalInstance = $uibModal.open({
+ templateUrl: contextPath + "/js/add-session/add-session.html?t="+cdtTimestamp,
+ controller: "AddSessionController",
+ controllerAs: "AddSessionCtrl",
+ size:"nero-large",
+ resolve: {
+ currentTeacherId: function() {
+ if (vm.isTeacher) {
+ return cdtProperties.getCurrentUserId();
+ }
+ else {
+ return -1;
+ }
+ },
+ profile: function() {
+ return vm.userProfile;
+ },
+ startDateSchool: function() {
+ return vm.startDateSchool;
+ },
+ endDateSchool: function() {
+ return vm.endDateSchool;
+ },
+ startDayTime: function() {
+ return vm.startDayTime;
+ },
+ endDayTime: function() {
+ return vm.endDayTime;
+ }
+ }
+ });
+
+ modalInstance.result.then(function(sessions) {
+ var isSummarySession = true;
+ cdtProperties.setSelectedSession(sessions[0], isSummarySession, vm.userProfile);
+ var forceRefresh = true;
+ onChangeFilters(forceRefresh);
+ }, function() {
+ //Cancel paste so don't do anything
+ });
+ }
+
+ function displayAddVisaWindow() {
+ var modalInstance = $uibModal.open({
+ templateUrl: contextPath + "/js/visa-details/visa-details.html?t="+cdtTimestamp,
+ controller: "VisaDetailsController",
+ controllerAs: "VisaDetailsCtrl",
+ resolve: {
+ selectedTeacher: function() {
+ return cdtProperties.getSelectedUser();
+ },
+ startDateSchool: function() {
+ return vm.startDateSchool;
+ },
+ endDateSchool: function() {
+ return vm.endDateSchool;
+ },
+ startDayTime: function() {
+ return vm.startDayTime;
+ },
+ endDayTime: function() {
+ return vm.endDayTime;
+ }
+ }
+ });
+
+ modalInstance.result.then(function() {
+ }, function() {
+ //Cancel paste so don't do anything
+ });
+ }
+
+ /**
+ For calendar activation update the view
+ */
+ function toggleCalendarPanelDisplay() {
+ var alreadyActivated = panelService.isCalendarPanelActive();
+ panelService.toggleCalendarPanelDisplay();
+ if (panelService.isCalendarPanelActive() && !alreadyActivated) {
+ $rootScope.$broadcast('refresh-timeline', {destinationDate: cdtProperties.getSelectedSession().startDate});
+ }
+ }
+
+ }
+})();