コード例 #1
0
ファイル: tests.py プロジェクト: RamonvdW/nhb-apps
    def test_all(self):
        # anon
        self.client.logout()
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_top)
        self.assert403(resp)

        # gebruiker
        self.e2e_login(self.account)
        with self.assert_max_queries(20):
            resp = self.client.get(self.url_top)
        self.assert403(resp)

        # beheerder
        self.account.is_BB = True
        self.account.save()
        self.e2e_login(self.account)

        with self.assert_max_queries(20):
            resp = self.client.get(self.url_top)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_html_ok(resp)
        self.assert_template_used(
            resp, ('handleiding/Hoofdpagina.dtl', 'plein/site_layout.dtl'))

        url = reverse_handleiding(None, settings.HANDLEIDING_TOP)
        self.assertEqual(url, self.url_page % settings.HANDLEIDING_TOP)

        # doorloop alle handleiding pagina
        for page in settings.HANDLEIDING_PAGINAS:
            url = self.url_page % page
            with self.assert_max_queries(20):
                resp = self.client.get(url)
            self.assertEqual(resp.status_code, 200)  # 200 = OK
            self.assert_html_ok(resp)
コード例 #2
0
ファイル: views.py プロジェクト: RamonvdW/nhb-apps
    def get(self, request, *args, **kwargs):
        """ called by the template system to get the context data for the template """

        if not is_browser_supported(request):
            return redirect('Plein:niet-ondersteund')

        # zet alles goed voor bezoekers / geen rol
        template = TEMPLATE_PLEIN_BEZOEKER
        context = dict()

        # ga naar live server banner tonen?
        context['ga_naar_live_server'] = settings.IS_TEST_SERVER

        if request.user.is_authenticated:
            rol_nu = rol_get_huidige(request)

            if rol_nu == Rollen.ROL_SPORTER:
                template = TEMPLATE_PLEIN_SPORTER

            elif rol_nu == Rollen.ROL_NONE or rol_nu is None:
                # gebruik de bezoeker pagina
                pass

            else:
                # beheerder
                template = TEMPLATE_PLEIN_BEHEERDER

                handleiding_pagina = ROL2HANDLEIDING_PAGINA[rol_nu]

                context['handleiding_url'] = reverse_handleiding(
                    request, handleiding_pagina)

                if rol_nu == Rollen.ROL_BB:
                    context['rol_is_bb'] = True
                elif rol_nu == Rollen.ROL_BKO:
                    context['rol_is_bko'] = True
                elif rol_nu == Rollen.ROL_RKO:
                    context['rol_is_rko'] = True
                elif rol_nu == Rollen.ROL_RCL:
                    context['rol_is_rcl'] = True
                elif rol_nu == Rollen.ROL_HWL:
                    context['rol_is_hwl'] = True
                elif rol_nu == Rollen.ROL_WL:
                    context['rol_is_wl'] = True
                elif rol_nu == Rollen.ROL_SEC:
                    context['rol_is_sec'] = True
                else:  # pragma: no cover
                    # vangnet voor nieuwe rollen
                    raise ValueError("PleinView: onbekende rol %s" % rol_nu)

                context['huidige_rol'] = rol_get_beschrijving(request)

                # kijk hoeveel taken er open staan
                eval_open_taken(request)

        context['naam_site'] = settings.NAAM_SITE
        context['email_support'] = settings.EMAIL_SUPPORT

        menu_dynamics(self.request, context)
        return render(request, template, 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)

        context['show_vhpg'], context['vhpg'] = account_needs_vhpg(
            self.request.user)
        context['huidige_rol'] = rol_get_beschrijving(self.request)

        if self.account.is_staff:
            context['url_admin_site'] = reverse('admin:index')
            context['url_login_as'] = reverse('Account:account-wissel')

        # als we hier komen weten is de tweede factor gekoppeld is
        # de controle van de tweede factor moet misschien nog uitgevoerd worden
        context['show_otp_controle'] = not account_rechten_is_otp_verified(
            self.request)

        if context['show_vhpg']:
            context['show_beheerder_intro'] = True

        context['wiki_2fa_url'] = reverse_handleiding(self.request,
                                                      settings.HANDLEIDING_2FA)
        context['wiki_rollen'] = reverse_handleiding(
            self.request, settings.HANDLEIDING_ROLLEN)
        context['wiki_intro_nieuwe_beheerders'] = reverse_handleiding(
            self.request, settings.HANDLEIDING_INTRO_NIEUWE_BEHEERDERS)

        # snel wissel kaartje voor BB
        if self.rol_nu == Rollen.ROL_BB:
            context['heeft_alle_rollen'] = self._maak_alle_rollen()
            context['url_wissel_naar_sec'] = reverse('Functie:wissel-naar-sec')

        # bedoeld voor de testsuite, maar kan geen kwaad
        context['insert_meta'] = True
        context['meta_rol'] = rol2url[self.rol_nu]
        if self.functie_nu:
            context[
                'meta_functie'] = self.functie_nu.beschrijving  # template doet html escaping
        else:
            context['meta_functie'] = ""

        eval_open_taken(self.request, forceer=True)

        menu_dynamics(self.request, context, actief='wissel-van-rol')
        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)

        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
コード例 #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:
            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
コード例 #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:
            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')

        # controleer dat de juiste RKO aan de knoppen zit
        if self.functie_nu != deelcomp_rk.functie:
            raise PermissionDenied()  # niet de juiste RKO

        context['wkl_indiv'] = wkl_indiv = (CompetitieKlasse.objects.exclude(
            indiv__niet_voor_rk_bk=True).filter(
                competitie=deelcomp_rk.competitie, team=None).select_related(
                    'indiv__boogtype').order_by('indiv__volgorde'))

        context['wkl_teams'] = wkl_teams = (CompetitieKlasse.objects.filter(
            competitie=deelcomp_rk.competitie,
            is_voor_teams_rk_bk=True,
            indiv=None).order_by('team__volgorde'))

        # zet de default limieten
        pk2wkl = dict()
        for wkl in wkl_indiv:
            wkl.limiet = 24  # default limiet
            wkl.sel = 'sel_%s' % wkl.pk
            pk2wkl[wkl.pk] = wkl
        # for

        for wkl in wkl_teams:
            # ERE klasse: 12 teams
            # overige: 8 teams
            wkl.limiet = 12 if "ERE" in wkl.team.beschrijving else 8
            wkl.sel = 'sel_%s' % wkl.pk
            pk2wkl[wkl.pk] = wkl
        # for

        # aanvullen met de opgeslagen limieten
        for limiet in (DeelcompetitieKlasseLimiet.objects.select_related(
                'klasse').filter(deelcompetitie=deelcomp_rk,
                                 klasse__in=pk2wkl.keys())):
            wkl = pk2wkl[limiet.klasse.pk]
            wkl.limiet = limiet.limiet
        # for

        context['url_opslaan'] = reverse(
            'CompRayon:rayon-limieten',
            kwargs={'rk_deelcomp_pk': deelcomp_rk.pk})

        context['url_terug'] = reverse('Competitie:kies')

        context['wiki_rk_schutters'] = reverse_handleiding(
            self.request, settings.HANDLEIDING_RK_SELECTIE)

        menu_dynamics_competitie(self.request,
                                 context,
                                 comp_pk=deelcomp_rk.competitie.pk)
        return context
コード例 #7
0
ファイル: view_indiv_rko.py プロジェクト: RamonvdW/nhb-apps
    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)

        # er zijn 2 situaties:
        # 1) regiocompetities zijn nog niet afgesloten --> verwijst naar pagina tussenstand rayon
        # 2) deelnemers voor RK zijn vastgesteld --> toon lijst

        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,
                                               laag=LAAG_RK))
        except (ValueError, DeelCompetitie.DoesNotExist):
            raise Http404('Competitie niet gevonden')

        # controleer dat de juiste RKO aan de knoppen zit
        if self.rol_nu == Rollen.ROL_RKO and self.functie_nu != deelcomp_rk.functie:
            raise PermissionDenied()  # niet de juiste RKO

        alles_afgesloten, regio_status = self._get_regio_status(
            deelcomp_rk.competitie)
        context['regio_status'] = regio_status

        context['deelcomp_rk'] = deelcomp_rk

        if not deelcomp_rk.heeft_deelnemerslijst:
            # situatie 1)
            context['url_uitslagen'] = reverse(
                'CompUitslagen:uitslagen-rayon-indiv-n',
                kwargs={
                    'comp_pk': deelcomp_rk.competitie.pk,
                    'comp_boog': 'r',
                    'rayon_nr': deelcomp_rk.nhb_rayon.rayon_nr
                })
            deelnemers = list()
        else:
            # situatie 2)
            deelnemers = (
                KampioenschapSchutterBoog.objects.select_related(
                    'deelcompetitie', 'klasse__indiv', 'sporterboog__sporter',
                    'bij_vereniging').filter(
                        deelcompetitie=deelcomp_rk,
                        volgorde__lte=48)  # max 48 schutters per klasse tonen
                .order_by(
                    'klasse__indiv__volgorde',  # groepeer per klasse
                    'volgorde',  # oplopend op volgorde (dubbelen mogelijk)
                    '-gemiddelde'))  # aflopend op gemiddelde

            context['url_download'] = reverse(
                'CompRayon:lijst-rk-als-bestand',
                kwargs={'rk_deelcomp_pk': deelcomp_rk.pk})

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

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

        klasse = -1
        limiet = 24
        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
                try:
                    limiet = wkl2limiet[deelnemer.klasse.pk]
                except KeyError:
                    limiet = 24

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

            if not deelnemer.bij_vereniging:
                aantal_attentie += 1

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

            if deelnemer.rank > limiet:
                deelnemer.is_reserve = True

            # tel de status van de deelnemers en eerste 8 reserveschutters
            if deelnemer.rank <= limiet + 8:
                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_klassen'] = aantal_klassen

        if deelcomp_rk.heeft_deelnemerslijst:
            context['aantal_afgemeld'] = aantal_afgemeld
            context['aantal_onbekend'] = aantal_onbekend
            context['aantal_bevestigd'] = aantal_bevestigd
            context['aantal_attentie'] = aantal_attentie

        context['wiki_rk_schutters'] = reverse_handleiding(
            self.request, settings.HANDLEIDING_RK_SELECTIE)

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