예제 #1
0
파일: views.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)

        account = self.request.user

        # haal de taken op (maximaal 50)
        # zorg dat alle open taken in beeld komen door te sorteren op is_afgerond
        context['taken'] = (Taak.objects.filter(
            toegekend_aan=account).order_by('is_afgerond', 'deadline')[:50])

        count_open = count_afgerond = 0
        for taak in context['taken']:
            if taak.is_afgerond:
                count_afgerond += 1
            else:
                count_open += 1

            taak.url = reverse('Taken:details', kwargs={'taak_pk': taak.pk})
        # for

        context['heeft_open_taken'] = (count_open > 0)
        context['heeft_afgeronde_taken'] = (count_afgerond > 0)

        eval_open_taken(self.request)

        menu_dynamics(self.request, context, actief='taken')
        return context
예제 #2
0
파일: views.py 프로젝트: RamonvdW/nhb-apps
    def post(self, request, *args, **kwargs):

        try:
            taak_pk = int(kwargs['taak_pk'][:6])  # afkappen voor de veiligheid
            taak = Taak.objects.get(pk=taak_pk)
        except (ValueError, Taak.DoesNotExist):
            raise Http404('Geen valide taak')

        account = self.request.user

        # controleer dat deze taak bij de beheerder hoort
        if taak.toegekend_aan != account:
            raise PermissionDenied('Geen taak voor jouw account')

        if not taak.is_afgerond:
            if taak.log != "":
                taak.log += "\n"
            taak.log += "\n[%s] %s heeft deze taak gesloten" % (timezone.now(),
                                                                account)
            taak.is_afgerond = True
            taak.save()

            eval_open_taken(request, forceer=True)

        return HttpResponseRedirect(reverse('Taken:overzicht'))
예제 #3
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)
예제 #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)

        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
예제 #5
0
    def get(self, request, *args, **kwargs):
        """ called by the template system to get the context data for the template """

        self.rol_nu, self.functie_nu = rol_get_huidige_functie(request)

        context = dict()

        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()                     # zet comp.fase
        comp.bepaal_openbaar(self.rol_nu)      # zet comp.is_openbaar

        comp.einde_fase_F = comp.laatst_mogelijke_wedstrijd + datetime.timedelta(days=7)
        comp.einde_fase_G = comp.einde_fase_F + datetime.timedelta(days=1)
        comp.einde_fase_K = comp.rk_eerste_wedstrijd - datetime.timedelta(days=14)
        comp.einde_fase_M = comp.rk_laatste_wedstrijd + datetime.timedelta(days=7)

        if 'B' <= comp.fase <= 'E':
            comp.url_inschrijvingen = reverse('CompInschrijven:lijst-regiocomp-alles',
                                              kwargs={'comp_pk': comp.pk})

        context['comp'] = comp

        self._get_uitslagen(context, comp, request)

        # afhankelijk van de huidige functie vs de competitie leveren we 2 pagina's:
        #   - beheerder
        #   - bezoeker
        template = None

        if self.rol_nu in (Rollen.ROL_BKO, Rollen.ROL_RKO, Rollen.ROL_RCL):
            if self.functie_nu and self.functie_nu.comp_type == comp.afstand:
                # BKO/RKO/RCL van deze specifieke competitie
                template = self._get_competitie_overzicht_beheerder(request, context, comp)
                eval_open_taken(request)

        elif self.rol_nu == Rollen.ROL_BB:
            template = self._get_competitie_overzicht_beheerder(request, context, comp)
            eval_open_taken(request)

        elif self.rol_nu == Rollen.ROL_HWL:
            template = self._get_competitie_overzicht_hwl(request, context, comp)
            eval_open_taken(request)

        if not template:
            template = self._get_competitie_overzicht_schutter_bezoeker(context, comp)

        menu_dynamics_competitie(self.request, context, comp_pk=comp.pk)
        return render(request, template, 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)

        context['nhb_ver'] = ver = self.functie_nu.nhb_ver

        context['clusters'] = ver.clusters.all()

        if self.functie_nu.nhb_ver.wedstrijdlocatie_set.exclude(
                baan_type=BAAN_TYPE_EXTERN).filter(zichtbaar=True).count() > 0:
            context['accommodatie_details_url'] = reverse(
                'Vereniging:vereniging-accommodatie-details',
                kwargs={'vereniging_pk': ver.pk})

        context['url_externe_locaties'] = reverse(
            'Vereniging:externe-locaties', kwargs={'vereniging_pk': ver.pk})

        if self.rol_nu == Rollen.ROL_SEC or ver.regio.is_administratief:
            # SEC
            comps = list()
            deelcomps = list()
            deelcomps_rk = list()
        else:
            # HWL of WL
            context['toon_competities'] = True

            # if rol_nu == Rollen.ROL_HWL:
            #     context['toon_wedstrijdkalender'] = True

            comps = (Competitie.objects.filter(is_afgesloten=False).order_by(
                'afstand', 'begin_jaar'))

            deelcomps = (DeelCompetitie.objects.filter(
                laag=LAAG_REGIO,
                competitie__is_afgesloten=False,
                nhb_regio=ver.regio).select_related('competitie'))

            deelcomps_rk = (DeelCompetitie.objects.filter(
                laag=LAAG_RK,
                competitie__is_afgesloten=False,
                nhb_rayon=ver.regio.rayon).select_related('competitie'))

            pks = (DeelcompetitieRonde.objects.filter(
                deelcompetitie__is_afgesloten=False,
                plan__wedstrijden__vereniging=ver).values_list(
                    'plan__wedstrijden', flat=True))
            if CompetitieWedstrijd.objects.filter(pk__in=pks).count() > 0:
                context['heeft_wedstrijden'] = True

        # bepaal de volgorde waarin de kaartjes getoond worden
        # 1 - aanmelden
        # 2 - teams regio aanmelden / aanpassen
        # 3 - teams rk
        # 4 - ingeschreven
        # 5 - wie schiet waar (voor inschrijfmethode 1)
        context['kaartjes'] = kaartjes = list()
        prev_jaar = 0
        prev_afstand = 0
        for comp in comps:
            begin_jaar = comp.begin_jaar
            comp.bepaal_fase()

            if prev_jaar != begin_jaar or prev_afstand != comp.afstand:
                if len(kaartjes) and hasattr(kaartjes[-1], 'heading'):
                    # er waren geen kaartjes voor die competitie - meld dat
                    kaartje = SimpleNamespace()
                    kaartje.geen_kaartjes = True
                    kaartjes.append(kaartje)

                # nieuwe heading aanmaken
                kaartje = SimpleNamespace()
                kaartje.heading = comp.beschrijving
                kaartjes.append(kaartje)

                prev_jaar = begin_jaar
                prev_afstand = comp.afstand

            # 1 - leden aanmelden voor de competitie (niet voor de WL)
            if comp.fase < 'F' and self.rol_nu != Rollen.ROL_WL:
                kaartje = SimpleNamespace()
                kaartje.titel = "Aanmelden"
                kaartje.tekst = 'Leden aanmelden voor de %s.' % comp.beschrijving
                kaartje.url = reverse('CompInschrijven:leden-aanmelden',
                                      kwargs={'comp_pk': comp.pk})
                if comp.afstand == '18':
                    kaartje.img = static('plein/badge_nhb_indoor.png')
                else:
                    kaartje.img = static('plein/badge_nhb_25m1p.png')
                if comp.fase < 'B':
                    kaartje.beschikbaar_vanaf = localize(
                        comp.begin_aanmeldingen)
                kaartjes.append(kaartje)

            for deelcomp in deelcomps:
                if deelcomp.competitie == comp:
                    if deelcomp.regio_organiseert_teamcompetitie and 'E' <= comp.fase <= 'F' and 1 <= deelcomp.huidige_team_ronde <= 7:
                        # team invallers opgeven
                        kaartje = SimpleNamespace(
                            titel="Team Invallers",
                            tekst=
                            "Invallers opgeven voor ronde %s van de regiocompetitie voor de %s."
                            % (deelcomp.huidige_team_ronde, comp.beschrijving),
                            url=reverse('CompRegio:teams-regio-invallers',
                                        kwargs={'deelcomp_pk': deelcomp.pk}),
                            icon='how_to_reg')
                        kaartjes.append(kaartje)
                    else:
                        # 2 - teams aanmaken
                        if deelcomp.regio_organiseert_teamcompetitie and comp.fase <= 'E':
                            kaartje = SimpleNamespace()
                            kaartje.titel = "Teams Regio"
                            kaartje.tekst = 'Verenigingsteams voor de regiocompetitie samenstellen voor de %s.' % comp.beschrijving
                            kaartje.url = reverse(
                                'CompRegio:teams-regio',
                                kwargs={'deelcomp_pk': deelcomp.pk})
                            kaartje.icon = 'gamepad'
                            if comp.fase < 'B':
                                kaartje.beschikbaar_vanaf = localize(
                                    comp.begin_aanmeldingen)
                            kaartjes.append(kaartje)
            # for
            del deelcomp

            # 3 - teams RK
            for deelcomp_rk in deelcomps_rk:
                if deelcomp_rk.competitie == comp:
                    if deelcomp_rk.heeft_deelnemerslijst:
                        if 'J' <= comp.fase <= 'K':
                            # RK voorbereidende fase
                            kaartje = SimpleNamespace()
                            kaartje.titel = "Deelnemers RK"
                            kaartje.tekst = "Sporters van de vereniging aan-/afmelden voor het RK van de %s" % comp.beschrijving
                            kaartje.url = reverse(
                                'CompRayon:lijst-rk-ver',
                                kwargs={'rk_deelcomp_pk': deelcomp_rk.pk})
                            kaartje.icon = 'rule'
                            kaartjes.append(kaartje)

                    if 'E' <= comp.fase <= 'K' and self.rol_nu != Rollen.ROL_WL:
                        kaartje = SimpleNamespace()
                        kaartje.titel = "Teams RK"
                        kaartje.tekst = "Verenigingsteams voor de rayonkampioenschappen samenstellen voor de %s." % comp.beschrijving
                        kaartje.url = reverse(
                            'CompRayon:teams-rk',
                            kwargs={'rk_deelcomp_pk': deelcomp_rk.pk})
                        kaartje.icon = 'api'
                        # niet beschikbaar maken tot een paar weken na de eerste regiowedstrijd
                        vanaf = comp.eerste_wedstrijd + datetime.timedelta(
                            days=settings.COMPETITIES_OPEN_RK_TEAMS_DAYS_AFTER)
                        if datetime.date.today() < vanaf:
                            kaartje.beschikbaar_vanaf = localize(vanaf)
                        kaartjes.append(kaartje)
            # for
            del deelcomp_rk

            for deelcomp in deelcomps:
                if deelcomp.competitie == comp:
                    # 4 - ingeschreven
                    if 'B' <= comp.fase <= 'F':  # vanaf RK fase niet meer tonen
                        kaartje = SimpleNamespace()
                        kaartje.titel = "Ingeschreven"
                        kaartje.tekst = "Overzicht ingeschreven leden voor de %s." % comp.beschrijving
                        kaartje.url = reverse(
                            'CompInschrijven:leden-ingeschreven',
                            kwargs={'deelcomp_pk': deelcomp.pk})
                        if comp.afstand == '18':
                            kaartje.img = static('plein/badge_nhb_indoor.png')
                        else:
                            kaartje.img = static('plein/badge_nhb_25m1p.png')
                        kaartjes.append(kaartje)

                    # 5 - wie schiet waar
                    if deelcomp.inschrijf_methode == INSCHRIJF_METHODE_1 and 'B' <= comp.fase <= 'F':
                        kaartje = SimpleNamespace()
                        kaartje.titel = "Wie schiet waar?"
                        kaartje.tekst = 'Overzicht gekozen wedstrijden voor de %s.' % comp.beschrijving
                        kaartje.url = reverse(
                            'CompRegio:wie-schiet-waar',
                            kwargs={'deelcomp_pk': deelcomp.pk})
                        kaartje.icon = 'gamepad'
                        if comp.fase < 'B':
                            kaartje.beschikbaar_vanaf = localize(
                                comp.begin_aanmeldingen)
                        kaartjes.append(kaartje)
            # for

        # for

        eval_open_taken(self.request)

        menu_dynamics(self.request, context, actief='vereniging')
        return context