move old teamsnap home to new page
This commit is contained in:
101
teamsnap/templates/teamsnap/teamsnap.html
Normal file
101
teamsnap/templates/teamsnap/teamsnap.html
Normal file
@@ -0,0 +1,101 @@
|
||||
{% extends "base.html" %}{% load static %}
|
||||
{% block title %} {{ title }}{% endblock %}
|
||||
{% block page_heading %}{% endblock %}
|
||||
{% block content %}
|
||||
<h3>Dashboard</h3>
|
||||
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>Upcoming Games</h4>
|
||||
</div>
|
||||
<div class="card-body p-1">
|
||||
<div class="row m-0">
|
||||
{% for event, availability_summary in events_availabilities|slice:":4" %}
|
||||
<div class="col">
|
||||
<div class="d-inline-flex my-1 p-2 rounded-3 border">
|
||||
<div class="chart-container" style="position: relative;height: 100px;width: 100px;">
|
||||
<canvas id="availability-donut-{{ event.data.id }}" class="availability-donut"
|
||||
data-event-id="{{ event.data.id }}"
|
||||
data-available-yes="{{ availability_summary.data.player_going_count }}"
|
||||
data-available-no="{{ availability_summary.data.player_not_going_count }}"
|
||||
data-available-maybe="{{ availability_summary.data.player_maybe_count }}"
|
||||
data-available-unknown="{{ availability_summary.data.player_unknown_count }}"
|
||||
>
|
||||
|
||||
</canvas></div>
|
||||
<div>
|
||||
<h4><strong>{{ event.data.formatted_title }}</strong></h4>
|
||||
<h6 class="text-muted mb-2">{{ event.data.start_date|date:"D, F j, Y g:i A" }}</h6>
|
||||
<h6 class="text-muted mb-2">{{ event.data.location_name }}</h6><a class="btn btn-primary btn-sm" role="button" href="{% url 'teamsnap_edit_lineup' event_ids=event.data.id team_id=request.user.profile.teamsnapsettings.managed_team.id %}">Go to Lineup</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4>Past Games</h4>
|
||||
</div>
|
||||
<div class="card-body p-1">
|
||||
{% for event in ts_events_past|slice:":4" %}
|
||||
<div class="row m-1">
|
||||
<div class="p-2 rounded-3 border">
|
||||
<h4 class="text-muted">{{ event.data.formatted_title }}</h4>
|
||||
<h6 class="text-muted mb-2">{{ event.data.start_date|date:"D, F j" }}</h6>
|
||||
<h4><strong>{{ event.data.formatted_results }}</strong></h4>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function donut(ctx, yes_count, maybe_count, no_count, unknown_count) {
|
||||
var style = getComputedStyle(document.body);
|
||||
const myChart = new Chart(ctx, {
|
||||
type: 'doughnut',
|
||||
responsive: 'true',
|
||||
data: {
|
||||
datasets: [{
|
||||
label: 'Availability',
|
||||
labels: [
|
||||
'Yes',
|
||||
'Maybe',
|
||||
'No',
|
||||
'Unknown'
|
||||
],
|
||||
data: [yes_count, maybe_count, no_count, unknown_count],
|
||||
backgroundColor: [
|
||||
style.getPropertyValue('--bs-success'),
|
||||
style.getPropertyValue('--bs-info'),
|
||||
style.getPropertyValue('--bs-danger'),
|
||||
style.getPropertyValue('--bs-secondary')
|
||||
],
|
||||
hoverOffset: 4
|
||||
}]
|
||||
},
|
||||
});
|
||||
|
||||
}
|
||||
for (ctx of document.querySelectorAll('.availability-donut')){
|
||||
donut(ctx,
|
||||
ctx.dataset.availableYes,
|
||||
ctx.dataset.availableMaybe,
|
||||
ctx.dataset.availableNo,
|
||||
ctx.dataset.availableUnknown,
|
||||
)
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
{% endblock %}
|
||||
@@ -231,102 +231,7 @@ def opponent(request, team_id, id):
|
||||
pass
|
||||
|
||||
@login_required()
|
||||
def edit_lineup(request, event_id, team_id):
|
||||
TOKEN = request.user.profile.teamsnap_access_token
|
||||
|
||||
from pyteamsnap.api import TeamSnap, Event, Availability, Member, EventLineupEntry, EventLineup, AvailabilitySummary, Opponent
|
||||
client = TeamSnap(token=TOKEN)
|
||||
time.sleep(0.5)
|
||||
|
||||
ts_bulkload = client.bulk_load(team_id=team_id,
|
||||
types=[Event, EventLineup, EventLineupEntry, AvailabilitySummary, Member],
|
||||
event__id=event_id)
|
||||
ts_event = [i for i in ts_bulkload if isinstance(i, Event)][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:
|
||||
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'))
|
||||
)
|
||||
|
||||
|
||||
from teamsnap.forms import LineupEntryFormset, LineupEntryForm
|
||||
|
||||
formset = LineupEntryFormset(
|
||||
initial=[
|
||||
{
|
||||
"event_lineup_entry_id" : member['lineup_entry'].get('id'),
|
||||
"event_lineup_id" : member['lineup_entry'].get('event_lineup_id'),
|
||||
"event_id": event_id,
|
||||
"member_id" : member['member']['id'],
|
||||
"sequence" : member['lineup_entry'].get('sequence'),
|
||||
"label" : member['lineup_entry'].get('label'),
|
||||
}
|
||||
for member in members if not member['member']['is_non_player']
|
||||
]
|
||||
)
|
||||
|
||||
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_lineup = [form for form in formset if form.initial.get('event_lineup_entry_id')]
|
||||
formset_lineup = sorted(
|
||||
formset_lineup,
|
||||
key=lambda d: d.initial.get('sequence',100)
|
||||
)
|
||||
formset_bench = [form for form in formset if
|
||||
form not in formset_lineup and
|
||||
form.availability.data['status_code'] in [2, 1]
|
||||
]
|
||||
formset_out = [form for form in formset if
|
||||
form not in formset_lineup and
|
||||
form not in formset_bench and
|
||||
not form.member.data['is_non_player']
|
||||
]
|
||||
|
||||
return render(request, "teamsnap/lineup/edit.html", context={
|
||||
"team_id": team_id,
|
||||
"event_id": event_id,
|
||||
"event": ts_event,
|
||||
"formset": formset,
|
||||
"formset_startinglineup":formset_lineup,
|
||||
"formset_bench": formset_bench,
|
||||
"formset_out": formset_out,
|
||||
"lineup": ts_lineup
|
||||
})
|
||||
|
||||
@login_required()
|
||||
def edit_multiple_lineups(request, team_id, event_ids):
|
||||
def edit_lineup(request, event_ids, team_id):
|
||||
TOKEN = request.user.profile.teamsnap_access_token
|
||||
from django.forms import formset_factory
|
||||
from teamsnap.forms import EventChooseForm
|
||||
|
||||
Reference in New Issue
Block a user