(function () { 'use strict'; var serviceId = 'taskAdminService'; angular.module('taskAdmin').factory(serviceId, ['$q', 'taskAdminDataContext', 'datacontext', 'myUsersDataContext', taskAdminService]); function taskAdminService($q, taskAdminDataContext, datacontext, myUsersDataContext) { var service = { getCurrentTaskClass: getCurrentTaskClass, setCurrentTaskClass: setCurrentTaskClass, createBlankTaskClass: createBlankTaskClass, getTaskClassIcons: getTaskClassIcons, getTaskClasses: getTaskClasses, deleteTaskClass: deleteTaskClass, updateTaskClass: updateTaskClass, createTaskClass: createTaskClass, createBlankTask: createBlankTask, getCurrentTask: getCurrentTask, setCurrentTask: setCurrentTask, getAllTasks: getAllTasks, deleteTask: deleteTask, createTask: createTask, updateTask: updateTask, getResponseTypes: getResponseTypes, setCurrentAssignedTask: setCurrentAssignedTask, getCurrentAssignedTask: getCurrentAssignedTask, assignTaskToGroup: assignTaskToGroup, assignTaskToIndividual: assignTaskToIndividual, getAssignedTasks: getAssignedTasks, getAssignedTasksSimple: getAssignedTasksSimple, getAssignedTask: getAssignedTask, exportAssignedUsersToCsv: exportAssignedUsersToCsv, getAssignedTaskCompletions: getAssignedTaskCompletions, getAssignedUsers: getAssignedUsers, closeAssignedTask: closeAssignedTask, recallAssignedTask: recallAssignedTask, setCurrentTasksResponse: setCurrentTasksResponse, getCurrentTasksResponse: getCurrentTasksResponse, createResponseReview: createResponseReview, saveResponseReview: saveResponseReview, sendReviewedResponseEmails: sendReviewedResponseEmails, getFormTypeName: getFormTypeName, getFormTypes: getFormTypes, getDefaultTaskClass: getDefaultTaskClass, getTaskRecord: getTaskRecord }; var currentTaskClass; var currentTask; var responseTypes; var inProgress; var currentAssignedTask; var currentTaskReview; return service; /* ************************************ * Task Types * ************************************/ function getCurrentTaskClass() { return currentTaskClass; } function setCurrentTaskClass(taskClass) { currentTaskClass = taskClass; } function getTaskClasses() { return taskAdminDataContext.getAllTaskClasses(); } function getDefaultTaskClass() { return taskAdminDataContext.getDefaultTaskClass(); } function createTaskClass(taskClass) { return taskAdminDataContext.createTaskClass(taskClass); } function deleteTaskClass(taskClass) { return taskAdminDataContext.deleteTaskClass(taskClass); } function updateTaskClass(taskClass) { return taskAdminDataContext.updateTaskClass(taskClass); } // Create a blank task class template function createBlankTaskClass() { var taskClass = { name: '', description: '', completionNotifier: false, completionDeliverableRequired: false, completionBadgeIssuing: false, markingSchemeRequired: false, groupWork: false, iconPath: '', status: 0, taskClassResponseTypes: [] }; return taskClass; } /* ************************************ * Tasks * ************************************/ function getCurrentTask() { return currentTask; } function getTaskRecord(task) { return taskAdminDataContext.getTaskRecord(task).then(function (taskRecord) { currentTask = taskRecord; }); } function setCurrentTask(taskRecord) { currentTask = taskRecord; } function getAllTasks() { return taskAdminDataContext.getAllTasks(); } function deleteTask(task) { return taskAdminDataContext.deleteTask(task); } function updateTask(task) { return taskAdminDataContext.updateTask(task); } function createTask(task) { return taskAdminDataContext.createTask(task); } // Create a blank task template function createBlankTask() { var task = { name: '', description: '', details: '', taskSteps: [], taskBadges: [], taskAttachments: [], taskMarkingSchemes: [], taskResponseTypes: [], status: 0, autoCompleteBadges: [], autoCompleteBadgeId: null }; return task; } /* ************************************ * Assigned tasks * ************************************/ function getCurrentAssignedTask() { return currentAssignedTask; } function setCurrentAssignedTask(assignedTask) { currentAssignedTask = assignedTask; } function assignTaskToGroup(assignedTask) { var unique = function (array) { var a = array.concat(); for (var i = 0; i < a.length; ++i) { for (var j = i + 1; j < a.length; ++j) { if (a[i] === a[j]) a.splice(j--, 1); } } return a; }; //Get the users we need to send a notification about the task to - users that are not admins var users$ = assignedTask.assigneeIds.map(myUsersDataContext.getNonAdminUserIdsForOrg); return $q.all(users$).then(function (userIdsArray) { var allUserIds = []; userIdsArray.forEach(function (userIds) { allUserIds = unique(allUserIds.concat(userIds)); }); var assign$ = taskAdminDataContext.assignTaskToGroup(assignedTask); var notify$ = function (taskName) { return datacontext.sendNotification({ userIds: allUserIds, description: 'You have been assigned a new task "' + taskName + '"' }); }; return assign$.then(function (assignedTaskResponse) { return notify$(assignedTaskResponse.taskRecordName).then(function (notificationResponse) { return assignedTaskResponse; }); }); }); } /* * * Add a user to an assignedTask, then send the user a notification that they have a new task * */ function assignTaskToIndividual(assignment) { return taskAdminDataContext.assignIndividualTask(assignment).then(function (data) { return datacontext.sendNotification({ userIds: [assignment.ownerId], description: 'You have been assigned a new task "' + assignment.taskName + '"' }); }); } function getAssignedTasks() { return taskAdminDataContext.getAssignedTasks(); } function getAssignedTasksSimple() { return taskAdminDataContext.getAssignedTasksSimple(); } function getAssignedTask(assignedTaskId) { return taskAdminDataContext.getAssignedTask(assignedTaskId); } function exportAssignedUsersToCsv(assignedTaskId) { return taskAdminDataContext.getAssignedUsersCsvExport(assignedTaskId); } function getAssignedTaskCompletions(assignedTaskId) { return taskAdminDataContext.getAssignedTaskCompletions(assignedTaskId); } function getAssignedUsers(assignedTask) { return taskAdminDataContext.getAssignedUsers(assignedTask); } function closeAssignedTask(assignedTask) { return taskAdminDataContext.closeAssignedTask(assignedTask); } function recallAssignedTask(assignedTask) { return taskAdminDataContext.recallAssignedTask(assignedTask); } /* ************************************ * Responses * ************************************/ function getCurrentTasksResponse() { return currentTaskReview; } function setCurrentTasksResponse(response) { currentTaskReview = response; } function createResponseReview(response) { return taskAdminDataContext.createResponseReview(response); } function saveResponseReview(response) { return taskAdminDataContext.saveResponseReview(response); } function sendReviewedResponseEmails(data) { return taskAdminDataContext.sendReviewedResponseEmails(data); } function getResponseTypes() { if (!responseTypes) { if (!inProgress) { inProgress = getResponseTypesFromServer(); } return inProgress .then(function (data) { responseTypes = data; inProgress = false; return responseTypes; }); } return $q.resolve(responseTypes); } function getResponseTypesFromServer() { if (!responseTypes) { return taskAdminDataContext.getResponseTypes() .then(function (data) { responseTypes = data; return responseTypes; }); } return $q.resolve(responseTypes); } function getTaskClassIcons() { return ["fa fa-adjust", "fa fa-align-center", "fa fa-align-justify", "fa fa-align-left", "fa fa-align-right", "fa fa-ambulance", "fa fa-anchor", "fa fa-angle-double-down", "fa fa-angle-double-left", "fa fa-angle-double-right", "fa fa-angle-double-up", "fa fa-angle-down", "fa fa-angle-left", "fa fa-angle-right", "fa fa-angle-up", "fa fa-archive", "fa fa-arrow-alt-circle-down", "fa fa-arrow-alt-circle-left", "fa fa-arrow-alt-circle-right", "fa fa-arrow-alt-circle-up", "fa fa-arrow-circle-down", "fa fa-arrow-circle-left", "fa fa-arrow-circle-right", "fa fa-arrow-circle-up", "fa fa-arrow-down", "fa fa-arrow-left", "fa fa-arrow-right", "fa fa-arrow-up", "fa fa-arrows-alt", "fa fa-arrows-alt-h", "fa fa-arrows-alt-v", "fa fa-asterisk", "fa fa-at", "fa fa-backward", "fa fa-ban", "fa fa-barcode", "fa fa-bars", "fa fa-bed", "fa fa-beer", "fa fa-bell", "fa fa-bell-slash", "fa fa-bicycle", "fa fa-binoculars", "fa fa-birthday-cake", "fa fa-bold", "fa fa-bolt", "fa fa-bomb", "fa fa-book", "fa fa-bookmark", "fa fa-briefcase", "fa fa-bug", "fa fa-building", "fa fa-bullhorn", "fa fa-bullseye", "fa fa-bus", "fa fa-calculator", "fa fa-calendar", "fa fa-camera", "fa fa-camera-retro", "fa fa-car", "fa fa-caret-down", "fa fa-caret-left", "fa fa-caret-right", "fa fa-caret-up", "fa fa-cart-arrow-down", "fa fa-cart-plus", "fa fa-certificate", "fa fa-chart-area", "fa fa-chart-bar", "fa fa-chart-pie", "fa fa-check", "fa fa-check-circle", "fa fa-check-square", "fa fa-chevron-circle-down", "fa fa-chevron-circle-left", "fa fa-chevron-circle-right", "fa fa-chevron-circle-up", "fa fa-chevron-down", "fa fa-chevron-left", "fa fa-chevron-right", "fa fa-chevron-up", "fa fa-child", "fa fa-circle", "fa fa-clipboard", "fa fa-closed-captioning", "fa fa-cloud", "fa fa-cloud-download-alt", "fa fa-cloud-upload-alt", "fa fa-code", "fa fa-code-branch", "fa fa-coffee", "fa fa-cog", "fa fa-cogs", "fa fa-columns", "fa fa-comment", "fa fa-comments", "fa fa-compass", "fa fa-compress", "fa fa-copy", "fa fa-copyright", "fa fa-credit-card", "fa fa-crop", "fa fa-crosshairs", "fa fa-cube", "fa fa-cubes", "fa fa-cut", "fa fa-database", "fa fa-desktop", "fa fa-dollar-sign", "fa fa-download", "fa fa-edit", "fa fa-eject", "fa fa-ellipsis-h", "fa fa-ellipsis-v", "fa fa-envelope", "fa fa-envelope-square", "fa fa-eraser", "fa fa-euro-sign", "fa fa-exchange-alt", "fa fa-exclamation", "fa fa-exclamation-circle", "fa fa-exclamation-triangle", "fa fa-expand", "fa fa-external-link-alt", "fa fa-external-link-square-alt", "fa fa-eye", "fa fa-eye-dropper", "fa fa-eye-slash", "fa fa-fast-backward", "fa fa-fast-forward", "fa fa-fax", "fa fa-female", "fa fa-fighter-jet", "fa fa-file", "fa fa-file-archive", "fa fa-file-audio", "fa fa-file-code", "fa fa-file-excel", "fa fa-file-image", "fa fa-file-pdf", "fa fa-file-powerpoint", "fa fa-file-video", "fa fa-file-word", "fa fa-film", "fa fa-filter", "fa fa-fire", "fa fa-fire-extinguisher", "fa fa-flag", "fa fa-flag-checkered", "fa fa-flask", "fa fa-folder", "fa fa-folder-open", "fa fa-font", "fa fa-forward", "fa fa-frown", "fa fa-futbol", "fa fa-gamepad", "fa fa-gavel", "fa fa-gem", "fa fa-genderless", "fa fa-gift", "fa fa-globe", "fa fa-graduation-cap", "fa fa-h-square", "fa fa-hand-point-down", "fa fa-hand-point-left", "fa fa-hand-point-right", "fa fa-hand-point-up", "fa fa-hdd", "fa fa-headphones", "fa fa-heart", "fa fa-heartbeat", "fa fa-history", "fa fa-home", "fa fa-hospital", "fa fa-image", "fa fa-inbox", "fa fa-indent", "fa fa-info", "fa fa-info-circle", "fa fa-italic", "fa fa-key", "fa fa-keyboard", "fa fa-language", "fa fa-laptop", "fa fa-leaf", "fa fa-lemon", "fa fa-level-down-alt", "fa fa-level-up-alt", "fa fa-life-ring", "fa fa-lightbulb", "fa fa-link", "fa fa-list", "fa fa-list-alt", "fa fa-list-ol", "fa fa-list-ul", "fa fa-location-arrow", "fa fa-lock", "fa fa-long-arrow-alt-down", "fa fa-long-arrow-alt-left", "fa fa-long-arrow-alt-right", "fa fa-long-arrow-alt-up", "fa fa-magic", "fa fa-magnet", "fa fa-male", "fa fa-map-marker", "fa fa-mars", "fa fa-mars-double", "fa fa-mars-stroke", "fa fa-mars-stroke-h", "fa fa-mars-stroke-v", "fa fa-medkit", "fa fa-meh", "fa fa-mercury", "fa fa-microphone", "fa fa-microphone-slash", "fa fa-minus", "fa fa-minus-circle", "fa fa-minus-square", "fa fa-mobile", "fa fa-moon", "fa fa-motorcycle", "fa fa-music", "fa fa-neuter", "fa fa-newspaper", "fa fa-outdent", "fa fa-paint-brush", "fa fa-paper-plane", "fa fa-paperclip", "fa fa-paragraph", "fa fa-paste", "fa fa-pause", "fa fa-paw", "fa fa-pencil-alt", "fa fa-phone", "fa fa-phone-square", "fa fa-plane", "fa fa-play", "fa fa-play-circle", "fa fa-plug", "fa fa-plus", "fa fa-plus-circle", "fa fa-plus-square", "fa fa-pound-sign", "fa fa-power-off", "fa fa-print", "fa fa-puzzle-piece", "fa fa-qrcode", "fa fa-question", "fa fa-question-circle", "fa fa-quote-left", "fa fa-quote-right", "fa fa-random", "fa fa-recycle", "fa fa-redo", "fa fa-reply", "fa fa-reply-all", "fa fa-retweet", "fa fa-road", "fa fa-rocket", "fa fa-rss", "fa fa-rss-square", "fa fa-ruble-sign", "fa fa-rupee-sign", "fa fa-save", "fa fa-search", "fa fa-search-minus", "fa fa-search-plus", "fa fa-server", "fa fa-share", "fa fa-share-alt", "fa fa-share-alt-square", "fa fa-share-square", "fa fa-shield-alt", "fa fa-ship", "fa fa-shopping-cart", "fa fa-sign-in-alt", "fa fa-sign-out-alt", "fa fa-signal", "fa fa-sitemap", "fa fa-sliders-h", "fa fa-sort", "fa fa-sort-down", "fa fa-sort-up", "fa fa-space-shuttle", "fa fa-spinner", "fa fa-square", "fa fa-star", "fa fa-star-half", "fa fa-step-backward", "fa fa-step-forward", "fa fa-stethoscope", "fa fa-stop", "fa fa-strikethrough", "fa fa-subscript", "fa fa-subway", "fa fa-suitcase", "fa fa-superscript", "fa fa-sync", "fa fa-table", "fa fa-tablet", "fa fa-tachometer-alt", "fa fa-tag", "fa fa-tags", "fa fa-tasks", "fa fa-taxi", "fa fa-terminal", "fa fa-text-height", "fa fa-text-width", "fa fa-th", "fa fa-th-large", "fa fa-th-list", "fa fa-thumbs-down", "fa fa-thumbs-up", "fa fa-thumbtack", "fa fa-ticket-alt", "fa fa-times", "fa fa-times-circle", "fa fa-tint", "fa fa-toggle-off", "fa fa-toggle-on", "fa fa-train", "fa fa-transgender", "fa fa-transgender-alt", "fa fa-trash", "fa fa-tree", "fa fa-trophy", "fa fa-truck", "fa fa-tty", "fa fa-umbrella", "fa fa-underline", "fa fa-undo", "fa fa-university", "fa fa-unlink", "fa fa-unlock", "fa fa-unlock-alt", "fa fa-upload", "fa fa-user", "fa fa-user-md", "fa fa-user-plus", "fa fa-user-secret", "fa fa-user-times", "fa fa-users", "fa fa-utensil-spoon", "fa fa-utensils", "fa fa-venus", "fa fa-venus-double", "fa fa-venus-mars", "fa fa-video", "fa fa-volume-down", "fa fa-volume-off", "fa fa-volume-up", "fa fa-wheelchair", "fa fa-wifi", "fa fa-wrench", "fa fa-yen-sign", "fab fa-adn", "fab fa-android", "fab fa-angellist", "fab fa-apple", "fab fa-behance", "fab fa-behance-square", "fab fa-bitbucket", "fab fa-bitcoin", "fab fa-buysellads", "fab fa-cc-amex", "fab fa-cc-discover", "fab fa-cc-mastercard", "fab fa-cc-paypal", "fab fa-cc-stripe", "fab fa-cc-visa", "fab fa-codepen", "fab fa-connectdevelop", "fab fa-dashcube", "fab fa-delicious", "fab fa-deviantart", "fab fa-digg", "fab fa-dropbox", "fab fa-drupal", "fab fa-empire", "fab fa-facebook", "fab fa-facebook-f", "fab fa-facebook-square", "fab fa-flickr", "fab fa-forumbee", "fab fa-foursquare", "fab fa-git", "fab fa-git-square", "fab fa-github", "fab fa-github-alt", "fab fa-github-square", "fab fa-google", "fab fa-google-wallet", "fab fa-hacker-news", "fab fa-html5", "fab fa-instagram", "fab fa-ioxhost", "fab fa-joomla", "fab fa-jsfiddle", "fab fa-lastfm", "fab fa-lastfm-square", "fab fa-leanpub", "fab fa-linkedin", "fab fa-linux", "fab fa-maxcdn", "fab fa-medium", "fab fa-openid", "fab fa-pagelines", "fab fa-paypal", "fab fa-pied-piper", "fab fa-pinterest", "fab fa-pinterest-p", "fab fa-pinterest-square", "fab fa-qq", "fab fa-rebel", "fab fa-reddit", "fab fa-reddit-square", "fab fa-renren", "fab fa-sellsy", "fab fa-shirtsinbulk", "fab fa-simplybuilt", "fab fa-skyatlas", "fab fa-skype", "fab fa-slack", "fab fa-slideshare", "fab fa-soundcloud", "fab fa-spotify", "fab fa-stack-exchange", "fab fa-stack-overflow", "fab fa-steam", "fab fa-steam-square", "fab fa-stumbleupon", "fab fa-stumbleupon-circle", "fab fa-tencent-weibo", "fab fa-trello", "fab fa-tumblr", "fab fa-tumblr-square", "fab fa-twitch", "fab fa-twitter", "fab fa-twitter-square", "fab fa-vimeo-square", "fab fa-vine", "fab fa-vk", "fab fa-weibo", "fab fa-weixin", "fab fa-whatsapp", "fab fa-windows", "fab fa-wordpress", "fab fa-xing", "fab fa-xing-square", "fab fa-yahoo", "fab fa-yelp", "fab fa-youtube", "fab fa-youtube-square"]; } function getFormTypes() { return [ { type: 0, name: 'Standard' }, { type: 1, name: 'Reflection' }, { type: 2, name: 'Goal' }, { type: 3, name: 'CPD' }, { type: 4, name: 'Quiz' } ]; } function getFormTypeName(type) { switch (type) { case 0: return 'Standard'; case 1: return 'Reflection'; case 2: return 'Goal'; case 3: return 'CPD'; case 4: return 'Quiz'; } } } })();