implement lineup send to gamechanger

This commit is contained in:
2022-06-08 14:08:33 -05:00
parent 50c9b70546
commit f788fb9932
21 changed files with 409 additions and 82 deletions

View File

@@ -21,6 +21,7 @@ class LineupEntryForm(forms.Form):
member = None
availability = None
lineup_entry = None
gamechanger_player_id = forms.Field(required=False)
event_lineup_entry_id = forms.Field(required=False)
event_lineup_id = forms.Field(required=False)

View File

@@ -31,6 +31,7 @@ class Migration(migrations.Migration):
"user",
models.OneToOneField(
on_delete=django.db.models.deletion.CASCADE,
related_name='teamsnap_preferences',
to=settings.AUTH_USER_MODEL,
),
),

View File

View File

@@ -5,5 +5,10 @@ from benchcoach.users.models import User
class Preferences(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
user = models.OneToOneField(
User, on_delete=models.CASCADE, related_name="teamsnap_preferences"
)
managed_team_id = models.IntegerField()
class Meta:
verbose_name_plural = "preferences"

View File

@@ -25,7 +25,6 @@
<tbody>
<tr class="align-top mx-1">
{% for event_data in contexts %}
<td class="px-1">
{% include "lineup/widgets/lineup.html" with event=event_data.event event_id=event_data.event.data.id formset=event_data.formset formset_startinglineup=event_data.formset_startinglineup formset_bench=event_data.formset_bench formset_out=event_data.formset_out formset_startingpositionalonly=event_data.formset_startingpositionalonly %}
</td>
@@ -41,25 +40,24 @@
{% block inline_javascript %}
{{ block.super }}
<script src="{% static 'js/Sortable.js' %}"></script>
<script src="{% static 'js/lineup-table.js' %}"></script>
<script>
window.addEventListener('DOMContentLoaded', () => {
/* Run whatever you want */
const postForms = document.querySelectorAll("[id^=form-lineup]");
for (postForm of postForms) {
function handleSubmit(postForm) {
postForm.addEventListener("submit", e => {
const postSubmits = document.querySelectorAll("[id^=submit-lineup]");
for (postSubmit of postSubmits) {
function handleSubmit(postSubmit) {
postSubmit.addEventListener("click", e => {
e.preventDefault();
formData = new FormData(postForm);
fetch(postForm.action, {
formData = new FormData(postSubmit.form);
fetch(postSubmit.formAction, {
method: 'POST',
body: formData,
})
.then(response => response.json())
.then(response => response)
.then(data => {
{#postForm.reset();#}
document.querySelector("#popup-messages-content").innerHTML = `<div class="alert alert-dismissible alert-success" role="alert">
<strong>Success!</strong> ${data.formatted_title} <strong>saved</strong>.
<strong>Success!</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div> `
})
@@ -69,7 +67,7 @@
})
}
handleSubmit(postForm)
handleSubmit(postSubmit)
}
});
</script>

View File

@@ -1,6 +1,6 @@
{% load static %}
<div class="card mx-auto benchcoach-lineup" style="max-width: 455px" id="benchcoach-lineup-{{ event_id }}">
<form method="post" action='{% url 'teamsnap_submit_lineup' team_id=event.data.team_id event_id=event.data.id %}' id="form-lineup-{{ event.data.id }}">
<form method="post" id="form-lineup-{{ event.data.id }}">
{{ formset.management_form }}
{% csrf_token %}
<div class="border-bottom p-2">
@@ -34,11 +34,17 @@
</ul>
</div>
<div>
<button class="btn btn-teamsnap btn-sm py-0 m-1" type="submit">
<button type="Submit" class="btn btn-teamsnap btn-sm py-0 m-1" formaction="{% url 'teamsnap_submit_lineup' team_id=event.data.team_id event_id=event.data.id %}" form="form-lineup-{{ event.data.id }}" id="submit-lineup-gamechanger-{{ event.data.id }}">
<i class="bi bi-arrow-right"></i>
TeamSnap
</button>
</div>
<div>
<button type="Submit" class="btn btn-gamechanger btn-sm py-0 m-1 text-nowrap" formaction="{% url 'gamechanger_lineup_submit' %}" form="form-lineup-{{ event.data.id }}" id="submit-lineup-gamechanger-{{ event.data.id }}">
<i class="bi bi-arrow-right"></i>
GameChanger
</button>
</div>
</div>
</div>
</div>

View File

@@ -8,6 +8,7 @@
data-player-name="{{ form.member.data.last_name }}, {{ form.member.data.first_name }}"
data-availability-statuscode="{{ form.availability.data.status_code }}"
>
{{ form.gamechanger_player_id.as_hidden }}
{{ form.event_lineup_entry_id.as_hidden }}
{{ form.event_lineup_id.as_hidden }}
{{ form.event_id.as_hidden }}

View File

@@ -7,10 +7,12 @@ from allauth.socialaccount.providers.oauth2.views import (
OAuth2CallbackView,
OAuth2LoginView,
)
from django.http import HttpResponseNotAllowed, HttpResponseServerError, JsonResponse
from django.http import HttpResponse, HttpResponseNotAllowed, HttpResponseServerError
from django.shortcuts import redirect, render
from django.views.generic.edit import FormView
from gamechanger.models import Player as GamechangerPlayer
from .forms import PreferencesForm
from .models import Preferences
from .provider import TeamsnapProvider
@@ -120,7 +122,8 @@ class PreferencesFormView(FormView):
def schedule_view(request, team_id=None):
if not team_id:
return redirect(
"teamsnap_schedule", team_id=request.user.preferences.managed_team_id
"teamsnap_schedule",
team_id=request.user.teamsnap_preferences.managed_team_id,
)
client = get_teamsnap_client(request)
no_past = bool(request.GET.get("no_past", 0))
@@ -149,7 +152,7 @@ def schedule_view(request, team_id=None):
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
"teamsnap_event", team_id=request.user.teamsnap_preferences.managed_team_id
)
from pyteamsnap.api import (
@@ -225,6 +228,16 @@ def edit_lineup(request, event_ids, team_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}
gc_player_lookup = {
m.data["id"]: getattr(
GamechangerPlayer.objects.filter(
teamsnap_member_id=m.data["id"]
).first(),
"id",
None,
)
for m in ts_members
}
ts_availability_lookup = {m.data["member_id"]: m for m in ts_availabilities}
ts_lineup_entries_lookup = {m.data["member_id"]: m for m in ts_lineup_entries}
@@ -300,6 +313,9 @@ def edit_lineup(request, event_ids, team_id):
"member_id": member["member"]["id"],
"sequence": member["lineup_entry"].get("sequence"),
"label": position,
"gamechanger_player_id": gc_player_lookup.get(
member["member"]["id"]
),
}
)
@@ -360,7 +376,8 @@ def edit_lineup(request, event_ids, team_id):
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
@@ -395,12 +412,11 @@ def dashboard(request, team_id=None):
def submit_lineup(request, team_id, event_id):
from pyteamsnap.api import Event, EventLineup, EventLineupEntry
from pyteamsnap.api import EventLineup, EventLineupEntry
from teamsnap.forms import LineupEntryFormset
client = get_teamsnap_client(request)
ts_event = Event.get(client, event_id)
ts_lineup = EventLineup.search(client, event_id=event_id)
event_lineup_id = ts_lineup[0].data["id"]
if request.GET:
@@ -443,10 +459,6 @@ def submit_lineup(request, team_id, event_id):
else:
pass
else:
# breakpoint()
pass
# breakpoint()
pass
return JsonResponse(ts_event.data)
pass
return HttpResponseServerError
return HttpResponse(status=200)
return HttpResponseServerError()