gamecard v0.1

This commit is contained in:
2022-05-31 07:50:23 -05:00
parent 42d5c452e7
commit 9b1efdb8eb
86 changed files with 837 additions and 2 deletions

View File

@@ -441,3 +441,92 @@ def submit_lineup(request, team_id, event_id):
return JsonResponse(ts_event.data)
pass
return HttpResponseServerError
def gamecard(request, team_id, event_id):
import re
from pyteamsnap.api import Event, Availability, Member, EventLineupEntry, EventLineup, \
AvailabilitySummary
client = get_teamsnap_client(request)
ts_bulkload = client.bulk_load(team_id=team_id,
types=[Event, EventLineup, EventLineupEntry, AvailabilitySummary, Member],
event__id=event_id)
formsets_lineup = []
formsets_bench = []
formsets = []
events = []
contexts = []
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_availability_summary = \
[i for i in ts_bulkload if isinstance(i, AvailabilitySummary) and i.data['event_id'] == event_id][0]
ts_lineup_entries = EventLineupEntry.search(client, event_id=event_id)
if ts_lineup_entries:
ts_lineup = EventLineup.get(client, id=ts_lineup_entries[0].data['event_lineup_id'])
else:
ts_lineup = EventLineup.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:
if not member.data['is_non_player']:
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, # No Response
0: 2, # No
2: 1, # Maybe
1: 0 # Yes
}.get(d['availability'].get('status_code')),
d['member'].get('last_name'))
)
members_startinglineup = []
members_startingpositiononly = []
for member in members:
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"
if position_only:
member['lineup_entry']['label'] = position
if member['lineup_entry'].get('id') and not position_only:
members_startinglineup.append(member)
elif member['lineup_entry'].get('id') and position_only:
members_startingpositiononly.append(member)
members_startinglineup = sorted(
members_startinglineup,
key=lambda d: d.get('lineup_entry',{}).get('sequence', 100)
)
from teamsnap.forms import LineupEntryFormset, LineupEntryForm
initial = []
l=[]
# l = [(member,ts_availability_lookup.get(member['member_id'])) for member in members if not member['is_non_player']]
context={
"event": ts_event,
"members": members,
"members_startinglineup":members_startinglineup,
"members_startingpositiononly":members_startingpositiononly
}
return render(request, "lineup/gamecard.html", context=context)