def team_mag_spelen(wedstrijd: Wedstrijd, team: Team) -> bool:
    from wedstrijden import teams_met_aantal_wedstrijden_in_week
    """ Het team heeft al het max aantal wedstrijden gespeeld. """
    if team.aantal_wedstrijden() >= max_wedstrijden_per_team:
        return False

    deze_week: int = team.aantal_wedstrijden_in_week(wedstrijd.week)
    """ Het team heeft al 3 wedstrijden gespeeld deze week. """
    if deze_week >= max_wedstrijden_per_week:
        return False
    """ Er zijn al 12 teams die 3 wedstrijden spelen deze week, en dus kan dit team met 2 gespeelde wedstrijden er
    niet nog eentje bij krijgen. Als er meer dan 12 teams zijn die 3 wedstrijden spelen dan moet er een ander team
    zijn wat 0 of 1 wedstrijd speelt die week. """
    if deze_week == 2 and teams_met_aantal_wedstrijden_in_week(
            wedstrijd.week, 3) >= 12:
        return False
    """ Een team mag niet meer dan 2 rondes geen wedstrijd spelen. """
    laatste_ronde = team.laatste_ronde_in_week(wedstrijd.week)
    if laatste_ronde is not None and (wedstrijd.ronde - laatste_ronde) > 2:
        return False
    """ De volgende condities kunnen alleen gecheckt worden als het team dat gecheckt wordt moet worden toegewezen aan
    het tweede team en we dus informatie hebben over de twee teams die tegen elkaar spelen """
    if isinstance(wedstrijd.team_1, Team):
        """ Voorkomen dat twee teams in dezelfde week twee keer tegen elkaar spelen """
        if wedstrijd.team_1.heeft_gespeeld_tegen_in_week(team, wedstrijd.week):
            return False

        al_gespeeld = team.aantal_wedstrijden_tegen_team(wedstrijd.team_1)
        """ Voorkomen dat je meer dan twee keer tegen hetzelfde team speelt in de hele competitie """
        if al_gespeeld >= 2:
            return False
        """ Met 18 te spelen wedstrijden en 14 teams kan je er maar tegen 5 teams 2 keer spelen. 13 wedstrijden
        tegen elk team om 1x te spelen, dat houdt 5 over. Pas nu kunnen we dit checken voor team 1 omdat de kans
        bestaat dat dit team ingedeeld wordt tegen een team waar ze nog niet tegen hebben gespeeld """
        if al_gespeeld == 1:

            if wedstrijd.team_1.aantal_dubbele_wedstrijden >= max_dubbele_wedstrijden:
                return False

            if team.aantal_dubbele_wedstrijden >= max_dubbele_wedstrijden:
                return False
예제 #2
0
def team_mag_spelen(wedstrijd: Wedstrijd, team: Team) -> bool:
    from wedstrijden import heeft_teams_met_lange_pauzes_in_week
    """ Een team kan natuurlijk niet twee wedstrijden op hetzelfde moment spelen. """
    if team.speelt_in_ronde(wedstrijd):
        return False

    # is_vroege_groep: bool = wedstrijd.groep == "A"
    """ Het team heeft al 18 wedstrijden gespeeld. """
    if team.aantal_wedstrijden() >= max_wedstrijden_per_team:
        return False

    deze_week: int = team.aantal_wedstrijden_in_week(wedstrijd.week)
    """ Het team heeft al 3 wedstrijden gespeeld deze week. """
    if deze_week >= 3:
        return False

    # """ Het team heeft al 4 weken gehad waarin het 3 wedstrijden speelden. Om aan de 18 wedstrijden te komen
    # zonder dat er weken tussen zitten met maar 0 of 1 wedstrijden moeten er van de 7 weken 4 zijn met 3
    # wedstrijden en 3 met 2 wedstrijden. """
    # if deze_week == 3 and team.weken_met_aantal_wedstrijden(4) >= 1:
    #     return False
    #
    # """ Er zijn al 8 teams die 3 wedstrijden spelen deze week, en dus kan dit team met 2 gespeelde wedstrijden er
    # niet nog eentje bij krijgen. Als er meer dan 8 teams zijn die 3 wedstrijden spelen dan moet er een ander team
    # zijn wat 0 of 1 wedstrijd speelt die week. """
    # if deze_week == 3 and teams_met_aantal_wedstrijden_in_week(wedstrijd.week, 4) >= 2:
    #     return False

    if heeft_teams_met_lange_pauzes_in_week(wedstrijd.week, wedstrijd.ronde,
                                            2):
        return False

    # if is_vroege_groep and not team_speelt_in_groep(team, wedstrijd):
    #     teams = teams_in_wedstrijden(filter_wedstrijden(lambda w: wedstrijd_is_zelfde_groep_als(wedstrijd, w)))
    #
    #     """ Afhankelijk van de groep (vroeg of laat) is er een limiet aan het aantal teams dat tegelijkertijd
    #     aanwezig mag zijn. In de vroege groep zijn dit 5 teams, in de late groep 10 teams. Als het limiet is bereikt
    #     en dit team zit niet in die groep, dan mag deze niet bij deze wedstrijd worden toegewezen. Hiervoor moet er
    #     uit de teams gekozen worden die reeds in de groep zaten. """
    #     if len(teams) >= 5:
    #         return False
    """ Een team mag niet meer dan 2 rondes geen wedstrijd spelen. """
    laatste_ronde = team.laatste_ronde_in_week(wedstrijd.week)
    if laatste_ronde is not None and (wedstrijd.ronde - laatste_ronde) > 2:
        return False
    """ De volgende condities kunnen alleen gecheckt worden als het team dat gecheckt wordt moet worden toegewezen aan
    het tweede team en we dus informatie hebben over de twee teams die tegen elkaar spelen """
    if wedstrijd.team_1 is not None:
        """ Voorkomen dat twee teams in dezelfde week twee keer tegen elkaar spelen """
        if wedstrijd.team_1.heeft_gespeeld_tegen_in_week(team, wedstrijd.week):
            return False

        al_gespeeld = team.aantal_wedstrijden_tegen_team(wedstrijd.team_1)
        """ Voorkomen dat je meer dan twee keer tegen hetzelfde team speelt in de hele competitie """
        if al_gespeeld >= 2:
            return False
        """ Met 18 te spelen wedstrijden en 14 teams kan je er maar tegen 5 teams 2 keer spelen. 13 wedstrijden
        tegen elk team om 1x te spelen, dat houdt 5 over. Pas nu kunnen we dit checken voor team 1 omdat de kans
        bestaat dat dit team ingedeeld wordt tegen een team waar ze nog niet tegen hebben gespeeld """
        if al_gespeeld == 1:

            if wedstrijd.team_1.aantal_dubbele_wedstrijden >= (
                    max_wedstrijden_per_team - 14) + 1:
                return False

            if team.aantal_dubbele_wedstrijden >= (max_wedstrijden_per_team -
                                                   14) + 1:
                return False