Пример #1
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        wedstrijd_pk = kwargs['wedstrijd_pk'][:
                                              6]  # afkappen voor de veiligheid
        wedstrijd, deelcomp, ronde = bepaal_wedstrijd_en_deelcomp_of_404(
            wedstrijd_pk)

        context['wedstrijd'] = wedstrijd
        context['deelcomp'] = deelcomp

        if not mag_deelcomp_wedstrijd_wijzigen(wedstrijd, self.functie_nu,
                                               deelcomp):
            raise PermissionDenied()

        context['is_controle'] = self.is_controle
        context['is_akkoord'] = wedstrijd.uitslag.is_bevroren

        if self.is_controle:
            context['url_geef_akkoord'] = reverse(
                'CompScores:uitslag-accorderen',
                kwargs={'wedstrijd_pk': wedstrijd.pk})

        scores = (
            wedstrijd.uitslag.scores.filter(type=SCORE_TYPE_SCORE).exclude(
                waarde=SCORE_WAARDE_VERWIJDERD).select_related(
                    'sporterboog', 'sporterboog__boogtype',
                    'sporterboog__sporter',
                    'sporterboog__sporter__bij_vereniging').order_by(
                        'sporterboog__sporter__lid_nr', 'sporterboog__pk')
        )  # belangrijk ivm zelfde volgorde by dynamisch toevoegen
        context['scores'] = scores

        self._team_naam_toevoegen(scores, deelcomp)

        context['url_check_nhbnr'] = reverse('CompScores:dynamic-check-nhbnr')
        context['url_opslaan'] = reverse('CompScores:dynamic-scores-opslaan')
        context['url_deelnemers_ophalen'] = reverse(
            'CompScores:dynamic-deelnemers-ophalen')

        teams = (RegiocompetitieTeam.objects.filter(
            deelcompetitie=deelcomp).select_related('vereniging'))
        for team in teams:
            team.naam_str = team.maak_team_naam_kort()
        context['teams'] = teams

        # plan = wedstrijd.competitiewedstrijdenplan_set.all()[0]
        # ronde = DeelcompetitieRonde.objects.get(plan=plan)

        if self.rol_nu == Rollen.ROL_RCL:
            context['url_terug'] = reverse('CompScores:scores-rcl',
                                           kwargs={'deelcomp_pk': deelcomp.pk})
        else:
            context['url_terug'] = reverse('CompScores:wedstrijden-scores')

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp.competitie.pk)
        return context
Пример #2
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])  # afkappen voor de veiligheid
            comp = Competitie.objects.get(pk=comp_pk)
        except (ValueError, Competitie.DoesNotExist):
            raise Http404()

        deelcomps = (DeelCompetitie.objects.select_related(
            'competitie', 'nhb_regio', 'nhb_regio__rayon').filter(
                competitie=comp_pk,
                laag=LAAG_REGIO).order_by('nhb_regio__regio_nr'))

        context['comp'] = comp
        context['deelcomps'] = deelcomps

        punten2str = dict()
        for punten, beschrijving in TEAM_PUNTEN:
            punten2str[punten] = beschrijving
        # for

        for deelcomp in deelcomps:

            deelcomp.regio_str = str(deelcomp.nhb_regio.regio_nr)
            deelcomp.rayon_str = str(deelcomp.nhb_regio.rayon.rayon_nr)

            if deelcomp.inschrijf_methode == INSCHRIJF_METHODE_1:
                deelcomp.inschrijfmethode_str = '1: kies wedstrijden'
            elif deelcomp.inschrijf_methode == INSCHRIJF_METHODE_2:
                deelcomp.inschrijfmethode_str = '2: klasse naar locatie'
            else:
                deelcomp.inschrijfmethode_str = '3: voorkeur dagdelen'

            if deelcomp.regio_organiseert_teamcompetitie:
                deelcomp.teamcomp_str = 'Ja'

                deelcomp.einde_teams_aanmaken_str = localize(
                    deelcomp.einde_teams_aanmaken)

                if deelcomp.regio_heeft_vaste_teams:
                    deelcomp.team_type_str = 'Statisch'
                else:
                    deelcomp.team_type_str = 'Dynamisch'

                deelcomp.puntenmodel_str = punten2str[
                    deelcomp.regio_team_punten_model]
            else:
                deelcomp.teamcomp_str = 'Nee'
                deelcomp.einde_teams_aanmaken_str = '-'
                deelcomp.team_type_str = '-'
                deelcomp.puntenmodel_str = '-'

            if self.rol_nu == Rollen.ROL_RKO and deelcomp.nhb_regio.rayon == self.functie_nu.nhb_rayon:
                deelcomp.highlight = True
        # for

        menu_dynamics_competitie(self.request, context, comp_pk=comp_pk)
        return context
Пример #3
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])      # afkappen voor de veiligheid
            comp = (Competitie
                    .objects
                    .get(pk=comp_pk))
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        context['comp'] = comp
        comp.bepaal_fase()

        if comp.fase != 'J':
            raise Http404('Competitie niet in de juist fase')

        if comp.klassengrenzen_vastgesteld_rk_bk:
            raise Http404('De klassengrenzen zijn al vastgesteld')

        context['grenzen'], context['niet_compleet_team'] = self._bepaal_klassengrenzen(comp)

        if context['niet_compleet_team']:
            context['url_terug'] = reverse('Competitie:overzicht',
                                           kwargs={'comp_pk': comp.pk})

        context['url_vaststellen'] = reverse('CompRayon:klassengrenzen-vaststellen-rk-bk-teams',
                                             kwargs={'comp_pk': comp.pk})

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #4
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        self.histcomp.comp_type_str = HistCompetitie.comptype2str[self.histcomp.comp_type]
        context['histcomp'] = self.histcomp
        context['form'] = self.form
        context['filter_url'] = self.base_url
        context['zoekterm'] = self.get_filter

        if context['is_paginated']:
            context['page_links'] = self._make_link_urls(context)
            context['active'] = str(context['page_obj'].number)

        if self.get_filter:
            # als een filter actief is, toon de 'clear' knop
            context['unfiltered_url'] = self.base_url
        elif self.paginate_by > 0:
            # geen filter, wel paginering
            # toon de "laad alle ## records" knop
            context['all_url'] = self.base_url + '?all=1'
            context['all_count'] = self.all_count
        # else: we laten de 'all' lijst zien dus laat de 'all' knop weg

        if not self.is_team:
            for obj in context['object_list']:
                obj.schutter_nr_str = str(obj.schutter_nr)
            # for

        menu_dynamics_competitie(self.request, context, actief='histcomp')
        return context
Пример #5
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])  # afkappen voor de veiligheid
            comp = (Competitie.objects.get(pk=comp_pk))
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        context['comp'] = comp

        comp_boog = kwargs['comp_boog'][:2]  # afkappen voor de veiligheid

        try:
            deelcomp = (
                DeelCompetitie.objects.select_related('competitie').get(
                    laag=LAAG_BK,
                    competitie__is_afgesloten=False,
                    competitie__pk=comp_pk))
        except DeelCompetitie.DoesNotExist:
            raise Http404('Competitie niet gevonden')

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #6
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            deelcomp_pk = int(
                kwargs['deelcomp_pk'][:6])  # afkappen voor de veiligheid
            deelcomp = DeelCompetitie.objects.get(pk=deelcomp_pk,
                                                  laag=LAAG_REGIO)
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        rol_nu, functie_nu = rol_get_huidige_functie(self.request)
        if deelcomp.functie != functie_nu:
            # niet de beheerder
            raise PermissionDenied()

        if not deelcomp.regio_organiseert_teamcompetitie:
            raise Http404('Geen teamcompetitie in deze regio')

        context['deelcomp'] = deelcomp

        if 1 <= deelcomp.huidige_team_ronde <= 7:
            context['alle_regels'], context['aantal_keuzes_nodig'], context[
                'anchor'] = self._bepaal_teams_en_scores(deelcomp)
            context['url_opslaan'] = reverse(
                'CompScores:selecteer-team-scores',
                kwargs={'deelcomp_pk': deelcomp.pk})

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp.competitie.pk)
        return context
Пример #7
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        self.maak_data(context)

        menu_dynamics_competitie(self.request, context, actief='histcomp')
        return context
Пример #8
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            poule_pk = int(
                kwargs['poule_pk'][:6])  # afkappen voor de veiligheid
            poule = (RegiocompetitieTeamPoule.objects.select_related(
                'deelcompetitie', 'deelcompetitie__nhb_regio',
                'deelcompetitie__competitie').prefetch_related('teams').get(
                    pk=poule_pk))
        except (ValueError, RegiocompetitieTeamPoule.DoesNotExist):
            raise Http404('Poule bestaat niet')

        deelcomp = poule.deelcompetitie
        if deelcomp.nhb_regio != self.functie_nu.nhb_regio:
            raise PermissionDenied('Niet de beheerder van deze regio')

        comp = deelcomp.competitie
        comp.bepaal_fase()

        if comp.fase > 'E':
            raise Http404('Poules kunnen niet meer aangepast worden')

        context['mag_koppelen'] = (comp.fase <= 'D')

        team_pks = list(poule.teams.values_list('pk', flat=True))

        teams = (RegiocompetitieTeam.objects.select_related(
            'klasse__team', 'team_type'
        ).prefetch_related('regiocompetitieteampoule_set').filter(
            deelcompetitie=deelcomp).order_by('klasse__team__volgorde'))
        for team in teams:
            team.sel_str = 'team_%s' % team.pk
            if team.pk in team_pks:
                team.geselecteerd = True
            else:
                if team.regiocompetitieteampoule_set.count():
                    team.in_andere_poule = True

            if team.klasse:
                team.klasse_str = team.klasse.team.beschrijving
            else:
                team.klasse_str = ''  # blokkeert selectie voor poule
        # for
        context['teams'] = teams

        context['poule'] = poule
        context['url_opslaan'] = reverse('CompRegio:wijzig-poule',
                                         kwargs={'poule_pk': poule.pk})
        context['url_terug'] = reverse('CompRegio:regio-poules',
                                       kwargs={'deelcomp_pk': deelcomp.pk})

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp.competitie.pk)
        return context
Пример #9
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            deelnemer_pk = int(
                kwargs['deelnemer_pk'][:6])  # afkappen voor de veiligheid
            deelnemer = (KampioenschapSchutterBoog.objects.select_related(
                'deelcompetitie__competitie', 'deelcompetitie__nhb_rayon',
                'sporterboog__sporter', 'bij_vereniging').get(pk=deelnemer_pk))
        except (ValueError, KampioenschapSchutterBoog.DoesNotExist):
            raise Http404('Deelnemer niet gevonden')

        if self.rol_nu == Rollen.ROL_HWL and deelnemer.bij_vereniging != self.functie_nu.nhb_ver:
            raise PermissionDenied('Geen sporter van jouw vereniging')

        if self.rol_nu == Rollen.ROL_RKO and self.functie_nu != deelnemer.deelcompetitie.functie:
            raise PermissionDenied('Geen toegang tot deze competitie')

        comp = deelnemer.deelcompetitie.competitie
        comp.bepaal_fase()
        if comp.fase < 'J':
            raise Http404('Mag nog niet wijzigen')

        if comp.fase > 'K':
            raise Http404('Mag niet meer wijzigen')

        sporter = deelnemer.sporterboog.sporter
        deelnemer.naam_str = "[%s] %s" % (sporter.lid_nr,
                                          sporter.volledige_naam())

        if deelnemer.bij_vereniging:
            deelnemer.ver_str = str(deelnemer.bij_vereniging)
        else:
            deelnemer.ver_str = "?"

        context['deelnemer'] = deelnemer

        context['url_wijzig'] = reverse('CompRayon:wijzig-status-rk-deelnemer',
                                        kwargs={'deelnemer_pk': deelnemer.pk})

        if self.rol_nu == Rollen.ROL_RKO:
            context['url_terug'] = reverse(
                'CompRayon:lijst-rk',
                kwargs={'rk_deelcomp_pk': deelnemer.deelcompetitie.pk})
        else:
            # HWL
            context['url_terug'] = reverse(
                'CompRayon:lijst-rk-ver',
                kwargs={'rk_deelcomp_pk': deelnemer.deelcompetitie.pk})

        menu_dynamics_competitie(
            self.request,
            context,
            comp_pk=deelnemer.deelcompetitie.competitie.pk)
        return context
Пример #10
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])  # afkappen voor de veiligheid
            comp = (Competitie.objects.get(pk=comp_pk))
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        context['comp'] = comp

        comp_boog = kwargs['comp_boog'][:2]  # afkappen voor de veiligheid

        # ver_nr is optioneel en resulteert in het nummer van de schutter
        try:
            ver_nr = kwargs['ver_nr'][:4]  # afkappen voor de veiligheid
            ver_nr = int(ver_nr)
        except KeyError:
            # zoek de vereniging die bij de huidige gebruiker past
            ver_nr = get_sporter_ver_nr(self.request)
        except ValueError:
            raise Http404('Verkeerd verenigingsnummer')

        try:
            ver = NhbVereniging.objects.select_related('regio').get(
                ver_nr=ver_nr)
        except NhbVereniging.DoesNotExist:
            raise Http404('Vereniging niet gevonden')

        context['ver'] = ver

        self._maak_filter_knoppen(context, comp, ver_nr, comp_boog)

        boogtype = context['comp_boog']
        if not boogtype:
            raise Http404('Boogtype niet bekend')

        regio_nr = ver.regio.regio_nr
        context['url_terug'] = reverse('CompUitslagen:uitslagen-regio-indiv-n',
                                       kwargs={
                                           'comp_pk': comp.pk,
                                           'zes_scores': 'alle',
                                           'comp_boog': comp_boog,
                                           'regio_nr': regio_nr
                                       })

        context['deelcomp'] = deelcomp = self._get_deelcomp(comp, regio_nr)

        context['deelnemers'] = deelnemers = self._get_deelnemers(
            deelcomp, boogtype, ver_nr)
        context['aantal_deelnemers'] = len(deelnemers)

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #11
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        wedstrijd_pk = kwargs['wedstrijd_pk'][:
                                              6]  # afkappen voor de veiligheid
        wedstrijd, deelcomp, ronde = bepaal_wedstrijd_en_deelcomp_of_404(
            wedstrijd_pk)

        scores = (wedstrijd.uitslag.scores.filter(
            type=SCORE_TYPE_SCORE).exclude(
                waarde=SCORE_WAARDE_VERWIJDERD).select_related(
                    'sporterboog', 'sporterboog__boogtype',
                    'sporterboog__sporter'))

        # maak een opzoek tabel voor de huidige vereniging van elke sporterboog
        sporterboog_pks = [score.sporterboog.pk for score in scores]
        regioschutters = (RegioCompetitieSchutterBoog.objects.select_related(
            'sporterboog',
            'bij_vereniging').filter(sporterboog__pk__in=sporterboog_pks))

        sporterboog2vereniging = dict()
        for regioschutter in regioschutters:
            sporterboog2vereniging[
                regioschutter.sporterboog.pk] = regioschutter.bij_vereniging
        # for

        for score in scores:
            score.schutter_str = score.sporterboog.sporter.volledige_naam()
            score.lid_nr = score.sporterboog.sporter.lid_nr
            score.boog_str = score.sporterboog.boogtype.beschrijving
            try:
                score.vereniging_str = str(
                    sporterboog2vereniging[score.sporterboog.pk])
            except KeyError:
                # unlikely inconsistency
                score.vereniging_str = "?"
        # for

        # vereniging kan 2 leden met dezelfde naam en boog hebben, daarom lid_nr
        te_sorteren = [(score.vereniging_str, score.schutter_str,
                        score.boog_str, score.lid_nr, score)
                       for score in scores]
        te_sorteren.sort()
        scores = [score for _, _, _, _, score in te_sorteren]

        context['scores'] = scores
        context['wedstrijd'] = wedstrijd
        context['deelcomp'] = deelcomp
        context['ronde'] = ronde

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp.competitie.pk)
        return context
Пример #12
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])        # afkappen voor de veiligheid
            comp = Competitie.objects.get(pk=comp_pk)
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        if comp.fase < 'B' or comp.fase > 'E':
            raise Http404('Verkeerde competitie fase')

        context['competitie'] = comp

        objs = (RegioCompetitieSchutterBoog
                .objects
                .select_related('klasse',
                                'klasse__indiv',
                                'deelcompetitie',
                                'deelcompetitie__nhb_regio',
                                'sporterboog',
                                'sporterboog__sporter',
                                'bij_vereniging')
                .filter(deelcompetitie__competitie=comp,
                        deelcompetitie__laag=LAAG_REGIO)
                .order_by('klasse__indiv__volgorde',
                          '-ag_voor_indiv'))

        obj_aantal = None
        aantal = 0
        volgorde = -1
        for obj in objs:
            if volgorde != obj.klasse.indiv.volgorde:
                obj.nieuwe_klasse = True
                if obj_aantal:
                    obj_aantal.aantal_in_klasse = aantal
                aantal = 0
                obj_aantal = obj
                volgorde = obj.klasse.indiv.volgorde

            aantal += 1
        # for
        if obj_aantal:
            obj_aantal.aantal_in_klasse = aantal

        context['object_list'] = objs

        context['inhoud'] = 'landelijk'
        maak_regiocomp_zoom_knoppen(context, comp_pk)

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk, actief='competitie')
        return context
Пример #13
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        context['seizoen'] = self.seizoen

        if HistCompetitie.objects.filter(seizoen=self.seizoen, is_team=True).count() > 0:
            context['show_team'] = True

        menu_dynamics_competitie(self.request, context, actief='histcomp')
        return context
Пример #14
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        # haal de deelnemer op
        try:
            deelnemer_pk = int(
                kwargs['deelnemer_pk'][:6])  # afkappen voor de veiligheid
            deelnemer = (RegioCompetitieSchutterBoog.objects.select_related(
                'sporterboog', 'sporterboog__sporter', 'sporterboog__boogtype',
                'bij_vereniging',
                'deelcompetitie__competitie').get(pk=deelnemer_pk))
        except (ValueError, RegioCompetitieSchutterBoog.DoesNotExist):
            raise Http404('Sporter niet gevonden')

        context['deelnemer'] = deelnemer

        # controleer dat deze deelnemer bekeken en gewijzigd mag worden
        self._mag_wijzigen_of_404(deelnemer)

        deelnemer.naam_str = deelnemer.sporterboog.sporter.volledige_naam()
        deelnemer.boog_str = deelnemer.sporterboog.boogtype.beschrijving
        ag_str = '%.3f' % deelnemer.ag_voor_team
        deelnemer.ag_str = ag_str.replace('.', ',')

        ag_hist = (ScoreHist.objects.filter(
            score__sporterboog=deelnemer.sporterboog,
            score__afstand_meter=deelnemer.deelcompetitie.competitie.afstand,
            score__type=SCORE_TYPE_TEAM_AG).order_by('-when'))
        for obj in ag_hist:
            obj.oude_waarde /= 1000
            obj.nieuwe_waarde /= 1000
            obj.oude_waarde_str = "%.3f" % obj.oude_waarde
            obj.nieuwe_waarde_str = "%.3f" % obj.nieuwe_waarde
        # for
        context['ag_hist'] = ag_hist

        comp = deelnemer.deelcompetitie.competitie
        comp.bepaal_fase()

        if comp.fase < 'E':
            context['url_opslaan'] = reverse(
                'CompRegio:wijzig-ag', kwargs={'deelnemer_pk': deelnemer.pk})

        if self.rol_nu == Rollen.ROL_HWL:
            menu_dynamics(self.request, context, actief='vereniging')
        else:
            menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)

        return context
Пример #15
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            deelcomp_pk = int(
                kwargs['deelcomp_pk'][:6])  # afkappen voor de veiligheid
            deelcomp = DeelCompetitie.objects.get(pk=deelcomp_pk,
                                                  laag=LAAG_REGIO)
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        rol_nu, functie_nu = rol_get_huidige_functie(self.request)
        if deelcomp.functie != functie_nu:
            # niet de beheerder
            raise PermissionDenied()

        context['deelcomp'] = deelcomp

        # TODO: check competitie fase

        if deelcomp.regio_organiseert_teamcompetitie:
            context['url_team_scores'] = reverse(
                'CompScores:selecteer-team-scores',
                kwargs={'deelcomp_pk': deelcomp.pk})

        # deelcompetitie bestaat uit rondes
        # elke ronde heeft een plan met wedstrijden

        wedstrijd_pks = list()
        wedstrijd2beschrijving = dict()
        comp_str = deelcomp.competitie.beschrijving

        for ronde in (DeelcompetitieRonde.objects.select_related(
                'plan').prefetch_related('plan__wedstrijden').filter(
                    deelcompetitie=deelcomp)):

            for wedstrijd in ronde.plan.wedstrijden.all():
                wedstrijd_pks.append(wedstrijd.pk)
                beschrijving = ronde.beschrijving
                if not beschrijving and ronde.cluster:
                    beschrijving = ronde.cluster.naam
                if not beschrijving:
                    beschrijving = "?? (ronde)"
                wedstrijd2beschrijving[
                    wedstrijd.pk] = "%s - %s" % (comp_str, beschrijving)
            # for
        # for

        wedstrijden = (CompetitieWedstrijd.objects.select_related(
            'uitslag', 'vereniging').filter(pk__in=wedstrijd_pks).annotate(
                scores_count=Count('uitslag__scores')).order_by(
                    'datum_wanneer', 'tijd_begin_wedstrijd',
                    'pk'))  # vaste sortering bij gelijke datum/tijd

        for wedstrijd in wedstrijden:
            heeft_uitslag = (wedstrijd.uitslag and wedstrijd.scores_count > 0)

            beschrijving = wedstrijd2beschrijving[wedstrijd.pk]
            if wedstrijd.beschrijving != beschrijving:
                wedstrijd.beschrijving = beschrijving
                wedstrijd.save()

            # geef RCL de mogelijkheid om te scores aan te passen
            # de HWL/WL krijgen deze link vanuit Vereniging::Wedstrijden
            if heeft_uitslag:
                wedstrijd.url_uitslag_controleren = reverse(
                    'CompScores:uitslag-controleren',
                    kwargs={'wedstrijd_pk': wedstrijd.pk})
            else:
                # TODO: knop pas beschikbaar maken op wedstrijddatum tot datum+N
                wedstrijd.url_uitslag_invoeren = reverse(
                    'CompScores:uitslag-invoeren',
                    kwargs={'wedstrijd_pk': wedstrijd.pk})
        # for

        context['wedstrijden'] = wedstrijden

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp.competitie.pk)
        return context
Пример #16
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            deelcomp_pk = int(kwargs['deelcomp_pk'][:6])      # afkappen voor de veiligheid
            deelcomp = (DeelCompetitie
                        .objects
                        .select_related('competitie')
                        .get(pk=deelcomp_pk,
                             nhb_regio=self.functie_nu.nhb_regio))
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie bestaat niet')

        context['deelcomp'] = deelcomp
        context['regio'] = self.functie_nu.nhb_regio

        # TODO: check competitie fase

        probleem_met_teams = False
        if deelcomp.huidige_team_ronde == 0:
            # check dat alle teams geplaatst in een wedstrijdklasse (dus genoeg sporters gekoppeld hebben)
            # en dat alle teams in een poule zitten

            team_pk2poule = dict()
            poules = RegiocompetitieTeamPoule.objects.filter(deelcompetitie=deelcomp).prefetch_related('teams')
            for poule in poules:
                for team in poule.teams.all():
                    team_pk2poule[team.pk] = poule
                # for
            # for

            regioteams = (RegiocompetitieTeam
                          .objects
                          .select_related('vereniging',
                                          'vereniging__regio',
                                          'team_type')
                          .filter(deelcompetitie=deelcomp)
                          .prefetch_related('gekoppelde_schutters')
                          .order_by('team_type__volgorde',
                                    '-aanvangsgemiddelde',
                                    'vereniging__ver_nr'))

            for team in regioteams:
                team.aantal_sporters = team.gekoppelde_schutters.count()

                if not team.klasse:
                    probleem_met_teams = True
                    team.is_niet_af = True

                try:
                    team.poule = team_pk2poule[team.pk]
                except KeyError:
                    team.poule = None
                    team.is_niet_af = True
            # for

            if probleem_met_teams:
                context['teams_niet_af'] = regioteams

        if not probleem_met_teams:
            if 1 <= deelcomp.huidige_team_ronde <= 7:
                context['alle_regels'], context['is_redelijk'] = self._bepaal_wedstrijdpunten(deelcomp)

            if deelcomp.regio_team_punten_model == TEAM_PUNTEN_MODEL_FORMULE1:
                context['toon_f1'] = True
                context['wp_model_str'] = 'Formule 1'
            elif deelcomp.regio_team_punten_model == TEAM_PUNTEN_MODEL_TWEE:
                context['toon_h2h'] = True
                context['wp_model_str'] = '2 punten, directe tegenstanders'
            else:
                context['toon_som'] = True
                context['wp_model_str'] = 'Som van de scores'

            if deelcomp.huidige_team_ronde <= 7:
                context['url_team_scores'] = reverse('CompScores:selecteer-team-scores',
                                                     kwargs={'deelcomp_pk': deelcomp.pk})

                context['url_volgende_ronde'] = reverse('CompRegio:start-volgende-team-ronde',
                                                        kwargs={'deelcomp_pk': deelcomp.pk})

        menu_dynamics_competitie(self.request, context, comp_pk=deelcomp.competitie.pk)
        return context
Пример #17
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            wedstrijd_pk = int(
                kwargs['wedstrijd_pk'][:6])  # afkappen voor de veiligheid
            wedstrijd = (
                CompetitieWedstrijd.objects.select_related('vereniging').get(
                    pk=wedstrijd_pk))
        except (ValueError, CompetitieWedstrijd.DoesNotExist):
            raise Http404('Wedstrijd niet gevonden')

        msg = wedstrijd.beschrijving
        pos = msg.find(' - ')
        if pos > 0:
            wedstrijd.beschrijving1 = msg[:pos].strip()
            wedstrijd.beschrijving2 = msg[pos + 3:].strip()
        else:
            wedstrijd.beschrijving1 = msg
            wedstrijd.beschrijving2 = ''

        plan = wedstrijd.competitiewedstrijdenplan_set.all()[0]
        ronde = plan.deelcompetitieronde_set.select_related(
            'deelcompetitie', 'deelcompetitie__competitie').all()[0]
        deelcomp = ronde.deelcompetitie
        comp = deelcomp.competitie
        afstand = comp.afstand

        context['deelcomp'] = deelcomp
        context['wedstrijd'] = wedstrijd
        context['vastgesteld'] = timezone.now()
        context['is_25m1p'] = (afstand == '25')

        team_pk2naam = dict()
        team_pk2naam[0] = '-'
        for team in RegiocompetitieTeam.objects.filter(
                deelcompetitie=deelcomp):
            team_pk2naam[team.pk] = team.maak_team_naam_kort()
        # for

        sporters, teams = bepaal_waarschijnlijke_deelnemers(
            afstand, deelcomp, wedstrijd)
        context['sporters'] = sporters

        for sporter in sporters:
            sporter.in_team_naam = team_pk2naam[sporter.team_pk]
        # for

        context['blazoenen'] = bepaal_blazoen_behoefte(afstand, sporters,
                                                       teams)

        context['url_download'] = reverse(
            'CompRegio:waarschijnlijke-deelnemers-als-bestand',
            kwargs={'wedstrijd_pk': wedstrijd.pk})

        # prep de view
        nr = 1
        for sporter in sporters:
            sporter.volg_nr = nr
            nr += 1
        # for

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #18
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            regio_nr = int(kwargs['regio_nr'][:6])  # afkappen voor de veiligheid
            comp_pk = int(kwargs['comp_pk'][:6])    # afkappen voor de veiligheid
            deelcomp = (DeelCompetitie
                        .objects
                        .select_related('competitie', 'nhb_regio')
                        .get(competitie=comp_pk,
                             laag=LAAG_REGIO,
                             nhb_regio__regio_nr=regio_nr))
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        if deelcomp.functie != self.functie_nu:
            # niet de beheerder
            raise PermissionDenied()

        deelcomp.competitie.bepaal_fase()
        if deelcomp.competitie.fase > 'F':
            raise Http404('Verkeerde competitie fase')

        context['deelcomp'] = deelcomp

        context['handmatige_ag'] = ag_lijst = list()

        # zoek de schuttersboog met handmatig_ag voor de teamcompetitie
        for obj in (RegioCompetitieSchutterBoog
                    .objects
                    .filter(deelcompetitie=deelcomp,
                            inschrijf_voorkeur_team=True,
                            ag_voor_team_mag_aangepast_worden=True,
                            ag_voor_team__gt=0.0)
                    .select_related('sporterboog',
                                    'sporterboog__sporter',
                                    'sporterboog__boogtype',
                                    'bij_vereniging')
                    .order_by('bij_vereniging__ver_nr',
                              'sporterboog__sporter__lid_nr',
                              'sporterboog__boogtype__volgorde')):

            ver = obj.bij_vereniging
            obj.ver_str = "[%s] %s" % (ver.ver_nr, ver.naam)

            sporter = obj.sporterboog.sporter
            obj.naam_str = "[%s] %s" % (sporter.lid_nr, sporter.volledige_naam())

            obj.boog_str = obj.sporterboog.boogtype.beschrijving

            obj.ag_str = "%.3f" % obj.ag_voor_team

            obj.url_details = reverse('CompRegio:wijzig-ag',
                                      kwargs={'deelnemer_pk': obj.pk})

            ag_lijst.append(obj)
        # for

        menu_dynamics_competitie(self.request, context, comp_pk=deelcomp.competitie.pk)
        return context
Пример #19
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        if self.subset_filter:
            context['subset_filter'] = True

            # BB/BKO/RKO mode
            try:
                comp_pk = int(str(kwargs['comp_pk'][:6]))       # afkappen voor de veiligheid
                comp = Competitie.objects.get(pk=comp_pk)
            except (ValueError, Competitie.DoesNotExist):
                raise Http404('Competitie niet gevonden')

            context['comp'] = comp
            comp.bepaal_fase()

            subset = kwargs['subset'][:10]      # afkappen voor de veiligheid
            if subset == 'auto':
                if self.rol_nu in (Rollen.ROL_BB, Rollen.ROL_BKO):
                    subset = 'alle'
                elif self.rol_nu == Rollen.ROL_RKO:
                    subset = str(self.functie_nu.nhb_rayon.rayon_nr)
                else:
                    raise Http404('Selectie wordt niet ondersteund')

            if subset == 'alle':
                # alle regios
                context['rayon'] = 'Alle'
                deelcomp_pks = (DeelCompetitie
                                .objects
                                .filter(competitie=comp)
                                .values_list('pk', flat=True))
            else:
                # alleen de regio's van het rayon
                try:
                    context['rayon'] = NhbRayon.objects.get(rayon_nr=subset)
                except NhbRayon.DoesNotExist:
                    raise Http404('Selectie wordt niet ondersteund')

                deelcomp_pks = (DeelCompetitie
                                .objects
                                .filter(competitie=comp,
                                        nhb_regio__rayon__rayon_nr=subset)
                                .values_list('pk', flat=True))

            context['filters'] = filters = list()
            alle_filter = {'label': 'Alles'}
            if subset != 'alle':
                alle_filter['url'] = reverse('CompRegio:regio-teams-alle',
                                             kwargs={'comp_pk': comp.pk,
                                                     'subset': 'alle'})
            filters.append(alle_filter)

            for rayon in NhbRayon.objects.all():
                rayon.label = 'Rayon %s' % rayon.rayon_nr
                if str(rayon.rayon_nr) != subset:
                    rayon.url = reverse('CompRegio:regio-teams-alle',
                                        kwargs={'comp_pk': comp.pk, 'subset': rayon.rayon_nr})
                filters.append(rayon)
            # for

        else:
            # RCL mode
            try:
                deelcomp_pk = int(kwargs['deelcomp_pk'][:6])    # afkappen voor de veiligheid
                deelcomp = (DeelCompetitie
                            .objects
                            .select_related('competitie')
                            .get(pk=deelcomp_pk,
                                 laag=LAAG_REGIO))
            except (ValueError, DeelCompetitie.DoesNotExist):
                raise Http404('Competitie niet gevonden')

            if deelcomp.functie != self.functie_nu:
                # niet de beheerder
                raise PermissionDenied()

            deelcomp_pks = [deelcomp.pk]

            context['comp'] = comp = deelcomp.competitie
            comp.bepaal_fase()

            context['deelcomp'] = deelcomp
            context['rayon'] = self.functie_nu.nhb_regio.rayon
            context['regio'] = self.functie_nu.nhb_regio

        if comp.afstand == '18':
            aantal_pijlen = 30
        else:
            aantal_pijlen = 25

        totaal_teams = 0

        klassen = (CompetitieKlasse
                   .objects
                   .filter(competitie=comp,
                           indiv=None,
                           is_voor_teams_rk_bk=False)
                   .select_related('team',
                                   'team__team_type')
                   .order_by('team__volgorde'))

        klasse2teams = dict()       # [klasse] = list(teams)
        prev_sterkte = ''
        prev_team = None
        for klasse in klassen:
            klasse2teams[klasse] = list()

            if klasse.team.team_type != prev_team:
                prev_sterkte = ''
                prev_team = klasse.team.team_type

            min_ag_str = "%05.1f" % (klasse.min_ag * aantal_pijlen)
            min_ag_str = min_ag_str.replace('.', ',')
            if prev_sterkte:
                if klasse.min_ag > AG_NUL:
                    klasse.sterkte_str = "sterkte " + min_ag_str + " tot " + prev_sterkte
                else:
                    klasse.sterkte_str = "sterkte tot " + prev_sterkte
            else:
                klasse.sterkte_str = "sterkte " + min_ag_str + " en hoger"

            prev_sterkte = min_ag_str
        # for

        regioteams = (RegiocompetitieTeam
                      .objects
                      .select_related('vereniging',
                                      'vereniging__regio',
                                      'team_type',
                                      'klasse',
                                      'klasse__team')
                      .exclude(klasse=None)
                      .filter(deelcompetitie__in=deelcomp_pks)
                      .order_by('klasse__team__volgorde',
                                '-aanvangsgemiddelde',
                                'vereniging__ver_nr'))

        prev_klasse = None
        for team in regioteams:
            if team.klasse != prev_klasse:
                team.break_before = True
                prev_klasse = team.klasse

            # team AG is 0.0 - 30.0 --> toon als score: 000.0 .. 900.0
            ag_str = "%05.1f" % (team.aanvangsgemiddelde * aantal_pijlen)
            team.ag_str = ag_str.replace('.', ',')

            if comp.fase <= 'D' and self.rol_nu == Rollen.ROL_RCL:
                team.url_aanpassen = reverse('Vereniging:teams-regio-koppelen',
                                             kwargs={'team_pk': team.pk})
            totaal_teams += 1

            klasse2teams[team.klasse].append(team)
        # for

        context['regioteams'] = klasse2teams

        # zoek de teams die niet 'af' zijn
        regioteams = (RegiocompetitieTeam
                      .objects
                      .select_related('vereniging',
                                      'vereniging__regio',
                                      'team_type',
                                      'deelcompetitie')
                      .filter(deelcompetitie__in=deelcomp_pks,
                              klasse=None)
                      .order_by('team_type__volgorde',
                                '-aanvangsgemiddelde',
                                'vereniging__ver_nr'))

        is_eerste = True
        for team in regioteams:
            # team AG is 0.0 - 30.0 --> toon als score: 000.0 .. 900.0
            ag_str = "%05.1f" % (team.aanvangsgemiddelde * aantal_pijlen)
            team.ag_str = ag_str.replace('.', ',')

            if comp.fase <= 'D' and self.rol_nu == Rollen.ROL_RCL:
                team.url_aanpassen = reverse('Vereniging:teams-regio-koppelen',
                                             kwargs={'team_pk': team.pk})

                team.url_verwijder = reverse('Vereniging:teams-regio-wijzig',
                                             kwargs={'deelcomp_pk': team.deelcompetitie.pk,
                                                     'team_pk': team.pk})
            totaal_teams += 1

            team.break_before = is_eerste
            is_eerste = False
        # for

        context['regioteams_niet_af'] = regioteams
        context['totaal_teams'] = totaal_teams

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #20
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])        # afkappen voor de veiligheid
            comp = Competitie.objects.get(pk=comp_pk)
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        if comp.fase < 'B' or comp.fase > 'E':
            raise Http404('Verkeerde competitie fase')

        context['competitie'] = comp

        try:
            regio_pk = int(kwargs['regio_pk'][:6])      # afkappen voor de veiligheid
            regio = (NhbRegio
                     .objects
                     .select_related('rayon')
                     .get(pk=regio_pk))
        except (ValueError, NhbRegio.DoesNotExist):
            raise Http404('Regio niet gevonden')

        context['regio'] = regio
        context['inhoud'] = 'in ' + str(regio)

        try:
            deelcomp = DeelCompetitie.objects.get(laag=LAAG_REGIO,
                                                  competitie=comp,
                                                  nhb_regio=regio)
        except DeelCompetitie.DoesNotExist:
            raise Http404('Competitie niet gevonden')

        objs = (RegioCompetitieSchutterBoog
                .objects
                .select_related('klasse',
                                'klasse__indiv',
                                'deelcompetitie',
                                'sporterboog',
                                'sporterboog__sporter',
                                'sporterboog__boogtype',
                                'bij_vereniging')
                .filter(deelcompetitie=deelcomp)
                .order_by('klasse__indiv__volgorde',
                          '-ag_voor_indiv'))

        obj_aantal = None
        aantal = 0
        volgorde = -1
        for obj in objs:
            obj.team_ja_nee = JA_NEE[obj.inschrijf_voorkeur_team]
            if volgorde != obj.klasse.indiv.volgorde:
                obj.nieuwe_klasse = True
                if obj_aantal:
                    obj_aantal.aantal_in_klasse = aantal
                aantal = 0
                obj_aantal = obj
                volgorde = obj.klasse.indiv.volgorde

            aantal += 1
        # for
        if obj_aantal:
            obj_aantal.aantal_in_klasse = aantal

        context['object_list'] = objs

        if deelcomp.inschrijf_methode == INSCHRIJF_METHODE_1:
            context['show_gekozen_wedstrijden'] = True
            context['url_behoefte'] = reverse('CompInschrijven:inschrijfmethode1-behoefte',
                                              kwargs={'comp_pk': comp.pk,
                                                      'regio_pk': regio.pk})

        elif deelcomp.inschrijf_methode == INSCHRIJF_METHODE_3:
            context['show_dagdeel_telling'] = True
            context['url_behoefte'] = reverse('CompInschrijven:inschrijfmethode3-behoefte',
                                              kwargs={'comp_pk': comp.pk,
                                                      'regio_pk': regio.pk})

        else:
            # inschrijfmethode 2
            context['url_download'] = reverse('CompInschrijven:lijst-regiocomp-regio-als-bestand',
                                              kwargs={'comp_pk': comp.pk,
                                                      'regio_pk': regio.pk})

        maak_regiocomp_zoom_knoppen(context, comp.pk, regio=regio)

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk, actief='competitie')
        return context
Пример #21
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            wedstrijd_pk = int(kwargs['wedstrijd_pk'][:6])      # afkappen voor de veiligheid
            wedstrijd = (CompetitieWedstrijd
                         .objects
                         .select_related('vereniging')
                         .prefetch_related('indiv_klassen',
                                           'team_klassen')
                         .get(pk=wedstrijd_pk,
                              vereniging=self.functie_nu.nhb_ver))
        except (ValueError, CompetitieWedstrijd.DoesNotExist):
            raise Http404('Wedstrijd niet gevonden')

        plannen = wedstrijd.competitiewedstrijdenplan_set.all()
        if len(plannen) == 0:
            raise Http404('Geen wedstrijden plan')
        plan = plannen[0]
        del plannen

        deelcomp = plan.deelcompetitie_set.select_related('competitie', 'nhb_rayon').all()[0]
        if deelcomp.laag != LAAG_RK:
            raise Http404('Verkeerde competitie')

        context['deelcomp'] = deelcomp
        context['wedstrijd'] = wedstrijd
        context['vereniging'] = wedstrijd.vereniging        # als we hier komen is dit altijd bekend
        context['locatie'] = wedstrijd.locatie
        context['aantal_banen'] = '?'

        comp = deelcomp.competitie
        # TODO: check fase
        if comp.afstand == '18':
            aantal_pijlen = 30
            if wedstrijd.locatie:
                context['aantal_banen'] = wedstrijd.locatie.banen_18m
        else:
            aantal_pijlen = 25
            if wedstrijd.locatie:
                context['aantal_banen'] = wedstrijd.locatie.banen_25m

        if deelcomp.laag == LAAG_RK:
            wedstrijd.is_rk = True
            wedstrijd.beschrijving = "Rayonkampioenschap"
        # else:
        #     wedstrijd.is_bk = True
        #     wedstrijd.beschrijving = "Bondskampioenschap"

        heeft_indiv = heeft_teams = False
        beschr = list()

        klasse_indiv_pks = list()
        klasse_team_pks = list()
        wedstrijd.klassen_lijst = klassen_lijst = list()
        for klasse in wedstrijd.indiv_klassen.all():
            klassen_lijst.append(str(klasse))
            klasse_indiv_pks.append(klasse.pk)
            if not heeft_indiv:
                heeft_indiv = True
                beschr.append('Individueel')
        # for
        for klasse in wedstrijd.team_klassen.all():
            klassen_lijst.append(str(klasse))
            klasse_team_pks.append(klasse.pk)
            if not heeft_teams:
                heeft_teams = True
                beschr.append('Teams')
        # for

        vastgesteld = timezone.localtime(timezone.now())
        context['vastgesteld'] = vastgesteld

        context['heeft_indiv'] = heeft_indiv
        context['heeft_teams'] = heeft_teams
        context['beschrijving'] = "%s %s" % (wedstrijd.beschrijving, " en ".join(beschr))

        # zoek de deelnemers erbij
        if heeft_indiv:
            deelnemers = (KampioenschapSchutterBoog
                          .objects
                          .filter(deelcompetitie=deelcomp,
                                  klasse__indiv__pk__in=klasse_indiv_pks)
                          .select_related('sporterboog',
                                          'sporterboog__sporter',
                                          'bij_vereniging',
                                          'klasse')
                          .order_by('klasse',
                                    'rank'))
            context['deelnemers_indiv'] = deelnemers

            prev_klasse = None
            for deelnemer in deelnemers:
                if deelnemer.klasse != prev_klasse:
                    deelnemer.break_before = True
                    deelnemer.url_download_indiv = reverse('CompRayon:formulier-indiv-als-bestand',
                                                           kwargs={'wedstrijd_pk': wedstrijd.pk,
                                                                   'klasse_pk': deelnemer.klasse.pk})
                    prev_klasse = deelnemer.klasse

                deelnemer.ver_nr = deelnemer.bij_vereniging.ver_nr
                deelnemer.ver_naam = deelnemer.bij_vereniging.naam
                deelnemer.lid_nr = deelnemer.sporterboog.sporter.lid_nr
                deelnemer.volledige_naam = deelnemer.sporterboog.sporter.volledige_naam()
                deelnemer.gemiddelde_str = "%.3f" % deelnemer.gemiddelde
                deelnemer.gemiddelde_str = deelnemer.gemiddelde_str.replace('.', ',')
            # for

        if heeft_teams:
            teams = (KampioenschapTeam
                     .objects
                     .filter(deelcompetitie=deelcomp,
                             klasse__team__pk__in=klasse_team_pks)
                     .select_related('vereniging',
                                     'klasse')
                     .prefetch_related('gekoppelde_schutters')
                     .order_by('klasse',
                               '-aanvangsgemiddelde'))      # sterkste team bovenaan
            context['deelnemers_teams'] = teams

            if not comp.klassengrenzen_vastgesteld_rk_bk:
                context['geen_klassengrenzen'] = True

            volg_nr = 0
            prev_klasse = None
            for team in teams:
                if team.klasse != prev_klasse:
                    team.break_before = True
                    team.url_download_teams = reverse('CompRayon:formulier-teams-als-bestand',
                                                      kwargs={'wedstrijd_pk': wedstrijd.pk,
                                                              'klasse_pk': team.klasse.pk})

                    prev_klasse = team.klasse
                    volg_nr = 0

                volg_nr += 1
                team.volg_nr = volg_nr
                team.ver_nr = team.vereniging.ver_nr
                team.ver_naam = team.vereniging.naam
                team.sterkte_str = "%.1f" % (team.aanvangsgemiddelde * aantal_pijlen)
                team.sterkte_str = team.sterkte_str.replace('.', ',')

                for lid in team.gekoppelde_schutters.all():
                    sporter = lid.sporterboog.sporter
                    lid.naam_str = "[%s] %s" % (sporter.lid_nr, sporter.volledige_naam())
                    lid.gem_str = lid.gemiddelde
                # for
            # for

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #22
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])        # afkappen voor de veiligheid
            comp = Competitie.objects.get(pk=comp_pk)
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        if comp.fase < 'B' or comp.fase > 'E':
            raise Http404('Verkeerde competitie fase')

        context['competitie'] = comp

        try:
            regio_pk = int(kwargs['regio_pk'][:6])      # afkappen voor de veiligheid
            regio = (NhbRegio
                     .objects
                     .select_related('rayon')
                     .get(pk=regio_pk))
        except (ValueError, NhbRegio.DoesNotExist):
            raise Http404('Regio niet gevonden')

        context['regio'] = regio

        try:
            deelcomp = (DeelCompetitie
                        .objects
                        .select_related('competitie')
                        .get(is_afgesloten=False,
                             laag=LAAG_REGIO,
                             competitie=comp,
                             nhb_regio=regio))
        except DeelCompetitie.DoesNotExist:
            raise Http404('Competitie niet gevonden')

        if deelcomp.inschrijf_methode != INSCHRIJF_METHODE_3:
            raise Http404('Verkeerde inschrijfmethode')

        deelnemers = (RegioCompetitieSchutterBoog
                      .objects
                      .select_related('klasse',
                                      'klasse__indiv',
                                      'deelcompetitie',
                                      'bij_vereniging',
                                      'sporterboog',
                                      'sporterboog__boogtype',
                                      'sporterboog__sporter',
                                      'sporterboog__sporter__bij_vereniging')
                      .filter(deelcompetitie=deelcomp)
                      .order_by('klasse__indiv__volgorde',
                                'ag_voor_indiv'))

        # voeg de tabel met dagdeel-behoefte toe
        self._maak_data_dagdeel_behoefte(context, deelcomp, deelnemers, regio)
        self._maak_data_blazoen_behoefte(context)

        context['url_download'] = reverse('CompInschrijven:inschrijfmethode3-behoefte-als-bestand',
                                          kwargs={'comp_pk': comp.pk,
                                                  'regio_pk': regio.pk})

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk, actief='competitie')
        return context
Пример #23
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            deelcomp_pk = int(
                kwargs['deelcomp_pk'][:6])  # afkappen voor de veiligheid
            deelcomp = (DeelCompetitie.objects.select_related(
                'competitie', 'nhb_regio',
                'nhb_regio__rayon').get(pk=deelcomp_pk, laag=LAAG_REGIO))
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        if deelcomp.nhb_regio != self.functie_nu.nhb_regio:
            raise PermissionDenied('Niet de beheerder van deze regio')

        context['deelcomp'] = deelcomp

        comp = deelcomp.competitie
        comp.bepaal_fase()
        context['readonly'] = readonly = (comp.fase > 'D')

        context['regio'] = deelcomp.nhb_regio

        poules = (
            RegiocompetitieTeamPoule.objects.prefetch_related('teams').filter(
                deelcompetitie=deelcomp).annotate(
                    team_count=Count('teams')).order_by('beschrijving', 'pk'))

        team_pk2poule = dict()
        for poule in poules:
            poule.url_wijzig = reverse('CompRegio:wijzig-poule',
                                       kwargs={'poule_pk': poule.pk})

            for team in poule.teams.all():
                team_pk2poule[team.pk] = poule
        # for

        context['poules'] = poules

        teams = (RegiocompetitieTeam.objects.filter(
            deelcompetitie=deelcomp).select_related(
                'klasse', 'klasse__team').order_by('klasse__team__volgorde'))

        for team in teams:
            try:
                poule = team_pk2poule[team.pk]
            except KeyError:
                pass
            else:
                team.poule = poule
        # for

        context['teams'] = teams

        if not readonly:
            context['url_nieuwe_poule'] = reverse(
                'CompRegio:regio-poules', kwargs={'deelcomp_pk': deelcomp.pk})

        context['wiki_rcl_poules_url'] = reverse_handleiding(
            self.request, settings.HANDLEIDING_POULES)

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp.competitie.pk)
        return context
Пример #24
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])        # afkappen voor de veiligheid
            comp = Competitie.objects.get(pk=comp_pk)
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        if comp.fase < 'B' or comp.fase > 'E':
            raise Http404('Verkeerde competitie fase')

        context['competitie'] = comp

        try:
            regio_pk = int(kwargs['regio_pk'][:6])      # afkappen voor de veiligheid
            regio = (NhbRegio
                     .objects
                     .select_related('rayon')
                     .get(pk=regio_pk))
        except (ValueError, NhbRegio.DoesNotExist):
            raise Http404('Regio niet gevonden')

        context['regio'] = regio

        try:
            deelcomp = (DeelCompetitie
                        .objects
                        .select_related('competitie')
                        .get(is_afgesloten=False,
                             laag=LAAG_REGIO,
                             competitie=comp,
                             nhb_regio=regio))
        except DeelCompetitie.DoesNotExist:
            raise Http404('Competitie niet gevonden')

        if deelcomp.inschrijf_methode != INSCHRIJF_METHODE_1:
            raise Http404('Verkeerde inschrijfmethode')

        afstand = deelcomp.competitie.afstand
        context['blazoenen'] = [BLAZOEN2STR_COMPACT[blazoen] for blazoen in COMPETITIE_BLAZOENEN[afstand]]

        # sporters met recurve boog willen mogelijk DT
        voorkeur_eigen_blazoen = (SporterVoorkeuren
                                  .objects
                                  .select_related('sporter')
                                  .filter(voorkeur_eigen_blazoen=True)
                                  .values_list('sporter__lid_nr', flat=True))

        # zoek alle wedstrijdplannen in deze deelcompetitie (1 per cluster + 1 voor de regio)
        plan_pks = list(DeelcompetitieRonde
                        .objects
                        .filter(deelcompetitie=deelcomp)
                        .values_list('plan__pk', flat=True))

        wedstrijden = (CompetitieWedstrijd
                       .objects
                       .select_related('vereniging')
                       .prefetch_related('regiocompetitieschutterboog_set')
                       .filter(competitiewedstrijdenplan__pk__in=plan_pks)
                       .order_by('datum_wanneer',
                                 'tijd_begin_wedstrijd',
                                 'vereniging__ver_nr'))

        context['wedstrijden'] = wedstrijden

        for wedstrijd in wedstrijden:
            wedstrijd.beschrijving_str = "%s om %s" % (date_format(wedstrijd.datum_wanneer, "l j E Y"),
                                                       wedstrijd.tijd_begin_wedstrijd.strftime("%H:%M"))
            wedstrijd.locatie_str = str(wedstrijd.vereniging)
            wedstrijd.keuze_count = wedstrijd.regiocompetitieschutterboog_set.count()

            deelnemer_pks = wedstrijd.regiocompetitieschutterboog_set.values_list('pk', flat=True)

            blazoenen_dict = dict()
            for blazoen in COMPETITIE_BLAZOENEN[afstand]:
                blazoenen_dict[blazoen] = 0
            # for

            for deelnemer in (RegioCompetitieSchutterBoog
                              .objects
                              .select_related('sporterboog',
                                              'sporterboog__boogtype',
                                              'sporterboog__sporter',
                                              'klasse',
                                              'klasse__indiv')
                              .filter(pk__in=deelnemer_pks)):

                klasse = deelnemer.klasse.indiv
                if afstand == '18':
                    blazoenen = (klasse.blazoen1_18m_regio, klasse.blazoen2_18m_regio)
                else:
                    blazoenen = (klasse.blazoen1_25m_regio, klasse.blazoen2_25m_regio)

                blazoen = blazoenen[0]
                if blazoenen[0] != blazoenen[1]:
                    # meerder mogelijkheden
                    if BLAZOEN_DT in blazoenen_dict:
                        if deelnemer.sporterboog.sporter.lid_nr in voorkeur_eigen_blazoen:
                            blazoen = BLAZOEN_WENS_DT

                blazoenen_dict[blazoen] += 1
            # for  deelnemer

            # convert dict to list
            wedstrijd.blazoen_count = [blazoenen_dict[blazoen] for blazoen in COMPETITIE_BLAZOENEN[afstand]]

        # for  wedstrijd

        context['url_download'] = reverse('CompInschrijven:inschrijfmethode1-behoefte-als-bestand',
                                          kwargs={'comp_pk': comp.pk,
                                                  'regio_pk': regio.pk})

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk, actief='competitie')
        return context
Пример #25
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])  # afkappen voor de veiligheid
            comp = (Competitie.objects.get(pk=comp_pk))
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        context['comp'] = comp

        teamtype_afkorting = kwargs[
            'team_type'][:2]  # afkappen voor de veiligheid

        # rayon_nr is optioneel (eerste binnenkomst zonder rayon nummer)
        try:
            rayon_nr = kwargs['rayon_nr'][:2]  # afkappen voor de veiligheid
            rayon_nr = int(rayon_nr)
        except KeyError:
            rayon_nr = get_sporter_rayon_nr(self.request)
        except ValueError:
            raise Http404('Verkeerd rayonnummer')

        self._maak_filter_knoppen(context, comp, rayon_nr, teamtype_afkorting)

        teamtype = context['teamtype']
        if not teamtype:
            raise Http404('Team type niet bekend')

        try:
            deelcomp_rk = (DeelCompetitie.objects.select_related(
                'competitie', 'nhb_rayon').get(laag=LAAG_RK,
                                               competitie=comp,
                                               competitie__is_afgesloten=False,
                                               nhb_rayon__rayon_nr=rayon_nr))
        except DeelCompetitie.DoesNotExist:
            raise Http404('Competitie niet gevonden')

        context['deelcomp_rk'] = deelcomp_rk
        comp = deelcomp_rk.competitie
        comp.bepaal_fase()

        # haal de planning erbij: competitieklasse --> competitiewedstrijd
        team2wedstrijd = dict()  # [team_pk] = competitiewedstrijd
        wedstrijd_pks = list(
            deelcomp_rk.plan.wedstrijden.values_list('pk', flat=True))
        for wedstrijd in (CompetitieWedstrijd.objects.prefetch_related(
                'team_klassen').select_related('locatie').filter(
                    pk__in=wedstrijd_pks)):

            if wedstrijd.locatie:
                wedstrijd.adres_str = ", ".join(
                    wedstrijd.locatie.adres.split('\n'))

            for team in wedstrijd.team_klassen.all():
                team2wedstrijd[team.pk] = wedstrijd
        # for

        if comp.afstand == '18':
            aantal_pijlen = 30
        else:
            aantal_pijlen = 25

        rk_teams = (KampioenschapTeam.objects.filter(
            deelcompetitie=deelcomp_rk,
            team_type=teamtype).select_related('klasse__team').order_by(
                'klasse__team__volgorde',
                '-aanvangsgemiddelde'))  # sterkste team eerst

        prev_klasse = ""
        rank = 0
        for team in rk_teams:
            if team.klasse != prev_klasse:
                team.break_klasse = True
                if team.klasse:
                    team.klasse_str = team.klasse.team.beschrijving
                    try:
                        team.wedstrijd = team2wedstrijd[team.klasse.team.pk]
                    except KeyError:
                        pass
                else:
                    team.klasse_str = "%s - Nog niet ingedeeld in een wedstrijdklasse" % team.team_type.beschrijving

                prev_klasse = team.klasse
                rank = 0

            team.ver_str = str(team.vereniging)
            team.ag_str = "%05.1f" % (team.aanvangsgemiddelde * aantal_pijlen)
            team.ag_str = team.ag_str.replace('.', ',')

            # TODO: dit scherm is zowel een kandidaat-deelnemerslijst als de uitslag

            # TODO: geen rank invullen na de cut

            rank += 1
            team.rank = rank
        # for

        context['rk_teams'] = rk_teams

        if rk_teams.count() == 0:
            context['geen_teams'] = True

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #26
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            regio_nr = int(
                kwargs['regio_nr'][:6])  # afkappen voor de veiligheid
            comp_pk = int(kwargs['comp_pk'][:6])  # afkappen voor de veiligheid
            deelcomp = (DeelCompetitie.objects.select_related(
                'competitie', 'nhb_regio').get(competitie=comp_pk,
                                               laag=LAAG_REGIO,
                                               nhb_regio__regio_nr=regio_nr))
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404()

        if deelcomp.functie != self.functie_nu:
            # niet de beheerder
            raise PermissionDenied()

        deelcomp.competitie.bepaal_fase()
        if deelcomp.competitie.fase > 'F':
            raise Http404('Verkeerde competitie fase')

        if deelcomp.competitie.fase > 'A':
            context['readonly_na_fase_A'] = True

            if deelcomp.competitie.fase > 'D':
                context['readonly_na_fase_D'] = True

        context['deelcomp'] = deelcomp

        context['opt_team_alloc'] = opts = list()

        obj = SimpleNamespace()
        obj.choice_name = 'vast'
        obj.beschrijving = 'Statisch (vaste teams)'
        obj.actief = deelcomp.regio_heeft_vaste_teams
        opts.append(obj)

        obj = SimpleNamespace()
        obj.choice_name = 'vsg'
        obj.beschrijving = 'Dynamisch (voortschrijdend gemiddelde)'
        obj.actief = not deelcomp.regio_heeft_vaste_teams
        opts.append(obj)

        context['opt_team_punten'] = opts = list()

        obj = SimpleNamespace()
        obj.choice_name = 'F1'
        obj.beschrijving = 'Formule 1 systeem (10/8/6/5/4/3/2/1)'
        obj.actief = deelcomp.regio_team_punten_model == TEAM_PUNTEN_MODEL_FORMULE1
        opts.append(obj)

        obj = SimpleNamespace()
        obj.choice_name = '2P'
        obj.beschrijving = 'Twee punten systeem (2/1/0)'
        obj.actief = deelcomp.regio_team_punten_model == TEAM_PUNTEN_MODEL_TWEE
        opts.append(obj)

        obj = SimpleNamespace()
        obj.choice_name = 'SS'
        obj.beschrijving = 'Cumulatief: som van team totaal'
        obj.actief = deelcomp.regio_team_punten_model == TEAM_PUNTEN_MODEL_SOM_SCORES
        opts.append(obj)

        context['url_opslaan'] = reverse('CompRegio:regio-instellingen',
                                         kwargs={
                                             'comp_pk':
                                             deelcomp.competitie.pk,
                                             'regio_nr':
                                             deelcomp.nhb_regio.regio_nr
                                         })

        context['wiki_rcl_regio_instellingen_url'] = reverse_handleiding(
            self.request, settings.HANDLEIDING_RCL_INSTELLINGEN_REGIO)

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp.competitie.pk)
        return context
Пример #27
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        if self.subset_filter:
            # BB/BKO mode

            context['subset_filter'] = True

            try:
                comp_pk = int(str(
                    kwargs['comp_pk'][:6]))  # afkappen voor de veiligheid
                comp = Competitie.objects.get(pk=comp_pk)
            except (ValueError, Competitie.DoesNotExist):
                raise Http404('Competitie niet gevonden')

            context['comp'] = comp
            comp.bepaal_fase()

            open_inschrijving = comp.fase <= 'G'

            subset = kwargs['subset'][:10]  # afkappen voor de veiligheid
            if subset == 'auto':
                subset = 'alle'

            if subset == 'alle':
                # alle rayons
                context['rayon'] = 'Alle'
                rk_deelcomp_pks = (DeelCompetitie.objects.filter(
                    competitie=comp, laag=LAAG_RK).values_list('pk',
                                                               flat=True))
            else:
                # alleen het gekozen rayon
                try:
                    rayon_nr = int(str(subset))  # is al eerder afgekapt op 10
                    context['rayon'] = NhbRayon.objects.get(rayon_nr=rayon_nr)
                except (ValueError, NhbRayon.DoesNotExist):
                    raise Http404('Selectie wordt niet ondersteund')

                rk_deelcomp_pks = (DeelCompetitie.objects.filter(
                    competitie=comp,
                    nhb_rayon=context['rayon']).values_list('pk', flat=True))

            context['filters'] = filters = list()
            alle_filter = {'label': 'Alles'}
            if subset != 'alle':
                alle_filter['url'] = reverse('CompRayon:rayon-teams-alle',
                                             kwargs={
                                                 'comp_pk': comp.pk,
                                                 'subset': 'alle'
                                             })
            filters.append(alle_filter)

            for rayon in NhbRayon.objects.all():
                rayon.label = 'Rayon %s' % rayon.rayon_nr
                if str(rayon.rayon_nr) != subset:
                    rayon.url = reverse('CompRayon:rayon-teams-alle',
                                        kwargs={
                                            'comp_pk': comp.pk,
                                            'subset': rayon.rayon_nr
                                        })
                filters.append(rayon)
            # for

        else:
            # RKO mode
            try:
                rk_deelcomp_pk = int(kwargs['rk_deelcomp_pk']
                                     [:6])  # afkappen voor de veiligheid
                deelcomp_rk = (
                    DeelCompetitie.objects.select_related('competitie').get(
                        pk=rk_deelcomp_pk, laag=LAAG_RK))
            except (ValueError, DeelCompetitie.DoesNotExist):
                raise Http404('Competitie niet gevonden')

            if deelcomp_rk.functie != self.functie_nu:
                # niet de beheerder
                raise PermissionDenied()

            rk_deelcomp_pks = [deelcomp_rk.pk]

            context['comp'] = comp = deelcomp_rk.competitie
            comp.bepaal_fase()

            open_inschrijving = comp.fase <= 'G'

            context['deelcomp'] = deelcomp_rk
            context['rayon'] = self.functie_nu.nhb_rayon

        if comp.afstand == '18':
            aantal_pijlen = 30
        else:
            aantal_pijlen = 25

        totaal_teams = 0

        klassen = (CompetitieKlasse.objects.filter(
            competitie=comp,
            indiv=None, is_voor_teams_rk_bk=True).select_related(
                'team', 'team__team_type').order_by('team__volgorde'))

        klasse2teams = dict()  # [klasse] = list(teams)
        prev_sterkte = ''
        prev_team = None
        for klasse in klassen:
            klasse2teams[klasse] = list()

            if klasse.team.team_type != prev_team:
                prev_sterkte = ''
                prev_team = klasse.team.team_type

            min_ag_str = "%05.1f" % (klasse.min_ag * aantal_pijlen)
            min_ag_str = min_ag_str.replace('.', ',')
            if prev_sterkte:
                if klasse.min_ag > AG_NUL:
                    klasse.sterkte_str = "sterkte " + min_ag_str + " tot " + prev_sterkte
                else:
                    klasse.sterkte_str = "sterkte tot " + prev_sterkte
            else:
                klasse.sterkte_str = "sterkte " + min_ag_str + " en hoger"

            prev_sterkte = min_ag_str
        # for

        if open_inschrijving:
            tel_dit = 'tijdelijke_schutters'
        else:
            tel_dit = 'gekoppelde_schutters'

        rk_teams = (KampioenschapTeam.objects.select_related(
            'vereniging', 'vereniging__regio', 'team_type', 'klasse',
            'klasse__team').exclude(klasse=None).filter(
                deelcompetitie__in=rk_deelcomp_pks).annotate(
                    sporter_count=Count(tel_dit)).order_by(
                        'klasse__team__volgorde', '-aanvangsgemiddelde',
                        'vereniging__ver_nr'))

        prev_klasse = None
        for team in rk_teams:
            if team.klasse != prev_klasse:
                team.break_before = True
                prev_klasse = team.klasse

            # team AG is 0.0 - 30.0 --> toon als score: 000.0 .. 900.0
            ag_str = "%05.1f" % (team.aanvangsgemiddelde * aantal_pijlen)
            team.ag_str = ag_str.replace('.', ',')

            totaal_teams += 1

            try:
                klasse2teams[team.klasse].append(team)
            except KeyError:
                # dit is geen acceptabele klasse (waarschijnlijk een regio klasse)
                # pas dit meteen even aan
                team.klasse = None
                team.save(update_fields=['klasse'])
        # for

        context['rk_teams'] = klasse2teams

        # zoek de teams die niet 'af' zijn
        rk_teams = (KampioenschapTeam.objects.select_related(
            'vereniging', 'vereniging__regio', 'team_type',
            'deelcompetitie').filter(
                deelcompetitie__in=rk_deelcomp_pks,
                klasse=None).annotate(sporter_count=Count(tel_dit)).order_by(
                    'team_type__volgorde', '-aanvangsgemiddelde',
                    'vereniging__ver_nr'))

        is_eerste = True
        for team in rk_teams:
            # team AG is 0.0 - 30.0 --> toon als score: 000,0 .. 900,0
            ag_str = "%05.1f" % (team.aanvangsgemiddelde * aantal_pijlen)
            team.ag_str = ag_str.replace('.', ',')

            if comp.fase <= 'K' and self.rol_nu == Rollen.ROL_RKO:
                team.url_aanpassen = reverse('CompRayon:teams-rk-koppelen',
                                             kwargs={'rk_team_pk': team.pk})

            totaal_teams += 1

            team.break_before = is_eerste
            is_eerste = False
        # for

        context['rk_teams_niet_af'] = rk_teams
        context['totaal_teams'] = totaal_teams
        context['toon_klassen'] = comp.klassengrenzen_vastgesteld_rk_bk

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #28
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        ver = self.functie_nu.nhb_ver
        rayon = ver.regio.rayon

        try:
            rk_deelcomp_pk = int(
                kwargs['rk_deelcomp_pk'][:6])  # afkappen voor de veiligheid
            deelcomp_rk = (DeelCompetitie.objects.select_related(
                'competitie', 'nhb_rayon').get(pk=rk_deelcomp_pk,
                                               nhb_rayon=rayon,
                                               laag=LAAG_RK))
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        context['deelcomp_rk'] = deelcomp_rk

        comp = deelcomp_rk.competitie
        comp.bepaal_fase()

        if comp.fase <= 'G':
            raise Http404('Pagina kan nog niet gebruikt worden')

        if comp.fase > 'L':
            raise Http404('Pagina kan niet meer gebruikt worden')

        mag_wijzigen = ('J' <= comp.fase <= 'K')

        deelnemers = (
            KampioenschapSchutterBoog.objects.select_related(
                'deelcompetitie', 'klasse__indiv', 'sporterboog__sporter',
                'bij_vereniging').filter(
                    deelcompetitie=deelcomp_rk, bij_vereniging=ver).order_by(
                        'klasse__indiv__volgorde',  # groepeer per klasse
                        'volgorde',  # oplopend op volgorde
                        '-gemiddelde'))  # aflopend op gemiddelde

        aantal_afgemeld = 0
        aantal_bevestigd = 0
        aantal_onbekend = 0
        aantal_klassen = 0

        klasse = -1
        for deelnemer in deelnemers:
            deelnemer.break_klasse = (klasse !=
                                      deelnemer.klasse.indiv.volgorde)
            if deelnemer.break_klasse:
                aantal_klassen += 1
                deelnemer.klasse_str = deelnemer.klasse.indiv.beschrijving
                klasse = deelnemer.klasse.indiv.volgorde

            sporter = deelnemer.sporterboog.sporter
            deelnemer.naam_str = "[%s] %s" % (sporter.lid_nr,
                                              sporter.volledige_naam())

            if mag_wijzigen:
                deelnemer.url_wijzig = reverse(
                    'CompRayon:wijzig-status-rk-deelnemer',
                    kwargs={'deelnemer_pk': deelnemer.pk})

            # tel de status van de deelnemers en eerste 8 reserveschutters
            if deelnemer.deelname == DEELNAME_NEE:
                aantal_afgemeld += 1
            elif deelnemer.deelname == DEELNAME_JA:
                aantal_bevestigd += 1
            else:
                aantal_onbekend += 1
        # for

        context['deelnemers'] = deelnemers

        context['aantal_afgemeld'] = aantal_afgemeld
        context['aantal_onbekend'] = aantal_onbekend
        context['aantal_bevestigd'] = aantal_bevestigd

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp_rk.competitie.pk)
        return context
Пример #29
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])  # afkappen voor de veiligheid
            comp = (Competitie.objects.get(pk=comp_pk))
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        context['comp'] = comp

        teamtype_afkorting = kwargs[
            'team_type'][:2]  # afkappen voor de veiligheid

        # ver_nr is optioneel en resulteert in het nummer van de sporter
        try:
            ver_nr = kwargs['ver_nr'][:4]  # afkappen voor de veiligheid
            ver_nr = int(ver_nr)
        except KeyError:
            # TODO: onmogelijk om hier te komen (ivm URL design)
            # zoek de vereniging die bij de huidige gebruiker past
            ver_nr = get_sporter_ver_nr(self.request)
        except ValueError:
            raise Http404('Verkeerd verenigingsnummer')

        try:
            ver = NhbVereniging.objects.select_related('regio').get(
                ver_nr=ver_nr)
        except NhbVereniging.DoesNotExist:
            raise Http404('Vereniging niet gevonden')

        context['ver'] = ver

        self._maak_filter_knoppen(context, comp, ver_nr, teamtype_afkorting)

        teamtype = context['teamtype']
        if not teamtype:
            raise Http404('Team type niet bekend')

        regio_nr = ver.regio.regio_nr
        context['url_terug'] = reverse('CompUitslagen:uitslagen-regio-teams-n',
                                       kwargs={
                                           'comp_pk': comp.pk,
                                           'team_type':
                                           teamtype.afkorting.lower(),
                                           'regio_nr': regio_nr
                                       })

        context['deelcomp'] = deelcomp = DeelCompetitie.objects.get(
            competitie=comp, nhb_regio=ver.regio)

        context['toon_punten'] = (deelcomp.regio_team_punten_model !=
                                  TEAM_PUNTEN_MODEL_SOM_SCORES)

        # zoek alle verenigingsteams erbij
        teams = (RegiocompetitieTeam.objects.exclude(klasse=None).filter(
            deelcompetitie=deelcomp,
            team_type=context['teamtype'],
            vereniging=ver).order_by('klasse__team__volgorde'))

        pk2team = dict()
        for team in teams:
            pk2team[team.pk] = team
            team.rondes = list()
            team.ronde_scores = list()
            team.ronde_punten = list()
            team.naam_str = "[%s] %s" % (team.vereniging.ver_nr,
                                         team.team_naam)
            team.totaal_score = 0
            team.totaal_punten = 0
            team.leden = dict()  # [deelnemer.pk] = [ronde status, ..]
        # for

        ronde_teams = (RegiocompetitieRondeTeam.objects.filter(
            team__in=teams).prefetch_related(
                'deelnemers_geselecteerd', 'deelnemers_feitelijk',
                'scorehist_feitelijk').order_by('ronde_nr'))
        for ronde_team in ronde_teams:
            team = pk2team[ronde_team.team.pk]
            team.rondes.append(ronde_team)
            team.ronde_scores.append(ronde_team.team_score)

            if ronde_team.ronde_nr < deelcomp.huidige_team_ronde:
                team.ronde_punten.append(ronde_team.team_punten)
            else:
                team.ronde_punten.append(-1)

            team.totaal_score += ronde_team.team_score
            team.totaal_punten += ronde_team.team_punten

            # haal de bevroren scores op
            sb2score = dict()  # [sporterboog.pk] = score_waarde
            for scorehist in (ronde_team.scorehist_feitelijk.select_related(
                    'score', 'score__sporterboog').all()):
                sb2score[
                    scorehist.score.sporterboog.pk] = scorehist.nieuwe_waarde
            # for

            geselecteerd_pks = list()
            for deelnemer in ronde_team.deelnemers_geselecteerd.all():
                geselecteerd_pks.append(deelnemer.pk)

                if deelnemer.pk not in team.leden:
                    team.leden[deelnemer.pk] = voorgaand = list()
                    while len(voorgaand) < ronde_team.ronde_nr:
                        inzet = SimpleNamespace(tekst='-', score=-1)
                        voorgaand.append(inzet)
                    # while
            # for

            for deelnemer in ronde_team.deelnemers_feitelijk.all():
                try:
                    voorgaand = team.leden[deelnemer.pk]
                except KeyError:
                    team.leden[deelnemer.pk] = voorgaand = list()
                    while len(voorgaand) < ronde_team.ronde_nr:
                        inzet = SimpleNamespace(tekst='-', score=-1)
                        voorgaand.append(inzet)
                    # while

                try:
                    score = sb2score[deelnemer.sporterboog.pk]
                except KeyError:
                    # geen score van deze sporter
                    score = 0

                score_str = str(score)
                if deelnemer.pk not in geselecteerd_pks:
                    score_str = '* ' + score_str
                else:
                    geselecteerd_pks.remove(deelnemer.pk)

                inzet = SimpleNamespace(tekst=score_str, score=score)

                voorgaand.append(inzet)
            # for

            # samenvatting van deze ronde maken
            laagste_inzet = None
            laagste_score = 9999
            aantal_scores = 0
            for deelnemer_pk, voorgaand in team.leden.items():
                # iedereen die voorheen in het team zaten door laten groeien
                if len(voorgaand) <= ronde_team.ronde_nr:
                    if deelnemer_pk in geselecteerd_pks:
                        # was geselecteerd voor deze ronde, dus uitvaller
                        inzet = SimpleNamespace(tekst='-', score=-1)
                    else:
                        # niet geselecteerd voor deze ronde
                        inzet = SimpleNamespace(tekst='', score=-1)
                    voorgaand.append(inzet)

                # track het aantal scores en de laagste score
                inzet = voorgaand[-1]
                if inzet.score >= 0:
                    aantal_scores += 1
                    if inzet.score < laagste_score:
                        laagste_score = inzet.score
                        laagste_inzet = inzet
            # for
            if aantal_scores > 3 and laagste_inzet:
                # de score die buiten de top-3 valt wegstrepen
                laagste_inzet.is_laagste = True
        # for

        # converteer de team leden
        pks = list()
        for team in teams:
            pks.extend(team.leden.keys())
        # for

        pk2deelnemer = dict()
        for deelnemer in (RegioCompetitieSchutterBoog.objects.select_related(
                'sporterboog', 'sporterboog__sporter').filter(pk__in=pks)):
            pk2deelnemer[deelnemer.pk] = deelnemer
        # for

        for team in teams:
            nieuw = list()
            for pk, voorgaand in team.leden.items():
                deelnemer = pk2deelnemer[pk]
                sporter = deelnemer.sporterboog.sporter
                deelnemer.naam_str = "[%s] %s" % (sporter.lid_nr,
                                                  sporter.volledige_naam())
                totaal = sum(inzet.score for inzet in voorgaand)
                tup = (totaal, deelnemer.pk, deelnemer, voorgaand[1:])
                nieuw.append(tup)
            # for

            # TODO: sorteren zou eerder moeten zodat de doorgestreepte nul altijd de onderste is
            nieuw.sort(reverse=True)
            team.leden = [(deelnemer, voorgaand)
                          for _, _, deelnemer, voorgaand in nieuw]
        # for

        # sorteer de teams
        unsorted_teams = list()
        for team in teams:
            tup = (team.klasse.team.volgorde, team.totaal_punten,
                   team.totaal_score, team.pk, team)

            while len(team.ronde_scores) < 7:
                team.ronde_scores.append('-')

            while len(team.ronde_punten) < 7:
                team.ronde_punten.append(-1)

            unsorted_teams.append(tup)
        # for
        unsorted_teams.sort()

        context['teams'] = teams = list()
        for tup in unsorted_teams:
            team = tup[-1]
            team.klasse_str = team.klasse.team.beschrijving
            teams.append(team)
        # for

        context['geen_teams'] = (len(teams) == 0)

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context
Пример #30
0
    def get_context_data(self, **kwargs):
        """ called by the template system to get the context data for the template """
        context = super().get_context_data(**kwargs)

        try:
            comp_pk = int(kwargs['comp_pk'][:6])  # afkappen voor de veiligheid
            comp = (Competitie.objects.get(pk=comp_pk))
        except (ValueError, Competitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        comp.bepaal_fase()
        context['comp'] = comp

        comp_boog = kwargs['comp_boog'][:2]  # afkappen voor de veiligheid

        # rayon_nr is optioneel (eerste binnenkomst zonder rayon nummer)
        try:
            rayon_nr = kwargs['rayon_nr'][:2]  # afkappen voor de veiligheid
            rayon_nr = int(rayon_nr)
        except KeyError:
            rayon_nr = get_sporter_rayon_nr(self.request)
        except ValueError:
            raise Http404('Verkeerd rayonnummer')

        self._maak_filter_knoppen(context, comp, rayon_nr, comp_boog)

        boogtype = context['comp_boog']
        if not boogtype:
            raise Http404('Boogtype niet bekend')

        try:
            deelcomp = (DeelCompetitie.objects.select_related(
                'competitie', 'nhb_rayon',
                'plan').prefetch_related('plan__wedstrijden').get(
                    laag=LAAG_RK,
                    competitie__is_afgesloten=False,
                    competitie=comp,
                    nhb_rayon__rayon_nr=rayon_nr))
        except DeelCompetitie.DoesNotExist:
            raise Http404('Competitie niet gevonden')

        context['deelcomp'] = deelcomp
        deelcomp.competitie.bepaal_fase()

        # haal de planning erbij: competitieklasse --> competitiewedstrijd
        indiv2wedstrijd = dict()  # [indiv_pk] = competitiewedstrijd
        wedstrijd_pks = list(
            deelcomp.plan.wedstrijden.values_list('pk', flat=True))
        for wedstrijd in (CompetitieWedstrijd.objects.prefetch_related(
                'indiv_klassen').select_related('locatie').filter(
                    pk__in=wedstrijd_pks)):

            if wedstrijd.locatie:
                wedstrijd.adres_str = ", ".join(
                    wedstrijd.locatie.adres.split('\n'))

            for indiv in wedstrijd.indiv_klassen.all():
                indiv2wedstrijd[indiv.pk] = wedstrijd
            # for
        # for

        wkl2limiet = dict()  # [pk] = aantal

        if deelcomp.heeft_deelnemerslijst:
            # deelnemers/reserveschutters van het RK tonen
            deelnemers = (
                KampioenschapSchutterBoog.objects.exclude(
                    bij_vereniging__isnull=True)  # attentie gevallen
                .exclude(deelname=DEELNAME_NEE
                         )  # geen sporters die zich afgemeld hebben
                .filter(deelcompetitie=deelcomp,
                        klasse__indiv__boogtype=boogtype,
                        volgorde__lte=48)  # toon tot 48 sporters per klasse
                .select_related('klasse__indiv', 'sporterboog__sporter',
                                'sporterboog__sporter__bij_vereniging',
                                'bij_vereniging').order_by(
                                    'klasse__indiv__volgorde', 'volgorde'))

            for limiet in (DeelcompetitieKlasseLimiet.objects.select_related(
                    'klasse').filter(deelcompetitie=deelcomp)):
                wkl2limiet[limiet.klasse.pk] = limiet.limiet
            # for

            context['is_lijst_rk'] = True
        else:
            # competitie is nog in de regiocompetitie fase
            context['regiocomp_nog_actief'] = True

            # sporters moeten uit LAAG_REGIO gehaald worden, uit de 4 regio's van het rayon
            deelcomp_pks = (DeelCompetitie.objects.filter(
                laag=LAAG_REGIO,
                competitie__is_afgesloten=False,
                competitie=comp,
                nhb_regio__rayon__rayon_nr=rayon_nr).values_list('pk',
                                                                 flat=True))

            deelnemers = (RegioCompetitieSchutterBoog.objects.filter(
                deelcompetitie__pk__in=deelcomp_pks,
                klasse__indiv__boogtype=boogtype,
                aantal_scores__gte=comp.aantal_scores_voor_rk_deelname
            ).select_related('klasse__indiv', 'sporterboog__sporter',
                             'sporterboog__sporter__bij_vereniging',
                             'bij_vereniging').order_by(
                                 'klasse__indiv__volgorde', '-gemiddelde'))

        klasse = -1
        limiet = 24
        for deelnemer in deelnemers:
            deelnemer.break_klasse = (klasse !=
                                      deelnemer.klasse.indiv.volgorde)
            if deelnemer.break_klasse:
                indiv = deelnemer.klasse.indiv
                deelnemer.klasse_str = indiv.beschrijving
                try:
                    deelnemer.wedstrijd = indiv2wedstrijd[indiv.pk]
                except KeyError:
                    pass

                try:
                    limiet = wkl2limiet[deelnemer.klasse.pk]
                except KeyError:
                    limiet = 24
            klasse = deelnemer.klasse.indiv.volgorde

            sporter = deelnemer.sporterboog.sporter
            deelnemer.naam_str = "[%s] %s" % (sporter.lid_nr,
                                              sporter.volledige_naam())
            deelnemer.ver_str = str(deelnemer.bij_vereniging)

            deelnemer.geen_deelname_risico = deelnemer.sporterboog.sporter.bij_vereniging != deelnemer.bij_vereniging

            if deelcomp.heeft_deelnemerslijst:
                if deelnemer.rank > limiet:
                    deelnemer.is_reserve = True
        # for

        context['deelnemers'] = deelnemers

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return context