示例#1
0
文件: views.py 项目: vicbab/mit-tab
def view_school(request, school_id):
    school_id = int(school_id)
    try:
        school = School.objects.get(pk=school_id)
    except School.DoesNotExist:
        return redirect_and_flash_error(request, "School not found")
    if request.method == "POST":
        form = SchoolForm(request.POST, instance=school)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request,
                    "School name cannot be validated, most likely a non-existent school"
                )
            return redirect_and_flash_success(
                request, "School {} updated successfully".format(
                    form.cleaned_data["name"]))
    else:
        form = SchoolForm(instance=school)
        links = [("/school/" + str(school_id) + "/delete/", "Delete")]
        return render(
            request, "common/data_entry.html", {
                "form": form,
                "links": links,
                "title": "Viewing School: %s" % (school.name)
            })
示例#2
0
def view_judge(request, judge_id):
    judge_id = int(judge_id)
    try:
        judge = Judge.objects.get(pk=judge_id)
    except Judge.DoesNotExist:
        return redirect_and_flash_error(request, "Judge not found")
    if request.method == "POST":
        form = JudgeForm(request.POST, instance=judge)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request, "Judge information cannot be validated")
            return redirect_and_flash_success(
                request, "Judge {} updated successfully".format(
                    form.cleaned_data["name"]))
    else:
        form = JudgeForm(instance=judge)
    base_url = "/judge/" + str(judge_id) + "/"
    scratch_url = base_url + "scratches/view/"
    links = [(scratch_url, "Scratches for {}".format(judge.name))]
    return render(
        request, "common/data_entry.html", {
            "form": form,
            "links": links,
            "title": "Viewing Judge: {}".format(judge.name)
        })
示例#3
0
def view_debater(request, debater_id):
    debater_id = int(debater_id)
    try:
        debater = Debater.objects.get(pk=debater_id)
    except Debater.DoesNotExist:
        return redirect_and_flash_error(request, "No such debater")
    if request.method == 'POST':
        form = DebaterForm(request.POST,instance=debater)
        if form.is_valid():
            try:
               form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "Debater name cannot be validated, most likely a non-existent debater")
            return redirect_and_flash_success(request,
                    "Debater {} updated successfully".format(form.cleaned_data['name']))
    else:
        rounds = RoundStats.objects.filter(debater=debater)
        rounds = sorted(list(rounds), key=lambda x: x.round.round_number)
        form = DebaterForm(instance=debater)
        # Really only should be one
        teams = Team.objects.filter(debaters = debater)
        links = []
        for team in teams:
            links.append(('/team/'+str(team.id)+'/', "View %s"%team.name))

        return render(request, 'common/data_entry.html', 
                                 {'form': form,
                                  'debater_obj': debater,
                                  'links': links,
                                  'debater_rounds': rounds,
                                  'title':"Viewing Debater: %s"%(debater.name)})
示例#4
0
def view_scratches(request, judge_id):
    try:
        judge_id = int(judge_id)
    except ValueError:
        return redirect_and_flash_error(request, "Received invalid data")
    scratches = Scratch.objects.filter(judge=judge_id)
    judge = Judge.objects.get(pk=judge_id)
    number_scratches = len(scratches)
    if request.method == 'POST':
        forms = [ScratchForm(request.POST, prefix=str(i),instance=scratches[i-1]) for i in range(1,number_scratches+1)]
        all_good = True
        for form in forms:
            all_good = all_good and form.is_valid()
        if all_good:
            for form in forms:
                form.save()
            return redirect_and_flash_success(request,
                    "Scratches created successfully")
    else:
        forms = [ScratchForm(prefix=str(i), instance=scratches[i-1]) for i in range(1,len(scratches)+1)]
    delete_links = ["/judge/"+str(judge_id)+"/scratches/delete/"+str(scratches[i].id) for i in range(len(scratches))]
    links = [('/judge/'+str(judge_id)+'/scratches/add/1/','Add Scratch')]

    return render(request, 'common/data_entry_multiple.html',
                             {'forms': list(zip(forms,delete_links)),
                              'data_type':'Scratch',
                              'links':links,
                              'title':"Viewing Scratch Information for %s"%(judge.name)})
示例#5
0
def view_judge(request, judge_id):
    judge_id = int(judge_id)
    try:
        judge = Judge.objects.get(pk=judge_id)
    except Judge.DoesNotExist:
        return redirect_and_flash_error(request, "Judge not found")
    if request.method == 'POST':
        form = JudgeForm(request.POST,instance=judge)
        if form.is_valid():
            try:
               form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "Judge information cannot be validated")
            return redirect_and_flash_success(request,
                    "Judge {} updated successfully".format(form.cleaned_data['name']))
    else:
        form = JudgeForm(instance=judge)
    base_url = '/judge/'+str(judge_id)+'/'
    scratch_url = base_url + 'scratches/view/'
    delete_url =  base_url + 'delete/'
    links = [(scratch_url, 'Scratches for {}'.format(judge.name))]
    return render(request, 'common/data_entry.html', 
                                {'form': form,
                                'links': links,
                                'title': 'Viewing Judge: {}'.format(judge.name)})
def enter_result(request, round_id, form_class=OutroundResultEntryForm):

    round_obj = Outround.objects.get(id=round_id)

    redirect_to = reverse("outround_pairing_view",
                          kwargs={
                              "num_teams": round_obj.num_teams,
                              "type_of_round": round_obj.type_of_round
                          })

    if request.method == "POST":
        form = form_class(request.POST, round_instance=round_obj)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request, "Invalid round result, could not remedy.")
            return redirect_and_flash_success(request,
                                              "Result entered successfully",
                                              path=redirect_to)
    else:
        form_kwargs = {"round_instance": round_obj}
        form = form_class(**form_kwargs)

    return render(
        request, "outrounds/ballot.html", {
            "form": form,
            "title": "Entering Ballot for {}".format(round_obj),
            "gov_team": round_obj.gov_team,
            "opp_team": round_obj.opp_team,
        })
示例#7
0
def enter_result(request, round_id, form_class=ResultEntryForm, ballot_code=None, redirect_to="/pairings/status"):
    round_obj = Round.objects.get(id=round_id)

    if request.method == "POST":
        form = form_class(request.POST, round_instance=round_obj)
        if form.is_valid():
            try:
                result = form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "Invalid round result, could not remedy.")
            return redirect_and_flash_success(request,
                    "Result entered successfully",
                    path=redirect_to)
    else:
        form_kwargs = { "round_instance": round_obj }
        if ballot_code:
            form_kwargs["ballot_code"] = ballot_code
        form = form_class(**form_kwargs)

    return render(request, "ballots/round_entry.html",
                              {"form": form,
                               "title": 'Entering Ballot for {}'.format(round_obj),
                               "gov_team": round_obj.gov_team,
                               "opp_team": round_obj.opp_team,
                               "ballot_code": ballot_code})
示例#8
0
def add_scratches(request, judge_id, number_scratches):
    try:
        judge_id,number_scratches = int(judge_id),int(number_scratches)
    except ValueError:
        return redirect_and_flash_error(request, "Got invalid data")
    try:
        judge = Judge.objects.get(pk=judge_id)
    except Judge.DoesNotExist:
        return redirect_and_flash_error(request, "No such judge")

    if request.method == 'POST':
        forms = [ScratchForm(request.POST, prefix=str(i)) for i in range(1,number_scratches+1)]
        all_good = True
        for form in forms:
            all_good = all_good and form.is_valid()
        if all_good:
            for form in forms:
                form.save()
            return redirect_and_flash_success(request,
                    "Scratches created successfully")
    else:
        forms = [ScratchForm(prefix=str(i), initial={'judge':judge_id,'scratch_type':0}) for i in range(1,number_scratches+1)]
    return render(request, 'common/data_entry_multiple.html', 
                             {'forms': list(zip(forms,[None]*len(forms))),
                              'data_type':'Scratch',
                              'title':"Adding Scratch(es) for %s"%(judge.name)})
示例#9
0
def enter_team(request):
    if request.method == "POST":
        form = TeamEntryForm(request.POST)
        if form.is_valid():
            try:
                team = form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request,
                    "Team name cannot be validated, most likely a duplicate school"
                )
            num_forms = form.cleaned_data["number_scratches"]
            if num_forms > 0:
                return HttpResponseRedirect("/team/" + str(team.pk) +
                                            "/scratches/add/" + str(num_forms))
            else:
                return redirect_and_flash_success(
                    request,
                    "Team {} created successfully".format(
                        team.display_backend),
                    path="/")
    else:
        form = TeamEntryForm()
    return render(request, "common/data_entry.html", {
        "form": form,
        "title": "Create Team"
    })
示例#10
0
def enter_result(request,
                 round_id,
                 form_class=ResultEntryForm,
                 ballot_code=None,
                 redirect_to="/pairings/status"):
    round_obj = Round.objects.get(id=round_id)

    if request.method == "POST":
        form = form_class(request.POST, round_instance=round_obj)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request, "Invalid round result, could not remedy.")
            return redirect_and_flash_success(request,
                                              "Result entered successfully",
                                              path=redirect_to)
    else:
        form_kwargs = {"round_instance": round_obj}
        if ballot_code:
            form_kwargs["ballot_code"] = ballot_code
        form = form_class(**form_kwargs)

    return render(
        request, "ballots/round_entry.html", {
            "form": form,
            "title": "Entering Ballot for {}".format(round_obj),
            "gov_team": round_obj.gov_team,
            "opp_team": round_obj.opp_team,
            "ballot_code": ballot_code
        })
示例#11
0
def restore_backup(request, filename):
    backup.restore_from_backup(filename)
    logout(request)
    return redirect_and_flash_success(
        request,
        "Restored from backup. You have been logged out as a result.",
        path="/")
示例#12
0
文件: views.py 项目: vicbab/mit-tab
def view_room(request, room_id):
    room_id = int(room_id)
    try:
        room = Room.objects.get(pk=room_id)
    except Room.DoesNotExist:
        return redirect_and_flash_error(request, "Room not found")
    if request.method == "POST":
        form = RoomForm(request.POST, instance=room)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request,
                    "Room name cannot be validated, most likely a non-existent room"
                )
            return redirect_and_flash_success(
                request, "School {} updated successfully".format(
                    form.cleaned_data["name"]))
    else:
        form = RoomForm(instance=room)
    return render(request, "common/data_entry.html", {
        "form": form,
        "links": [],
        "title": "Viewing Room: %s" % (room.name)
    })
示例#13
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 redirect_and_flash_success(request,
                        "Round entered successfully")
            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(request, 'ballots/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})
示例#14
0
def manual_backup(request):
    try:
        cur_round, btime = TabSettings.objects.get(key="cur_round").value, int(time.time())
        now = datetime.datetime.fromtimestamp(btime).strftime("%Y-%m-%d_%I:%M")
        backup.backup_round("manual_backup_round_{}_{}_{}".format(cur_round, btime, now))
    except:
        emit_current_exception()
        return redirect_and_flash_error(request, "Error creating backup")
    return redirect_and_flash_success(request,
            "Backup created for round {} at timestamp {}".format(cur_round, btime))
示例#15
0
文件: views.py 项目: vicbab/mit-tab
def force_cache_refresh(request):
    key = request.GET.get("key", "")

    cache_logic.invalidate_cache(key)

    redirect_to = request.GET.get("next", "/")

    return redirect_and_flash_success(request,
                                      "Refreshed!",
                                      path=redirect_to)
示例#16
0
def upload_backup(request):
    if request.method == 'POST':
        form = UploadBackupForm(request.POST, request.FILES)
        if form.is_valid():
            backup.handle_backup(request.FILES['file'])
            return redirect_and_flash_success(request,
                    "Backup {} uploaded successfully".format(request.FILES['file'].name))
    else:
        form = UploadBackupForm()
    return render(request, 'common/data_entry.html',
                              {'form': form, 'title': 'Upload a Backup'})
示例#17
0
def start_new_tourny(request):
    try:
        clear_db()
        TabSettings.set("cur_round", 1)
        TabSettings.set("tot_rounds", 5)
        TabSettings.set("lenient_late", 0)
    except Exception:
        emit_current_exception()
        return redirect_and_flash_error(
            request, "Invalid tournament state, try resetting from a back-up")
    return redirect_and_flash_success(request, "New tournament started")
示例#18
0
文件: views.py 项目: jolynch/mit-tab
def delete_scratch(request, item_id, scratch_id):
    try:
        scratch_id = int(scratch_id)
        scratch = Scratch.objects.get(pk=scratch_id)
        scratch.delete()
    except Scratch.DoesNotExist:
        return redirect_and_flash_error(request,
                "This scratch does not exist, please try again with a valid id.")
    return redirect_and_flash_success(request,
            "Scratch deleted successfully",
            path="/")
示例#19
0
def break_teams(request):
    if request.method == "POST":
        # Perform the break
        backup.backup_round("before_the_break_%s" %
                            (timezone.now().strftime("%H:%M"), ))

        success, msg = outround_tab_logic.perform_the_break()

        if success:
            return redirect_and_flash_success(request,
                                              msg,
                                              path="/outround_pairing")
        return redirect_and_flash_error(request, msg, path="/")

    # See if we can pair the round
    title = "Pairing Outrounds"
    current_round_number = 0

    previous_round_number = TabSettings.get("tot_rounds", 5)

    check_status = []

    msg = "All Rounds properly entered for Round %s" % (previous_round_number)

    ready_to_pair = "Yes"
    ready_to_pair_alt = "Checks passed!"
    try:
        tab_logic.have_properly_entered_data(current_round_number)
        check_status.append((msg, "Yes", "All rounds look good"))
    except PrevRoundNotEnteredError as e:
        ready_to_pair = "No"
        ready_to_pair_alt = str(e)
        check_status.append(
            (msg, "No", "Not all rounds are entered. %s" % str(e)))
    except ByeAssignmentError as e:
        ready_to_pair = "No"
        ready_to_pair_alt = str(e)
        check_status.append(
            (msg, "No", "You have a bye and results. %s" % str(e)))
    except NoShowAssignmentError as e:
        ready_to_pair = "No"
        ready_to_pair_alt = str(e)
        check_status.append(
            (msg, "No", "You have a noshow and results. %s" % str(e)))

    rooms = outround_tab_logic.have_enough_rooms_before_break()
    msg = "N/2 Rooms available Round Out-rounds? Need {0}, have {1}".format(
        rooms[1][1], rooms[1][0])
    if rooms[0]:
        check_status.append((msg, "Yes", "Rooms are checked in"))
    else:
        check_status.append((msg, "No", "Not enough rooms"))

    return render(request, "pairing/pair_round.html", locals())
示例#20
0
def start_new_tourny(request):
    try:
        clear_db()
        #TODO: Unify this with initialize_tourney
        TabSettings.set("cur_round", 1)
        TabSettings.set("tot_rounds", 5)
        TabSettings.set("lenient_late", 0)
    except Exception as e:
        emit_current_exception()
        return redirect_and_flash_error(request,
                "Invalid tournament state, try resetting from a back-up")
    return redirect_and_flash_success(request, "New tournament started")
示例#21
0
文件: views.py 项目: vicbab/mit-tab
def delete_scratch(request, item_id, scratch_id):
    try:
        scratch_id = int(scratch_id)
        scratch = Scratch.objects.get(pk=scratch_id)
        scratch.delete()
    except Scratch.DoesNotExist:
        return redirect_and_flash_error(
            request,
            "This scratch does not exist, please try again with a valid id.")
    return redirect_and_flash_success(request,
                                      "Scratch deleted successfully",
                                      path="/")
示例#22
0
文件: views.py 项目: vicbab/mit-tab
def add_scratch(request):
    if request.method == "POST":
        form = ScratchForm(request.POST)
        if form.is_valid():
            form.save()
        return redirect_and_flash_success(request,
                                          "Scratch created successfully")
    else:
        form = ScratchForm(initial={"scratch_type": 0})
    return render(request, "common/data_entry.html", {
        "title": "Adding Scratch",
        "form": form
    })
示例#23
0
文件: views.py 项目: jolynch/mit-tab
def add_scratch(request):
    if request.method == 'POST':
        form = ScratchForm(request.POST)
        if (form.is_valid()):
          form.save()
        judge = form.cleaned_data['judge'].name
        team = form.cleaned_data['team'].name
        return redirect_and_flash_success(request,
                "Scratch created successfully")
    else:
        form = ScratchForm(initial={'scratch_type':0})
    return render(request, 'common/data_entry.html',
                              {'title':"Adding Scratch", 'form': form})
示例#24
0
def manual_backup(request):
    try:
        cur_round, btime = TabSettings.objects.get(key="cur_round").value, int(
            time.time())
        now = datetime.datetime.fromtimestamp(btime).strftime("%Y-%m-%d_%I:%M")
        backup.backup_round("manual_backup_round_{}_{}_{}".format(
            cur_round, btime, now))
    except Exception:
        emit_current_exception()
        return redirect_and_flash_error(request, "Error creating backup")
    return redirect_and_flash_success(
        request,
        "Backup created for round {} at timestamp {}".format(cur_round, btime))
示例#25
0
def upload_backup(request):
    if request.method == "POST":
        form = UploadBackupForm(request.POST, request.FILES)
        if form.is_valid():
            backup.handle_backup(request.FILES["file"])
            return redirect_and_flash_success(
                request, "Backup {} uploaded successfully".format(
                    request.FILES["file"].name))
    else:
        form = UploadBackupForm()
    return render(request, "common/data_entry.html", {
        "form": form,
        "title": "Upload a Backup"
    })
示例#26
0
文件: views.py 项目: vicbab/mit-tab
def delete_school(request, school_id):
    error_msg = None
    try:
        school_id = int(school_id)
        school = School.objects.get(pk=school_id)
        school.delete()
    except School.DoesNotExist:
        error_msg = "That school does not exist"
    except Exception as e:
        error_msg = str(e)
    if error_msg:
        return redirect_and_flash_error(request, error_msg)
    return redirect_and_flash_success(request,
                                      "School deleted successfully",
                                      path="/")
示例#27
0
文件: views.py 项目: jolynch/mit-tab
def delete_school(request, school_id):
    error_msg = None
    try :
        school_id = int(school_id)
        school = School.objects.get(pk=school_id)
        school.delete()
    except School.DoesNotExist:
        error_msg = "That school does not exist"
    except Exception as e:
        error_msg = str(e)
    if error_msg:
        return redirect_and_flash_error(request, error_msg)
    return redirect_and_flash_success(request,
            "School deleted successfully",
            path="/")
示例#28
0
def enter_debater(request):
    if request.method == 'POST':
        form = DebaterForm(request.POST)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "Debater name cannot be validated, most likely a duplicate debater")
            return redirect_and_flash_success(request,
                    "Debater {} created successfully".format(form.cleaned_data['name']),
                    path="/")
    else:
        form = DebaterForm()
    return render(request, 'common/data_entry.html',
                             {'form': form, 'title': "Create Debater:"})
示例#29
0
def enter_judge(request):
    if request.method == 'POST':
        form = JudgeForm(request.POST)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                cd = form.cleaned_data
                return redirect_and_flash_error(request,
                        "Judge cannot be validated")
            return redirect_and_flash_success(request,
                    "Judge {} created successfully".format(form.cleaned_data['name']),
                    path="/")
    else:
        form = JudgeForm(first_entry=True)
    return render(request, 'common/data_entry.html',
                              {'form': form, 'title': "Create Judge"})
示例#30
0
def view_team(request, team_id):
    team_id = int(team_id)
    try:
        team = Team.objects.get(pk=team_id)
        stats = []
        stats.append(("Wins", tab_logic.tot_wins(team)))
        stats.append(("Total Speaks", tab_logic.tot_speaks(team)))
        stats.append(("Govs", tab_logic.num_govs(team)))
        stats.append(("Opps", tab_logic.num_opps(team)))
        stats.append(("Avg. Opp Wins", tab_logic.opp_strength(team)))
        stats.append(("Been Pullup", tab_logic.pull_up_count(team)))
        stats.append(("Hit Pullup", tab_logic.hit_pull_up(team)))
    except Team.DoesNotExist:
        return redirect_and_flash_error(request, "Team not found")
    if request.method == "POST":
        form = TeamForm(request.POST, instance=team)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request,
                    "An error occured, most likely a non-existent team")
            return redirect_and_flash_success(
                request, "Team {} updated successfully".format(
                    form.cleaned_data["name"]))
    else:
        form = TeamForm(instance=team)
        links = [("/team/" + str(team_id) + "/scratches/view/",
                  "Scratches for {}".format(team.display_backend))]
        for deb in team.debaters.all():
            links.append(
                ("/debater/" + str(deb.id) + "/", "View %s" % deb.name))
        return render(
            request, "common/data_entry.html", {
                "title": "Viewing Team: %s" % (team.display_backend),
                "form": form,
                "links": links,
                "team_obj": team,
                "team_stats": stats
            })

    return render(request, "common/data_entry.html", {"form": form})
示例#31
0
def enter_judge(request):
    if request.method == "POST":
        form = JudgeForm(request.POST)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                                                "Judge cannot be validated")
            return redirect_and_flash_success(
                request,
                "Judge {} created successfully".format(
                    form.cleaned_data["name"]),
                path="/")
    else:
        form = JudgeForm(first_entry=True)
    return render(request, "common/data_entry.html", {
        "form": form,
        "title": "Create Judge"
    })
示例#32
0
def enter_team(request):
    if request.method == 'POST':
        form = TeamEntryForm(request.POST)
        if form.is_valid():
            try:
                team = form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "Team name cannot be validated, most likely a duplicate school")
            num_forms = form.cleaned_data['number_scratches']
            if num_forms > 0:
                return HttpResponseRedirect('/team/'+str(team.pk)+'/scratches/add/'+str(num_forms))
            else:
                return redirect_and_flash_success(request,
                        "Team {} created successfully".format(team.name),
                        path="/")
    else:
        form = TeamEntryForm()
    return render(request, 'common/data_entry.html',
                             {'form': form, 'title': "Create Team"})
示例#33
0
文件: views.py 项目: vicbab/mit-tab
def upload_data(request):
    team_info = {"errors": [], "uploaded": False}
    judge_info = {"errors": [], "uploaded": False}
    room_info = {"errors": [], "uploaded": False}
    scratch_info = {"errors": [], "uploaded": False}

    if request.method == "POST":
        form = UploadDataForm(request.POST, request.FILES)
        if form.is_valid():
            if "team_file" in request.FILES:
                team_info["errors"] = import_teams.import_teams(
                    request.FILES["team_file"])
                team_info["uploaded"] = True
            if "judge_file" in request.FILES:
                judge_info["errors"] = import_judges.import_judges(
                    request.FILES["judge_file"])
                judge_info["uploaded"] = True
            if "room_file" in request.FILES:
                room_info["errors"] = import_rooms.import_rooms(
                    request.FILES["room_file"])
                room_info["uploaded"] = True
            if "scratch_file" in request.FILES:
                scratch_info["errors"] = import_scratches.import_scratches(
                    request.FILES["scratch_file"])
                scratch_info["uploaded"] = True

        if not team_info["errors"] + judge_info["errors"] + \
                room_info["errors"] + scratch_info["errors"]:
            return redirect_and_flash_success(request,
                                              "Data imported successfully")
    else:
        form = UploadDataForm()
    return render(
        request, "common/data_upload.html", {
            "form": form,
            "title": "Upload Input Files",
            "team_info": team_info,
            "judge_info": judge_info,
            "room_info": room_info,
            "scratch_info": scratch_info
        })
示例#34
0
文件: views.py 项目: jolynch/mit-tab
def view_room(request, room_id):
    room_id = int(room_id)
    try:
        room = Room.objects.get(pk=room_id)
    except Room.DoesNotExist:
        return redirect_and_flash_error(request, "Room not found")
    if request.method == 'POST':
        form = RoomForm(request.POST,instance=room)
        if form.is_valid():
            try:
               form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "Room name cannot be validated, most likely a non-existent room")
            return redirect_and_flash_success(request,
                    "School {} updated successfully".format(form.cleaned_data['name']))
    else:
        form = RoomForm(instance=room)
    return render(request, 'common/data_entry.html',
                                {'form': form, 'links': [],
                                'title': "Viewing Room: %s"%(room.name)})
示例#35
0
def view_scratches(request, judge_id):
    try:
        judge_id = int(judge_id)
    except ValueError:
        return redirect_and_flash_error(request, "Received invalid data")
    scratches = Scratch.objects.filter(judge=judge_id)
    judge = Judge.objects.get(pk=judge_id)
    number_scratches = len(scratches)
    if request.method == "POST":
        forms = [
            ScratchForm(request.POST, prefix=str(i), instance=scratches[i - 1])
            for i in range(1, number_scratches + 1)
        ]
        all_good = True
        for form in forms:
            all_good = all_good and form.is_valid()
        if all_good:
            for form in forms:
                form.save()
            return redirect_and_flash_success(
                request, "Scratches created successfully")
    else:
        forms = [
            ScratchForm(prefix=str(i), instance=scratches[i - 1])
            for i in range(1,
                           len(scratches) + 1)
        ]
    delete_links = [
        "/judge/" + str(judge_id) + "/scratches/delete/" + str(scratches[i].id)
        for i in range(len(scratches))
    ]
    links = [("/judge/" + str(judge_id) + "/scratches/add/1/", "Add Scratch")]

    return render(
        request, "common/data_entry_multiple.html", {
            "forms": list(zip(forms, delete_links)),
            "data_type": "Scratch",
            "links": links,
            "title": "Viewing Scratch Information for %s" % (judge.name)
        })
示例#36
0
文件: views.py 项目: vicbab/mit-tab
def enter_room(request):
    if request.method == "POST":
        form = RoomForm(request.POST)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request,
                    "Room name cannot be validated, most likely a duplicate room"
                )
            return redirect_and_flash_success(
                request,
                "Room {} created successfully".format(
                    form.cleaned_data["name"]),
                path="/")
    else:
        form = RoomForm()
    return render(request, "common/data_entry.html", {
        "form": form,
        "title": "Create Room"
    })
示例#37
0
def view_debater(request, debater_id):
    debater_id = int(debater_id)
    try:
        debater = Debater.objects.get(pk=debater_id)
    except Debater.DoesNotExist:
        return redirect_and_flash_error(request, "No such debater")
    if request.method == "POST":
        form = DebaterForm(request.POST, instance=debater)
        if form.is_valid():
            try:
                form.save()
            except ValueError:
                return redirect_and_flash_error(
                    request,
                    "Debater name can't be validated. Probably a non-existent debater"
                )
            return redirect_and_flash_success(
                request, "Debater {} updated successfully".format(
                    form.cleaned_data["name"]))
    else:
        rounds = RoundStats.objects.filter(debater=debater)
        rounds = sorted(list(rounds), key=lambda x: x.round.round_number)
        form = DebaterForm(instance=debater)
        # Really only should be one
        teams = Team.objects.filter(debaters=debater)
        links = []
        for team in teams:
            links.append(
                ("/team/" + str(team.id) + "/", "View %s" % team.name))

        return render(
            request, "common/data_entry.html", {
                "form": form,
                "debater_obj": debater,
                "links": links,
                "debater_rounds": rounds,
                "title": "Viewing Debater: %s" % (debater.name)
            })
示例#38
0
文件: views.py 项目: jolynch/mit-tab
def view_school(request, school_id):
    school_id = int(school_id)
    try:
        school = School.objects.get(pk=school_id)
    except School.DoesNotExist:
        return redirect_and_flash_error(request, "School not found")
    if request.method == 'POST':
        form = SchoolForm(request.POST,instance=school)
        if form.is_valid():
            try:
               form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "School name cannot be validated, most likely a non-existent school")
            return redirect_and_flash_success(request,
                    "School {} updated successfully".format(form.cleaned_data['name']))
    else:
        form = SchoolForm(instance=school)
        links = [('/school/'+str(school_id)+'/delete/', 'Delete')]
        return render(request, 'common/data_entry.html',
                                 {'form': form,
                                  'links': links,
                                  'title': "Viewing School: %s" %(school.name)})
示例#39
0
文件: views.py 项目: vicbab/mit-tab
def settings_form(request):
    yaml_settings = get_settings_from_yaml()
    if request.method == "POST":
        _settings_form = SettingsForm(request.POST, settings=yaml_settings)

        if _settings_form.is_valid():
            _settings_form.save()
            return redirect_and_flash_success(
                request,
                "Tab settings updated!",
                path=reverse("settings_form")
            )
        return render( # Allows for proper validation checking
            request, "tab/settings_form.html", {
                "form": settings_form,
            })

    _settings_form = SettingsForm(settings=yaml_settings)

    return render(
        request, "tab/settings_form.html", {
            "form": _settings_form,
        })
示例#40
0
def add_scratches(request, team_id, number_scratches):
    try:
        team_id, number_scratches = int(team_id), int(number_scratches)
    except ValueError:
        return redirect_and_flash_error(request, "Received invalid data")
    try:
        team = Team.objects.get(pk=team_id)
    except Team.DoesNotExist:
        return redirect_and_flash_error(request,
                                        "The selected team does not exist")
    if request.method == "POST":
        forms = [
            ScratchForm(request.POST, prefix=str(i))
            for i in range(1, number_scratches + 1)
        ]
        all_good = True
        for form in forms:
            all_good = all_good and form.is_valid()
        if all_good:
            for form in forms:
                form.save()
            return redirect_and_flash_success(
                request, "Scratches created successfully")
    else:
        forms = [
            ScratchForm(prefix=str(i),
                        initial={
                            "team": team_id,
                            "scratch_type": 0
                        }) for i in range(1, number_scratches + 1)
        ]
    return render(
        request, "common/data_entry_multiple.html", {
            "forms": list(zip(forms, [None] * len(forms))),
            "data_type": "Scratch",
            "title": "Adding Scratch(es) for %s" % (team.display_backend)
        })
示例#41
0
def add_scratches(request, judge_id, number_scratches):
    try:
        judge_id, number_scratches = int(judge_id), int(number_scratches)
    except ValueError:
        return redirect_and_flash_error(request, "Got invalid data")
    try:
        judge = Judge.objects.get(pk=judge_id)
    except Judge.DoesNotExist:
        return redirect_and_flash_error(request, "No such judge")

    if request.method == "POST":
        forms = [
            ScratchForm(request.POST, prefix=str(i))
            for i in range(1, number_scratches + 1)
        ]
        all_good = True
        for form in forms:
            all_good = all_good and form.is_valid()
        if all_good:
            for form in forms:
                form.save()
            return redirect_and_flash_success(
                request, "Scratches created successfully")
    else:
        forms = [
            ScratchForm(prefix=str(i),
                        initial={
                            "judge": judge_id,
                            "scratch_type": 0
                        }) for i in range(1, number_scratches + 1)
        ]
    return render(
        request, "common/data_entry_multiple.html", {
            "forms": list(zip(forms, [None] * len(forms))),
            "data_type": "Scratch",
            "title": "Adding Scratch(es) for %s" % (judge.name)
        })
示例#42
0
def view_team(request, team_id):
    team_id = int(team_id)
    try:
        team = Team.objects.get(pk=team_id)
        stats = []
        stats.append(("Wins", tab_logic.tot_wins(team)))
        stats.append(("Total Speaks", tab_logic.tot_speaks(team)))
        stats.append(("Govs", tab_logic.num_govs(team)))
        stats.append(("Opps", tab_logic.num_opps(team)))
        stats.append(("Avg. Opp Wins", tab_logic.opp_strength(team)))
        stats.append(("Been Pullup", tab_logic.pull_up_count(team)))
        stats.append(("Hit Pullup", tab_logic.hit_pull_up_count(team)))
    except Team.DoesNotExist:
        return redirect_and_flash_error(request, "Team not found")
    if request.method == 'POST':
        form = TeamForm(request.POST,instance=team)
        if form.is_valid():
            try:
               form.save()
            except ValueError:
                return redirect_and_flash_error(request,
                        "An error occured, most likely a non-existent team")
            return redirect_and_flash_success(request,
                    "Team {} updated successfully".format(form.cleaned_data["name"]))
    else:
        form = TeamForm(instance=team)
        links = [('/team/'+str(team_id)+'/scratches/view/','Scratches for {}'.format(team.name))]
        for deb in team.debaters.all():
            links.append(('/debater/'+str(deb.id)+'/', "View %s" % deb.name))
        return render(request, 'common/data_entry.html', 
                                 {'title':"Viewing Team: %s"%(team.name),
                                  'form': form,
                                  'links': links,
                                  'team_obj':team,
                                  'team_stats':stats})

    return render(request, 'common/data_entry.html', {'form': form})
示例#43
0
文件: views.py 项目: jolynch/mit-tab
def upload_data(request):
    if request.method == 'POST':
      form = UploadDataForm(request.POST, request.FILES)
      if form.is_valid():
        errors = []

        if 'team_file' in request.FILES:
            team_errors = import_teams.import_teams(request.FILES['team_file'])
            errors += team_errors
        if 'judge_file' in request.FILES:
            judge_errors = import_judges.import_judges(request.FILES['judge_file'])
            errors += judge_errors
        if 'room_file' in request.FILES:
            room_errors = import_rooms.import_rooms(request.FILES['room_file'])
            errors += room_errors

        if not errors:
            return redirect_and_flash_success(request, "Data imported successfully")
        else:
            for e in errors: messages.error(request, e)
    else:
      form = UploadDataForm()
    return render(request, 'common/data_entry.html',
                              {'form': form, 'title': 'Upload Input Files'})
示例#44
0
def pair_next_outround(request, num_teams, type_of_round):
    if request.method == "POST":
        backup.backup_round("before_pairing_%s_%s" %
                            (num_teams / 2, type_of_round))

        Outround.objects.filter(num_teams__lt=num_teams,
                                type_of_round=type_of_round).delete()

        outround_tab_logic.pair(type_of_round)

        return redirect_and_flash_success(request,
                                          "Success!",
                                          path=reverse("outround_pairing_view",
                                                       kwargs={
                                                           "num_teams":
                                                           int(num_teams / 2),
                                                           "type_of_round":
                                                           type_of_round
                                                       }))

    # See if we can pair the round
    title = "Pairing Outrounds"
    current_round_number = 0

    previous_round_number = TabSettings.get("tot_rounds", 5)

    check_status = []

    judges = outround_tab_logic.have_enough_judges_type(type_of_round)
    rooms = outround_tab_logic.have_enough_rooms_type(type_of_round)

    msg = "Enough judges checked in for Out-rounds? Need {0}, have {1}".format(
        judges[1][1], judges[1][0])

    if num_teams <= 2:
        check_status.append(("Have more rounds?", "No", "Not enough teams"))
    else:
        check_status.append(("Have more rounds?", "Yes", "Have enough teams!"))

    if judges[0]:
        check_status.append((msg, "Yes", "Judges are checked in"))
    else:
        check_status.append((msg, "No", "Not enough judges"))

    msg = "N/2 Rooms available Round Out-rounds? Need {0}, have {1}".format(
        rooms[1][1], rooms[1][0])
    if rooms[0]:
        check_status.append((msg, "Yes", "Rooms are checked in"))
    else:
        check_status.append((msg, "No", "Not enough rooms"))

    round_label = "[%s] Ro%s" % ("N" if type_of_round else "V", num_teams)
    msg = "All Rounds properly entered for Round %s" % (round_label)
    ready_to_pair = "Yes"
    ready_to_pair_alt = "Checks passed!"
    try:
        outround_tab_logic.have_properly_entered_data(num_teams, type_of_round)
        check_status.append((msg, "Yes", "All rounds look good"))
    except PrevRoundNotEnteredError as e:
        ready_to_pair = "No"
        ready_to_pair_alt = str(e)
        check_status.append(
            (msg, "No", "Not all rounds are entered. %s" % str(e)))

    return render(request, "pairing/pair_round.html", locals())
示例#45
0
def restore_backup(request, filename):
    backup.restore_from_backup(filename)
    logout(request)
    return redirect_and_flash_success(request,
            "Restored from backup. You have been logged out as a result.",
            path="/")
示例#46
0
文件: views.py 项目: jolynch/mit-tab
def tab_logout(request, *args):
    logout(request)
    return redirect_and_flash_success(request,
            "Successfully logged out",
            path="/")
示例#47
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), ...]
            # 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 old_stats:
                        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 redirect_and_flash_success(
                    request, "Round entered successfully")
            else:
                forms[0].add_error("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(
        request, "ballots/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
        })
示例#48
0
文件: views.py 项目: vicbab/mit-tab
def tab_logout(request, *args):
    logout(request)
    return redirect_and_flash_success(request,
                                      "Successfully logged out",
                                      path="/")