Exemplo n.º 1
0
def enter_multiple_results(request, round_id, num_entered):
    round_obj = Round.objects.get(id=round_id)
    num_entered = max(int(num_entered), 1)
    if request.method == 'POST':
        forms = [ResultEntryForm(request.POST,
                                 prefix=str(i),
                                 round_instance=round_obj,
                                 no_fill = True)
                 for i in range(1, num_entered +1)]
        all_good = True
        for form in forms:
            all_good = all_good and form.is_valid()
        if all_good:
            # result is of the format:
            # winner_1 => [(debater, role, speaks, rank), (debater, role, speaks, rank) ...]
            # winner_2 => [(debater, role, sp ...]
            result = {}
            debaters = ResultEntryForm.GOV + ResultEntryForm.OPP
            for form in forms:
                cleaned_data = form.cleaned_data
                winner = cleaned_data["winner"]
                if winner not in result:
                    result[winner] = []

                result[winner].append([])
                for debater in debaters:
                    old_stats = RoundStats.objects.filter(round=round_obj, debater_role = debater)
                    if len(old_stats) > 0:
                        old_stats.delete()
                    debater_obj = Debater.objects.get(pk=cleaned_data["%s_debater"%(debater)])
                    debater_role_obj = debater
                    speaks_obj, ranks_obj = float(cleaned_data["%s_speaks"%(debater)]),int(cleaned_data["%s_ranks"%(debater)])
                    result[winner][-1].append((debater_obj, debater_role_obj, speaks_obj, ranks_obj))
            # Validate the extracted data and return it
            all_good, error_msg = validate_panel(result)
            if all_good:
                final_scores, final_winner = score_panel(result, "discard_minority" in request.POST)
                print final_scores
                for (debater, role, speaks, ranks) in final_scores:
                    RoundStats.objects.create(debater = debater,
                                              round = round_obj,
                                              speaks = speaks,
                                              ranks = ranks,
                                              debater_role = role)
                round_obj.victor = final_winner
                round_obj.save()
                return render_to_response('thanks.html', 
                                         {'data_type': "Round Result",
                                          'data_name': "["+str(round_obj)+"]"}, 
                                          context_instance=RequestContext(request))
            else:
                forms[0]._errors["winner"] = forms[0].error_class([error_msg])
    else:
        forms = [ResultEntryForm(prefix = str(i),
                                 round_instance=round_obj,
                                 no_fill = True) for i in range(1, num_entered + 1)]
    return render_to_response('round_entry_multiple.html',
                              {'forms': forms,
                               'title': "Entering Ballots for {}".format(str(round_obj)),
                               'gov_team': round_obj.gov_team,
                               'opp_team': round_obj.opp_team},
                               context_instance=RequestContext(request))
Exemplo n.º 2
0
def enter_multiple_results(request, round_id, num_entered):
    round_obj = Round.objects.get(id=round_id)
    num_entered = max(int(num_entered), 1)
    if request.method == 'POST':
        forms = [
            ResultEntryForm(request.POST,
                            prefix=str(i),
                            round_instance=round_obj,
                            no_fill=True) for i in range(1, num_entered + 1)
        ]
        all_good = True
        for form in forms:
            all_good = all_good and form.is_valid()
        if all_good:
            # result is of the format:
            # winner_1 => [(debater, role, speaks, rank), (debater, role, speaks, rank) ...]
            # winner_2 => [(debater, role, sp ...]
            result = {}
            debaters = ResultEntryForm.GOV + ResultEntryForm.OPP
            for form in forms:
                cleaned_data = form.cleaned_data
                winner = cleaned_data["winner"]
                if winner not in result:
                    result[winner] = []

                result[winner].append([])
                for debater in debaters:
                    old_stats = RoundStats.objects.filter(round=round_obj,
                                                          debater_role=debater)
                    if len(old_stats) > 0:
                        old_stats.delete()
                    debater_obj = Debater.objects.get(
                        pk=cleaned_data["%s_debater" % (debater)])
                    debater_role_obj = debater
                    speaks_obj, ranks_obj = float(
                        cleaned_data["%s_speaks" % (debater)]), int(
                            cleaned_data["%s_ranks" % (debater)])
                    result[winner][-1].append(
                        (debater_obj, debater_role_obj, speaks_obj, ranks_obj))
            # Validate the extracted data and return it
            all_good, error_msg = validate_panel(result)
            if all_good:
                final_scores, final_winner = score_panel(
                    result, "discard_minority" in request.POST)
                print final_scores
                for (debater, role, speaks, ranks) in final_scores:
                    RoundStats.objects.create(debater=debater,
                                              round=round_obj,
                                              speaks=speaks,
                                              ranks=ranks,
                                              debater_role=role)
                round_obj.victor = final_winner
                round_obj.save()
                return render_to_response(
                    'thanks.html', {
                        'data_type': "Round Result",
                        'data_name': "[" + str(round_obj) + "]"
                    },
                    context_instance=RequestContext(request))
            else:
                forms[0]._errors["winner"] = forms[0].error_class([error_msg])
    else:
        forms = [
            ResultEntryForm(prefix=str(i),
                            round_instance=round_obj,
                            no_fill=True) for i in range(1, num_entered + 1)
        ]
    return render_to_response(
        'round_entry_multiple.html', {
            'forms': forms,
            'title': "Entering Ballots for {}".format(str(round_obj)),
            'gov_team': round_obj.gov_team,
            'opp_team': round_obj.opp_team
        },
        context_instance=RequestContext(request))