diff --git a/benchcoach/templates/benchcoach/lineup.html b/benchcoach/templates/benchcoach/lineup.html index fc9c530..9af6cc6 100644 --- a/benchcoach/templates/benchcoach/lineup.html +++ b/benchcoach/templates/benchcoach/lineup.html @@ -2,16 +2,16 @@ {% with events_active="active" %} {% block page_heading %} - + {% if event.away_team.image %} {% endif %} {{ event.away_team.name }} vs. {{ event.home_team.name }} - + {% if event.home_team.image %}{% endif %} {% if event.home_team.name == "Hounds" %} - + {% if event.away_team.image %} {% endif %} vs. {{ event.away_team }} {% elif event.away_team.name == "Hounds" %} - + {% if event.home_team.image %}{% endif %} at {{ event.home_team }} {% else %} Event diff --git a/teamsnap/templates/teamsnap/home.html b/teamsnap/templates/teamsnap/home.html index a486f6b..de2e050 100644 --- a/teamsnap/templates/teamsnap/home.html +++ b/teamsnap/templates/teamsnap/home.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "base.html" %}{% load static %} {% block title %} {{ title }}{% endblock %} {% block page_heading %}TeamSnap Info{% endblock %} {% block content %} @@ -7,60 +7,23 @@

TeamSnap: {{ teamsnap_user.email }}

TeamSnap Managed Team: {{ teamsnap_team.name }}

- - {% include 'messages.html' %} -
- {% endblock %} \ No newline at end of file diff --git a/teamsnap/urls.py b/teamsnap/urls.py index dd6c8e5..c4027b1 100644 --- a/teamsnap/urls.py +++ b/teamsnap/urls.py @@ -13,5 +13,7 @@ urlpatterns = [ path('edit/event/', views.edit_event, name='teamsnap edit event'), path('sync_teamsnap_db', views.sync_teamsnapdb_with_teamsnapapi, name="sync with teamsnapapi"), path('sync_benchcoach_db', views.sync_teamsnapdb_to_benchcoachdb, name="sync benchcoach"), + path('update/', views.update_teamsnapdb_from_teamsnapapi, name="update"), + path('send/', views.send_to_benchcoach, name="send") # path('import_teamsnap', views.import_teamsnap, name="import teamsnap"), ] \ No newline at end of file diff --git a/teamsnap/views.py b/teamsnap/views.py index ce3c94a..5e71af6 100644 --- a/teamsnap/views.py +++ b/teamsnap/views.py @@ -18,6 +18,9 @@ from django.template.loader import render_to_string from .utils.import_teamsnap import update_team, update_event, update_member, update_location, update_opponent, update_availability, update_teamsnap_object from django.forms import modelformset_factory import django.db.models +from django.contrib.auth.decorators import login_required + + def queryset_from_ids(Model, id_list): #https://stackoverflow.com/questions/4916851/django-get-a-queryset-from-array-of-ids-in-specific-order @@ -33,10 +36,16 @@ def home(request): current_benchcoach_user = request.user current_teamsnap_user = request.user.profile.teamsnap_user current_teamsnap_team = request.user.profile.teamsnapsettings.managed_team + teamsnap_objects = {} + for obj in [Availability, Event, LineupEntry, Location, Member, Opponent, Team, User]: + teamsnap_objects[obj.__name__.lower()] = {} + teamsnap_objects[obj.__name__.lower()]['object_count']=obj.objects.count() + context= { 'benchcoach_user': current_benchcoach_user, 'teamsnap_user': current_teamsnap_user, - 'teamsnap_team':current_teamsnap_team + 'teamsnap_team':current_teamsnap_team, + 'teamsnap_objects': teamsnap_objects } return render(request, 'teamsnap/home.html', context) @@ -78,6 +87,85 @@ class TeamsnapObjTableView(View): formset = self.Formset(queryset=qs) return render(request, self.template, context={'formset': formset}) +@login_required() +def update_teamsnapdb_from_teamsnapapi(request, object_name, object_id=None): + TOKEN = request.user.profile.teamsnap_access_token + USER_ID = request.user.profile.teamsnap_user.id + TEAM_ID = request.user.profile.teamsnapsettings.managed_team.id + CLIENT = TeamSnap(token=TOKEN) + + Object = { + obj.__name__.lower():obj + for obj in + [Availability, Event, LineupEntry, Location, Member, Opponent, Team, User] + }.get(object_name) + + r = {} + + for Obj in [Object]: + r[Obj.__name__.lower()] = [] + a = Obj.ApiObject.search(CLIENT, team_id=TEAM_ID) + for _a in a: + obj, created = Obj.update_or_create_from_teamsnap_api(_a.data) + r[Obj.__name__.lower()].append((obj, created)) + + for object_name, results in r.items(): + if len(r) == 0: + messages.error(request, f"Error! No {object_name} objects created or updated") + else: + result = [created for obj, created in results] + messages.success(request, + f"Success! {sum(result)} {object_name} objects created, {len(result) - sum(result)} {object_name} objects updated.") + + return redirect('teamsnap home') + +@login_required() +def send_to_benchcoach(request, object_name): + Object = { + obj.__name__.lower(): obj + for obj in + [Availability, Event, LineupEntry, Location, Member, Opponent, Team, User] + }.get(object_name) + + TEAM_ID = request.user.profile.teamsnapsettings.managed_team.id + r = {} + + r[object_name]=[] + + if object_name == 'team': + for team in Object.objects.filter(id=TEAM_ID): + r[object_name] += update_opponent(team, create_benchcoach_object=True, create_related=True) + + if object_name == 'opponent': + for team in Object.objects.filter(team_id=TEAM_ID): + r[object_name] += update_team(team, create_benchcoach_object=True, create_related=True) + + if object_name == 'location': + for location in Location.objects.filter(team_id=TEAM_ID): + r[object_name] += update_location(location, create_benchcoach_object=True, create_related=True) + + if object_name == 'member': + for member in Member.objects.filter(team_id=TEAM_ID, is_non_player=False): + r[object_name] += update_member(member, create_benchcoach_object=True, create_related=True) + + if object_name == 'event': + for event in Event.objects.filter(team_id=TEAM_ID): + r[object_name] += update_event(event, create_benchcoach_object=True, create_related=True) + + if object_name == 'availability': + for availability in Availability.objects.filter(team_id=TEAM_ID, member__is_non_player=False): + r[object_name] += update_availability(availability, create_benchcoach_object=True, create_related=True) + + for object_name, results in r.items(): + if len(r) == 0: + messages.error(request, f"Error! No {object_name} objects created or updated") + else: + result = [created for obj, created in results] + messages.success(request, + f"Success! {sum(result)} {object_name} objects created, {len(result) - sum(result)} {object_name} objects updated.") + + return redirect('teamsnap home') + def sync_teamsnapdb_with_teamsnapapi(request): ''' This sync the internal TeamSnap Database with the TeamSnap API @@ -96,10 +184,11 @@ def sync_teamsnapdb_with_teamsnapapi(request): obj, created = Obj.update_or_create_from_teamsnap_api(_a.data) r[Obj.__name__].append((obj, created)) - for Obj in [Event, Availability, Location, Member, Opponent, Team]: + for Obj in [Event, Availability]: r[Obj.__name__] = [] a = Obj.ApiObject.search(CLIENT, team_id=TEAM_ID) for _a in a: + print(f"importing {_a}") obj, created = Obj.update_or_create_from_teamsnap_api(_a.data) r[Obj.__name__].append((obj, created)) diff --git a/templates/navbar.html b/templates/navbar.html index 1245d28..883dc24 100644 --- a/templates/navbar.html +++ b/templates/navbar.html @@ -16,23 +16,7 @@ - + + \ No newline at end of file