Example #1
0
def create_league(request,
                  universe_id,
                  name,
                  level,
                  nbr_div=0):
        universe = Universe.objects.get(id=universe_id)
        year = Year.objects.get(universe=universe,current_year=True)
        universe_teams = Team.objects.filter(universe=universe)
        placed_teams = LeagueMembership.objects.filter(universe=universe,
                                                       year=year)
        available_teams = list(set(universe_teams) - set(placed_teams))
        available_teams = sorted(available_teams,key=operator.attrgetter('city.division'))
        divisions = create_divisions(available_teams, int(nbr_div))
        
        nbr_conf = len(divisions) / 2
        conferences = [[] for x in xrange(nbr_conf)]
        c = 0
        for division in divisions:
                conferences[c].append(division)
                if c+1 == len(conferences):
                    c = 0
                else:
                    c += 1
        
        league = League(universe=universe,
                   name=name,
                   level=level)
        league.save()
        
        conf_nbr=0
        for conference in conferences:
                div_nbr=0
                for division in conference:
                        for team in division:
                                lm = LeagueMembership(universe=universe,
                                                      year=year,
                                                      league=league,
                                                      team=team,
                                                      conference=conf_nbr,
                                                      division=div_nbr)
                                lm.save()
                        div_nbr+=1
                conf_nbr+=1

        league.number_playoff_teams = randint((div_nbr+1),(len(available_teams)/2))
        league.save()

        draft_players(universe)        
        create_schedule(league)
        play_season(league)
        play_playoffs(league)
        
        return HttpResponse("Created league %s." % name)
Example #2
0
def edit_game(request, game_id):

    game = Game.objects.get(id=game_id)
    league_list = League.objects.all()
    member_list = Member.objects.all()
    batting_query = Batting.objects.filter(game=game)
    pitching_query = Pitching.objects.filter(game=game)

    if request.method != "POST":
        game.date = unicode(game.date)
        away_name = game.away_name.encode('utf8')
        home_name = game.home_name.encode('utf8')
        game.away_scores = CommaSeparatedString_to_IntegerArray(
            game.away_scores)
        game.home_scores = CommaSeparatedString_to_IntegerArray(
            game.home_scores)
        message = ""
        warning = ""

        record_table = text_to_table(game.record.encode('utf8'))

        if (away_name.upper() == 'RB'):
            away_table = record_table
            home_table = []
        else:
            away_table = []
            home_table = record_table

        game_record, warning = parse_game_record(away_name, game.away_scores, away_table, \
                                                  home_name, game.home_scores, home_table)

        if (away_name.upper() == 'RB'):
            team = game_record.away
        else:
            team = game_record.home

        batting_list = []
        for batting in batting_query:
            batting_list.append(batting)

        pitching_list = []
        for pitching in pitching_query:
            pitching_list.append(pitching)

        # add rows for changing pitchers
        N = len(pitching_list)
        for i in range(5 - N):
            pitching_list.append(Pitching())

        context = {
            'league_list': league_list,
            'game': game,
            'warning': warning,
            'message': message,
            'game_record': game_record,
            'team': team,
            'member_list': member_list,
            'batting_list': batting_list,
            'pitching_list': pitching_list
        }

        return render(request, 'team/edit_game.html', context)

    else:
        # POST

        league_id = request.POST["league_id"]
        game.league = League.objects.get(id=league_id)
        game.date = request.POST["date"]
        game.location = request.POST["location"]
        game.record = request.POST["record_text"]
        game.away_name = request.POST["away_name"]
        game.home_name = request.POST["home_name"]
        game.away_scores = gather_team_scores_from_web(request, 'away')
        game.home_scores = gather_team_scores_from_web(request, 'home')

        print game.home_scores
        message = ""
        warning = ""
        game_record = None
        team = None

        if 'add-new-league-btn' in request.POST:
            print("add new league!")
            league_name = request.POST["new-league-name"]

            if league_name != None:

                league = League.objects.filter(name=league_name)
                if (league.exists()):
                    warning = "League name %s already exists." % league_name
                else:
                    league = League(name=league_name)
                    league.save()
                    message = 'Add new league: %s' % league_name

            league_list = League.objects.all()

        if 'add-new-member-btn' in request.POST:
            print("add new member!")
            member_name = request.POST["new-member-name"]
            member_number = int(request.POST["new-member-number"])

            if member_name != None:

                member = Member.objects.filter(name=member_name)
                if (member.exists()):
                    warning = "Member %s already exists." % member_name
                else:
                    member = Member(name=member_name, number=member_number)
                    member.save()
                    message = 'Add new member: %s(%d)' % (member_name,
                                                          member_number)

            member_list = Member.objects.all()

        if ('preview-btn' in request.POST) or ('save-game-btn'
                                               in request.POST):

            game.league = League.objects.get(id=league_id)
            record_table = text_to_table(game.record.encode('utf8'))

            away_name = game.away_name.encode('utf8')
            home_name = game.home_name.encode('utf8')

            if (away_name.upper() == 'RB'):
                away_table = record_table
                home_table = []
            else:
                away_table = []
                home_table = record_table

            game_record, warning = parse_game_record(away_name, game.away_scores, away_table, \
                                                      home_name, game.home_scores, home_table)

            game.away_R = game_record.away.R
            game.away_H = game_record.away.H
            game.away_E = game_record.away.E
            game.home_R = game_record.home.R
            game.home_H = game_record.home.H
            game.home_E = game_record.home.E

            if (warning == ""):
                message = "Preview record table!"

                game_record, team = extract_single_team_data(game_record, 'RB')

                batting_list = []
                for batter in team.batters:
                    batting = Batting()
                    for play in batting_query:
                        if batter.name.decode('utf8') == play.member.name:
                            batting = play
                            break

                    batting.member = Member.objects.get(
                        name=batter.name.decode('utf8'))
                    batting.game = game
                    batting.order = batter.order
                    batting.pa = batter.PA
                    batting.single = batter.B1
                    batting.double = batter.B2
                    batting.triple = batter.B3
                    batting.hr = batter.HR
                    batting.rbi = batter.RBI
                    batting.run = batter.RUN
                    batting.bb = batter.BB
                    batting.k = batter.K
                    batting.sf = batter.SF
                    batting.field = batter.pos

                    batting_list.append(batting)

                # DO NOT modify pitching query with team.pitchers
                pitching_list = []
                for pitching in pitching_query:
                    pitching_list.append(pitching)

                # add rows for changing pitchers
                N = len(pitching_list)
                for i in range(5 - N):
                    pitching_list.append(Pitching())

                if 'save-game-btn' in request.POST:

                    # create and save new Game object
                    game.away_scores = IntegerArray_to_CommaSeparatedString(
                        game.away_scores)
                    game.home_scores = IntegerArray_to_CommaSeparatedString(
                        game.home_scores)
                    game.save()

                    nBatter = len(batting_list)
                    for i in range(nBatter):
                        batting = batting_list[i]
                        member_id = int(
                            request.POST.get("batting_%d_id" % (i + 1), ""))

                        if (member_id != 0):
                            batting.member = Member.objects.get(id=member_id)
                            batting.game = game
                            batting.save()

                    nPitcher = len(pitching_list)
                    for i in range(nPitcher):
                        pitching = pitching_list[i]
                        member_id = int(
                            request.POST.get("pitching_%d_id" % (i + 1), ""))

                        if (member_id != 0):
                            pitching.member = Member.objects.get(id=member_id)
                            pitching.game = game
                            pitching.outs = int(
                                request.POST.get("pitching_%d_outs" % (i + 1),
                                                 ""))
                            pitching.pa = int(
                                request.POST.get("pitching_%d_pa" % (i + 1),
                                                 ""))
                            pitching.hit = int(
                                request.POST.get("pitching_%d_hit" % (i + 1),
                                                 ""))
                            pitching.hr = int(
                                request.POST.get("pitching_%d_hr" % (i + 1),
                                                 ""))
                            pitching.bb = int(
                                request.POST.get("pitching_%d_bb" % (i + 1),
                                                 ""))
                            pitching.k = int(
                                request.POST.get("pitching_%d_k" % (i + 1),
                                                 ""))
                            pitching.run = int(
                                request.POST.get("pitching_%d_run" % (i + 1),
                                                 ""))
                            pitching.er = int(
                                request.POST.get("pitching_%d_er" % (i + 1),
                                                 ""))
                            pitching.go = int(
                                request.POST.get("pitching_%d_go" % (i + 1),
                                                 ""))
                            pitching.fo = int(
                                request.POST.get("pitching_%d_fo" % (i + 1),
                                                 ""))

                            win = request.POST.get("pitching_%d_win" % (i + 1),
                                                   "")
                            lose = request.POST.get(
                                "pitching_%d_lose" % (i + 1), "")

                            if (win != ''):
                                pitching.win = 1
                            else:
                                pitching.win = 0

                            if (lose != ''):
                                pitching.lose = 1
                            else:
                                pitching.lose = 0

                            pitching.save()

                    return redirect("/game/" + str(game.id))

        context = {
            'league_list': league_list,
            'game': game,
            'warning': warning,
            'message': message,
            'game_record': game_record,
            'team': team,
            'member_list': member_list,
            'batting_list': batting_list,
            'pitching_list': pitching_list
        }

        return render(request, 'team/edit_game.html', context)
Example #3
0
def add_or_edit_league(request, league=None):
    existing = ""
    if league:
        league = League.objects.get(pk=league)
    if request.method == "POST":
        if league:
            form = LeagueForm(request.POST)
        else:
            form = NewLeagueForm(request.POST)
        if form.is_valid():
            if form.cleaned_data['join_leagues']:
                for league in form.cleaned_data['join_leagues']:
                    # apply to join these leagues
                    application = LeagueJoinStates.joined\
                                  .apply_to_league(league,
                                                   request.user)
                url = reverse('logged_in')
                return redirect(url)
            else:
                could_join = Set([])
                applied = Set([])
                invited = Set([])
                # first, build three lists (applied, invited,
                # could_join) of leagues that people we're inviting
                # are already in
                for row in form.members.cleaned_data:
                    if row:
                        try:
                            member = CustomUser.objects.get(email=row['email'])
                        except CustomUser.DoesNotExist:
                            continue

                        user = request.user
                        leagues = member.leagues_by_state(STATE_ACCEPTED)
                        # don't include leagues we've already decided
                        # not to join (or have been rejected from)
                        leagues = leagues.exclude(
                            leaguejoinstates__state=STATE_REJECTED,
                            #leaguejoinstates__state=STATE_DECLINED,
                            leaguejoinstates__user=user)
                        if leagues:
                            applied.update(
                                leagues.filter(
                                    leaguejoinstates__state=STATE_APPLIED,
                                    leaguejoinstates__user=user))
                            invited.update(
                                leagues.filter(
                                    leaguejoinstates__state=STATE_INVITED,
                                    leaguejoinstates__user=user))
                            could_join.update(
                                leagues.exclude(leaguejoinstates__user=user))
                if not request.POST.get('yes_really', '')\
                       and (could_join or applied or invited):
                    # present the user with a choice to join other
                    # leagues instead of making a new one
                    #
                    # XXX this is horrendous but I don't know how to
                    # do it better
                    choices = [(x.id, x.name) for x in could_join]
                    form.fields['join_leagues'].choices = choices
                    return locals()
                else:
                    # create a new league and invite people to join it
                    if not league:
                        league = League(name=form.cleaned_data['name'],
                                        owner=request.user)
                        league.save()
                        # the current user will be a member, of course
                        application = LeagueJoinStates(league=league,
                                                       user=request.user,
                                                       state=STATE_ACCEPTED)
                        application.save()
                    for row in form.members.cleaned_data:
                        if not row:
                            continue
                        email = row['email']
                        try:
                            member = CustomUser.objects.get(email=email)
                        except CustomUser.DoesNotExist:
                            create_user = CustomUser.objects.create_user
                            member = create_user(username=email, email=email)
                            member.save()
                        try:
                            profile =  RegistrationProfile.objects\
                                      .filter(user=member).get()
                        except RegistrationProfile.DoesNotExist:
                            profile = RegistrationProfile.objects\
                                      .create_profile(member, email=False)
                        invite = LeagueJoinStates.joined\
                                 .invite_user(league, member)
                    url = reverse('logged_in')
                    return redirect(url)

    else:
        if league:
            form = LeagueForm()
        else:
            form = NewLeagueForm()
    return locals()
Example #4
0
def add_game(request):

    league_list = League.objects.all()
    member_list = Member.objects.all()
    game = Game()
    batting_list = []
    pitching_list = []

    if request.method != "POST":
        game.date = None
        game.location = ""
        game.away_name = ""
        game.away_scores = [0] * 7
        game.home_name = ""
        game.home_scores = [0] * 7
        game.record = ""
        message = ""
        warning = ""

        context = {
            'league_list': league_list,
            'game': game,
            'warning': warning,
            'message': message
        }

        return render(request, 'team/add_game.html', context)

    else:

        league_id = request.POST["league_id"]
        game.league = League.objects.get(id=league_id)
        game.date = request.POST["date"]
        game.location = request.POST["location"]
        game.record = request.POST["record_text"]
        game.away_name = request.POST["away_name"]
        game.home_name = request.POST["home_name"]
        game.away_scores = gather_team_scores_from_web(request, 'away')
        game.home_scores = gather_team_scores_from_web(request, 'home')

        message = ""
        warning = ""
        game_record = None
        team = None

        if 'add-new-league-btn' in request.POST:
            print("add new league!")
            league_name = request.POST["new-league-name"]

            if league_name != None and league_name != "":

                league = League.objects.filter(name=league_name)
                if (league.exists()):
                    warning = "League name %s already exists." % league_name
                else:
                    league = League(name=league_name)
                    league.save()
                    message = 'Add new league: %s' % league_name

            league_list = League.objects.all()

        if 'add-new-member-btn' in request.POST:
            print("add new member!")
            member_name = request.POST["new-member-name"]
            member_number = int(request.POST["new-member-number"])

            if member_name != None:

                member = Member.objects.filter(name=member_name)
                if (member.exists()):
                    warning = "Member %s already exists." % member_name
                else:
                    member = Member(name=member_name, number=member_number)
                    member.save()
                    message = 'Add new member: %s(%d)' % (member_name,
                                                          member_number)

            member_list = Member.objects.all()

        if ('preview-btn' in request.POST) or ('save-game-btn'
                                               in request.POST):

            game.league = League.objects.get(id=league_id)
            record_table = text_to_table(game.record.encode('utf8'))

            away_name = game.away_name.encode('utf8')
            home_name = game.home_name.encode('utf8')

            if (away_name.upper() == 'RB'):
                away_table = record_table
                home_table = []
            else:
                away_table = []
                home_table = record_table

            game_record, warning = parse_game_record(away_name, game.away_scores, away_table, \
                                                      home_name, game.home_scores, home_table)

            game.away_R = game_record.away.R
            game.away_H = game_record.away.H
            game.away_E = game_record.away.E
            game.home_R = game_record.home.R
            game.home_H = game_record.home.H
            game.home_E = game_record.home.E

            if (warning == ""):
                message = "Preview record table!"

                game_record, team = extract_single_team_data(game_record, 'RB')

                # create and save new Batting object
                nBatter = len(team.batters)
                batting_list = []

                for i in range(nBatter):
                    batting = Batting()
                    batting.game = game
                    batting.order = team.batters[i].order
                    batting.pa = team.batters[i].PA
                    batting.single = team.batters[i].B1
                    batting.double = team.batters[i].B2
                    batting.triple = team.batters[i].B3
                    batting.hr = team.batters[i].HR
                    batting.rbi = team.batters[i].RBI
                    batting.run = team.batters[i].RUN
                    batting.bb = team.batters[i].BB
                    batting.k = team.batters[i].K
                    batting.sf = team.batters[i].SF
                    batting.field = team.batters[i].pos
                    try:
                        batting.member = Member.objects.get(
                            name=team.batters[i].name.decode('utf8'))
                    except Member.DoesNotExist:
                        warning = "member name %s does not exist." % team.batters[
                            i].name
                        break

                    batting_list.append(batting)

                # create and save new Batting object
                nPitcher = len(team.pitchers)
                pitching_list = []

                for i in range(nPitcher):
                    pitching = Pitching()
                    pitching.game = game
                    pitching.order = i
                    pitching.outs = team.pitchers[i].OUT
                    pitching.pa = team.pitchers[i].TBF
                    pitching.hit = team.pitchers[i].H
                    pitching.hr = team.pitchers[i].HR
                    pitching.bb = team.pitchers[i].BB
                    pitching.k = team.pitchers[i].K
                    pitching.run = team.pitchers[i].RUN
                    pitching.er = team.pitchers[i].ER
                    pitching.go = team.pitchers[i].GO
                    pitching.fo = team.pitchers[i].FO
                    pitching.win = team.pitchers[i].WIN
                    pitching.lose = team.pitchers[i].LOSE
                    try:
                        pitching.member = Member.objects.get(
                            name=team.pitchers[i].name.decode('utf8'))
                    except Member.DoesNotExist:
                        warning = "member name %s does not exist." % team.pitchers[
                            i].name
                        break

                    pitching_list.append(pitching)

                # add rows for changing pitchers
                N = len(pitching_list)
                for i in range(5 - N):
                    pitching_list.append(Pitching())

                if 'save-game-btn' in request.POST:

                    # create and save new Game object
                    game.away_scores = IntegerArray_to_CommaSeparatedString(
                        game.away_scores)
                    game.home_scores = IntegerArray_to_CommaSeparatedString(
                        game.home_scores)
                    game.save()

                    nBatter = len(batting_list)
                    for i in range(nBatter):
                        batting = batting_list[i]
                        member_id = int(
                            request.POST.get("batting_%d_id" % (i + 1), ""))

                        if (member_id != 0):
                            batting.member = Member.objects.get(id=member_id)
                            batting.game = game
                            batting.save()

                    nPitcher = len(pitching_list)
                    for i in range(nPitcher):
                        pitching = pitching_list[i]
                        member_id = int(
                            request.POST.get("pitching_%d_id" % (i + 1), ""))

                        if (member_id != 0):
                            pitching.member = Member.objects.get(id=member_id)
                            pitching.game = game
                            pitching.outs = int(
                                request.POST.get("pitching_%d_outs" % (i + 1),
                                                 ""))
                            pitching.pa = int(
                                request.POST.get("pitching_%d_pa" % (i + 1),
                                                 ""))
                            pitching.hit = int(
                                request.POST.get("pitching_%d_hit" % (i + 1),
                                                 ""))
                            pitching.hr = int(
                                request.POST.get("pitching_%d_hr" % (i + 1),
                                                 ""))
                            pitching.bb = int(
                                request.POST.get("pitching_%d_bb" % (i + 1),
                                                 ""))
                            pitching.k = int(
                                request.POST.get("pitching_%d_k" % (i + 1),
                                                 ""))
                            pitching.run = int(
                                request.POST.get("pitching_%d_run" % (i + 1),
                                                 ""))
                            pitching.er = int(
                                request.POST.get("pitching_%d_er" % (i + 1),
                                                 ""))
                            pitching.go = int(
                                request.POST.get("pitching_%d_go" % (i + 1),
                                                 ""))
                            pitching.fo = int(
                                request.POST.get("pitching_%d_fo" % (i + 1),
                                                 ""))

                            win = request.POST.get("pitching_%d_win" % (i + 1),
                                                   "")
                            lose = request.POST.get(
                                "pitching_%d_lose" % (i + 1), "")

                            if (win != ''):
                                pitching.win = 1
                            else:
                                pitching.win = 0

                            if (lose != ''):
                                pitching.lose = 1
                            else:
                                pitching.lose = 0

                            pitching.save()

                    return redirect("/game/" + str(game.id))
                # end of add-game-btn
            # end of preview

        context = {
            'league_list': league_list,
            'game': game,
            'warning': warning,
            'message': message,
            'game_record': game_record,
            'team': team,
            'member_list': member_list,
            'batting_list': batting_list,
            'pitching_list': pitching_list
        }

        return render(request, 'team/add_game.html', context)