diff --git a/config/settings/base.py b/config/settings/base.py index d58ab24..e79480a 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -276,6 +276,7 @@ INSTALLED_APPS += [ "teamsnap", "instagen", "gamecard", + "gamechanger", "teamsnap.lineup", "teamsnap.dashboard", ] diff --git a/gamecard/templates/gamecard/gamecard.html b/gamecard/templates/gamecard/gamecard.html index 65bd032..7913e48 100644 --- a/gamecard/templates/gamecard/gamecard.html +++ b/gamecard/templates/gamecard/gamecard.html @@ -1,191 +1,240 @@ {% load static %} + - - - Title + + + Title
-
-
-
- - - - - - - -
- {{ event.data.formatted_title }} {{ event.data.start_date|date:'m/d/Y g:i A' }} - {# G#01 at Browns 05/01/2021 12:30 PM#} - {{ event.data.game_type }}
- - - - - - - - - - - - - - - - - - - {% for member in members_startinglineup %} - - - - - - - - - - - - - - - {% endfor %} - -
- - - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - X -
{{ member.lineup_entry.sequence | add:"1" }}{{ member.member.last_name }}{{ member.member.jersey_number }}{{ member.lineup_entry.label }}
- - - {% for member in members_startingpositiononly %} - - - - - - - - - - - - - - - {% endfor %} - -
{{ member.member.last_name }}{{ member.member.jersey_number }}{{ member.lineup_entry.label }}
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - {% for member in members %} - - - - - - - - - - - - - - - - - - - {% endfor %} - -
AvailableAVG/OBP/SLG:PA
{{ member.member.jersey_number }}{{ member.member.last_name }}
-
-
+
+
+
+ + + + + + + +
+ {{ event.data.formatted_title }} {{ event.data.start_date|date:'m/d/Y g:i A' }} + {# G#01 at Browns 05/01/2021 12:30 PM#} + {{ event.data.game_type }}
+ + + + + + + + + + + + + + + + + + + {% for member in members_startinglineup %} + + + + + + + + + + + + + + + {% endfor %} + +
+ + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + X +
{{ member.lineup_entry.sequence | add:"1" }}{{ member.member.last_name }}{{ member.member.jersey_number }}{{ member.lineup_entry.label }}
+ + + {% for member in members_startingpositiononly %} + + + + + + + + + + + + + + + {% endfor %} + +
{{ member.member.last_name }}{{ member.member.jersey_number }}{{ member.lineup_entry.label }}
+
-
-
-
-
-
-
-
- - - - - - - - - - + + + + + + + + + + + + + + + + + {% endfor %} + +
- {{ event.data.start_date|date:"D, F j, Y g:i A" }} -
- {{ event.data.location_name }} -
+
+
+ + + + + + + + + + + + {% for event in events_future %} + + {% endfor %} + {% for event in events_past %} + + {% endfor %} + + + + {% for member in members %} - - - -
AvailableAVG/OBP/SLG:PAPCIFOF + + {{ event.data.start_date|date:'D' }} + + + + {{ event.data.start_date|date:'D' }} + +
-
-
- -
-
- VS. -
-
- -
-
-
-
- +
{{ member.member.jersey_number }}{{ member.member.last_name }} + {% if "P" in member.member.position %} + + {% else %} + + {% endif %} + + {% if "C" in member.member.position %} + + {% else %} + + {% endif %} + + {% if "IF" in member.member.position or "1B" in member.member.position %} + + {% else %} + + {% endif %} + + {% if "OF" in member.member.position %} + + {% else %} + + {% endif %} + + {{ member.availability_future.0.data.status.0 }} + + {{ member.availability_future.1.data.status.0 }} + + {{ member.availability_future.2.data.status.0 }} + + {{ member.availability_future.3.data.status.0 }} + + {{ member.availability_past.0.data.status.0 }} + + {{ member.availability_past.1.data.status.0 }} + + {{ member.availability_past.2.data.status.0 }} + + {{ member.availability_past.3.data.status.0 }} +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+ {{ event.data.start_date|date:"D, F j, Y g:i A" }} +
+ {{ event.data.location_name }} +
+ +
+
+
+ +
+
+ VS. +
+
+ {% if ts_opponent %} + + {% endif %} +
+
+
+
+
+
diff --git a/gamecard/views.py b/gamecard/views.py index d5cc273..add918a 100644 --- a/gamecard/views.py +++ b/gamecard/views.py @@ -1,9 +1,12 @@ +# TODO Remove VCR +import vcr from django.shortcuts import render from teamsnap.models import Opponent, Team from teamsnap.utils import get_teamsnap_client +@vcr.use_cassette("gamecard/fixtures/gamecard.yaml", record_mode="new_episodes") def gamecard(request, team_id, event_id): import re @@ -20,13 +23,28 @@ def gamecard(request, team_id, event_id): ts_bulkload = client.bulk_load( team_id=team_id, types=[Event, EventLineup, EventLineupEntry, AvailabilitySummary, Member], - event__id=event_id, ) - ts_event = [ - i for i in ts_bulkload if isinstance(i, Event) and i.data["id"] == event_id - ][0] - ts_availabilities = Availability.search(client, event_id=ts_event.data["id"]) + ts_events = [e for e in ts_bulkload if isinstance(e, Event)] + ts_events.sort(key=lambda d: d.data.get("start_date")) + ts_event = [e for e in ts_events if e.data["id"] == event_id][0] + ts_events_future = ts_events[ts_events.index(ts_event) + 1 :] + ts_events_past = ts_events[: ts_events.index(ts_event)] + + ts_availabilities = Availability.search(client, team_id=team_id) + + ts_availabilities_future = list( + filter( + lambda a: a.data["event_id"] in [e.data["id"] for e in ts_events_future], + ts_availabilities, + ) + ) + ts_availabilities_past = list( + filter( + lambda a: a.data["event_id"] in [e.data["id"] for e in ts_events_past], + ts_availabilities, + ) + ) ts_lineup_entries = EventLineupEntry.search(client, event_id=event_id) @@ -41,7 +59,7 @@ def gamecard(request, team_id, event_id): ts_members = [i for i in ts_bulkload if isinstance(i, Member)] # ts_member_lookup = {m.data["id"]: m for m in ts_members} - ts_availability_lookup = {m.data["member_id"]: m for m in ts_availabilities} + ts_availability_lookup = {m.data["id"]: m for m in ts_availabilities} ts_lineup_entries_lookup = {m.data["member_id"]: m for m in ts_lineup_entries} members = [] @@ -52,11 +70,27 @@ def gamecard(request, team_id, event_id): { "member": getattr(member, "data"), "availability": getattr( - ts_availability_lookup.get(member.data["id"], {}), "data", {} + ts_availability_lookup.get( + f"{member.data['id']}-{event_id}", {} + ), + "data", + {}, ), "lineup_entry": getattr( ts_lineup_entries_lookup.get(member.data["id"], {}), "data", {} ), + "availability_future": list( + filter( + lambda a: a.data.get("member_id") == member.data["id"], + ts_availabilities_future, + ) + )[:4], + "availability_past": list( + filter( + lambda a: a.data.get("member_id") == member.data["id"], + ts_availabilities_past, + ) + )[:4], } ) @@ -100,10 +134,12 @@ def gamecard(request, team_id, event_id): context = { "event": ts_event, + "events_future": ts_events_future[:4], + "events_past": list(reversed(ts_events_past))[:4], "members": members, "members_startinglineup": members_startinglineup, "members_startingpositiononly": members_startingpositiononly, "ts_team": Team.objects.get(id=team_id), - "ts_opponent": Opponent.objects.get(id=ts_event.data["opponent_id"]), + "ts_opponent": Opponent.objects.filter(id=ts_event.data["opponent_id"]).first, } return render(request, "gamecard/gamecard.html", context=context) diff --git a/setup.cfg b/setup.cfg index 0e936ed..afe0601 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ [flake8] max-line-length = 120 exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv -ignore = W503 +ignore = W503, E203 [pycodestyle] max-line-length = 120 diff --git a/teamsnap/dashboard/views.py b/teamsnap/dashboard/views.py index 2a786ac..8c6adf3 100644 --- a/teamsnap/dashboard/views.py +++ b/teamsnap/dashboard/views.py @@ -8,7 +8,8 @@ from teamsnap.views import get_teamsnap_client def dashboard(request, team_id=None): if not team_id: return redirect( - "teamsnap_dashboard", team_id=request.user.preferences.managed_team_id + "teamsnap_dashboard", + team_id=request.user.teamsnap_preferences.managed_team_id, ) from pyteamsnap.api import AvailabilitySummary, Event