Exemplo n.º 1
0
def get_invalid_group_members(group, queryset=None):
    '''Get person objects that won't qualify to be in a group'''

    if queryset is None:
        queryset = Person.objects.all()

    # Complex query sets on related models causing problem
    # likely because it cant handle when emailaddress is null
    # for exmple there fore i will do old fashined way.

    queryset = queryset\
        .annotate(num_groups=Count('groups', distinct=True))\
        .filter(groups=group)\

    valid_pks = []
    for p in queryset:
        # Must have a valid email address
        # Must have a username of length > 0
        # Can only belong to one group
        verified_email = email_verified(p)
        if verified_email:
            if p.num_groups == 1:
                if p.username is not None:
                    if len(p.username) > 1:
                        valid_pks.append(p.pk)

    queryset = queryset.exclude(pk__in=valid_pks)

    return queryset
Exemplo n.º 2
0
    def get_context_data(self, **kwargs):
        context = \
            super(GroupStatsView, self).get_context_data(**kwargs)

        group = context['group']

        context['x_title'] = _('Group Leaderboard: {0}').format(group)
        context['x_description'] = _("Leaderboard for members of {0}.").format(
            group)

        language = get_current_language(self.request)

        people = Person.objects.all()

        valid_members = people
        valid_members = get_valid_group_members(group, valid_members)

        invalid_members = people
        invalid_members = get_invalid_group_members(group, invalid_members)

        # people = people\
        #     .filter(recording__sentence__language=language)

        # score, count = get_competition_group_score(group)
        num_recordings = 0
        if valid_members:
            for member in valid_members:
                recordings = filter_qs_for_competition(
                    Recording.objects.filter(person=member))
                member.num_recordings = recordings.count()

        if invalid_members:
            invalid_members = invalid_members\
                .annotate(num_groups=Count('groups', distinct=True))

            for member in invalid_members:
                recordings = filter_qs_for_competition(
                    Recording.objects.filter(person=member))
                member.num_recordings = recordings.count()
                member.verified = email_verified(member)

        form = ResendEmailVerificationForm()

        group.duration_hours = group.duration / 60 / 60

        context['group'] = group
        context['score'] = group.score
        context['form'] = form
        context['people'] = people.filter(groups=group)
        context['valid_members'] = valid_members
        context['invalid_members'] = invalid_members

        return context