Files
benchcoach-django/benchcoach/views.py
Tony 95697ef4fe consolidated objects into one benchcoach app
created benchcoachproject app to contain all the settings and stuff
some other changes that got grouped with this commit is the adding the ApiObject to the TeamSnap object model
2021-12-21 17:18:04 -06:00

143 lines
5.2 KiB
Python

from django.shortcuts import render
from .models import Event, Team, Player, Positioning, Venue
from .forms import PositioningFormSet, TeamsnapEventForm
from django.contrib import messages
from django.db.models import F
from django.views.generic import ListView, DetailView
class BenchCoachListView(ListView):
title = None
class EventDetailView(DetailView):
model = Event
context_object_name = "event"
template_name = 'benchcoach/event-detail.html'
class EventListView(ListView):
model = Event
context_object_name = "events"
template_name = 'benchcoach/event-list.html'
class PlayerListView(ListView):
model = Player
template_name = 'benchcoach/list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = "Players"
context['members_tab_active'] ='active'
return context
class TeamListView(ListView):
model = Team
template_name = 'benchcoach/list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = "Teams"
context['opponents_tab_active'] ='active'
return context
class VenueListView(ListView):
model = Venue
template_name = 'benchcoach/list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = "Venues"
context['venues_tab_active'] ='active'
return context
def lineup_edit(request, event_id):
if request.method == "POST":
# create a form instance and populate it with data from the request:
formset = PositioningFormSet(request.POST)
is_valid = [f.is_valid() for f in formset]
for form in formset:
if form.is_valid():
# process the data in form.cleaned_data as required
# ...
# redirect to a new URL:
if isinstance(form.cleaned_data["id"], Positioning):
positioning_id = form.cleaned_data.pop(
"id"
).id # FIXME this is a workaround, not sure why it is necessary
positioning = Positioning.objects.filter(id=positioning_id)
positioning.update(**form.cleaned_data)
did_create = False
else:
positioning = Positioning.objects.create(
**form.cleaned_data, event_id=event_id
)
did_create = True
else:
messages.error(
request, f"Error submitting lineup. {form.instance} {form.errors}"
)
pass
if (True in is_valid) and (False in is_valid):
messages.warning(request, "Lineup partially submitted.")
elif True in is_valid:
messages.success(request, "Lineup submitted successfully.")
elif True not in is_valid:
messages.error(request, f"Error submitting lineup.")
else:
messages.error(request, f"Error submitting lineup.")
# return HttpResponse(status=204)
# return render(request, 'success.html', {'call_back':'edit lineup','id':event_id, 'errors':[error for error in formset.errors if error]}, status=200)
previous_event = Event.objects.filter(id=event_id - 1).first()
event = Event.objects.get(id=event_id)
next_event = Event.objects.get(id=event_id + 1)
players = Player.objects.prefetch_related("availability_set", "positioning_set")
for player in players:
Positioning.objects.get_or_create(player_id=player.id, event_id=event_id)
qs = (
event.positioning_set.all()
.filter(player__availability__event=event_id)
.order_by("order", "-player__availability__available", "player__last_name")
.annotate(event_availability=F("player__availability__available"))
)
formset = PositioningFormSet(queryset=qs)
formset_lineup = [f for f in formset if f.instance.order]
formset_dhd = [f for f in formset if not f.instance.order and f.instance.position]
formset_bench = [
f for f in formset if f not in formset_lineup and f not in formset_dhd
]
teamsnap_form = TeamsnapEventForm(instance=event)
details = {
"Away Team": event.away_team,
"Home Team": event.home_team,
"Date": event.start.date(),
"Time": event.start.time(),
"Venue": event.venue,
"TeamSnap": teamsnap_form
# "TeamSnap Link": event.event_set.first()
# "TeamSnap Link": f'<a href="{reverse("teamsnap edit event", kwargs={"id": event.event_set.first().id})}"> {event.event_set.first()} </a>' if event.event_set.first() else None
}
return render(
request,
"benchcoach/lineup.html",
{
"title": "Lineup",
"event": event,
"details": details,
"previous_event": previous_event,
"teamsnap_form": teamsnap_form,
"next_event": next_event,
"formset": formset,
"formset_lineup": formset_lineup,
"formset_bench": formset_bench,
"formset_dhd": formset_dhd,
},
)