def get_table(self): rounds = self.get_rounds() if not rounds: return TabbycatTableBuilder(view=self) # empty (as precaution) name_attr = 'code_name' if use_team_code_names(self.tournament, False) else 'short_name' # Obscure true rankings, in case client disabled JavaScript teams = self.tournament.team_set.prefetch_related('speaker_set').order_by(name_attr) # Can't use prefetch.populate_win_counts, since that doesn't exclude # silent rounds and future rounds appropriately opponents = self.tournament.pref('teams_in_debate') == 'two' add_team_round_results_public(teams, rounds, opponents=opponents) # Pre-sort, as Vue tables can't do two sort keys teams = sorted(teams, key=lambda t: (-t.points, getattr(t, name_attr))) key, title = ('points', _("Points")) if self.tournament.pref('teams_in_debate') == 'bp' else ('wins', _("Wins")) header = {'key': key, 'tooltip': title, 'icon': 'bar-chart'} table = TabbycatTableBuilder(view=self, sort_order='desc') table.add_team_columns(teams) table.add_column(header, [team.points for team in teams]) table.add_team_results_columns(teams, rounds) return table
def get_table(self): rounds = self.get_rounds() if not rounds: return TabbycatTableBuilder(view=self) # empty (as precaution) name_attr = 'code_name' if use_team_code_names(self.tournament, False) else 'short_name' # Obscure true rankings, in case client disabled JavaScript teams = self.tournament.team_set.prefetch_related('speaker_set').order_by(name_attr) # Can't use prefetch.populate_win_counts, since that doesn't exclude # silent rounds and future rounds appropriately opponents = self.tournament.pref('teams_in_debate') == 'two' add_team_round_results_public(teams, rounds, opponents=opponents) # Pre-sort, as Vue tables can't do two sort keys teams = sorted(teams, key=lambda t: (-t.points, getattr(t, name_attr))) key, title = ('points', _("Points")) if self.tournament.pref('teams_in_debate') == 'bp' else ('wins', _("Wins")) header = {'key': key, 'tooltip': title, 'icon': 'bar-chart'} table = TabbycatTableBuilder(view=self, sort_order='desc') table.add_team_columns(teams) table.add_column(header, [team.points for team in teams]) table.add_team_results_columns(teams, rounds) return table
def get_table(self): if not self.is_draw_released(): return None debateadjs = DebateAdjudicator.objects.filter( debate__round=self.tournament.current_round, ).select_related( 'adjudicator', 'debate__venue', ).prefetch_related('debate__venue__venuecategory_set', ).order_by( 'adjudicator__name') table = TabbycatTableBuilder(view=self, sort_key='adj') data = [{ 'text': _("Add result from %(adjudicator)s") % { 'adjudicator': da.adjudicator.name }, 'link': reverse_tournament('old-results-public-ballotset-new-pk', self.tournament, kwargs={'adj_id': da.adjudicator.id}), } for da in debateadjs] header = {'key': 'adj', 'title': _("Adjudicator")} table.add_column(header, data) debates = [da.debate for da in debateadjs] table.add_debate_venue_columns(debates) return table
def get_tables(self): tournament = self.tournament teams = tournament.team_set.all().annotate(feedback_count=Count('debateteam__adjudicatorfeedback')).prefetch_related('speaker_set') team_table = TabbycatTableBuilder( view=self, title=_('From Teams'), sort_key='team') team_table.add_team_columns(teams) team_feedback_data = [] for team in teams: count = team.feedback_count team_feedback_data.append({ 'text': ngettext("%(count)d feedback", "%(count)d feedbacks", count) % {'count': count}, 'link': reverse_tournament('adjfeedback-view-from-team', tournament, kwargs={'pk': team.id}), }) team_table.add_column({'key': 'feedbacks', 'title': _("Feedbacks")}, team_feedback_data) adjs = tournament.adjudicator_set.all().annotate(feedback_count=Count('debateadjudicator__adjudicatorfeedback')) adj_table = TabbycatTableBuilder( view=self, title=_('From Adjudicators'), sort_key='name') adj_table.add_adjudicator_columns(adjs) adj_feedback_data = [] for adj in adjs: count = adj.feedback_count adj_feedback_data.append({ 'text': ngettext("%(count)d feedback", "%(count)d feedbacks", count) % {'count': count}, 'link': reverse_tournament('adjfeedback-view-from-adjudicator', tournament, kwargs={'pk': adj.id}), }) adj_table.add_column({'key': 'feedbacks', 'title': _("Feedbacks")}, adj_feedback_data) return [team_table, adj_table]
def get_adjudicators_table(self): tournament = self.tournament def _build_url(adjudicator): if adjudicator.url_key is None: return {'text': _("no URL"), 'class': 'text-warning'} path = reverse_tournament('privateurls-person-index', 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 Adjudicator.objects.filter( tournament=tournament) table = TabbycatTableBuilder(view=self, title=_("Adjudicators"), sort_key="name") table.add_adjudicator_columns(adjudicators, show_institutions=False, show_metadata=False) table.add_column({ 'key': 'url', 'title': _("URL") }, [_build_url(adj) for adj in adjudicators]) return table
def get_table(self): if not self.is_draw_released(): return None debateadjs = DebateAdjudicator.objects.filter( debate__round=self.tournament.current_round, ).select_related( 'adjudicator', 'debate__venue', ).prefetch_related( 'debate__venue__venuecategory_set', ).order_by('adjudicator__name') table = TabbycatTableBuilder(view=self, sort_key='adj') data = [{ 'text': _("Add result from %(adjudicator)s") % {'adjudicator': da.adjudicator.name}, 'link': reverse_tournament('results-public-ballotset-new-pk', self.tournament, kwargs={'adj_id': da.adjudicator.id}), } for da in debateadjs] header = {'key': 'adj', 'title': _("Adjudicator")} table.add_column(header, data) debates = [da.debate for da in debateadjs] table.add_debate_venue_columns(debates) return table
def get_speakers_table(self): tournament = self.tournament def _build_url(speaker): if speaker.url_key is None: return {'text': _("no URL"), 'class': 'text-warning'} path = reverse_tournament('privateurls-person-index', tournament, kwargs={'url_key': speaker.url_key}) return { 'text': self.request.build_absolute_uri(path), 'class': 'small' } speakers = Speaker.objects.filter(team__tournament=tournament) table = TabbycatTableBuilder(view=self, title=_("Speakers"), sort_key="name") table.add_speaker_columns(speakers, categories=False) table.add_column({ 'key': 'url', 'title': _("URL") }, [_build_url(speaker) for speaker in speakers]) return table
def get_adjudicators_table(self): tournament = self.get_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, hide_institution=True, hide_metadata=True) table.add_column(_("Feedback URL"), [ _build_url(adj, 'adjfeedback-public-add-from-adjudicator-randomised') for adj in adjudicators ]) table.add_column(_("Ballot URL"), [ _build_url(adj, 'results-public-ballotset-new-randomised') for adj in adjudicators ]) return table
def get_table(self): tournament = self.get_tournament() # Find the most recent non-silent preliminary round round = tournament.current_round if tournament.pref('all_results_released') else tournament.current_round.prev while round is not None and (round.silent or round.stage != Round.STAGE_PRELIMINARY): round = round.prev if round is None or round.silent: return TabbycatTableBuilder() # empty (as precaution) teams = tournament.team_set.prefetch_related('speaker_set').order_by( 'institution__code', 'reference') # Obscure true rankings, in case client disabled JavaScript rounds = tournament.prelim_rounds(until=round).filter(silent=False).order_by('seq') add_team_round_results_public(teams, rounds) # pre-sort, as Vue tables can't do two sort keys teams = sorted(teams, key=lambda t: (-t.wins, t.short_name)) table = TabbycatTableBuilder(view=self, sort_order='desc') table.add_team_columns(teams) table.add_column("Wins", [team.wins for team in teams]) table.add_team_results_columns(teams, rounds) messages.info(self.request, "This list is sorted by wins, and then by " "team name within each group — it does not indicate each team's " "ranking within each group.") return table
def get_table(self): self.standings = self.get_standings() table = TabbycatTableBuilder(view=self, title=self.object.name, sort_key='Rk') table.add_ranking_columns(self.standings) table.add_column("Break", [tsi.break_rank for tsi in self.standings]) table.add_team_columns([tsi.team for tsi in self.standings]) table.add_metric_columns(self.standings) return table
def get_table(self): self.standings = self.get_standings() table = TabbycatTableBuilder(view=self, title=self.object.name, sort_key='Rk') table.add_ranking_columns(self.standings) table.add_column({'title': _("Break"), 'key': 'break'}, [tsi.break_rank for tsi in self.standings]) table.add_team_columns([tsi.team for tsi in self.standings]) table.add_metric_columns(self.standings) return table
def get_table(self): t = self.tournament teams = t.team_set.select_related('institution').prefetch_related('speaker_set') table = TabbycatTableBuilder(view=self, sort_key='code_name') table.add_column( {'key': 'code_name', 'title': _("Code name")}, [{'text': t.code_name or "—"} for t in teams] ) table.add_team_columns(teams) return table
def get_table(self): t = self.tournament teams = t.team_set.select_related('institution').prefetch_related('speaker_set') table = TabbycatTableBuilder(view=self, sort_key='code_name') table.add_column( {'key': 'code_name', 'title': _("Code name")}, [{'text': t.code_name or "—"} for t in teams], ) table.add_team_columns(teams) return table
def get_tables(self): tournament = self.tournament teams = tournament.team_set.all().annotate(feedback_count=Count( 'debateteam__adjudicatorfeedback')).prefetch_related('speaker_set') team_table = TabbycatTableBuilder(view=self, title=_('From Teams'), sort_key='team') team_table.add_team_columns(teams) team_feedback_data = [] for team in teams: count = team.feedback_count team_feedback_data.append({ 'text': ngettext("%(count)d feedback", "%(count)d feedbacks", count) % { 'count': count }, 'link': reverse_tournament('adjfeedback-view-from-team', tournament, kwargs={'pk': team.id}), }) team_table.add_column({ 'key': 'feedbacks', 'title': _("Feedbacks") }, team_feedback_data) adjudicators = tournament.adjudicator_set.all().annotate( feedback_count=Count('debateadjudicator__adjudicatorfeedback')) adj_table = TabbycatTableBuilder(view=self, title=_('From Adjudicators'), sort_key='name') adj_table.add_adjudicator_columns(adjudicators) adj_feedback_data = [] for adj in adjudicators: count = adj.feedback_count adj_feedback_data.append({ 'text': ngettext("%(count)d feedback", "%(count)d feedbacks", count) % { 'count': count }, 'link': reverse_tournament('adjfeedback-view-from-adjudicator', tournament, kwargs={'pk': adj.id}), }) adj_table.add_column({ 'key': 'feedbacks', 'title': _("Feedbacks") }, adj_feedback_data) return [team_table, adj_table]
def get_table(self): tournament = self.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': ngettext("%(count)d feedback", "%(count)d feedbacks", count) % {'count': count}, 'link': reverse_tournament('adjfeedback-view-on-adjudicator', tournament, kwargs={'pk': adj.id}), }) table.add_column({'key': 'feedbacks', 'title': _("Feedbacks")}, feedback_data) return table
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': "{:d} Feedbacks".format(count), 'link': reverse_tournament('adjfeedback-view-on-adjudicator', tournament, kwargs={'pk': adj.id}), }) table.add_column("Feedbacks", feedback_data) return table
def get_table(self): tournament = self.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().annotate(feedback_count=Count('adjudicatorfeedback')): 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', tournament, kwargs={'pk': adj.id}), }) table.add_column({'key': 'feedbacks', 'title': _("Feedbacks")}, feedback_data) return table
def get_tables(self): tournament = self.get_tournament() teams = tournament.team_set.all() team_table = TabbycatTableBuilder(view=self, title='From Teams', sort_key='Team') team_table.add_team_columns(teams) team_feedback_data = [] for team in teams: count = AdjudicatorFeedback.objects.filter( source_team__team=team).select_related( 'source_team__team').count() team_feedback_data.append({ 'text': ungettext("%(count)d feedback", "%(count)d feedbacks", count) % { 'count': count }, 'link': reverse_tournament('adjfeedback-view-from-team', tournament, kwargs={'pk': team.id}), }) team_table.add_column("Feedbacks", team_feedback_data) adjs = tournament.adjudicator_set.all() adj_table = TabbycatTableBuilder(view=self, title='From Adjudicators', sort_key='Name') adj_table.add_adjudicator_columns(adjs) adj_feedback_data = [] for adj in adjs: count = AdjudicatorFeedback.objects.filter( source_adjudicator__adjudicator=adj).select_related( 'source_adjudicator__adjudicator').count() adj_feedback_data.append({ 'text': ungettext("%(count)d feedback", "%(count)d feedbacks", count) % { 'count': count }, 'link': reverse_tournament('adjfeedback-view-from-adjudicator', tournament, kwargs={'pk': adj.id}), }) adj_table.add_column("Feedbacks", adj_feedback_data) return [team_table, adj_table]
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.id, } 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
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") % formats.time_format(timezone.localtime(notification.timestamp), use_l10n=True) table = TabbycatTableBuilder(view=self, title=notification.get_event_display().capitalize(), subtitle=subtitle) emails_recipient = [] emails_addresses = [] 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) emails_addresses.append(sentmessage.email or 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(formats.time_format(timezone.localtime(latest_status.timestamp), use_l10n=True)) 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': 'email', 'tooltip': _("Email address"), 'icon': 'mail'}, emails_addresses) table.add_column({'key': 'name', 'title': _("Status")}, emails_status) table.add_column({'key': 'name', 'title': _("Time")}, emails_time) tables.append(table) return tables
def get_adjudicators_table(self, url_type, url_name, url_header): tournament = self.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, show_institutions=False, show_metadata=False) table.add_column({'key': 'email', 'title': _("Email")}, [adj.email for adj in adjudicators]) table.add_column(url_header, [_build_url(adj) for adj in adjudicators]) return table
def get_table(self): table = TabbycatTableBuilder(view=self, sort_key='team') speakers = Speaker.objects.filter(team__tournament=self.tournament).select_related( 'team', 'team__institution').prefetch_related('categories', 'team__speaker_set') table.add_speaker_columns(speakers, categories=False) table.add_team_columns([speaker.team for speaker in speakers]) speaker_categories = self.tournament.speakercategory_set.all() for sc in speaker_categories: table.add_column({'key': sc.name, 'title': 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
def get_table(self): table = TabbycatTableBuilder(view=self, sort_key='team') speakers = Speaker.objects.filter(team__tournament=self.tournament).select_related( 'team', 'team__institution').prefetch_related('categories', 'team__speaker_set') table.add_speaker_columns(speakers, categories=False) table.add_team_columns([speaker.team for speaker in speakers]) speaker_categories = self.tournament.speakercategory_set.all() for sc in speaker_categories: table.add_column({'key': sc.name, 'title': 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
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
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': "{:d} Feedbacks".format(count), 'link': reverse_tournament('adjfeedback-view-on-adjudicator', tournament, kwargs={'pk': adj.id}), }) table.add_column("Feedbacks", feedback_data) return table
def get_table(self): r = self.get_round() table = TabbycatTableBuilder(view=self) if r.draw_status == r.STATUS_NONE: return table # Return Blank draw = r.debate_set_with_prefetches(ordering=('room_rank',), institutions=True) populate_history(draw) if r.is_break_round: table.add_room_rank_columns(draw) else: table.add_debate_bracket_columns(draw) table.add_debate_venue_columns(draw) table.add_team_columns([d.aff_team for d in draw], key="Aff", hide_institution=True) table.add_team_columns([d.neg_team for d in draw], key="Neg", hide_institution=True) # For draw details and draw draft pages if (r.draw_status == r.STATUS_DRAFT or self.detailed) and r.prev: teams = Team.objects.filter(debateteam__debate__round=r) metrics = r.tournament.pref('team_standings_precedence') generator = TeamStandingsGenerator(metrics, ('rank', 'subrank')) standings = generator.generate(teams, round=r.prev) if not r.is_break_round: table.add_debate_ranking_columns(draw, standings) else: table.add_column( {'tooltip': "Affirmative Team's Break Rank", 'text': "ABR"}, ["%s" % d.aff_team.break_rank_for_category(r.break_category) for d in draw]) table.add_column( {'tooltip': "Negative Team's Break Rank", 'text': "NBR"}, ["%s" % d.neg_team.break_rank_for_category(r.break_category) for d in draw]) table.add_debate_metric_columns(draw, standings) table.add_sides_count([d.aff_team for d in draw], r.prev, 'aff') table.add_sides_count([d.neg_team for d in draw], r.prev, 'neg') else: table.add_debate_adjudicators_column(draw, show_splits=False) table.add_draw_conflicts_columns(draw) if not r.is_break_round: table.highlight_rows_by_column_value(column=0) # highlight first row of a new bracket return table
def get_adjudicators_table(self): tournament = self.tournament def _build_url(adjudicator): if adjudicator.url_key is None: return {'text': _("no URL"), 'class': 'text-warning'} path = reverse_tournament('privateurls-person-index', 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 Adjudicator.objects.filter(tournament=tournament) table = TabbycatTableBuilder(view=self, title=_("Adjudicators"), sort_key="name") table.add_adjudicator_columns(adjudicators, show_institutions=False, show_metadata=False) table.add_column( {'key': 'url', 'title': _("URL")}, [_build_url(adj) for adj in adjudicators] ) return table
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() ]) adjudicators = tournament.adjudicator_set.all() adjs_table = TabbycatTableBuilder(view=self, sort_key="adjudicator", title=_("An Adjudicator")) 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]
def get_speakers_table(self): tournament = self.tournament def _build_url(speaker): if speaker.url_key is None: return {'text': _("no URL"), 'class': 'text-warning'} path = reverse_tournament('privateurls-person-index', tournament, kwargs={'url_key': speaker.url_key}) return {'text': self.request.build_absolute_uri(path), 'class': 'small'} speakers = Speaker.objects.filter(team__tournament=tournament) table = TabbycatTableBuilder(view=self, title=_("Speakers"), sort_key="name") table.add_speaker_columns(speakers, categories=False) table.add_column( {'key': 'url', 'title': _("URL")}, [_build_url(speaker) for speaker in speakers] ) return table
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
def get_teams_table(self): tournament = self.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( {'key': 'feedback-url', 'title': _("Feedback URL")}, [_build_url(team) for team in teams] ) return table
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
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
def get_participant_table(self): tournament = self.tournament def _build_url(person): path = reverse_tournament('privateurls-person-index', tournament, kwargs={'url_key': person.url_key}) return self.request.build_absolute_uri(path) people = self.get_participants_to_email() title = _("Participants who will be sent e-mails (%(n)s)") % { 'n': people.count() } table = TabbycatTableBuilder(view=self, title=title, sort_key="name") table.add_column({ 'key': 'name', 'title': _("Name") }, [p.name for p in people]) table.add_column({ 'key': 'email', 'title': _("Email") }, [p.email for p in people]) table.add_column({ 'key': 'url', 'title': _("Private URL") }, [_build_url(p) for p in people]) return table
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
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
def get_motions_table(self, t, rounds): motions = motion_statistics.statistics(tournament=t, rounds=rounds) table = TabbycatTableBuilder(view=self, sort_key="Order") table.add_round_column([motion.round for motion in motions]) table.add_motion_column(motions, show_order=True) table.add_column("Selected", [motion.chosen_in for motion in motions]) if self.get_tournament().pref('motion_vetoes_enabled'): table.add_column("Aff Vetoes", [motion.aff_vetoes for motion in motions]) table.add_column("Neg Vetoes", [motion.neg_vetoes for motion in motions]) table.add_column("Aff Wins", [motion.aff_wins for motion in motions]) table.add_column("Neg Wins", [motion.neg_wins for motion in motions]) return table
def get_tables(self): tournament = self.get_tournament() teams = tournament.team_set.all() team_table = TabbycatTableBuilder( view=self, title='From Teams', sort_key='Name') team_table.add_team_columns(teams) team_feedback_data = [] for team in teams: count = AdjudicatorFeedback.objects.filter( source_team__team=team).select_related( 'source_team__team').count() team_feedback_data.append({ 'text': "{:d} Feedbacks".format(count), 'link': reverse_tournament('adjfeedback-view-from-team', tournament, kwargs={'pk': team.id}), }) team_table.add_column("Feedbacks", team_feedback_data) adjs = tournament.adjudicator_set.all() adj_table = TabbycatTableBuilder( view=self, title='From Adjudicators', sort_key='Feedbacks') adj_table.add_adjudicator_columns(adjs) adj_feedback_data = [] for adj in adjs: count = AdjudicatorFeedback.objects.filter( source_adjudicator__adjudicator=adj).select_related( 'source_adjudicator__adjudicator').count() adj_feedback_data.append({ 'text': "{:d} Feedbacks".format(count), 'link': reverse_tournament('adjfeedback-view-from-adjudicator', tournament, kwargs={'pk': adj.id}), }) adj_table.add_column("Feedbacks", adj_feedback_data) return [team_table, adj_table]
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
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]
def get_table(self): motions = motion_statistics.statistics(round=self.get_round()) table = TabbycatTableBuilder(view=self, sort_key="Order") table.add_round_column([motion.round for motion in motions]) table.add_motion_column(motions, show_order=True) table.add_column("Selected", [motion.chosen_in for motion in motions]) if self.get_tournament().pref('motion_vetoes_enabled'): table.add_column("Aff Vetoes", [motion.aff_vetoes for motion in motions]) table.add_column("Neg Vetoes", [motion.neg_vetoes for motion in motions]) table.add_column("Aff Wins", [motion.aff_wins for motion in motions]) table.add_column("Neg Wins", [motion.neg_wins for motion in motions]) return table
def get_participant_table(self): tournament = self.tournament def _build_url(person): path = reverse_tournament('privateurls-person-index', tournament, kwargs={'url_key': person.url_key}) return self.request.build_absolute_uri(path) people = self.get_participants_to_email() title = _("Participants who will be sent e-mails (%(n)s)") % {'n': people.count()} table = TabbycatTableBuilder(view=self, title=title, sort_key="name") table.add_column({'key': 'name', 'title': _("Name")}, [p.name for p in people]) table.add_column({'key': 'email', 'title': _("Email")}, [p.email for p in people]) table.add_column({'key': 'url', 'title': _("Private URL")}, [_build_url(p) for p in people]) return table
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
def get_table(self): institutions = Institution.objects.select_related('region').filter( Q(team__tournament=self.tournament) | Q(adjudicator__tournament=self.tournament) ).annotate( nteams=Count('team', distinct=True), nadjs=Count('adjudicator', filter=Q(adjudicator__independent=False), distinct=True), nias=Count('adjudicator', filter=Q(adjudicator__independent=True), distinct=True), ).distinct() table = TabbycatTableBuilder(view=self, sort_key='code') table.add_column({'key': 'code', 'title': _("Code")}, [i.code for i in institutions]) table.add_column({'key': 'name', 'title': _("Full name")}, [i.name for i in institutions]) if any(i.region is not None for i in institutions): table.add_column({'key': 'region', 'title': _("Region")}, [i.region.name if i.region else "—" for i in institutions]) table.add_column({'key': 'nteams', 'title': _("Teams"), 'tooltip': _("Number of teams")}, [i.nteams for i in institutions]) table.add_column({'key': 'nadjs', 'title': _("Adjs"), 'tooltip': _("Number of adjudicators, excluding independents")}, [i.nadjs for i in institutions]) table.add_column({'key': 'nadjs', 'title': _("IAs"), 'tooltip': _("Number of independent adjudicators")}, [i.nias for i in institutions]) return table
def get_table(self): institutions = Institution.objects.select_related('region').filter( Q(team__tournament=self.tournament) | Q(adjudicator__tournament=self.tournament)).annotate( nteams=Count('team', distinct=True, filter=Q(team__tournament=self.tournament)), nadjs=Count('adjudicator', filter=Q(adjudicator__tournament=self.tournament, adjudicator__independent=False), distinct=True), nias=Count('adjudicator', filter=Q(adjudicator__tournament=self.tournament, adjudicator__independent=True), distinct=True), ).distinct() table = TabbycatTableBuilder(view=self, sort_key='code') table.add_column({ 'key': 'code', 'title': _("Code") }, [i.code for i in institutions]) table.add_column({ 'key': 'name', 'title': _("Full name") }, [i.name for i in institutions]) if any(i.region is not None for i in institutions): table.add_column({ 'key': 'region', 'title': _("Region") }, [i.region.name if i.region else "—" for i in institutions]) table.add_column( { 'key': 'nteams', 'title': _("Teams"), 'tooltip': _("Number of teams") }, [i.nteams for i in institutions]) table.add_column( { 'key': 'nadjs', 'title': _("Adjs"), 'tooltip': _("Number of adjudicators, excluding independents") }, [i.nadjs for i in institutions]) table.add_column( { 'key': 'nadjs', 'title': _("IAs"), 'tooltip': _("Number of independent adjudicators") }, [i.nias for i in institutions]) return table