(function () { "use strict"; angular.module('shared') .service('TeachersUtil', ['NameUtil', 'memberInfo', 'loggedInInfo', '_', function (NameUtil, memberInfo, loggedInInfo, _) { function formatTeacherName(firstName, lastName) { return NameUtil.formatName(firstName, lastName, true); } function sortableTeacherName(firstName, lastName, userName) { return NameUtil.formatUserName(firstName, lastName, userName, true); } function membersFromStudents(students) { return orderMembers(reduceStudentsToMembers(students)); } function reduceStudentsToMembers(students) { return _.reduce(students, function reduceStudentToMembers(memo, student) { if (!isStudentsTeacherInCollection(memo, student)) { memo.push(teacherFromStudent(student)); } return memo; }, []); } function orderMembers(members) { return _.chain(members) .sortBy('display_name') .sortBy('order') .value(); } function isStudentsTeacherInCollection(collection, student) { return _.find(collection, function isStudentsHomeroomTeacher(teacher) { return teacher.member_id == student.homeroom_member_id; }); } function teacherFromStudent(student) { var teacher = { member_id: student.homeroom_member_id, username: student.homeroom_member_username, first_name: student.homeroom_member_first_name, last_name: student.homeroom_member_last_name, organization_name : student.organization_name, is_shareable: student.is_shareable, }; teacher.display_name = teacher.member_id == memberInfo.member_id && loggedInInfo.member_id == memberInfo.member_id ? 'My Homeroom' : formatTeacherName(teacher.first_name, teacher.last_name); teacher.order = teacher.member_id == memberInfo.member_id ? 1 : 2; return teacher; } function formatStudentHomeroomMemberLastFirst(student) { return NameUtil.formatName(student.homeroom_member_first_name, student.homeroom_member_last_name, true); } function sortableHomeroomMemberName(student) { return sortableTeacherName(student.homeroom_member_first_name, student.homeroom_member_last_name, student.homeroom_member_username); } return { formatTeacherName: formatTeacherName, sortableTeacherName: sortableTeacherName, membersFromStudents: membersFromStudents, formatStudentHomeroomMemberLastFirst: formatStudentHomeroomMemberLastFirst, sortableHomeroomMemberName: sortableHomeroomMemberName, }; }]) })();