Ejemplo n.º 1
0
    def post(self, request, *args, **kwargs):
        deelcomp = self._get_deelcomp(kwargs['deelcomp_pk'])

        if self.rol_nu == Rollen.ROL_HWL:
            ver = self.functie_nu.nhb_ver

            now = timezone.now()
            einde = datetime.datetime(
                year=deelcomp.einde_teams_aanmaken.year,
                month=deelcomp.einde_teams_aanmaken.month,
                day=deelcomp.einde_teams_aanmaken.day,
                hour=0,
                minute=0,
                second=0)
            einde = timezone.make_aware(einde)
            mag_wijzigen = (now <= einde)
            if not mag_wijzigen:
                raise Http404('Mag niet (meer) wijzigen')
        else:
            # RCL
            ver = None  # wordt later ingevuld

        try:
            team_pk = int(kwargs['team_pk'][:6])  # afkappen voor de veiligheid
        except (ValueError, KeyError):
            raise Http404()

        # default pagina om naar toe te gaan
        if self.rol_nu == Rollen.ROL_HWL:
            url = reverse('CompRegio:teams-regio',
                          kwargs={'deelcomp_pk': deelcomp.pk})
        else:
            url = reverse('CompRegio:regio-teams',
                          kwargs={'deelcomp_pk': deelcomp.pk})

        if team_pk == 0:
            # nieuw team
            volg_nrs = (RegiocompetitieTeam.objects.filter(
                deelcompetitie=deelcomp,
                vereniging=ver).values_list('volg_nr', flat=True))
            volg_nrs = list(volg_nrs)
            volg_nrs.append(0)
            next_nr = max(volg_nrs) + 1

            if len(volg_nrs) > 10:
                # te veel teams
                raise Http404('Maximum van 10 teams is bereikt')

            afkorting = request.POST.get('team_type', '')
            try:
                team_type = TeamType.objects.get(afkorting=afkorting)
            except TeamType.DoesNotExist:
                raise Http404()

            team = RegiocompetitieTeam(deelcompetitie=deelcomp,
                                       vereniging=ver,
                                       volg_nr=next_nr,
                                       team_type=team_type,
                                       team_naam=' ')
            team.save()

            verwijderen = False

            # meteen doorsturen naar de 'koppelen' pagina
            url = reverse('CompRegio:teams-regio-koppelen',
                          kwargs={'team_pk': team.pk})
        else:
            try:
                team = (RegiocompetitieTeam.objects.select_related(
                    'team_type').get(pk=team_pk, deelcompetitie=deelcomp))
            except RegiocompetitieTeam.DoesNotExist:
                raise Http404()

            if self.rol_nu == Rollen.ROL_HWL:
                if team.vereniging != self.functie_nu.nhb_ver:
                    raise Http404('Team is niet van jouw vereniging')

            verwijderen = request.POST.get('verwijderen', None) is not None

            if not verwijderen:
                afkorting = request.POST.get('team_type', '')
                if team.team_type.afkorting != afkorting:
                    try:
                        team_type = TeamType.objects.get(afkorting=afkorting)
                    except TeamType.DoesNotExist:
                        raise Http404()

                    team.team_type = team_type
                    team.aanvangsgemiddelde = 0.0
                    team.klasse = None
                    team.save()

                    # verwijder eventueel gekoppelde sporters bij wijziging team type,
                    # om verkeerde boog typen te voorkomen
                    team.gekoppelde_schutters.clear()

        if not verwijderen:
            team_naam = request.POST.get('team_naam', '')
            team_naam = team_naam.strip()
            if team.team_naam != team_naam:
                if team_naam == '':
                    team_naam = "%s-%s" % (ver.ver_nr, team.volg_nr)

                team.team_naam = team_naam
                team.save()
        else:
            team.delete()

        return HttpResponseRedirect(url)
Ejemplo n.º 2
0
    def maak_inschrijvingen_regio_teamcompetitie(self, afstand, ver_nr):
        """ Schrijf teams in voor de teamcompetitie, voor een specifiek vereniging

            afstand = 18 / 25
            ver_nr = regio_nr * 10 + volgnummer
        """

        ver = NhbVereniging.objects.select_related('regio').get(ver_nr=ver_nr)
        regio_nr = ver.regio.regio_nr

        if afstand == 18:
            deelcomp = self.deelcomp18_regio[regio_nr]
            deelnemers = self.comp18_deelnemers
            deelnemers_team = self.comp18_deelnemers_team
            deelnemers_geen_team = self.comp18_deelnemers_geen_team
            klassen = self.comp18_klassen_team
            regioteams = self.comp18_regioteams
        else:
            deelcomp = self.deelcomp25_regio[regio_nr]
            deelnemers = self.comp25_deelnemers
            deelnemers_team = self.comp25_deelnemers_team
            deelnemers_geen_team = self.comp25_deelnemers_geen_team
            klassen = self.comp25_klassen_team
            regioteams = self.comp25_regioteams

        # verdeel de deelnemers per boogtype
        deelnemers_per_boog = dict()  # [boogtype.afkorting] = list(deelnemer)

        for deelnemer in deelnemers:
            if deelnemer.inschrijf_voorkeur_team:
                # print('deelnemer: %s (indiv ag: %s, team ag: %s)' % (deelnemer, deelnemer.ag_voor_indiv, deelnemer.ag_voor_team))
                afkorting = deelnemer.sporterboog.boogtype.afkorting
                try:
                    deelnemers_per_boog[afkorting].append(deelnemer)
                except KeyError:
                    deelnemers_per_boog[afkorting] = [deelnemer]

                deelnemers_team.append(deelnemer)
            else:
                deelnemers_geen_team.append(deelnemer)
        # for

        # zet 1x BB en 1x LB in een recurve team
        deelnemers_per_boog['R'].append(deelnemers_per_boog['BB'].pop(0))
        deelnemers_per_boog['R'].append(deelnemers_per_boog['LB'].pop(0))

        bulk = list()
        for afkorting, deelnemers in deelnemers_per_boog.items():

            # alle teams moeten in een klasse (maakt niet veel uit welke)
            klasse = klassen[afkorting][0]

            aantal = len(deelnemers)
            while aantal > 0:
                aantal -= 4
                next_nr = len(bulk) + 1

                team = RegiocompetitieTeam(
                    deelcompetitie=deelcomp,
                    vereniging=ver,
                    volg_nr=next_nr,
                    team_type=self.afkorting2teamtype[afkorting],
                    team_naam='%s-%s-%s' % (ver_nr, next_nr, afkorting),
                    klasse=klasse)
                bulk.append(team)
            # while
        # for

        RegiocompetitieTeam.objects.bulk_create(bulk)

        # koppel de sporters aan het team
        for team in (
                RegiocompetitieTeam.objects.select_related('team_type').filter(
                    deelcompetitie=deelcomp, vereniging=ver)):

            afkorting = team.team_type.afkorting

            # selecteer de volgende 4 sporters voor dit team
            deelnemers = deelnemers_per_boog[afkorting][:4]
            deelnemers_per_boog[afkorting] = deelnemers_per_boog[afkorting][
                len(deelnemers):]

            # bereken de team sterkte
            team.aanvangsgemiddelde = sum([
                deelnemer.ag_voor_team for deelnemer in deelnemers
            ])  # TODO: top 3
            team.save(update_fields=['aanvangsgemiddelde'])

            team.gekoppelde_schutters.set(deelnemers)

            regioteams.append(team)
Ejemplo n.º 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)

        if self.rol_nu == Rollen.ROL_RCL:
            raise Http404('Verkeerde rol')

        # zoek de deelcompetitie waar de regio teams voor in kunnen stellen
        context['deelcomp'] = deelcomp = self._get_deelcomp(
            kwargs['deelcomp_pk'])
        ver = self.functie_nu.nhb_ver

        now = timezone.now()
        einde = datetime.datetime(year=deelcomp.einde_teams_aanmaken.year,
                                  month=deelcomp.einde_teams_aanmaken.month,
                                  day=deelcomp.einde_teams_aanmaken.day,
                                  hour=0,
                                  minute=0,
                                  second=0)
        einde = timezone.make_aware(einde)
        mag_wijzigen = (now <= einde)

        teamtype_default = None
        teams = TeamType.objects.order_by('volgorde')
        for obj in teams:
            obj.choice_name = obj.afkorting
            if obj.afkorting == 'R':
                teamtype_default = obj
        # for
        context['opt_team_type'] = teams

        try:
            team_pk = int(kwargs['team_pk'][:6])  # afkappen voor de veiligheid
            team = (RegiocompetitieTeam.objects.get(pk=team_pk,
                                                    deelcompetitie=deelcomp,
                                                    vereniging=ver))
        except (ValueError, RegiocompetitieTeam.DoesNotExist):
            raise Http404('Team niet gevonden of niet van jouw vereniging')
        except KeyError:
            # dit is een nieuw team
            if not mag_wijzigen:
                raise Http404('Kan geen nieuw team meer aanmaken')

            team = RegiocompetitieTeam(pk=0,
                                       vereniging=self.functie_nu.nhb_ver,
                                       team_type=teamtype_default)

        context['team'] = team

        for obj in teams:
            obj.actief = team.team_type == obj
        # for

        if mag_wijzigen:
            context['url_opslaan'] = reverse('CompRegio:teams-regio-wijzig',
                                             kwargs={
                                                 'deelcomp_pk': deelcomp.pk,
                                                 'team_pk': team.pk
                                             })

            if team.pk > 0:
                context['url_verwijderen'] = context['url_opslaan']
        else:
            context['readonly'] = True

        menu_dynamics(self.request, context, actief='vereniging')
        return context
Ejemplo n.º 4
0
    def test_regio_teams(self):
        # RCL ziet teams
        self.e2e_login_and_pass_otp(self.account_rcl112_18)
        self.e2e_wissel_naar_functie(self.functie_rcl112_18)

        team_r = TeamType.objects.get(afkorting='R')
        klasse_r_ere = CompetitieKlasse.objects.get(competitie=self.comp_18,
                                                    team__volgorde=10,
                                                    is_voor_teams_rk_bk=False)
        # create two complete teams
        RegiocompetitieTeam(deelcompetitie=self.deelcomp_regio112_18,
                            vereniging=self.nhbver_112,
                            volg_nr=1,
                            team_type=team_r,
                            team_naam='Test team 1',
                            aanvangsgemiddelde=25.0,
                            klasse=klasse_r_ere).save()

        RegiocompetitieTeam(deelcompetitie=self.deelcomp_regio112_18,
                            vereniging=self.nhbver_112,
                            volg_nr=2,
                            team_type=team_r,
                            team_naam='Test team 2',
                            aanvangsgemiddelde=24.5,
                            klasse=klasse_r_ere).save()

        # create a partial team
        RegiocompetitieTeam(deelcompetitie=self.deelcomp_regio112_18,
                            vereniging=self.nhbver_112,
                            volg_nr=3,
                            team_type=team_r,
                            team_naam='Test team 2',
                            aanvangsgemiddelde=0.0).save()

        temp_team = RegiocompetitieTeam(
            deelcompetitie=self.deelcomp_regio112_18,
            vereniging=self.nhbver_112,
            volg_nr=3,
            team_type=team_r,
            team_naam='',
            aanvangsgemiddelde=0.0)
        self.assertTrue(temp_team.maak_team_naam_kort() != '')

        url = self.url_regio_teams % self.deelcomp_regio112_18.pk

        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_html_ok(resp)
        self.assert_template_used(
            resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl'))

        # verkeerde deelcomp
        resp = self.client.get(self.url_regio_teams %
                               self.deelcomp_regio101_18.pk)
        self.assert403(resp)

        # niet bestaande deelcomp
        resp = self.client.get(self.url_regio_teams % 999999)
        self.assert404(resp)  # 404 = Not allowed

        # logout

        self.client.logout()
        resp = self.client.get(url)
        self.assert403(resp)

        # 25m

        self.e2e_login_and_pass_otp(self.account_rcl101_25)
        self.e2e_wissel_naar_functie(self.functie_rcl101_25)

        url = self.url_regio_teams % self.deelcomp_regio101_25.pk
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK

        # BB
        self.e2e_login_and_pass_otp(self.testdata.account_admin)
        self.e2e_wisselnaarrol_bb()

        url = self.url_regio_teams_alle % (self.comp_18.pk, 'auto')
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_html_ok(resp)
        self.assert_template_used(
            resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl'))

        url = self.url_regio_teams_alle % (self.comp_18.pk, 'alle')
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_html_ok(resp)
        self.assert_template_used(
            resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl'))

        url = self.url_regio_teams_alle % (self.comp_18.pk, '3')  # rayon_nr
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_html_ok(resp)
        self.assert_template_used(
            resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl'))

        self.e2e_wissel_naar_functie(self.functie_rko1_18)

        url = self.url_regio_teams_alle % (self.comp_18.pk, 'auto')
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_html_ok(resp)
        self.assert_template_used(
            resp, ('compregio/rcl-teams.dtl', 'plein/site_layout.dtl'))

        url = self.url_regio_teams_alle % (999999, 'auto')
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Competitie niet gevonden')

        url = self.url_regio_teams_alle % (self.comp_18.pk, '999999'
                                           )  # rayon_nr
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Selectie wordt niet ondersteund')

        self.e2e_wissel_naar_functie(self.functie_rcl101_18)

        url = self.url_regio_teams_alle % (self.comp_18.pk, 'auto')
        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assert404(resp, 'Selectie wordt niet ondersteund')
Ejemplo n.º 5
0
    def _maak_teams(self, deelcomp):
        """ schrijf een aantal teams in """

        teamtype_r = TeamType.objects.get(afkorting='R')
        klasse_r_ere = CompetitieKlasse.objects.get(
            competitie=deelcomp.competitie,
            team__volgorde=10,
            is_voor_teams_rk_bk=False)  # zie WKL_TEAM in BasisTypen migrations

        team1 = RegiocompetitieTeam(deelcompetitie=deelcomp,
                                    vereniging=self.nhbver_112,
                                    volg_nr=1,
                                    team_type=teamtype_r,
                                    team_naam='Test team 1',
                                    aanvangsgemiddelde=20.0,
                                    klasse=klasse_r_ere)
        team1.save()

        team2 = RegiocompetitieTeam(deelcompetitie=deelcomp,
                                    vereniging=self.nhbver_112,
                                    volg_nr=1,
                                    team_type=teamtype_r,
                                    team_naam='Test team 2',
                                    aanvangsgemiddelde=21.123,
                                    klasse=klasse_r_ere)
        team2.save()

        team3 = RegiocompetitieTeam(deelcompetitie=deelcomp,
                                    vereniging=self.nhbver_112,
                                    volg_nr=1,
                                    team_type=teamtype_r,
                                    team_naam='Test team 3',
                                    aanvangsgemiddelde=18.042,
                                    klasse=klasse_r_ere)
        team3.save()

        # initiële schutters in het team
        # gekoppelde_schutters = models.ManyToManyField(RegioCompetitieSchutterBoog,
        #                                              blank=True)  # mag leeg zijn

        poule = RegiocompetitieTeamPoule(deelcompetitie=deelcomp,
                                         beschrijving='Test poule')
        poule.save()
        poule.teams.add(team1)
        poule.teams.add(team2)
        poule.teams.add(team3)
Ejemplo n.º 6
0
    def setUp(self):
        """ initialisatie van de test case """
        regio_111 = NhbRegio.objects.get(pk=111)

        boog_r = BoogType.objects.get(afkorting='R')
        boog_bb = BoogType.objects.get(afkorting='BB')
        boog_ib = BoogType.objects.get(afkorting='IB')

        teamtype_r = TeamType.objects.get(afkorting='R')

        datum = datetime.date(year=2000, month=1, day=1)

        comp = Competitie(
                    beschrijving='Test',
                    afstand='18',
                    begin_jaar=2000,
                    uiterste_datum_lid=datum,
                    begin_aanmeldingen=datum,
                    einde_aanmeldingen=datum,
                    einde_teamvorming=datum,
                    eerste_wedstrijd=datum,
                    laatst_mogelijke_wedstrijd=datum,
                    datum_klassengrenzen_rk_bk_teams=datum,
                    rk_eerste_wedstrijd=datum,
                    rk_laatste_wedstrijd=datum,
                    bk_eerste_wedstrijd=datum,
                    bk_laatste_wedstrijd=datum)
        comp.save()
        self.comp = comp

        deelcomp = DeelCompetitie(
                            competitie=comp,
                            laag=LAAG_REGIO,
                            nhb_regio=regio_111)
        deelcomp.save()

        indiv_r1 = IndivWedstrijdklasse.objects.filter(boogtype=boog_r)[1]
        indiv_r2 = IndivWedstrijdklasse.objects.filter(boogtype=boog_r)[2]
        indiv_ib = IndivWedstrijdklasse.objects.filter(boogtype=boog_ib)[0]
        indiv_bb = IndivWedstrijdklasse.objects.filter(boogtype=boog_bb)[0]

        klasse_r1 = CompetitieKlasse(
                        competitie=comp,
                        indiv=indiv_r1,
                        min_ag=2.0)
        klasse_r1.save()

        CompetitieKlasse(
                competitie=comp,
                indiv=indiv_r2,
                min_ag=1.0).save()

        CompetitieKlasse(
                competitie=comp,
                indiv=indiv_bb,
                min_ag=0.0).save()

        klasse_ib = CompetitieKlasse(
                        competitie=comp,
                        indiv=indiv_ib,
                        min_ag=0.0)
        klasse_ib.save()

        # maak een test vereniging
        ver = NhbVereniging()
        ver.naam = "Grote Club met een naam langer dan 30 tekens"
        ver.ver_nr = "1000"
        ver.regio = regio_111
        ver.save()

        # maak een test lid aan
        sporter = Sporter()
        sporter.lid_nr = 123456
        sporter.geslacht = "M"
        sporter.voornaam = "Ramon"
        sporter.achternaam = "de Tester"
        sporter.geboorte_datum = datetime.date(year=1972, month=3, day=4)
        sporter.sinds_datum = datetime.date(year=2010, month=11, day=12)
        sporter.bij_vereniging = ver
        sporter.account = None
        sporter.email = ''
        sporter.save()
        self.sporter = sporter

        sporterboog_r = SporterBoog(
                            sporter=sporter,
                            boogtype=boog_r,
                            voor_wedstrijd=True)
        sporterboog_r.save()
        self.sporterboog_r = sporterboog_r

        sporterboog_ib = SporterBoog(
                            sporter=sporter,
                            boogtype=boog_ib,
                            voor_wedstrijd=False)
        sporterboog_ib.save()
        self.sporterboog_ib = sporterboog_ib

        sporterboog_bb = SporterBoog(
                            sporter=sporter,
                            boogtype=boog_bb,
                            voor_wedstrijd=False)
        sporterboog_bb.save()
        self.sporterboog_bb = sporterboog_bb

        deelnemer_r = RegioCompetitieSchutterBoog(
                            deelcompetitie=deelcomp,
                            sporterboog=sporterboog_r,
                            bij_vereniging=ver,
                            klasse=klasse_r1,
                            aantal_scores=1)
        deelnemer_r.save()
        self.deelnemer_r = deelnemer_r

        deelnemer_ib = RegioCompetitieSchutterBoog(
                            deelcompetitie=deelcomp,
                            sporterboog=sporterboog_ib,
                            bij_vereniging=ver,
                            klasse=klasse_ib,
                            aantal_scores=2)
        deelnemer_ib.save()
        self.deelnemer_ib = deelnemer_ib

        team = RegiocompetitieTeam(
                            deelcompetitie=deelcomp,
                            vereniging=ver,
                            volg_nr=1,
                            team_type=teamtype_r,
                            team_naam='Test')
        team.save()
        self.team = team

        team.gekoppelde_schutters.add(deelnemer_ib)
Ejemplo n.º 7
0
    def test_poules_teams(self):
        self.e2e_login_and_pass_otp(self.account_rcl112_18)
        self.e2e_wissel_naar_functie(self.functie_rcl112_18)

        # maak een poule aan
        deelcomp = DeelCompetitie.objects.get(competitie=self.comp_18, functie=self.functie_rcl112_18)

        # tot en met fase D mag alles nog
        comp = deelcomp.competitie
        zet_competitie_fase(comp, 'B')

        url = self.url_regio_poules % deelcomp.pk
        with self.assert_max_queries(20):
            resp = self.client.post(url)
        self.assert_is_redirect(resp, url)
        self.assertEqual(1, RegiocompetitieTeamPoule.objects.count())
        poule = RegiocompetitieTeamPoule.objects.all()[0]

        # maak 9 teams aan
        type_r = TeamType.objects.get(afkorting='R')
        klasse_r_ere = CompetitieKlasse.objects.filter(team__team_type=type_r).order_by('team__volgorde')[0]
        for lp in range(9):
            # team zonder sporters maar wel in een klasse is genoeg voor een poule
            RegiocompetitieTeam(
                    deelcompetitie=deelcomp,
                    vereniging=self.nhbver_112,
                    volg_nr=lp + 1,
                    team_type=type_r,
                    team_naam='Recurve Testers %s' % (lp + 1),
                    klasse=klasse_r_ere).save()
        # for
        team_pks = list(RegiocompetitieTeam.objects.values_list('pk', flat=True))

        # maak een compound team aan
        type_c = TeamType.objects.get(afkorting='C')
        klasse_c_ere = CompetitieKlasse.objects.filter(team__team_type=type_c).order_by('team__volgorde')[0]
        team_c = RegiocompetitieTeam(
                    deelcompetitie=deelcomp,
                    vereniging=self.nhbver_112,
                    volg_nr=1,
                    team_type=type_c,
                    team_naam='Compound Testers 9',
                    klasse=klasse_c_ere)
        team_c.save()

        # koppel 5 teams aan de poule
        url = self.url_wijzig_poule % poule.pk
        params = dict()
        for pk in team_pks[:5]:
            params['team_%s' % pk] = 1
        with self.assert_max_queries(20):
            resp = self.client.post(url, params)
        self.assert_is_redirect_not_plein(resp)
        poule = RegiocompetitieTeamPoule.objects.prefetch_related('teams').get(pk=poule.pk)
        self.assertEqual(5, poule.teams.count())

        with self.assert_max_queries(20):
            resp = self.client.get(url)
        self.assertEqual(resp.status_code, 200)  # 200 = OK
        self.assert_html_ok(resp)
        self.assert_template_used(resp, ('compregio/wijzig-poule.dtl', 'plein/site_layout.dtl'))

        # compound team bij recurve-meerderheid wordt niet geaccepteerd (silently ignored)
        params['team_%s' % team_c.pk] = 1
        with self.assert_max_queries(20):
            resp = self.client.post(url, params)
        self.assert_is_redirect_not_plein(resp)
        poule = RegiocompetitieTeamPoule.objects.prefetch_related('teams').get(pk=poule.pk)
        self.assertEqual(5, poule.teams.count())

        # koppel 9 teams aan de poule
        self.assertEqual(9, len(team_pks))
        params = dict()
        for pk in team_pks:
            params['team_%s' % pk] = 1
        with self.assert_max_queries(20):
            resp = self.client.post(url, params)
        self.assert_is_redirect_not_plein(resp)
        poule = RegiocompetitieTeamPoule.objects.prefetch_related('teams').get(pk=poule.pk)
        self.assertEqual(8, poule.teams.count())