implement lineup send to gamechanger
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
),
|
||||
|
||||
0
teamsnap/migrations/__init__.py
Normal file
0
teamsnap/migrations/__init__.py
Normal 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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user