(function () { "use strict"; angular .module('shared') .service('assignTargetedScienceMaterialResource', ['LazModalService', 'targetedResource', 'messageHandler', 'studentList', 'Authorization', 'SiteHelper', function assignTargetedScienceMaterialResourceService(LazModalService, targetedResource, messageHandler, studentList, Authorization, SiteHelper) { var service = this; service.show = show; service.showResourceInfo = showResourceInfo; function showResourceInfo(resourceInfo, parts) { studentList.annotateSelectableStudents([ Authorization.studentWithoutPrivilegeCheckerFactory(SiteHelper.SAZ_SITE_ABBREVIATION), studentAtTargetedResourceLimit, Authorization.studentWithoutResourceLicenseCheckerFactory( Authorization.getLicenseTypeForResourceCollection(resourceInfo[0].resources), Object.keys(resourceInfo).length === 1 ? 'this resource' : 'these resources')]); LazModalService.showModal({ templateUrl: '/shared/js/angular/targeted-resource-assignments/assign-targeted-science-material-resource-modal.html', controller: 'assignTargetedScienceMaterialResourceModal', controllerAs: '$ctrl', hideCloseButton: 'true', inputs: { resourceInfo: resourceInfo, parts: parts }, overrideClass: 'js-none', overrideStyle: 'height: 95vh;' }) .catch(function (reason) { messageHandler.publishError('There was a problem showing the assignment. Please try again later.'); }) } function show(minimumMaterialId, unitId, materialTypeId, rkResourceId, scienceCategoryId, languageId, parts) { targetedResource.getScienceMaterialResourceInfo(minimumMaterialId, unitId, materialTypeId, rkResourceId, scienceCategoryId, languageId) .then(function (resourceInfo) { showResourceInfo(resourceInfo, parts); }, function (reason) { messageHandler.publishError( 'There was an error retrieving the assignment information. Try again later.') }) } function studentAtTargetedResourceLimit(student) { if (student.is_at_science_targeted_resource_limit) { return "This student is at the limit of allowed assignable resources." } } } ]) .controller('assignTargetedScienceMaterialResourceModal', ['close', '$scope', 'resourceInfo', 'parts', 'studentList', 'serverTargetedResource', '_', 'messageHandler', 'AuthGo', '$window', 'SiteHelper', 'resourceHelper', function assignTargetedScienceMaterialResourceModalCtrl(close, $scope, resourceInfo, parts, studentList, serverTargetedResource, _, messageHandler, AuthGo, $window, SiteHelper, resourceHelper) { var ctrl = this; ctrl.kidsRosterUrl = AuthGo.getUrl('kaz', '/main/students'); ctrl.close = ctrl.cancel = close; resourceHelper.setResourceInfo(resourceInfo); ctrl.title = resourceHelper.getTitle(); ctrl.activities = resourceHelper.activities; ctrl.switchAnyStudents = switchAnyStudents; ctrl.isValid = isValid; ctrl.submit = submit; ctrl.getISLParts = getISLParts; ctrl.getSelectedActivities = resourceHelper.getSelectedActivities; ctrl.getResourceLevels = resourceHelper.getResourceLevels; init(); function init() { var step = 1; setIconClassForActivities(); setSelectForActivities(); ctrl.showActivities = !resourceHelper.areActivitiesDisabled() || (!resourceHelper.isWorksheet && !resourceHelper.isInteractiveComponent); if (ctrl.showActivities) { ctrl.activitiesStep = step++; } ctrl.isSitN = resourceHelper.isSitN; ctrl.showLevels = hasMultipleLevels(); if(ctrl.showLevels) { ctrl.showLevelsStep = step++; } if(resourceHelper.isISL) { ctrl.isISL = resourceHelper.isISL; ctrl.showPartsStep = step++; } ctrl.studentsStep = step; studentList.clearSelected(); ctrl.chosenLevel = ctrl.isSitN ? 'Early' : getDefaultChosenLevel(); ctrl.chosenPart = []; _.each(ctrl.getISLParts(ctrl.chosenLevel), function(part) { ctrl.chosenPart[part.displayOrder] = true; }); ctrl.constructedResponseEnabled = resourceInfo.constructedResponseEnabled; } document.addEventListener('keyup', checkEscape); $scope.$on('$destroy', function () { document.removeEventListener('keyup', checkEscape) }); function switchAnyStudents() { if (studentList.pending) { return "pending"; } return studentList.get().length ? "some" : "none"; } function quizValid() { return !resourceHelper.quizSelected() || ctrl.activities.length === 1 || ctrl.getSelectedActivities().length > 1; } function validActivities() { return ctrl.getSelectedActivities().length && quizValid(); } function isValid() { return studentList.getSelected().length && validActivities() && resourceHelper.getSelectedResources(ctrl.chosenLevel, ctrl.chosenPart).length; } function submit() { console.assert(isValid(), "Invalid submit attempt"); if (!isValid()) { return; } serverTargetedResource.addAssignment(getServerAssignment()) .then(function (response) { if (response.data.status === "success") { messageHandler.publishSuccess('Assignment created. Track progress on the ', 'assignments page.', assignmentRedirect); } else { messageHandler.publishError('There was an error adding the assignment. Try again later.'); } close(); }, function () { messageHandler.publishError( "There was an error adding the assignment. Try again later.") }) } function assignmentRedirect() { $window.location.href = AuthGo.getUrl(SiteHelper.KAZ_SITE_ABBREVIATION, '/main/Assign/action/readingPractice#!/tabs/science'); } function getServerAssignment() { return { activities: getActivities(), resources: resourceHelper.getSelectedResources(ctrl.chosenLevel, ctrl.chosenPart).map(function (resource) { var picked = _.pick(resource, 'rkResourceId'); return { 'kids_book_id': picked['rkResourceId'] }; }), students: studentList.getSelected().map(function (student) { return _.pick(student, 'student_id') }), constructed_response_enabled: ctrl.constructedResponseEnabled }; function getActivities() { return _.pluck(ctrl.getSelectedActivities(), 'activity_name'); } } function checkEscape(event) { if (event.key === "Escape") { close(); } } function setSelectForActivities() { resourceHelper.activities.forEach(function (activity) { activity.selected = true; }); } function setIconClassForActivities() { resourceHelper.activities.forEach(function (activity) { if(activity.activity_name === resourceHelper.activityTypesByName.WORKSHEET) { activity.iconClass = 'icon-' + activity.display_name.toLowerCase() + 'C'; } else if(activity.activity_name === resourceHelper.activityTypesByName.INTERACTIVE) { activity.iconClass = 'icon-scienceInteractiveC'; } else { activity.iconClass = 'icon-' + activity.activity_name + 'C'; } }); } function getISLParts(chosenLevel) { var onlyShowCertainParts = !!parts; return _.reduce(resourceHelper.resources, function(memo, resource) { if(resource.readingLevel === chosenLevel && !_.contains(memo, resource.displayOrder) && (!onlyShowCertainParts || (parts.indexOf(resource.displayOrder) !== -1))) { memo.push(resource); } return memo; }, []); } function hasMultipleLevels() { return resourceHelper.getResourceLevels().length > 1; } function getDefaultChosenLevel() { if(_.contains(resourceHelper.getResourceLevels(), "low")) { return "low"; } else if(_.contains(resourceHelper.getResourceLevels(), "mid")) { return "mid"; } else if(_.contains(resourceHelper.getResourceLevels(), "high")) { return "high"; } else { return "none"; } } } ]); })();