Exemplo n.º 1
0
 def get_table(self):
     tournament = self.get_tournament()
     table = TabbycatTableBuilder(view=self, sort_key="Name")
     table.add_adjudicator_columns(tournament.adjudicator_set.all())
     feedback_data = []
     for adj in tournament.adjudicator_set.all():
         count = adj.adjudicatorfeedback_set.count()
         feedback_data.append({
             'text':
             ungettext("%(count)d feedback", "%(count)d feedbacks", count) %
             {
                 'count': count
             },
             'link':
             reverse_tournament('adjfeedback-view-on-adjudicator',
                                tournament,
                                kwargs={'pk': adj.id}),
         })
     table.add_column("Feedbacks", feedback_data)
     return table
Exemplo n.º 2
0
    def get_table(self):
        t = self.tournament
        table = TabbycatTableBuilder(view=self, sort_key='team')
        teams = t.team_set.all().select_related(
            'institution').prefetch_related('break_categories', 'speaker_set')
        table.add_team_columns(teams)
        break_categories = t.breakcategory_set.all()

        for bc in break_categories:
            table.add_column({
                'title': bc.name,
                'key': bc.name
            }, [{
                'component': 'check-cell',
                'checked':
                True if bc in team.break_categories.all() else False,
                'id': team.id,
                'type': bc.id
            } for team in teams])
        return table
Exemplo n.º 3
0
    def get_table(self):
        t = self.get_tournament()
        table = TabbycatTableBuilder(view=self, sort_key='team')
        speakers = Speaker.objects.filter(team__tournament=t).select_related(
            'team', 'team__institution').prefetch_related('categories')
        table.add_speaker_columns(speakers, categories=False)
        table.add_team_columns([speaker.team for speaker in speakers])
        speaker_categories = self.get_tournament().speakercategory_set.all()

        for sc in speaker_categories:
            table.add_column(
                sc.name,
                [{
                    'component': 'check-cell',
                    'checked':
                    True if sc in speaker.categories.all() else False,
                    'id': speaker.id,
                    'type': sc.id
                } for speaker in speakers])
        return table
Exemplo n.º 4
0
    def get_table_by_debate(self):
        debates = self.round.debate_set_with_prefetches(results=True,
                                                        wins=True)
        populate_confirmed_ballots(
            debates,
            motions=True,
            results=self.round.ballots_per_debate == 'per-adj')

        table = TabbycatTableBuilder(view=self, sort_key="venue")
        table.add_debate_venue_columns(debates)
        table.add_debate_results_columns(debates)
        if not (self.tournament.pref('teams_in_debate') == 'bp'
                and self.round.is_break_round):
            table.add_debate_ballot_link_column(debates)
        table.add_debate_adjudicators_column(debates, show_splits=True)

        if self.tournament.pref('show_motions_in_results'):
            table.add_debate_motion_column(debates)

        return table
Exemplo n.º 5
0
    def get_table(self):
        round = self.get_round()
        table = TabbycatTableBuilder(view=self, sort_key=self.sort_key)

        queryset = utils.annotate_availability(self.get_queryset(), round)

        table.add_checkbox_columns([inst.available for inst in queryset],
                                   [inst.id for inst in queryset],
                                   "Active Now")

        if round.prev:
            table.add_column(
                "Active in %s" % round.prev.abbreviation,
                [{
                    'sort': inst.prev_available,
                    'icon': 'glyphicon-ok' if inst.prev_available else ''
                } for inst in queryset])

        self.add_description_columns(table, queryset)
        return table
Exemplo n.º 6
0
    def get_table(cls, view, participant):
        """On adjudicator record pages, the table is the previous debates table."""
        table = TabbycatTableBuilder(view=view,
                                     title=view.table_title,
                                     sort_key="round")

        debateadjs = DebateAdjudicator.objects.filter(
            adjudicator=participant, ).select_related(
                'debate__round', 'debate__round__tournament').prefetch_related(
                    Prefetch('debate__debateadjudicator_set',
                             queryset=DebateAdjudicator.objects.select_related(
                                 'adjudicator__institution')),
                    'debate__debateteam_set__team__speaker_set',
                    'debate__round__motion_set',
                )
        if not table.admin and not view.tournament.pref(
                'all_results_released') and not table.private_url:
            debateadjs = debateadjs.filter(
                debate__round__draw_status=Round.STATUS_RELEASED,
                debate__round__silent=False,
                debate__round__completed=True,
            )
        elif table.private_url:
            debateadjs = debateadjs.filter(
                debate__round__draw_status=Round.STATUS_RELEASED)

        debates = [da.debate for da in debateadjs]
        populate_wins(debates)
        populate_confirmed_ballots(debates, motions=True, results=True)

        table.add_round_column([debate.round for debate in debates])
        table.add_debate_results_columns(debates)
        table.add_debate_adjudicators_column(debates,
                                             show_splits=True,
                                             highlight_adj=participant)

        if table.admin or view.tournament.pref('public_motions'):
            table.add_debate_motion_column(debates)

        table.add_debate_ballot_link_column(debates)
        return table
Exemplo n.º 7
0
    def get_table(self):
        table = TabbycatTableBuilder(view=self, sort_key="rk")

        try:
            standings, rounds = self.get_standings()
        except StandingsError as e:
            messages.error(self.request, self.get_standings_error_message(e))
            logger.exception("Error generating standings: " + str(e))
            return table

        table.add_ranking_columns(standings)
        table.add_team_columns([info.team for info in standings],
                               show_break_categories=True)

        table.add_standings_results_columns(standings, rounds,
                                            self.show_ballots())
        table.add_metric_columns(
            standings,
            integer_score_columns=self.integer_score_columns(rounds))

        return table
Exemplo n.º 8
0
    def get_table(self):
        table = TabbycatTableBuilder(view=self, sort_key=self.sort_key)
        queryset = utils.annotate_availability(self.get_queryset(), self.round)
        self.annotate_checkins(queryset, self.tournament)

        table.add_column({
            'key': 'active',
            'title': _("Active Now")
        }, [{
            'component': 'check-cell',
            'checked': inst.available,
            'sort': inst.available,
            'id': inst.id,
            'prev': inst.prev_available if self.round.prev else False,
            'checked_in': inst.checked_in,
            'type': 0,
        } for inst in queryset])

        if self.round.prev:
            title = _("Active in %(prev_round)s") % {
                'prev_round': self.round.prev.abbreviation
            }
            table.add_column({
                'key': 'active',
                'title': title
            }, [{
                'sort': inst.prev_available,
                'icon': 'check' if inst.prev_available else ''
            } for inst in queryset])

        checked_in_header = {'key': "tournament", 'title': _('Checked-In')}
        checked_in_data = [{
            'sort': inst.checked_in,
            'icon': inst.checked_icon,
            'tooltip': inst.checked_tooltip,
        } for inst in queryset]
        table.add_column(checked_in_header, checked_in_data)

        self.add_description_columns(table, queryset)
        return table
Exemplo n.º 9
0
    def get_table(self, mixed_participants=False):
        table = TabbycatTableBuilder(view=self, sort_key='name')

        queryset = self.get_queryset()
        default_send_queryset = self.get_default_send_queryset()

        table.add_column({
            'key': 'send',
            'title': _("Send Email")
        }, [{
            'component': 'check-cell',
            'checked': self.default_send(p, default_send_queryset),
            'id': p.id,
            'name': 'recipients',
            'value': p.id,
            'noSave': True,
            'type': self.get_person_type(p, mixed=mixed_participants),
        } for p in queryset])

        table.add_column(
            {
                'key': 'name',
                'tooltip': _("Participant"),
                'icon': 'user'
            }, [{
                'text': p.name,
                'class': 'no-wrap' if len(p.name) < 20 else '',
            } for p in queryset])

        table.add_column(
            {
                'key': 'email',
                'tooltip': _("Email address"),
                'icon': 'mail'
            }, [{
                'text': p.email if p.email else _("Not Provided"),
                'class': 'small' if p.email else 'small text-warning',
            } for p in queryset])

        return table
Exemplo n.º 10
0
    def get_table(self):
        round = self.get_round()
        table = TabbycatTableBuilder(view=self, sort_key=self.sort_key)
        queryset = utils.annotate_availability(self.get_queryset(), round)

        table.add_column(_("Active Now"), [{
            'component': 'check-cell',
            'checked': inst.available,
            'sort': inst.available,
            'id': inst.id,
            'prev': inst.prev_available if round.prev else False,
            'type': 0,
        } for inst in queryset])

        if round.prev:
            table.add_column(_("Active in %(prev_round)s") % {'prev_round': round.prev.abbreviation}, [{
                'sort': inst.prev_available,
                'icon': 'check' if inst.prev_available else ''
            } for inst in queryset])

        self.add_description_columns(table, queryset)
        return table
Exemplo n.º 11
0
    def get_table(self):
        teams = self.tournament.team_set.all()
        rounds = self.tournament.prelim_rounds()

        tsas = dict()
        for tsa in TeamSideAllocation.objects.filter(round__in=rounds):
            try:
                tsas[(tsa.team.id,
                      tsa.round.seq)] = get_side_name(self.tournament,
                                                      tsa.side, 'abbr')
            except ValueError:
                pass

        table = TabbycatTableBuilder(view=self)
        table.add_team_columns(teams)

        headers = [round.abbreviation for round in rounds]
        data = [[tsas.get((team.id, round.seq), "—") for round in rounds]
                for team in teams]
        table.add_columns(headers, data)

        return table
Exemplo n.º 12
0
    def get_adjudicators_table(self):
        tournament = self.tournament

        def _build_url(adjudicator, url_name):
            if adjudicator.url_key is None:
                return {'text': _("no URL"), 'class': 'text-warning'}
            path = reverse_tournament(url_name, tournament, kwargs={'url_key': adjudicator.url_key})
            return {'text': self.request.build_absolute_uri(path), 'class': 'small'}

        adjudicators = Adjudicator.objects.all() if tournament.pref('share_adjs') else tournament.adjudicator_set.all()
        table = TabbycatTableBuilder(view=self, title=_("Adjudicators"), sort_key="name")
        table.add_adjudicator_columns(adjudicators, show_institutions=False, show_metadata=False)
        table.add_column(
            {'key': 'feedback-url', 'title': _("Feedback URL")},
            [_build_url(adj, 'adjfeedback-public-add-from-adjudicator-randomised') for adj in adjudicators]
        )
        table.add_column(
            {'key': 'ballot-url', 'title': _("Ballot URL")},
            [_build_url(adj, 'results-public-ballotset-new-randomised') for adj in adjudicators]
        )

        return table
Exemplo n.º 13
0
    def get_table(self):
        tournament = self.get_tournament()
        teams = tournament.team_set.all()
        rounds = tournament.prelim_rounds()

        tpas = dict()
        for tpa in TeamPositionAllocation.objects.filter(round__in=rounds):
            try:
                tpas[(tpa.team.id, tpa.round.seq)] = get_position_name(
                    tournament, self.TPA_MAP[tpa.position], 'abbr')
            except ValueError:
                pass

        table = TabbycatTableBuilder(view=self)
        table.add_team_columns(teams)

        headers = [round.abbreviation for round in rounds]
        data = [[tpas.get((team.id, round.id), "—") for round in rounds]
                for team in teams]
        table.add_columns(headers, data)

        return table
Exemplo n.º 14
0
    def get_speakers_table(self):
        tournament = self.tournament

        def _build_url(speaker):
            path = reverse_tournament('adjfeedback-public-add-from-team-randomised', tournament,
                kwargs={'url_key': speaker.team.url_key})
            return self.request.build_absolute_uri(path)

        speakers = self.get_speakers_to_email()
        title = _("Speakers who will be sent e-mails (%(n)s)") % {'n': speakers.count()}
        table = TabbycatTableBuilder(view=self, title=title, sort_key="team")
        table.add_speaker_columns(speakers, categories=False)
        table.add_team_columns([speaker.team for speaker in speakers])
        table.add_column(
            {'key': 'title', 'title': _("Email")},
            [speaker.email for speaker in speakers]
        )
        table.add_column(
            {'key': 'feedback-url', 'title': _("Feedback URL")},
            [_build_url(speaker) for speaker in speakers]
        )

        return table
Exemplo n.º 15
0
    def get_adjudicators_table(self, url_type, url_name, url_header):
        tournament = self.get_tournament()

        def _build_url(adjudicator):
            path = reverse_tournament(url_name,
                                      tournament,
                                      kwargs={'url_key': adjudicator.url_key})
            return self.request.build_absolute_uri(path)

        adjudicators = self.get_adjudicators_to_email(url_type)
        title = _("Adjudicators who will be sent e-mails (%(n)s)") % {
            'n': adjudicators.count()
        }
        table = TabbycatTableBuilder(view=self,
                                     title=title,
                                     sort_key=_("Name"))
        table.add_adjudicator_columns(adjudicators,
                                      hide_institution=True,
                                      hide_metadata=True)
        table.add_column(_("Email"), [adj.email for adj in adjudicators])
        table.add_column(url_header, [_build_url(adj) for adj in adjudicators])

        return table
Exemplo n.º 16
0
    def get_table(self):
        """On team record pages, the table is the results table."""
        tournament = self.get_tournament()
        teamscores = TeamScore.objects.filter(
            debate_team__team=self.object,
            ballot_submission__confirmed=True,
            debate_team__debate__round__draw_status=Round.STATUS_RELEASED
        ).select_related('debate_team__debate__round').prefetch_related(
            Prefetch('debate_team__debate__debateadjudicator_set',
                     queryset=DebateAdjudicator.objects.select_related(
                         'adjudicator__institution')),
            'debate_team__debate__debateteam_set')
        if not tournament.pref('all_results_released'):
            teamscores = teamscores.filter(
                debate_team__debate__round__silent=False,
                debate_team__debate__round__seq__lt=tournament.current_round.
                seq)
        debates = [ts.debate_team.debate for ts in teamscores]
        populate_opponents([ts.debate_team for ts in teamscores])
        populate_confirmed_ballots(debates, motions=True, ballotsets=True)

        table = TabbycatTableBuilder(view=self,
                                     title="Results",
                                     sort_key="Round")
        table.add_round_column([debate.round for debate in debates])
        table.add_debate_result_by_team_columns(teamscores)
        table.add_debate_adjudicators_column(debates, show_splits=True)

        if self.admin or tournament.pref('public_motions'):
            table.add_motion_column([
                debate.confirmed_ballot.motion
                if debate.confirmed_ballot else None for debate in debates
            ])

        table.add_debate_ballot_link_column(debates)

        return table
Exemplo n.º 17
0
    def get_table(self):
        t = self.tournament
        table = TabbycatTableBuilder(view=self, sort_key='team')
        teams = t.team_set.all().select_related(
            'institution').prefetch_related('break_categories', 'speaker_set')
        speaker_categories = t.speakercategory_set.order_by('seq')

        nspeaker_annotations = {}
        for sc in speaker_categories:
            nspeaker_annotations['nspeakers_%s' % sc.slug] = Count(
                'speaker', filter=Q(speaker__categories=sc))
        teams = teams.annotate(**nspeaker_annotations)

        table.add_team_columns(teams)

        break_categories = t.breakcategory_set.order_by('seq')
        for bc in break_categories:
            table.add_column({'title': bc.name, 'key': bc.slug}, [{
                'component': 'check-cell',
                'checked': True if bc in team.break_categories.all() else False,
                'sort': True if bc in team.break_categories.all() else False,
                'id': team.id,
                'type': bc.slug,
            } for team in teams])

        # Provide list of members within speaker categories for convenient entry
        for sc in speaker_categories:
            table.add_column({'title': _('%s Speakers') % sc.name, 'key': sc.name + "_speakers"}, [{
                'text': getattr(team, 'nspeakers_%s' % sc.slug, 'N/A'),
                'tooltip': ngettext(
                    'Team has %(nspeakers)s speaker with the %(category)s speaker category assigned',
                    'Team has %(nspeakers)s speakers with the %(category)s speaker category assigned',
                    getattr(team, 'nspeakers_%s' % sc.slug, 0),
                ) % {'nspeakers': getattr(team, 'nspeakers_%s' % sc.slug, 'N/A'), 'category': sc.name},
            } for team in teams])

        return table
Exemplo n.º 18
0
    def get_table(self):
        """On adjudicator record pages, the table is the previous debates table."""
        tournament = self.get_tournament()
        debateadjs = DebateAdjudicator.objects.filter(
            adjudicator=self.object,
            debate__round__draw_status=Round.STATUS_RELEASED).select_related(
                'debate__round').prefetch_related(
                    Prefetch('debate__debateadjudicator_set',
                             queryset=DebateAdjudicator.objects.select_related(
                                 'adjudicator__institution')),
                    'debate__debateteam_set__team__speaker_set')
        if not tournament.pref('all_results_released'):
            debateadjs = debateadjs.filter(
                debate__round__silent=False,
                debate__round__seq__lt=tournament.current_round.seq,
            )
        debates = [da.debate for da in debateadjs]
        populate_wins(debates)
        populate_confirmed_ballots(debates, motions=True, ballotsets=True)

        table = TabbycatTableBuilder(view=self,
                                     title="Previous Rounds",
                                     sort_key="Round")
        table.add_round_column([debate.round for debate in debates])
        table.add_debate_results_columns(debates)
        table.add_debate_adjudicators_column(debates,
                                             show_splits=True,
                                             highlight_adj=self.object)

        if self.admin or tournament.pref('public_motions'):
            table.add_motion_column([
                debate.confirmed_ballot.motion
                if debate.confirmed_ballot else None for debate in debates
            ])

        table.add_debate_ballot_link_column(debates)
        return table
Exemplo n.º 19
0
    def get_teams_table(self):
        tournament = self.get_tournament()

        def _build_url(team):
            if team.url_key is None:
                return {'text': _("no URL"), 'class': 'text-warning'}
            path = reverse_tournament(
                'adjfeedback-public-add-from-team-randomised',
                tournament,
                kwargs={'url_key': team.url_key})
            return {
                'text': self.request.build_absolute_uri(path),
                'class': 'small'
            }

        teams = tournament.team_set.all()
        table = TabbycatTableBuilder(view=self,
                                     title=_("Teams"),
                                     sort_key=_("Team"))
        table.add_team_columns(teams)
        table.add_column(_("Feedback URL"),
                         [_build_url(team) for team in teams])

        return table
Exemplo n.º 20
0
 def get_table(self):
     adjudicators = self.tournament.adjudicator_set.annotate(
         feedback_count=Count('adjudicatorfeedback'))
     table = TabbycatTableBuilder(view=self, sort_key="name")
     table.add_adjudicator_columns(adjudicators)
     feedback_data = []
     for adj in adjudicators:
         count = adj.feedback_count
         feedback_data.append({
             'text':
             ngettext("%(count)d feedback", "%(count)d feedbacks", count) %
             {
                 'count': count
             },
             'link':
             reverse_tournament('adjfeedback-view-on-adjudicator',
                                self.tournament,
                                kwargs={'pk': adj.id}),
         })
     table.add_column({
         'key': 'feedbacks',
         'title': _("Feedbacks")
     }, feedback_data)
     return table
Exemplo n.º 21
0
    def get_table(self):
        standings, rounds = self.get_standings()

        table = TabbycatTableBuilder(view=self, sort_key="Rk")

        # Easiest to redact info here before passing to column constructors
        if hasattr(self, 'public_page_preference'):
            for info in standings:
                if info.speaker.anonymous:
                    info.speaker.anonymise = True
                    info.speaker.team.anonymise = True

        table.add_ranking_columns(standings)
        table.add_speaker_columns([info.speaker for info in standings])
        table.add_team_columns([info.speaker.team for info in standings])

        scores_headers = [round.abbreviation for round in rounds]
        scores_data = [
            list(map(metricformat, standing.scores)) for standing in standings
        ]
        table.add_columns(scores_headers, scores_data)
        table.add_metric_columns(standings)

        return table
Exemplo n.º 22
0
    def get_tables(self):
        tournament = self.tournament

        use_code_names = use_team_code_names_data_entry(
            self.tournament, self.tabroom)
        teams_table = TabbycatTableBuilder(view=self,
                                           sort_key="team",
                                           title=_("A Team"))
        add_link_data = [{
            'text': team_name_for_data_entry(team, use_code_names),
            'link': self.get_from_team_link(team)
        } for team in tournament.team_set.all()]
        header = {'key': 'team', 'title': _("Team")}
        teams_table.add_column(header, add_link_data)

        if tournament.pref('show_team_institutions'):
            teams_table.add_column(
                {
                    'key': 'institution',
                    'icon': 'home',
                    'tooltip': _("Institution"),
                }, [
                    team.institution.code
                    if team.institution else TabbycatTableBuilder.BLANK_TEXT
                    for team in tournament.team_set.all()
                ])

        if tournament.pref('share_adjs'):
            adjudicators = Adjudicator.objects.filter(
                Q(tournament=tournament) | Q(tournament__isnull=True))
        else:
            adjudicators = tournament.adjudicator_set.all()

        adjs_table = TabbycatTableBuilder(view=self,
                                          sort_key="adjudicator",
                                          title=_("An Adjudicator"))
        if tournament.pref('share_adjs'):
            adjudicators = Adjudicator.objects.filter(
                Q(tournament=tournament) | Q(tournament__isnull=True))
        else:
            adjudicators = tournament.adjudicator_set.all()

        add_link_data = [{
            'text': adj.name,
            'link': self.get_from_adj_link(adj),
        } for adj in adjudicators]
        header = {'key': 'adjudicator', 'title': _("Adjudicator")}
        adjs_table.add_column(header, add_link_data)

        if tournament.pref('show_adjudicator_institutions'):
            adjs_table.add_column(
                {
                    'key': 'institution',
                    'icon': 'home',
                    'tooltip': _("Institution"),
                }, [
                    adj.institution.code
                    if adj.institution else TabbycatTableBuilder.BLANK_TEXT
                    for adj in adjudicators
                ])

        return [teams_table, adjs_table]
Exemplo n.º 23
0
    def get_tables(self):
        tables = []

        # notifications.sentmessage_set.first().emailstatus_set.first().latest_statuses will be a list
        notifications = self.tournament.bulknotification_set.select_related(
            'round', ).prefetch_related(
                Prefetch(
                    'sentmessage_set',
                    queryset=SentMessage.objects.select_related(
                        'recipient', ).prefetch_related(
                            Prefetch(
                                'emailstatus_set',
                                queryset=EmailStatus.objects.order_by(
                                    '-timestamp'),
                                to_attr='statuses',
                            )),
                ))

        for notification in notifications:

            if notification.round is not None:
                subtitle = notification.round.name
            else:
                subtitle = _("@ %s") % timezone.localtime(
                    notification.timestamp).strftime("%a, %d %b %Y %H:%M:%S")

            table = TabbycatTableBuilder(
                view=self,
                title=notification.get_event_display().title(),
                subtitle=subtitle)

            emails_recipient = []
            emails_status = []
            emails_time = []

            for sentmessage in notification.sentmessage_set.all():
                emails_recipient.append(
                    sentmessage.recipient.name if sentmessage.
                    recipient else self.UNKNOWN_RECIPIENT_CELL)

                if len(sentmessage.statuses) > 0:
                    latest_status = sentmessage.statuses[0]  # already ordered
                    status_cell = {
                        "text": latest_status.get_event_display(),
                        "class": self._get_event_class(latest_status.event),
                        "popover": {
                            "title":
                            _("Timeline"),
                            "content":
                            self._create_status_timeline(sentmessage.statuses),
                        },
                    }
                    emails_status.append(status_cell)
                    emails_time.append(latest_status.timestamp)
                else:
                    emails_status.append(self.NA_CELL)
                    emails_time.append(self.NA_CELL)

            table.add_column(
                {
                    'key': 'name',
                    'tooltip': _("Participant"),
                    'icon': 'user'
                }, emails_recipient)
            table.add_column({
                'key': 'name',
                'title': _("Status")
            }, emails_status)
            table.add_column({'key': 'name', 'title': _("Time")}, emails_time)

            tables.append(table)

        return tables
Exemplo n.º 24
0
 def get_table(self):
     table = TabbycatTableBuilder(view=self, sort_key='name')
     table.add_adjudicator_columns(self.tournament.adjudicator_set.filter(breaking=True))
     return table