Example #1
0
def preview(fight):

    context = {
        "fight_id": fight.pk,
        "round": fight.round.order,
        "room": fight.room.name
    }

    prblms = []
    for problem in fight.round.tournament.problem_set.all():
        prblms.append((problem.number, problem.title))

    context["problems"] = prblms

    stages = []

    for idx, stage in enumerate(_fightpreview(fight)):
        sd = {
            "order": idx + 1,
            "reporter": stage["rep"].origin.name,
            "opponent": stage["opp"].origin.name,
            "reviewer": stage["rev"].origin.name,
            "problems": list(stage['free']),
            "rejected_reporter": stage["a"],
            "presented_reporter": stage["b"],
            "opposed_opponent": stage["c"],
            "presented_opponent": stage["d"],
            "lifted_bans": stage["lifted"]
        }
        stages.append(sd)

    context["stages"] = stages

    return context
Example #2
0
    def get(self, request, fight_id, stage):

        fight = get_object_or_404(Fight, pk=fight_id)

        all_stages = []
        act_stage = {'is_last': False}
        for s in fight.stage_set.all():
            st = {'active': False}
            if act_stage['is_last']:
                act_stage['is_last'] = False

            if s.order == int(stage):
                st['active'] = True

                act_stage['is_last'] = True
                act_stage['order'] = s.order

                act_stage['rep'] = s.rep_attendance.team.origin.name
                act_stage['opp'] = s.opp_attendance.team.origin.name
                act_stage['rev'] = s.rev_attendance.team.origin.name
                act_stage['prev'] = _fightpreview(s.fight)[s.order - 1]

                act_stage['form'] = StageForm(s)

            all_stages.append(st)

        if 'form' not in act_stage:
            return redirect('fight:fightjury', fight_id=fight_id)

        return render(request,
                      "fight/fight.html",
                      context={
                          'round': fight.round.order,
                          'room': fight.room.name,
                          'id': fight_id,
                          'all_stages': all_stages,
                          'stage': act_stage,
                          'locked': fight.locked
                      })
Example #3
0
    def _fight_check(self, fight):

        errors = []
        warnings = []
        chair = None
        try:
            chair = fight.jurorsession_set.get(role__type=JurorRole.CHAIR)
        except:
            errors.append("Please set a chair")

        jurors = fight.jurorsession_set.filter(role__type=JurorRole.JUROR)

        if jurors.count() < 4:
            errors.append("A fight needs at least 5 jurors")

        stage_info = []

        for stage in fight.stage_set.all():

            prev = _fightpreview(fight)[stage.order - 1]

            team = {}
            team['rep'] = stage.rep_attendance.team.origin.name
            team['opp'] = stage.opp_attendance.team.origin.name
            team['rev'] = stage.rev_attendance.team.origin.name

            person = {}
            person['rep'] = ""
            person['opp'] = ""
            person['rev'] = ""
            if stage.reporter:
                person['rep'] = stage.reporter
            else:
                errors.append("Stage %d missing reporter name" % stage.order)
            if stage.opponent:
                person['opp'] = stage.opponent
            else:
                errors.append("Stage %d missing opponent name" % stage.order)
            if stage.reviewer:
                person['rev'] = stage.reviewer
            else:
                errors.append("Stage %d missing reviewer name" % stage.order)

            presented = ""
            if stage.presented:
                presented = stage.presented.number
                if presented not in prev['free']:
                    warnings.append(
                        "Problem presented in stage %d not in preview" %
                        stage.order)
                if presented in stage.rejections.all().values_list('number',
                                                                   flat=True):
                    errors.append(
                        "Stage %d presented problem is in rejected list" %
                        stage.order)
            else:
                errors.append("Stage %d has no presented problem" %
                              stage.order)

            grades_j = []
            for jurorsess in fight.jurorsession_set(
                    manager="voting").select_related('juror').all():
                juror = jurorsess.juror
                grade_j = {'id': juror.id, 'name': juror.attendee}

                try:
                    grade_j['rep'] = int(
                        JurorGrade.objects.get(
                            stage_attendee=stage.rep_attendance,
                            juror_session__juror=juror).grade)
                except:
                    errors.append("Stage %d missing reporter grade from %s" %
                                  (stage.order, juror.attendee))
                try:
                    grade_j['opp'] = int(
                        JurorGrade.objects.get(
                            stage_attendee=stage.opp_attendance,
                            juror_session__juror=juror).grade)
                except:
                    errors.append("Stage %d missing opponent grade from %s" %
                                  (stage.order, juror.attendee))
                try:
                    grade_j['rev'] = int(
                        JurorGrade.objects.get(
                            stage_attendee=stage.rev_attendance,
                            juror_session__juror=juror).grade)
                except:
                    errors.append("Stage %d missing reviewer grade from %s" %
                                  (stage.order, juror.attendee))

                grades_j.append(grade_j)

            stage_info.append({
                'teams':
                team,
                'persons':
                person,
                'presented':
                presented,
                'rejections':
                stage.rejections.all().values_list('number', flat=True),
                'jurors':
                grades_j
            })

        return {
            'fight': fight,
            'chair': chair,
            'jurors': jurors,
            'stages': stage_info,
            'errors': errors,
            'warnings': warnings,
            'all_stages': range(fight.stage_set.count())
        }
Example #4
0
    def post(self, request, fight_id, stage):

        fight = get_object_or_404(Fight, pk=fight_id)

        all_stages = []
        act_stage = {'is_last': False, 'order': int(stage)}
        for s in fight.stage_set.all():
            st = {'active': False}
            if act_stage['is_last']:
                act_stage['is_last'] = False

            if s.order == int(stage):
                st['active'] = True

                act_stage['is_last'] = True

                act_stage['rep'] = s.rep_attendance.team.origin.name
                act_stage['opp'] = s.opp_attendance.team.origin.name
                act_stage['rev'] = s.rev_attendance.team.origin.name
                act_stage['prev'] = _fightpreview(s.fight)[s.order - 1]

                act_stage['form'] = StageForm(s, request.POST)
                act_stage['obj'] = s

            all_stages.append(st)

        if 'form' not in act_stage:
            return redirect('fight:fightjury', fight_id=fight_id)

        form = act_stage['form']
        if form.is_valid():

            if form.has_changed():

                for fn in form.changed_data:

                    if fn == 'rejections':
                        act_stage['obj'].rejections.clear()

                        for p in form.cleaned_data['rejections']:
                            act_stage['obj'].rejections.add(p)

                    elif fn == 'presented':
                        act_stage['obj'].presented = form.cleaned_data[
                            'presented']
                        act_stage['obj'].save()

                    elif fn == 'rep':
                        if form.cleaned_data['rep']:
                            act_stage[
                                'obj'].rep_attendance.active_person = form.cleaned_data[
                                    'rep']
                        else:
                            act_stage[
                                'obj'].rep_attendance.active_person = None
                        act_stage['obj'].rep_attendance.save()

                    elif fn == 'opp':
                        if form.cleaned_data['opp']:
                            act_stage[
                                'obj'].opp_attendance.active_person = form.cleaned_data[
                                    'opp']
                        else:
                            act_stage[
                                'obj'].opp_attendance.active_person = None
                        act_stage['obj'].opp_attendance.save()

                    elif fn == 'rev':
                        if form.cleaned_data['rev']:
                            act_stage[
                                'obj'].rev_attendance.active_person = form.cleaned_data[
                                    'rev']
                        else:
                            act_stage[
                                'obj'].rev_attendance.active_person = None
                        act_stage['obj'].rev_attendance.save()

                    elif fn.startswith('grade'):

                        js = form.fields[fn].jurorsession
                        att = form.fields[fn].attendance

                        grade = None
                        try:
                            grade = att.jurorgrade_set.get(juror_session=js)
                        except JurorGrade.DoesNotExist:
                            pass

                        if form.cleaned_data[fn]:
                            if grade:
                                grade.grade = form.cleaned_data[fn]
                                grade.valid = False
                                grade.save()
                            else:
                                JurorGrade.objects.create(
                                    juror_session=js,
                                    stage_attendee=att,
                                    grade=form.cleaned_data[fn],
                                    valid=False)
                        else:
                            if grade:
                                grade.delete()
                            else:
                                pass

                pass

            if '_continue' in request.POST:
                return redirect('fight:fight',
                                fight_id=fight_id,
                                stage=int(stage) + 1)
            if '_finish' in request.POST:
                return redirect('fight:fightpre', fight_id=fight_id)

        return render(request,
                      "fight/fight.html",
                      context={
                          'round': fight.round.order,
                          'room': fight.room.name,
                          'id': fight_id,
                          'all_stages': all_stages,
                          'stage': act_stage,
                          'locked': fight.locked
                      })
Example #5
0
from apps.result.utils import _fightpreview

import random

trn = Tournament.objects.get(slug=sys.argv[1])

print(trn)

problems = Problem.objects.filter(tournament=trn)

for round in trn.round_set(manager="selectives").all():
    for fight in round.fight_set.all():
        for stage in fight.stage_set.all():
            print(stage)
            prev = _fightpreview(stage.fight, use_cache=False)[stage.order - 1]
            print(prev['free'])
            print(prev["opp"])
            rejects = random.randint(0,2)
            prblms = random.sample(prev['free'], rejects+1)
            stage.presented = problems.get(number=prblms[0])
            stage.save()
            stage.rejections.clear()
            for rej in prblms[1:]:
                stage.rejections.add(problems.get(number=rej))
                pass

            for att in [stage.rep_attendance, stage.opp_attendance, stage.rev_attendance]:
                members = att.team.teammember_set.all()
                active = random.choice(members)
                att.active_person = active
Example #6
0
    def __init__(self,stage, *args, **kwargs):
        super(StageForm, self).__init__(*args, **kwargs)



        prev=_fightpreview(stage.fight)[stage.order-1]
        if prev['pk'] != stage.pk:
            raise IntegrityError("Stage number integrity Error")

        self.fields['rejections'] = forms.ModelMultipleChoiceField(queryset=Problem.objects.filter(tournament=stage.fight.round.tournament), required=False, widget=Select2MultipleWidget) # , number__in=prev['free']
        self.fields['presented'] = forms.ModelChoiceField(queryset=Problem.objects.filter(tournament=stage.fight.round.tournament),widget=Select2Widget ,required=False ) #, number__in=prev['free']
        if stage.presented:
            self.fields['presented'].initial = stage.presented_id

        self.fields['rejections'].initial = list(stage.rejections.all().values_list('pk',flat=True))

        self.fields['rep']=forms.ModelChoiceField(queryset=stage.rep_attendance.team.teammember_set(manager="students").prefetch_related('attendee__active_user__user').all(),widget=Select2Widget,required=False)
        if stage.reporter:
            self.fields['rep'].initial = stage.rep_attendance.active_person
        self.fields['opp']=forms.ModelChoiceField(queryset=stage.opp_attendance.team.teammember_set(manager="students").prefetch_related('attendee__active_user__user').all(),widget=Select2Widget,required=False)
        if stage.opponent:
            self.fields['opp'].initial = stage.opp_attendance.active_person
        self.fields['rev']=forms.ModelChoiceField(queryset=stage.rev_attendance.team.teammember_set(manager="students").prefetch_related('attendee__active_user__user').all(),widget=Select2Widget,required=False)
        if stage.reviewer:
            self.fields['rev'].initial = stage.rev_attendance.active_person

        self.grades=[]
        index=30
        for js in stage.fight.jurorsession_set(manager="voting").all():
            j={'name':js.juror.attendee.full_name,'pk':js.pk}

            f=forms.IntegerField(min_value=1,max_value=10,required=False)
            self.fields['grade-%d-rep'%(js.pk, )]=f
            f.widget.attrs['tabindex']=index
            f.jurorsession=js
            f.attendance=stage.rep_attendance
            try:
                f.initial_obj = stage.rep_attendance.jurorgrade_set.get(juror_session=js)
                f.initial = int(f.initial_obj.grade)
            except:
                pass

            f = forms.IntegerField(min_value=1, max_value=10,required=False)
            self.fields['grade-%d-opp' % (js.pk,)] = f
            f.widget.attrs['tabindex'] = index+50
            f.jurorsession = js
            f.attendance = stage.opp_attendance
            try:
                f.initial_obj = stage.opp_attendance.jurorgrade_set.get(juror_session=js)
                f.initial = int(f.initial_obj.grade)
            except:
                pass

            f = forms.IntegerField(min_value=1, max_value=10,required=False)
            self.fields['grade-%d-rev' % (js.pk,)] = f
            f.widget.attrs['tabindex'] = index+100
            f.jurorsession = js
            f.attendance = stage.rev_attendance
            try:
                f.initial_obj = stage.rev_attendance.jurorgrade_set.get(juror_session=js)
                f.initial = int(f.initial_obj.grade)
            except:
                pass

            index+=1
            self.grades.append(j)