add edit_lineup dashboard
This commit is contained in:
@@ -196,3 +196,203 @@ def view_event(request, event_id, team_id=None):
|
||||
"lineup_entries": ts_lineup_entries,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def edit_lineup(request, event_ids, team_id):
|
||||
import re
|
||||
|
||||
from teamsnap.forms import LineupEntryFormset
|
||||
|
||||
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 (
|
||||
Availability,
|
||||
AvailabilitySummary,
|
||||
Event,
|
||||
EventLineup,
|
||||
EventLineupEntry,
|
||||
Member,
|
||||
TeamSnap,
|
||||
)
|
||||
|
||||
client = TeamSnap(token=ts_token)
|
||||
|
||||
event_ids = str(event_ids).split(",")
|
||||
|
||||
ts_bulkload = client.bulk_load(
|
||||
team_id=team_id,
|
||||
types=[Event, EventLineup, EventLineupEntry, AvailabilitySummary, Member],
|
||||
event__id=",".join(event_ids),
|
||||
)
|
||||
event_ids = [int(i) for i in event_ids]
|
||||
|
||||
contexts = []
|
||||
for event_id in event_ids:
|
||||
ts_event = [
|
||||
i for i in ts_bulkload if isinstance(i, Event) and i.data["id"] == event_id
|
||||
][0]
|
||||
ts_availabilities = Availability.search(client, event_id=ts_event.data["id"])
|
||||
ts_lineup_entries = EventLineupEntry.search(client, event_id=event_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}
|
||||
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}
|
||||
|
||||
members = []
|
||||
|
||||
for member in ts_members:
|
||||
members.append(
|
||||
{
|
||||
"member": getattr(member, "data"),
|
||||
"availability": getattr(
|
||||
ts_availability_lookup.get(member.data["id"], {}), "data", {}
|
||||
),
|
||||
"lineup_entry": getattr(
|
||||
ts_lineup_entries_lookup.get(member.data["id"], {}), "data", {}
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
members = sorted(
|
||||
members,
|
||||
key=lambda d: (
|
||||
{None: 3, 0: 2, 2: 1, 1: 0}.get( # No Response # No # Maybe # Yes
|
||||
d["availability"].get("status_code")
|
||||
),
|
||||
d["member"].get("last_name"),
|
||||
),
|
||||
)
|
||||
|
||||
initial = []
|
||||
for member in members:
|
||||
if not member["member"]["is_non_player"]:
|
||||
if re.search(
|
||||
r"([A-Z0-9]+)(?:\s+\[(.*)\])?",
|
||||
member["lineup_entry"].get("label", ""),
|
||||
):
|
||||
position, position_note = re.search(
|
||||
r"([A-Z0-9]+)(?:\s+\[(.*)\])?",
|
||||
member["lineup_entry"].get("label", ""),
|
||||
).groups()
|
||||
else:
|
||||
position, position_note = ("", "")
|
||||
position_only = position_note == "PO"
|
||||
initial.append(
|
||||
{
|
||||
"event_lineup_entry_id": member["lineup_entry"].get("id"),
|
||||
"event_lineup_id": member["lineup_entry"].get(
|
||||
"event_lineup_id"
|
||||
),
|
||||
"event_id": event_id,
|
||||
"position_only": position_only,
|
||||
"member_id": member["member"]["id"],
|
||||
"sequence": member["lineup_entry"].get("sequence"),
|
||||
"label": position,
|
||||
}
|
||||
)
|
||||
|
||||
formset = LineupEntryFormset(initial=initial)
|
||||
|
||||
for form in formset:
|
||||
form.member = ts_member_lookup.get(form["member_id"].initial)
|
||||
form.availability = ts_availability_lookup.get(form["member_id"].initial)
|
||||
|
||||
formset_startinglineup = [
|
||||
form
|
||||
for form in formset
|
||||
if form.initial.get("event_lineup_entry_id")
|
||||
and not form.initial.get("position_only")
|
||||
]
|
||||
formset_startinglineup = sorted(
|
||||
formset_startinglineup, key=lambda d: d.initial.get("sequence", 100)
|
||||
)
|
||||
formset_startingpositiononly = [
|
||||
form
|
||||
for form in formset
|
||||
if form.initial.get("event_lineup_entry_id")
|
||||
and form not in formset_startinglineup
|
||||
]
|
||||
formset_startingpositiononly = sorted(
|
||||
formset_startingpositiononly, key=lambda d: d.initial.get("sequence", 100)
|
||||
)
|
||||
formset_bench = [
|
||||
form
|
||||
for form in formset
|
||||
if form not in formset_startinglineup
|
||||
and form not in formset_startingpositiononly
|
||||
and form.availability.data["status_code"] in [2, 1]
|
||||
]
|
||||
formset_out = [
|
||||
form
|
||||
for form in formset
|
||||
if form not in formset_startinglineup
|
||||
and form not in formset_bench
|
||||
and form not in formset_startingpositiononly
|
||||
and not form.member.data["is_non_player"]
|
||||
]
|
||||
|
||||
contexts.append(
|
||||
{
|
||||
"event": ts_event,
|
||||
"formset": formset,
|
||||
"formset_bench": formset_bench,
|
||||
"formset_startinglineup": formset_startinglineup,
|
||||
"formset_startingpositionalonly": formset_startingpositiononly,
|
||||
"formset_out": formset_out,
|
||||
}
|
||||
)
|
||||
|
||||
return render(
|
||||
request, "lineup/multiple_edit.html", context={"contexts": contexts}
|
||||
)
|
||||
|
||||
|
||||
def dashboard(request, team_id=None):
|
||||
if not team_id:
|
||||
return redirect(
|
||||
"teamsnap_dashboard", 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, TeamSnap
|
||||
|
||||
client = TeamSnap(token=ts_token)
|
||||
ts_events = Event.search(client, team_id=team_id)
|
||||
ts_availability_summaries_d = {
|
||||
a.data["id"]: a for a in AvailabilitySummary.search(client, team_id=team_id)
|
||||
}
|
||||
ts_events_future = [
|
||||
e
|
||||
for e in ts_events
|
||||
if e.data["start_date"] > datetime.datetime.now(datetime.timezone.utc)
|
||||
]
|
||||
ts_events_past = [
|
||||
e
|
||||
for e in reversed(ts_events)
|
||||
if e.data["start_date"] < datetime.datetime.now(datetime.timezone.utc)
|
||||
]
|
||||
|
||||
return render(
|
||||
request,
|
||||
"dashboard.html",
|
||||
{
|
||||
"ts_events_future": ts_events_future,
|
||||
"ts_events_past": ts_events_past,
|
||||
"events_availabilities": [
|
||||
(e, ts_availability_summaries_d[e.data["id"]]) for e in ts_events_future
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user