def edit(request, game_id): game = get_object_or_404(Game, pk=game_id) if request.method == "POST": form = AddGameForm(request.POST) teamForm = TeamFormSetEdit(request.POST, prefix="teamForm") roleForm = RoleFormSet(request.POST, prefix="roleForm") if form.is_valid() and teamForm.is_valid() and roleForm.is_valid(): game = Game.objects.get(pk=form.cleaned_data["game_id"]) game.title = form.cleaned_data["title"] game.url = form.cleaned_data["url"] game.gameType = form.cleaned_data["type"] moderator, created = Player.objects.get_or_create( name=form.cleaned_data["moderator"], site=game.site, defaults={"firstGame": game, "lastGame": game, "score": 0, "played": 0}, ) if created: moderator.save() game.moderator = moderator game.start_date = form.cleaned_data["start_date"] game.end_date = form.cleaned_data["end_date"] game.save() game.livedToEnd.clear() for pName in form.cleaned_data["livedToEnd"]: player, created = Player.objects.get_or_create( name=pName, site=game.site, defaults={"firstGame": game, "lastGame": game} ) if created: player.save() game.livedToEnd.add(player) for t in Team.objects.filter(game=game): t.delete() for tForm in teamForm.forms: if ("title" in tForm.cleaned_data) and (tForm.cleaned_data["title"] != ""): title = tForm.cleaned_data["title"] else: title = tForm.cleaned_data["type"].title() team = Team( game=game, title=title, category=Category.objects.get(title=tForm.cleaned_data["type"]), site=game.site, won=tForm.cleaned_data["won"], ) team.save() for pName in tForm.cleaned_data["players"]: p, created = Player.objects.get_or_create( name=pName, site=game.site, defaults={"firstGame": game, "lastGame": game, "score": 0, "played": 0}, ) p.updateDates(game) p.save() team.players.add(p) team.save() for role in Role.objects.filter(game=game): role.delete() for rForm in roleForm.forms: if rForm.has_changed(): p, created = Player.objects.get_or_create( name=rForm.cleaned_data["player"], site=game.site, defaults={"firstGame": game, "lastGame": game, "score": 0, "played": 0}, ) role = Role(game=game, player=p, text=rForm.cleaned_data["text"], title=rForm.cleaned_data["title"]) role.save() game.save() return HttpResponseRedirect(reverse("mafiastats_game", args=[game.id])) else: game = get_object_or_404(Game, pk=game_id) teams = Team.objects.filter(game=game) dateFormat = "%m/%d/%Y" gameData = { "title": game.title, "url": game.url, "livedToEnd": [p.name for p in game.livedToEnd.all()], "moderator": game.moderator.name, "start_date": game.start_date.strftime(dateFormat), "end_date": game.end_date.strftime(dateFormat), "type": game.gameType, "game_id": game.id, } teamData = [ { "title": team.title, "won": team.won, "type": team.category.title, "team_id": team.id, "players": [p.name for p in team.players.all()], } for team in teams ] roleData = [ {"title": role.title, "player": role.player.name, "text": role.text} for role in Role.objects.filter(game=game) ] form = AddGameForm(gameData) teamForm = TeamFormSetEdit(initial=teamData, prefix="teamForm") roleForm = RoleFormSet(initial=roleData, prefix="roleForm") left_attrs = [("Team Name:", "title"), ("Team Type:", "type"), ("Won:", "won")] for tform in teamForm.forms: tform.left_attrs = [(label, tform[property], property) for label, property in left_attrs] sheets = (form.media + teamForm.media + roleForm.media).render_css() bodyscripts = (form.media + teamForm.media + roleForm.media).render_js() return render_to_response( "addGame.html", { "game_form": form, "teamFormset": teamForm, "roleFormset": roleForm, "site": game.site, "sheets": sheets, "id": game.site.id, "bodyscripts": bodyscripts, "submit_link": reverse("mafiastats_edit", args=[int(game_id)]), }, context_instance=RequestContext(request), )
def add(request, site_id=None): if request.method == "POST": form = AddGameForm(request.POST) teamFormset = TeamFormSet(request.POST, prefix="teamForm") roleFormset = RoleFormSet(request.POST, prefix="roleForm") if form.is_valid() and teamFormset.is_valid() and roleFormset.is_valid(): try: # return HttpResponse(formset.forms[0].cleaned_data['players']) print "adding game to site", site_id print "Sites are", Site.objects.all() print "Players are", Player.objects.all() site = Site.objects.get(pk=site_id) name = teamFormset.forms[0].cleaned_data["players"] moderator, created = Player.objects.get_or_create(name=form.cleaned_data["moderator"], site=site) if created: moderator.save() else: moderator.clearCache() game = Game( title=form.cleaned_data["title"], moderator=moderator, start_date=form.cleaned_data["start_date"], end_date=form.cleaned_data["end_date"], site=site, gameType=form.cleaned_data["type"], ) if form.cleaned_data["url"] is not "": game.url = form.cleaned_data["url"] game.save() for pName in form.cleaned_data["livedToEnd"]: player, created = Player.objects.get_or_create( name=pName, site=site, defaults={"firstGame": game, "lastGame": game, "score": 0, "played": 1} ) player.save() game.livedToEnd.add(player) for tForm in teamFormset.forms: if ("title" in tForm.cleaned_data) and (tForm.cleaned_data["title"] != ""): title = tForm.cleaned_data["title"] else: title = tForm.cleaned_data["type"].title() category = Category.objects.get(title=tForm.cleaned_data["type"]) # category = tForm.cleaned_data['type'] won = tForm.cleaned_data["won"] players = [ Player.objects.get_or_create(name=p, site=site, defaults={"firstGame": game, "lastGame": game})[ 0 ] for p in tForm.cleaned_data["players"] ] for p in players: p.save() team = Team(title=title, category=category, site=site, won=won, game=game) team.save() for p in players: team.players.add(p) p.updateDates(game) p.clearCache() team.save() game.team_set.add(team) for rForm in roleFormset.forms: if rForm.has_changed(): title = rForm.cleaned_data["title"] pName = rForm.cleaned_data["player"] text = rForm.cleaned_data["text"] player, created = Player.objects.get_or_create( name=pName, site=site, defaults={"firstGame": game, "lastGame": game} ) role, created = Role.objects.get_or_create(title=title, game=game, player=player, text=text) role.save() game.save() return HttpResponseRedirect(reverse("mafiastats_game", args=[game.id])) except Exception as e: logging.exception(e.args[0]) raise # let the default behavior handle the error, we just want to log it else: form = AddGameForm() teamFormset = TeamFormSet(prefix="teamForm") roleFormset = RoleFormSet(prefix="roleForm") def boxIfString(val): # render either returns an iterable or if type(val) is str: # a string. a string screws with the template retval = [val] # so we must box strings up in a list else: retval = val return retval sheets = boxIfString((form.media + teamFormset.media).render_css()) bodyscripts = boxIfString((form.media + teamFormset.media).render_js()) if site_id: site = Site.objects.get(pk=site_id) else: site = None left_attrs = [("Team Name:", "title"), ("Team Type:", "type"), ("Won:", "won")] for tform in teamFormset.forms: tform.left_attrs = [(label, tform[property], property) for label, property in left_attrs] return render_to_response( "addGame.html", { "game_form": form, "roleFormset": roleFormset, "teamFormset": teamFormset, "bodyscripts": bodyscripts, "sheets": sheets, "site": site, "id": site_id, "submit_link": reverse("mafiastats_add", args=[site_id]), }, context_instance=RequestContext(request), )