예제 #1
0
def enter_result(request, round_id):
    round_obj = Round.objects.get(id=round_id)
    if request.method == 'POST':
        form = ResultEntryForm(request.POST, round_instance=round_obj)
        if form.is_valid():
            try:
                result = form.save()
            except ValueError:
                return render_to_response('error.html', 
                                         {'error_type': "Round Result",
                                          'error_name': "["+str(round_obj)+"]",
                                          'error_info':"Invalid round result, could not remedy."}, 
                                          context_instance=RequestContext(request))
            return render_to_response('thanks.html', 
                                     {'data_type': "Round Result",
                                      'data_name': "["+str(round_obj)+"]"}, 
                                      context_instance=RequestContext(request))
    else:
        is_current = round_obj.round_number == TabSettings.objects.get(key="cur_round")
        form = ResultEntryForm(round_instance=round_obj)
    return render_to_response('round_entry.html', 
                              {'form': form,
                               'title': "Entering Ballot for {}".format(str(round_obj)),
                               'gov_team': round_obj.gov_team,
                               'opp_team': round_obj.opp_team}, 
                               context_instance=RequestContext(request))
예제 #2
0
def enter_result(request, round_id):
    round_obj = Round.objects.get(id=round_id)
    if request.method == 'POST':
        form = ResultEntryForm(request.POST, round_instance=round_obj)
        if form.is_valid():
            try:
                result = form.save()
            except ValueError:
                return render_to_response(
                    'error.html', {
                        'error_type': "Round Result",
                        'error_name': "[" + str(round_obj) + "]",
                        'error_info': "Invalid round result, could not remedy."
                    },
                    context_instance=RequestContext(request))
            return render_to_response('thanks.html', {
                'data_type': "Round Result",
                'data_name': "[" + str(round_obj) + "]"
            },
                                      context_instance=RequestContext(request))
    else:
        is_current = round_obj.round_number == TabSettings.objects.get(
            key="cur_round")
        form = ResultEntryForm(round_instance=round_obj)
    return render_to_response(
        'round_entry.html', {
            'form': form,
            'title': "Entering Ballot for {}".format(str(round_obj)),
            'gov_team': round_obj.gov_team,
            'opp_team': round_obj.opp_team
        },
        context_instance=RequestContext(request))
예제 #3
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))