--- /dev/null
+(function() {
+ "use strict";
+ angular.module("nero.app.cdt")
+ .controller("AddSessionController", AddSessionController);
+
+ AddSessionController.$inject = ["$uibModalInstance", "currentTeacherId", "profile", "startDateSchool", "endDateSchool", "startDayTime", "endDayTime",
+ "groupService", "teacherService", "sessionService", "subjectService", "toastr", "$filter"];
+
+ function AddSessionController($uibModalInstance, currentTeacherId, profile, startDateSchool, endDateSchool, startDayTime, endDayTime,
+ groupService, teacherService, sessionService, subjectService, toastr, $filter) {
+ var vm = this;
+ vm.sessionDay = moment();
+ vm.sessionStartHour = "08:00";
+ vm.sessionEndHour = "10:00";
+ vm.title = "";
+ vm.repeatSession = false;
+ vm.weekInterval = 1;
+ vm.minWeekInterval = 1;
+ vm.maxWeekInterval = 5;
+ vm.repeatNumber = 1;
+ vm.minRepeatNumber = 1;
+ vm.maxRepeatNumber = 45;
+ vm.untilDate = moment();
+ vm.repeatType = "number";
+ vm.teachers = [];
+ vm.groups = [];
+ vm.subjects = [];
+ vm.currentTeacherId = currentTeacherId;
+ vm.startDateSchool = startDateSchool;
+ vm.endDateSchool = endDateSchool;
+ vm.startDayTime = startDayTime;
+ vm.endDayTime = endDayTime;
+ vm.selectedGroup = {};
+ vm.selectedTeacher = {};
+ vm.selectedTeachers = [];
+ vm.selectedSubject= {};
+ vm.disableTeacherSubject = true;
+ vm.validationDisable = true;
+
+ vm.onSelectGroup = onSelectGroup;
+ vm.onSelectSubject = onSelectSubject;
+ vm.onSelectTeacher = onSelectTeacher;
+ vm.onRemoveTeacher = onRemoveTeacher;
+ vm.onCheckRepeatValues = onCheckRepeatValues;
+ vm.ok = ok;
+ vm.cancel = cancel;
+ vm.groupDropdownSettings = {};
+ vm.groupDropdownEvents = {};
+ vm.groupDropdownText = {};
+ vm.teacherDropdownSettings = {};
+ vm.teacherDropdownEvents = {};
+ vm.teacherDropdownText = {};
+ vm.subjectDropdownSettings = {};
+ vm.subjectDropdownEvents = {};
+ vm.subjectDropdownText = {};
+
+ vm.groupDropdownSettings = {
+ selectionLimit: 1,
+ idProp: "groupId",
+ displayProp: "groupName",
+ smartButtonMaxItems: 1,
+ externalIdProp: "",
+ showCheckAll: false,
+ showUncheckAll: false,
+ keyboardControls: true,
+ closeOnSelect: true,
+ searchField: "groupName",
+ enableSearch: true,
+ scrollableHeight: "500px",
+ scrollable: true
+ };
+
+ vm.groupDropdownEvents = {
+ onSelectionChanged: onSelectGroup
+ };
+
+ vm.groupDropdownText = {
+ buttonDefaultText: $filter("translate")("nero.cdt.add-session.select-group-button"),
+ searchPlaceholder: $filter("translate")("nero.cdt.filter.select-filter-label")
+ };
+
+ vm.teacherDropdownSettings = {
+ selectionLimit: 1,
+ idProp: "userId",
+ template: "{{option.lastName}} {{option.firstName}}",
+ dynamicTitle: false,
+ externalIdProp: "",
+ showCheckAll: false,
+ showUncheckAll: false,
+ keyboardControls: true,
+ closeOnSelect: true,
+ enableSearch: true,
+ scrollableHeight: "500px",
+ scrollable: true
+ };
+
+ vm.teacherDropdownEvents = {
+ onSelectionChanged: onSelectTeacher
+ };
+
+ vm.teacherDropdownText = {
+ buttonDefaultText: $filter("translate")("nero.cdt.add-session.select-teacher-button"),
+ searchPlaceholder: $filter("translate")("nero.cdt.filter.select-filter-label")
+ };
+
+ vm.subjectDropdownSettings = {
+ selectionLimit: 1,
+ idProp: "subjectId",
+ displayProp: "name",
+ smartButtonMaxItems: 1,
+ externalIdProp: "",
+ showCheckAll: false,
+ showUncheckAll: false,
+ keyboardControls: true,
+ closeOnSelect: true,
+ enableSearch: true,
+ searchField: "name",
+ scrollableHeight: "500px",
+ scrollable: true
+ };
+
+ vm.subjectDropdownEvents = {
+ onSelectionChanged: onSelectSubject
+ };
+
+ vm.subjectDropdownText = {
+ buttonDefaultText: $filter("translate")("nero.cdt.add-session.select-subject-button"),
+ searchPlaceholder: $filter("translate")("nero.cdt.filter.select-filter-label")
+ };
+
+ /*
+ Get group list
+ */
+ groupService.getGroups(profile)
+ .then(function(schools) {
+ 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) {
+ schools[schoolIndex].groups[groupIndex].schoolName = schools[schoolIndex].schoolName;
+ groups.push(schools[schoolIndex].groups[groupIndex]);
+ }
+ }
+ }
+ vm.groups = $filter('orderBy')(groups, "groupName");
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ vm.groups = [];
+ });
+
+ /*
+ Get subject list from service and set dropdown data
+ */
+ function getSubjects(groupId, isPersonalGroup) {
+ if (groupId != undefined) {
+ subjectService.getSubjects(groupId, isPersonalGroup)
+ .then(function(subjects){
+ vm.subjects = $filter('orderBy')(subjects, "name"); //subjects;
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ vm.subjects = [];
+ });
+ }
+ }
+
+ /*
+ Get teacher list from service and set dropdown data
+ */
+ function getTeachers(groupId, isPersonalGroup) {
+ teacherService.getTeachers(groupId, isPersonalGroup)
+ .then(function(teachers) {
+ vm.teachers = $filter("orderBy")(teachers, ["lastName", "firstName"]);
+
+ if (teachers.length == 0) {
+ toastr.warning($filter("translate")("nero.cdt.add-session.toastr-no-teacher-warning"));
+ }
+ // If the user is a teacher than add himself to the selected list
+ else if (currentTeacherId > -1) {
+ var index;
+ var currentTeacher = {};
+ for (index = 0 ; index < teachers.length ; ++index) {
+ if (teachers[index].userId == currentTeacherId) {
+ vm.selectedTeachers.push(teachers[index]);
+ break;
+ }
+ }
+ vm.teachers.splice(index, 1);
+ isValidationReady();
+ }
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ vm.teachers = [];
+ });
+ }
+
+ /*
+ On group select load teachers and subjects
+ */
+ function onSelectGroup() {
+ vm.selectedTeachers = [];
+ vm.selectedSubject = {};
+ if (vm.selectedGroup == null) {
+ vm.selectedGroup = {};
+ vm.validationDisable = true;
+ vm.disableTeacherSubject = true;
+ }
+ else {
+ getTeachers(vm.selectedGroup.groupId, vm.selectedGroup.isPersonalGroup);
+ getSubjects(vm.selectedGroup.groupId, vm.selectedGroup.isPersonalGroup);
+ vm.disableTeacherSubject = false;
+ }
+ }
+
+ /*
+ On select subject check if the form is filled
+ */
+ function onSelectSubject() {
+ isValidationReady();
+ }
+
+ /*
+ On select teacher add it to the list and check is the form is filled
+ */
+ function onSelectTeacher() {
+ vm.selectedTeachers.push(vm.selectedTeacher);
+ var index;
+ for (index= 0 ; index < vm.teachers.length ; ++index) {
+ if (vm.teachers[index].userId == vm.selectedTeacher.userId) {
+ break;
+ }
+ }
+ vm.teachers.splice(index, 1);
+ vm.selectedTeacher = {};
+ isValidationReady();
+ }
+
+ /*
+ Remove teacher from the selected list
+ */
+ function onRemoveTeacher(teacher){
+ vm.teachers.unshift(teacher);
+ vm.selectedTeachers.splice(vm.selectedTeachers.indexOf(teacher), 1);
+ isValidationReady();
+ }
+
+ function isValidationReady() {
+ if (vm.selectedTeachers.length != 0 && vm.selectedSubject.subjectId != undefined) {
+ vm.validationDisable = false;
+ }
+ else {
+ vm.validationDisable = true;
+ }
+ }
+
+ /*
+ Check if repeated values are correct
+ */
+ function onCheckRepeatValues() {
+ if (vm.weekInterval > vm.maxWeekInterval) {
+ vm.weekInterval = vm.maxWeekInterval;
+ }
+ else if (vm.weekInterval < vm.minWeekInterval) {
+ vm.weekInterval = vm.minWeekInterval;
+ }
+
+ if (vm.repeatNumber > vm.maxRepeatNumber) {
+ vm.repeatNumber = vm.maxRepeatNumber;
+ }
+ else if (vm.repeatNumber < vm.minRepeatNumber) {
+ vm.repeatNumber = vm.minRepeatNumber;
+ }
+ }
+
+ /*
+ Validate form
+ */
+ function ok() {
+ var session = {
+ startDate: moment(vm.sessionDay + " " + vm.sessionStartHour, "dddd Do MMMM YYYY HH:mm").format("DD/MM/YYYY HH:mm"),
+ endDate: moment(vm.sessionDay + " " + vm.sessionEndHour, "dddd Do MMMM YYYY HH:mm").format("DD/MM/YYYY HH:mm"),
+ subjectId: vm.selectedSubject.subjectId,
+ groupId: vm.selectedGroup.groupId,
+ title: vm.title,
+ teachers: vm.selectedTeachers
+ };
+
+ if (vm.repeatSession) {
+ var recurrence = {
+ weeksBetweenSessions: vm.weekInterval
+ };
+ if (vm.repeatType == "number") {
+ recurrence.occurrence = vm.repeatNumber;
+ }
+ else if (vm.repeatType == "date") {
+ recurrence.untilDate = moment(vm.untilDate + " 00:00", "dddd Do MMMM YYYY HH:mm").format("DD/MM/YYYY HH:mm");
+ }
+ session.recurrence = recurrence;
+ }
+
+ vm.myPromise = sessionService.addSession(session, vm.selectedGroup.isPersonalGroup)
+ .then(function(response){
+ toastr.success(response.message);
+ $uibModalInstance.close(response.sessions);
+ })
+ ["catch"](function(message) {
+ toastr.error(message);
+ });
+ };
+
+ /*
+ Form cancelled (button or clicked next to window)
+ */
+ function cancel() {
+ $uibModalInstance.dismiss("cancel");
+ };
+
+ }
+})();