(function () { "use strict"; angular .module('shared') .controller('storylineLessonAssignModal', storylineLessonAssignModal); storylineLessonAssignModal.$inject = ['close', '$scope', 'windowService', 'SiteHelper', 'studentList', 'resources', 'lessonId', 'storylineLesson', 'storylineLessonServer', 'AuthGo', 'messageHandler', 'MessageBox']; function storylineLessonAssignModal(close, $scope, windowService, SiteHelper, studentList, resources, lessonId, storylineLesson, storylineLessonServer, AuthGo, messageHandler, MessageBox) { var ctrl = this; var maxResourceLimit = 100; ctrl.close = ctrl.cancel = function() { studentList.clearSelected(); close(); }; ctrl.resources = resources; ctrl.lessonId = lessonId; ctrl.activities = angular.copy(storylineLesson.getActivitiesForCurrentStorylineLessons()); ctrl.resources = angular.copy(storylineLesson.getAssignableResources()); ctrl.chosenLevel = getReadingLevels().length ? getReadingLevels()[0] : null; updateActivities(); ctrl.hasShowableActivities = hasSelectableActivities(); ctrl.kidsRosterUrl = AuthGo.getUrl('kaz', '/main/students'); ctrl.isActivitySelectable = isActivitySelectable; ctrl.isShowableActivity = isShowableActivity; ctrl.hasSelectableActivities = hasSelectableActivities; ctrl.determineStepNumber = determineStepNumber; ctrl.switchAnyStudents = switchAnyStudents; ctrl.updateActivities = updateActivities; ctrl.isQuizSelected = isQuizSelected; ctrl.getReadingLevel = getReadingLevel; ctrl.getReadingLevels = getReadingLevels; ctrl.getStudentStep = getStudentStep; ctrl.isValid = isValid; ctrl.submit = submit; function isActivitySelectable(activityName) { if(activityName !== 'read' && activityName !== 'listen' && activityName !== 'quiz') { return false; } var selectedMaterials = getSelectedMaterials(); return storylineLesson.getActivitiesForResources(selectedMaterials).includes(activityName); } function isShowableActivity(activityName) { return (activityName === 'read') || (activityName === 'listen') || (activityName === 'quiz'); } function hasSelectableActivities() { var hasShowableActivity = false; for (var i = 0; i < ctrl.activities.length; i++) { if (isShowableActivity(ctrl.activities[i].name)) { hasShowableActivity = true; break; } } return hasShowableActivity; } function determineStepNumber(defaultNum) { if (!ctrl.hasShowableActivities) { return defaultNum - 1; } return defaultNum; } function switchAnyStudents() { if (studentList.pending) { return "pending"; } return studentList.get().length ? "some" : "none"; } function updateActivities() { _.each(ctrl.activities, function(activity) { if(isActivitySelectable(activity.name) && !activity.selectable) { activity.selected = true; activity.selectable = true; } else if(!isActivitySelectable(activity.name)) { activity.selected = storylineLesson.getActivitiesForResources(getSelectedMaterials()).includes(activity.name); activity.selectable = false; } }); } function getSelectedMaterials() { var resourceCopy = angular.copy(ctrl.resources); return _.reduce(resourceCopy, function(memo, resource) { if(resource.selected) { memo.push(resource.material); } return memo; }, []); } function isQuizSelected() { return getSelectedActivities().includes(3); } function getReadingLevel(resource) { if(resource.landing_page_material_id || resource.investigation_pack_material_id || resource.material.typeId === null || resource.material.readingLevel === 'none') { return ''; } else { return resource.material.readingLevel.charAt(0).toUpperCase() + resource.material.readingLevel.slice(1); } } function getReadingLevels() { return storylineLesson.getReadingLevels(); } function getStudentStep() { return getReadingLevels().length > 1 ? determineStepNumber(4) : determineStepNumber(3); } function isValid() { //check activities, check resources, check levels if needed, check students return validStudents() && validActivities() && validMaterials(); } function validStudents() { return studentList.getSelected().length ; } function validActivities() { var validQuizSelection = true; if(getSelectedActivities().includes(3)) { validQuizSelection = getSelectedActivities().includes(1) || getSelectedActivities().includes(2); } return getSelectedActivities().length !== 0 && validQuizSelection; } function getSelectedActivities() { var activityCopy = angular.copy(ctrl.activities); return _.reduce(activityCopy, function(memo, activity) { if(activity.selected) memo.push(activity.id); return memo; }, []); } function validMaterials() { return getFinalMaterialIds()['count']; } function getFinalMaterialIds() { var resourceCopy = angular.copy(ctrl.resources); var resourceGroups = { 'investigation_pack_unit_ids': [], 'sibling_material_ids': [], 'material_ids': [], 'count': 0 }; _.each(resourceCopy, function(resource) { if(resource.selected) { if(resource.investigation_pack_material_id) resourceGroups.investigation_pack_unit_ids.push(resource.material.unitId); else if(resource.landing_page_material_id) resourceGroups.sibling_material_ids.push(resource.landing_page_material_id); else if(resource.material_id) resourceGroups.material_ids.push(resource.material_id); resourceGroups.count++; } }); return resourceGroups; } function getSelectedStudents() { return studentList.getSelected().map(function (student) { return _.pick(student, 'student_id')['student_id'] }); } function getFormData() { var data = getFinalMaterialIds(); data['activity_types'] = getSelectedActivities(); data['level'] = ctrl.chosenLevel; data['student_ids'] = getSelectedStudents(); data['storyline_id'] = ctrl.resources[0]['storyline_id']; data['lesson_id'] = ctrl.lessonId; data['constructed_response_enabled'] = ctrl.constructedResponseEnabled; return data; } function assignmentRedirect() { windowService.redirect(AuthGo.getUrl(SiteHelper.KAZ_SITE_ABBREVIATION, '/main/Assign/action/readingPractice#!/tabs/science')); } function submit() { if(!isValid()) { messageHandler.publishError("Invalid selection. Please change selections and try again."); return; } var limitLookup = null; var studentIDsAsDelimitedString = ""; for (var i = 0; i < studentList.getSelected().length; i++) { var studentId = studentList.getSelected()[i].student_id; studentIDsAsDelimitedString = studentIDsAsDelimitedString + studentId + ","; } if (studentIDsAsDelimitedString.length < 1) { studentIDsAsDelimitedString = 0; } else { studentIDsAsDelimitedString = studentIDsAsDelimitedString.slice(0, -1); } storylineLessonServer.getStudentResourceLimit(studentIDsAsDelimitedString).then(function (response) { limitLookup = JSON.parse(response.data); }); storylineLessonServer.putStorylineLessonAssignment(getFormData()) .then(function() { messageHandler.publishSuccess('Assignment created. Track progress on the ', 'assignments page.', assignmentRedirect); ctrl.close(); }) .catch(function(error) { var errorMessage = error.data.message; if (errorMessage.includes('limit')) { errorMessage = "The following students have exceeded their resource limit: "; for (var i = 0; i < studentList.getSelected().length; ++i) { var currentStudentId = studentList.getSelected()[i].student_id; if (limitLookup[currentStudentId] >= maxResourceLimit) { var student = studentList.getSelected()[i]; errorMessage = errorMessage + student.student_name + ", "; } } errorMessage = errorMessage.slice(0, -2); MessageBox.show({ message: errorMessage, responses: [ { id: 'ok', confirm: true, label: 'OK' } ] }).then(function (response) { ctrl.messageBoxOpen = false; },function (reason) { alert(errorMessage); }); } else { messageHandler.publishError('There was a problem processing your request.'); } }); } ctrl.lessonTitle = function() { return ctrl.lessonId > 0 ? 'Lesson ' + ctrl.lessonId : 'End of Storyline'; }; } })();