implement lineup multi-edit

This commit is contained in:
2022-06-08 19:48:43 -05:00
parent 8093d8288e
commit e79b345214
4 changed files with 83 additions and 1 deletions

View File

@@ -65,6 +65,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{% url 'teamsnap_schedule' %}">{% translate "Schedule" %}</a> <a class="nav-link" href="{% url 'teamsnap_schedule' %}">{% translate "Schedule" %}</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="{% url 'teamsnap_choose_multiple_lineups' team_id=request.user.preferences.managed_team_id%}?num=3">{% translate "Multi-Lineup" %}</a>
</li>
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">

View File

@@ -52,3 +52,17 @@ class LineupEntryForm(forms.Form):
LineupEntryFormset = formset_factory( LineupEntryFormset = formset_factory(
LineupEntryForm, can_delete=True, can_order=True, extra=0 LineupEntryForm, can_delete=True, can_order=True, extra=0
) )
class EventChooseForm(forms.Form):
event_id = forms.ChoiceField()
# checked = forms.BooleanField(required=False)
# def __init__(self, events, *args, **kwargs):
# super(EventChooseForm, self).__init__(*args, **kwargs)
# self.fields['foo'].choices = [e.data['id'] for e in events]
LineupEntryFormset = formset_factory(
LineupEntryForm, can_delete=True, can_order=True, extra=0
)

View File

@@ -6,6 +6,7 @@ from .views import (
PreferencesFormView, PreferencesFormView,
dashboard, dashboard,
edit_lineup, edit_lineup,
multi_lineup_choose,
schedule_view, schedule_view,
submit_lineup, submit_lineup,
view_event, view_event,
@@ -39,4 +40,9 @@ urlpatterns += [
edit_lineup, edit_lineup,
name="teamsnap_edit_multiple_lineups", name="teamsnap_edit_multiple_lineups",
), ),
path(
"<int:team_id>/multievent/choose",
multi_lineup_choose,
name="teamsnap_choose_multiple_lineups",
),
] ]

View File

@@ -7,7 +7,12 @@ from allauth.socialaccount.providers.oauth2.views import (
OAuth2CallbackView, OAuth2CallbackView,
OAuth2LoginView, OAuth2LoginView,
) )
from django.http import HttpResponseNotAllowed, HttpResponseServerError, JsonResponse from django.http import (
HttpResponse,
HttpResponseNotAllowed,
HttpResponseServerError,
JsonResponse,
)
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
@@ -450,3 +455,57 @@ def submit_lineup(request, team_id, event_id):
return JsonResponse(ts_event.data) return JsonResponse(ts_event.data)
pass pass
return HttpResponseServerError return HttpResponseServerError
def multi_lineup_choose(request, team_id):
from django.forms import formset_factory
from pyteamsnap.api import Event
from .forms import EventChooseForm
client = get_teamsnap_client(request)
if request.method == "POST":
ts_events = Event.search(client, team_id=team_id)
EventChooseFormset = formset_factory(EventChooseForm)
formset = EventChooseFormset(request.POST)
choices = [(e.data["id"], e.data["formatted_title"]) for e in ts_events]
for form in formset:
form.fields["event_id"].choices = choices
if formset.is_valid():
event_ids = [f.cleaned_data["event_id"] for f in formset]
else:
event_ids = request.GET.get("event_ids").split(",")
EventChooseFormset = formset_factory(EventChooseForm)
formset = EventChooseFormset(request.POST)
return redirect(
"teamsnap_edit_multiple_lineups",
team_id=team_id,
event_ids=",".join(event_ids),
)
elif not request.GET.get("num"):
return HttpResponse(500)
else:
num = int(request.GET.get("num"))
TEAM_ID = team_id
ts_events = Event.search(client, team_id=TEAM_ID)
ts_events = {e.data["id"]: e for e in ts_events}
EventChooseFormset = formset_factory(EventChooseForm, extra=num)
formset = EventChooseFormset()
choices = [(id, e.data["formatted_title"]) for id, e in ts_events.items()]
for form in formset:
form.fields["event_id"].choices = choices
pass
return render(
request,
"lineup/multiple_choose.html",
context={"formset": formset, "team_id": team_id},
)