From 598ebd69107c72ae747c7b9317ffdb673db06af0 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 2 Jun 2022 10:33:34 -0500 Subject: [PATCH] add schedule, view_event --- benchcoach/static/css/project.css | 4 + benchcoach/templates/base.html | 11 +- benchcoach/users/admin.py | 3 - config/urls.py | 2 +- teamsnap/admin.py | 5 + teamsnap/templates/event/instagen.html | 76 ++++++++++++ teamsnap/templates/event/view_event.html | 144 +++++++++++++++++++++++ teamsnap/templates/schedule.html | 2 +- teamsnap/urls.py | 13 +- teamsnap/views.py | 93 +++++++++++++++ 10 files changed, 344 insertions(+), 9 deletions(-) create mode 100644 teamsnap/templates/event/instagen.html create mode 100644 teamsnap/templates/event/view_event.html diff --git a/benchcoach/static/css/project.css b/benchcoach/static/css/project.css index f1d543d..1164b47 100644 --- a/benchcoach/static/css/project.css +++ b/benchcoach/static/css/project.css @@ -11,3 +11,7 @@ background-color: #f2dede; border-color: #eed3d7; } + +.navbar-brand { + text-transform: uppercase; +} diff --git a/benchcoach/templates/base.html b/benchcoach/templates/base.html index f0c3745..4603391 100644 --- a/benchcoach/templates/base.html +++ b/benchcoach/templates/base.html @@ -15,7 +15,7 @@ - + {% endblock %} @@ -37,7 +37,7 @@
-
diff --git a/benchcoach/users/admin.py b/benchcoach/users/admin.py index 14de6f3..94af963 100644 --- a/benchcoach/users/admin.py +++ b/benchcoach/users/admin.py @@ -4,12 +4,9 @@ from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ from benchcoach.users.forms import UserAdminChangeForm, UserAdminCreationForm -from teamsnap.models import Preferences User = get_user_model() -admin.site.register(Preferences) - @admin.register(User) class UserAdmin(auth_admin.UserAdmin): diff --git a/config/urls.py b/config/urls.py index 86ca410..43d57a6 100644 --- a/config/urls.py +++ b/config/urls.py @@ -15,7 +15,7 @@ urlpatterns = [ # User management path("users/", include("benchcoach.users.urls", namespace="users")), path("accounts/", include("allauth.urls")), - path("ts/", include("teamsnap.urls")), + path("", include("teamsnap.urls")), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/teamsnap/admin.py b/teamsnap/admin.py index 846f6b4..cdfa15c 100644 --- a/teamsnap/admin.py +++ b/teamsnap/admin.py @@ -1 +1,6 @@ +from django.contrib import admin + +from .models import Preferences + # Register your models here. +admin.site.register(Preferences) diff --git a/teamsnap/templates/event/instagen.html b/teamsnap/templates/event/instagen.html new file mode 100644 index 0000000..0e63ad6 --- /dev/null +++ b/teamsnap/templates/event/instagen.html @@ -0,0 +1,76 @@ + +{% extends "base.html" %}{% load static %} +{% block title %} {{ event.data.formatted_title }} - Instagenerator{% endblock %} +{% block page_heading %} +
+
+ +
+
Hounds Instagenerator
+
+{% endblock %} +{% block page_subheading %}{{ event.data.formatted_title }}, {{ event.data.start_date }}, {{ event.data.location_name }}{% endblock %} +{% block content %} + +
+ +
+ +
+ +
+ Background +
+ + +
+ +
+ + +
+
+ + +
+
+ +
+ Layout +
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ +{% endblock %} diff --git a/teamsnap/templates/event/view_event.html b/teamsnap/templates/event/view_event.html new file mode 100644 index 0000000..9ad1e08 --- /dev/null +++ b/teamsnap/templates/event/view_event.html @@ -0,0 +1,144 @@ +{% extends "base.html" %}{% load static %} +{% block title %} {{ title }}{% endblock %} + +{% block content %} +
+
+

{{ event.data.formatted_title }}

+
{{ event.data.start_date|date:"D, F j, Y g:i A" }}
+ +
+
+{#
#} +{# #} +{# #} +{# #} +{# #} +{#
#} +{# #} +{#
#} +{#
#} +{#
#} +
+
+
+ +
+
+
+
+ +
+
+
+
+ + {# #} + {# #} + + + + + + + + + + + + + + +
+ Date + + {{ event.data.start_date|date:"D, F j, Y g:i A" }} +
+ Opponent + + {{ event.data.opponent_name }} +
+ Location + + {{ event.data.location_name }} +
+
+
+
+ +
+
+
+ Availabilities +
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + {{ availability_summary.data.player_going_count }} + + + + {{ availability_summary.data.player_maybe_count }} + + + + {{ availability_summary.data.player_not_going_count }} + + + + {{ availability_summary.data.player_unknown_count }} +
+
+
+
+ +
+
+
+ Lineup +
+
+
+
+ Edit +
+
+
+
+
+{% endblock %} diff --git a/teamsnap/templates/schedule.html b/teamsnap/templates/schedule.html index afb28cb..2c59047 100644 --- a/teamsnap/templates/schedule.html +++ b/teamsnap/templates/schedule.html @@ -35,7 +35,7 @@ {{ event.data.location_name }} - + {% endfor %} diff --git a/teamsnap/urls.py b/teamsnap/urls.py index f0b6647..4d172e9 100644 --- a/teamsnap/urls.py +++ b/teamsnap/urls.py @@ -2,8 +2,17 @@ from allauth.socialaccount.providers.oauth2.urls import default_urlpatterns from django.urls import path from .provider import TeamsnapProvider -from .views import PreferencesFormView +from .views import PreferencesFormView, schedule_view, view_event urlpatterns = default_urlpatterns(TeamsnapProvider) -urlpatterns += [path("preferences", PreferencesFormView.as_view(), name="preferences")] +urlpatterns += [ + path("preferences/", PreferencesFormView.as_view(), name="preferences"), + path("/schedule/", schedule_view, name="teamsnap_schedule"), + path("schedule/", schedule_view, name="teamsnap_schedule"), + path( + "/schedule/view_event/", + view_event, + name="teamsnap_view_event", + ), +] diff --git a/teamsnap/views.py b/teamsnap/views.py index 540dea0..fdb8770 100644 --- a/teamsnap/views.py +++ b/teamsnap/views.py @@ -1,9 +1,12 @@ +import datetime + import requests from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) +from django.shortcuts import redirect, render from django.views.generic.edit import FormView from .forms import PreferencesForm @@ -103,3 +106,93 @@ class PreferencesFormView(FormView): form.fields["managed_team_id"].widget.choices = choices return form + + +def schedule_view(request, team_id=None): + if not team_id: + return redirect( + "teamsnap_schedule", team_id=request.user.preferences.managed_team_id + ) + request.user.socialaccount_set.filter(provider="teamsnap").first() + current_teamsnap_user = request.user.socialaccount_set.filter( + provider="teamsnap" + ).first() + + ts_token = ( + current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token + ) + no_past = bool(request.GET.get("no_past", 0)) + games_only = bool(request.GET.get("games_only", 0)) + from pyteamsnap.api import Event, TeamSnap + + client = TeamSnap(token=ts_token) + ts_events = Event.search(client, team_id=team_id) + if no_past: + ts_events = [ + e + for e in ts_events + if e.data["start_date"] > datetime.datetime.now(datetime.timezone.utc) + ] + if games_only: + ts_events = [e for e in ts_events if e.data["is_game"]] + ts_events = {e.data["id"]: e for e in ts_events} + + pass + return render( + request, + "schedule.html", + context={"events": ts_events.values(), "team_id": team_id}, + ) + + +def view_event(request, event_id, team_id=None): + if not team_id: + return redirect( + "teamsnap_event", team_id=request.user.preferences.managed_team_id + ) + request.user.socialaccount_set.filter(provider="teamsnap").first() + current_teamsnap_user = request.user.socialaccount_set.filter( + provider="teamsnap" + ).first() + + ts_token = ( + current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token + ) + + from pyteamsnap.api import ( + AvailabilitySummary, + Event, + EventLineup, + EventLineupEntry, + Member, + TeamSnap, + ) + + client = TeamSnap(token=ts_token) + 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)][0] + ts_availability_summary = [ + i + for i in ts_bulkload + if isinstance(i, AvailabilitySummary) and i.data["event_id"] == event_id + ][0] + ts_lineup_entries = [ + i + for i in ts_bulkload + if isinstance(i, EventLineupEntry) and i.data["event_id"] == event_id + ] + + return render( + request, + "event/view_event.html", + context={ + "availability_summary": ts_availability_summary, + "event": ts_event, + "availablities": [], + "lineup_entries": ts_lineup_entries, + }, + )