def notify_that_group_was_added_in_course(sender: Group, **kwargs) -> None: group = kwargs['instance'] if not kwargs['created']: return course_groups = Group.objects.filter(course=group.course) course_name = group.course.name target = reverse(course_view, args=[group.course.slug]) if group.teacher is not None: teacher = group.teacher.user notify_user( teacher, Notification(get_id(), get_time(), NotificationType.ASSIGNED_TO_NEW_GROUP_AS_A_TEACHER, {'course_name': course_name}, target)) enrolled_or_queued = [RecordStatus.ENROLLED, RecordStatus.QUEUED] records = Record.objects.filter( group__in=course_groups, status__in=enrolled_or_queued).select_related('student', 'student__user') users = {element.student.user for element in records} notify_selected_users( users, Notification(get_id(), get_time(), NotificationType.ADDED_NEW_GROUP, { 'course_name': course_name, 'teacher': group.get_teacher_full_name() }, target))
def notify_board_members_about_voting(sender: Thesis, **kwargs) -> None: thesis = kwargs['instance'] all_voters = get_theses_board() accepting_voters = [ v.owner for v in thesis.thesis_votes.all() if v.vote == ThesisVote.ACCEPTED ] users = [ voter.user for voter in all_voters if voter not in accepting_voters ] target = reverse('theses:selected_thesis', args=[thesis.id]) notify_selected_users( users, Notification(get_id(), get_time(), NotificationType.THESIS_VOTING_HAS_BEEN_ACTIVATED, {'title': thesis.title}, target))
def notify_that_teacher_was_changed(sender: Group, **kwargs) -> None: group = kwargs['instance'] if group.teacher is not None: teacher = group.teacher.user course_name = group.course.name target = reverse(course_view, args=[group.course.slug]) notify_user( teacher, Notification(get_id(), get_time(), NotificationType.ASSIGNED_TO_NEW_GROUP_AS_A_TEACHER, {'course_name': course_name}, target)) queued_users = User.objects.filter( student__record__group=group, student__record__status=RecordStatus.QUEUED) enrolled_users = User.objects.filter( student__record__group=group, student__record__status=RecordStatus.ENROLLED) notify_selected_users( queued_users, Notification( get_id(), get_time(), NotificationType.TEACHER_HAS_BEEN_CHANGED_QUEUED, { 'course_name': course_name, 'teacher': group.get_teacher_full_name(), 'type': group.get_type_display(), }, target)) notify_selected_users( enrolled_users, Notification( get_id(), get_time(), NotificationType.TEACHER_HAS_BEEN_CHANGED_ENROLLED, { 'course_name': course_name, 'teacher': teacher.get_full_name(), 'type': group.get_type_display(), }, target))
def notify_that_news_was_added(sender: News, **kwargs) -> None: news = kwargs['instance'] # Do not notify about modified news. if not kwargs['created']: return # Do not notify about hidden news. if news.category == '-': return records = set(Employee.get_actives().select_related('user')) | set( Student.get_active_students().select_related('user')) users = [element.user for element in records] target = reverse('news-one', args=[news.id]) notify_selected_users( users, Notification(get_id(), get_time(), NotificationType.NEWS_HAS_BEEN_ADDED, { 'title': news.title, 'contents': news.body }, target))