"use strict"; angular.module("vocabulary") .component("assignLessonModal", { templateUrl: "/js/redesign-angular/assign/assign-lesson-modal.html", controller: "AssignLessonModalCtrl", bindings: { lessonData: '<' } }) .controller("AssignLessonModalCtrl", [ '_', '$q', 'messageHandler', 'AuthGo', 'windowService', 'SiteHelper', 'studentList', 'memberWordService', 'assignVocabLessonService', 'Authorization', 'premadeNavigationService', 'MessageBox', 'GAME_TYPES', function (_, $q, messageHandler, AuthGo, windowService, SiteHelper, studentList, memberWordService, assignVocabLessonService, Authorization, premadeNavigationService, MessageBox, GAME_TYPES) { var ctrl = this; ctrl.assignmentArea = null; var maxResourceLimit = 100; var userWordsWithoutAssessments = []; var userWordsWithoutBlank = []; var userWordsWithoutCorrectAnswerSet = []; this.$onInit = init; function init(){ setInvalidUserWordLists(); setAssignmentArea(); initGameTypes(); } function setAssignmentArea() { switch (ctrl.lessonData.type) { case "raz_premade": premadeNavigationService.getAssignmentAreaNameForReading() .then(function (assignmentAreaName) { ctrl.assignmentArea = assignmentAreaName; }); break; case "saz_premade": ctrl.assignmentArea = "Science"; break; default: ctrl.assignmentArea = "Vocabulary"; } } function getSiteAbbreviation(){ switch (ctrl.lessonData.type) { case "raz_premade": return SiteHelper.RK_SITE_ABBREVIATION; case "saz_premade": return SiteHelper.SAZ_SITE_ABBREVIATION; default: return SiteHelper.VAZ_SITE_ABBREVIATION; } } ctrl.openChanged = function(open) { if (open) { ctrl.dueDate = null; studentList.clearSelected(); studentList.annotateSelectableStudents([ Authorization.studentWithoutPrivilegeCheckerFactory(getSiteAbbreviation()), Authorization.studentWithoutPrivilegeCheckerFactory(SiteHelper.VAZ_SITE_ABBREVIATION) ]); } }; ctrl.kidsRosterUrl = AuthGo.getUrl('kaz', '/main/students'); function setInvalidUserWordLists() { var words = ctrl.lessonData.words; for (var i = 0; i < words.length; i++) { if (memberWordService.isMemberWord(words[i])) { validateWordForAppropriateListPlacement(words[i]); } } } function validateWordForAppropriateListPlacement(word) { if(!word.hasOwnProperty('assessmentQuestionsAndAnswers')) { userWordsWithoutAssessments.push(word.wordName); } if(!wordHasBlankInRequiredPlaces(word)) { userWordsWithoutBlank.push(word.wordName); } if(!memberWordService.wordHasCorrectAnswerSet(word)) { userWordsWithoutCorrectAnswerSet.push(word.wordName); } } function wordHasBlankInRequiredPlaces(word) { return memberWordService.stringContainsBlank(word.sentenceStarter) && memberWordService.stringContainsBlank(word.clozeSentence) } ctrl.assign = function() { 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); } assignVocabLessonService.getStudentResourceLimit(studentIDsAsDelimitedString).then(function (response) { limitLookup = JSON.parse(response.data); }); assignVocabularyAssignments() .then(function() { messageHandler.publishSuccess( 'Assignment created. Track progress on the ', 'assignments page.', assignmentRedirect ); ctrl.popoverCtrl.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.'); } }) .finally(function() {}); }; function assignVocabularyAssignments() { return $q.all(_.map(getSelectedGameTypeIds(), function(gameTypeId) { return assignVocabLessonService.assignVocabLesson( ctrl.lessonData, gameTypeId, getSelectedStudentIds(), getAssignmentDueDate() ); })) } ctrl.cancel = function() { ctrl.popoverCtrl.close(); }; ctrl.isAssignable = function () { return ctrl.getUnAssignableErrors().length <= 0; }; ctrl.getUnAssignableErrors = function (){ var errors = []; if (ctrl.lessonData.words.length < assignVocabLessonService.getAssignableWordMinimum()) { errors.push("There is a five word minimum to assign a lesson."); } if (userWordsWithoutAssessments.length > 0) { errors.push("Your words ("+ userWordsWithoutAssessments.join(', ') +") are missing answers to the assessment question. Please add these in order to be able to assign the lesson."); } if (userWordsWithoutBlank.length > 0) { errors.push("Your words ("+ userWordsWithoutBlank.join(', ') +") are missing placeholders for the sentence starter and/or cloze sentence. Please add these in order to be able to assign the lesson."); } if (userWordsWithoutCorrectAnswerSet.length > 0) { errors.push("Your words ("+ userWordsWithoutCorrectAnswerSet.join(', ') +") have no correct answer selected for the multiple choice assessment. Please mark the correct answer in order to be able to assign the lesson."); } return errors; }; ctrl.setPopover = function(popoverCtrl) { ctrl.popoverCtrl = popoverCtrl; }; ctrl.isValid = function() { return studentList.getSelected().length && getSelectedGameTypeIds().length; }; ctrl.switchAnyStudents = function() { if (studentList.pending) { return "pending"; } return studentList.get().length ? "some" : "none"; }; function getSelectedGameTypeIds() { return _.reduce(ctrl.gameTypes, function(memo, gameType) { if (gameType.selected) { memo.push(gameType.id); } return memo; }, []); } function getSelectedStudentIds() { return studentList.getSelected().map(function(student) { return student.student_id; }); } function assignmentRedirect() { windowService.redirect( AuthGo.getUrl( SiteHelper.KAZ_SITE_ABBREVIATION, '/main/Assign/action/readingPractice' ) ); } function getAssignmentDueDate() { if (!ctrl.dueDate || !moment(ctrl.dueDate).isValid()) { return null; } return moment(ctrl.dueDate, 'MM/DD/YYYY').format('YYYY-MM-DD'); } function initGameTypes() { ctrl.gameTypes = _.map(GAME_TYPES, function(gameType) { return { id: gameType.gameTypeId, displayName: gameType.displayName, selected: true }; }); } }]);