initial commit
This commit is contained in:
18
lineups/migrations/0007_alter_positioning_position.py
Normal file
18
lineups/migrations/0007_alter_positioning_position.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 16:11
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lineups', '0006_alter_positioning_order'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='positioning',
|
||||
name='position',
|
||||
field=models.CharField(blank=True, choices=[('EH', 'EH'), ('P', 'P'), ('C', 'C'), ('1B', '1B'), ('2B', '2B'), ('3B', '3B'), ('SS', 'SS'), ('LF', 'LF'), ('CF', 'CF'), ('RF', 'RF'), ('DH', 'DH')], default=None, max_length=2, null=True),
|
||||
),
|
||||
]
|
||||
@@ -1,9 +1,10 @@
|
||||
from django.contrib import admin
|
||||
from .models import User, Team, Location, Event, Member
|
||||
from .models import User, Team, Location, Event, Member, Availability
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(User)
|
||||
admin.site.register(Team)
|
||||
admin.site.register(Event)
|
||||
admin.site.register(Location)
|
||||
admin.site.register(Member)
|
||||
admin.site.register(Member)
|
||||
admin.site.register(Availability)
|
||||
60
teamsnap/migrations/0003_auto_20211121_1540.py
Normal file
60
teamsnap/migrations/0003_auto_20211121_1540.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 15:40
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('teamsnap', '0002_auto_20211121_0035'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='event',
|
||||
old_name='event',
|
||||
new_name='bencoach_event',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='location',
|
||||
old_name='venue',
|
||||
new_name='bencoach_venue',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='member',
|
||||
old_name='player',
|
||||
new_name='bencoach_player',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='team',
|
||||
old_name='team',
|
||||
new_name='bencoach_team',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='member',
|
||||
name='first_name',
|
||||
field=models.CharField(max_length=50, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='member',
|
||||
name='is_non_player',
|
||||
field=models.BooleanField(default=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='member',
|
||||
name='jersey_number',
|
||||
field=models.IntegerField(null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='member',
|
||||
name='last_name',
|
||||
field=models.CharField(max_length=50, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='member',
|
||||
name='team',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team'),
|
||||
),
|
||||
]
|
||||
17
teamsnap/migrations/0004_remove_member_name.py
Normal file
17
teamsnap/migrations/0004_remove_member_name.py
Normal file
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 15:44
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('teamsnap', '0003_auto_20211121_1540'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='member',
|
||||
name='name',
|
||||
),
|
||||
]
|
||||
30
teamsnap/migrations/0005_availability.py
Normal file
30
teamsnap/migrations/0005_availability.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 16:11
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lineups', '0007_alter_positioning_position'),
|
||||
('teamsnap', '0004_remove_member_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Availability',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('teamsnap_id', models.CharField(max_length=10, unique=True)),
|
||||
('status_code', models.SmallIntegerField(null=True)),
|
||||
('benchcoach_availability', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='lineups.availability')),
|
||||
('event', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.event')),
|
||||
('member', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.member')),
|
||||
('team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
18
teamsnap/migrations/0006_alter_availability_status_code.py
Normal file
18
teamsnap/migrations/0006_alter_availability_status_code.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 16:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('teamsnap', '0005_availability'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='availability',
|
||||
name='status_code',
|
||||
field=models.SmallIntegerField(choices=[(1, 'Yes'), (0, 'No'), (2, 'Maybe'), (None, 'Unknown')], default=None, null=True),
|
||||
),
|
||||
]
|
||||
24
teamsnap/migrations/0007_auto_20211121_1628.py
Normal file
24
teamsnap/migrations/0007_auto_20211121_1628.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 16:28
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('teamsnap', '0006_alter_availability_status_code'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='team',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='event',
|
||||
name='opponent',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='opponent', to='teamsnap.team'),
|
||||
),
|
||||
]
|
||||
17
teamsnap/migrations/0008_alter_availability_options.py
Normal file
17
teamsnap/migrations/0008_alter_availability_options.py
Normal file
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 16:36
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('teamsnap', '0007_auto_20211121_1628'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='availability',
|
||||
options={'verbose_name_plural': 'availabilities'},
|
||||
),
|
||||
]
|
||||
23
teamsnap/migrations/0009_auto_20211121_1757.py
Normal file
23
teamsnap/migrations/0009_auto_20211121_1757.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 17:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('teamsnap', '0008_alter_availability_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='points_for_opponent',
|
||||
field=models.PositiveSmallIntegerField(null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='points_for_team',
|
||||
field=models.PositiveSmallIntegerField(null=True),
|
||||
),
|
||||
]
|
||||
19
teamsnap/migrations/0010_event_is_game.py
Normal file
19
teamsnap/migrations/0010_event_is_game.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 3.2.6 on 2021-11-21 18:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('teamsnap', '0009_auto_20211121_1757'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='is_game',
|
||||
field=models.BooleanField(default=False),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -1,4 +1,6 @@
|
||||
from django.db import models
|
||||
|
||||
import lineups.models
|
||||
import teams.models
|
||||
import venues.models
|
||||
import players.models
|
||||
@@ -11,23 +13,97 @@ class TeamsnapBaseModel(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.teamsnap_id})"
|
||||
|
||||
class User(TeamsnapBaseModel):
|
||||
access_token = models.CharField(max_length = 50)
|
||||
name = None
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.teamsnap_id}"
|
||||
|
||||
class Team(TeamsnapBaseModel):
|
||||
team = models.ForeignKey(teams.models.Team, null=True, on_delete=models.CASCADE)
|
||||
bencoach_team = models.ForeignKey(teams.models.Team, null=True, on_delete=models.CASCADE)
|
||||
|
||||
@property
|
||||
def view_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/team/view/{self.teamsnap_id}"
|
||||
|
||||
@property
|
||||
def edit_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/team/edit/{self.teamsnap_id}"
|
||||
|
||||
class Location(TeamsnapBaseModel):
|
||||
venue = models.ForeignKey(venues.models.Venue, null=True, on_delete=models.CASCADE)
|
||||
bencoach_venue = models.ForeignKey(venues.models.Venue, null=True, on_delete=models.CASCADE)
|
||||
|
||||
@property
|
||||
def view_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/location/view/{self.teamsnap_id}"
|
||||
|
||||
@property
|
||||
def edit_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/location/edit/{self.teamsnap_id}"
|
||||
|
||||
class Member(TeamsnapBaseModel):
|
||||
player = models.ForeignKey(players.models.Player, null=True, on_delete=models.CASCADE)
|
||||
name = None
|
||||
bencoach_player = models.ForeignKey(players.models.Player, null=True, on_delete=models.CASCADE)
|
||||
team = models.ForeignKey(Team, null=True, on_delete=models.CASCADE)
|
||||
first_name = models.CharField(max_length = 50, null=True)
|
||||
last_name = models.CharField(max_length = 50, null=True)
|
||||
jersey_number = models.IntegerField(null=True)
|
||||
is_non_player = models.BooleanField()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.last_name}, {self.first_name} ({self.teamsnap_id})"
|
||||
|
||||
@property
|
||||
def view_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/roster/player/{self.teamsnap_id}"
|
||||
|
||||
@property
|
||||
def edit_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/roster/edit/{self.teamsnap_id}"
|
||||
|
||||
class Event(TeamsnapBaseModel):
|
||||
event = models.ForeignKey(events.models.Event, null=True, on_delete=models.CASCADE)
|
||||
bencoach_event = models.ForeignKey(events.models.Event, null=True, on_delete=models.CASCADE)
|
||||
label = models.CharField(max_length = 50, null=True)
|
||||
start_date = models.DateTimeField(null=True)
|
||||
opponent = models.ForeignKey(Team, null=True, on_delete=models.CASCADE)
|
||||
opponent = models.ForeignKey(Team, null=True, on_delete=models.CASCADE, related_name="opponent")
|
||||
team = models.ForeignKey(Team, null=True, on_delete=models.CASCADE)
|
||||
location = models.ForeignKey(Location, null=True, on_delete=models.CASCADE)
|
||||
formatted_title = models.CharField(max_length = 50, null=True)
|
||||
formatted_title = models.CharField(max_length = 50, null=True)
|
||||
points_for_opponent = models.PositiveSmallIntegerField(null=True)
|
||||
points_for_team = models.PositiveSmallIntegerField(null=True)
|
||||
is_game = models.BooleanField()
|
||||
|
||||
@property
|
||||
def view_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/schedule/view_game/{self.teamsnap_id}"
|
||||
|
||||
@property
|
||||
def edit_url(self):
|
||||
return f"https://go.teamsnap.com/{self.team.teamsnap_id}/schedule/edit_game/{self.teamsnap_id}"
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.formatted_title} ({self.teamsnap_id})"
|
||||
|
||||
class Availability(TeamsnapBaseModel):
|
||||
status_codes = [
|
||||
(1, 'Yes'),
|
||||
(0, 'No'),
|
||||
(2, 'Maybe'),
|
||||
(None, 'Unknown')
|
||||
]
|
||||
name = None
|
||||
team = models.ForeignKey(Team, null=True, on_delete=models.CASCADE)
|
||||
event = models.ForeignKey(Event, null=True, on_delete=models.CASCADE)
|
||||
member = models.ForeignKey(Member, null=True, on_delete=models.CASCADE)
|
||||
benchcoach_availability = models.ForeignKey(lineups.models.Availability, null=True, on_delete=models.CASCADE)
|
||||
status_code = models.SmallIntegerField(null=True, choices=status_codes, default=None)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.member} - {self.event} ({self.teamsnap_id})"
|
||||
|
||||
class Meta:
|
||||
verbose_name_plural = "availabilities"
|
||||
@@ -46,6 +46,9 @@ class Location (ApiObject):
|
||||
class Opponent (ApiObject):
|
||||
rel = "opponents"
|
||||
|
||||
class EventLineupEntry (ApiObject):
|
||||
rel = "event_lineup_entries"
|
||||
|
||||
class TeamSnap(APIClient):
|
||||
base_url = 'https://api.teamsnap.com/v3'
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
{% block content %}
|
||||
|
||||
<h1>{{ title }}</h1>
|
||||
<ol class="list-group">
|
||||
{#<ol class="list-group">#}
|
||||
{% for item in object_list %}
|
||||
<li class="list-group-item">
|
||||
<span class="fs-5 fw-bold">{{ item.formatted_title }}</span>
|
||||
<ul class="card">
|
||||
<span class="card-title">{{ item.formatted_title }}</span>
|
||||
<span class="fs-6">{{ item.subtitle }}</span>
|
||||
{# {% if item.body %}#}
|
||||
{# <br><span class="fs-6">{{ item.body }}</span>#}
|
||||
@@ -17,7 +17,7 @@
|
||||
{% for button in item.buttons %}
|
||||
<a class="btn btn-primary btn-sm" href="{{ button.href }}" role="button">{{ button.label }}</a>
|
||||
{% endfor %}
|
||||
</li>
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
{% endblock %}
|
||||
@@ -1,9 +1,11 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from django.urls import path, include
|
||||
from functools import partial
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('events', views.EventsListView.as_view(), name="teamsnap events list")
|
||||
path('events', views.EventsListView.as_view(), name="teamsnap list events"),
|
||||
path('edit/event/<int:id>', views.edit_event, name='teamsnap edit event')
|
||||
]
|
||||
@@ -1,12 +1,32 @@
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import render, redirect
|
||||
|
||||
# from .teamsnap.api import TeamSnap, Team, Event, Availability
|
||||
from .models import User, Member, Team, Event, Location
|
||||
from django.views.generic.list import ListView
|
||||
from lib.views import BenchcoachListView
|
||||
|
||||
def edit_event(request, id):
|
||||
event = Event.objects.get(id = id)
|
||||
return redirect(event.edit_url)
|
||||
|
||||
class EventsListView(ListView):
|
||||
model = Event
|
||||
class EventsListView(BenchcoachListView):
|
||||
Model = Event
|
||||
edit_url = 'teamsnap edit event'
|
||||
list_url = 'teamsnap list events'
|
||||
page_title = "TeamSnap Events"
|
||||
title_strf = '{item.formatted_title}'
|
||||
body_strf = "{item.start_date:%a, %b %-d, %-I:%M %p},\n{item.location.name}"
|
||||
|
||||
# def get_context_data(self):
|
||||
# context = super().get_context_data()
|
||||
# for item in context['items']:
|
||||
# item['buttons'].append(
|
||||
# {
|
||||
# 'label': 'Edit Lineup',
|
||||
# 'href': reverse('edit lineup', args=[item['id']])
|
||||
# }
|
||||
# )
|
||||
# return context
|
||||
|
||||
class TeamListView(ListView):
|
||||
model = Team
|
||||
|
||||
Reference in New Issue
Block a user