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 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.
|
# Register your models here.
|
||||||
admin.site.register(User)
|
admin.site.register(User)
|
||||||
admin.site.register(Team)
|
admin.site.register(Team)
|
||||||
admin.site.register(Event)
|
admin.site.register(Event)
|
||||||
admin.site.register(Location)
|
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
|
from django.db import models
|
||||||
|
|
||||||
|
import lineups.models
|
||||||
import teams.models
|
import teams.models
|
||||||
import venues.models
|
import venues.models
|
||||||
import players.models
|
import players.models
|
||||||
@@ -11,23 +13,97 @@ class TeamsnapBaseModel(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.name} ({self.teamsnap_id})"
|
||||||
|
|
||||||
class User(TeamsnapBaseModel):
|
class User(TeamsnapBaseModel):
|
||||||
access_token = models.CharField(max_length = 50)
|
access_token = models.CharField(max_length = 50)
|
||||||
name = None
|
name = None
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.teamsnap_id}"
|
||||||
|
|
||||||
class Team(TeamsnapBaseModel):
|
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):
|
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):
|
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):
|
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)
|
label = models.CharField(max_length = 50, null=True)
|
||||||
start_date = models.DateTimeField(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)
|
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):
|
class Opponent (ApiObject):
|
||||||
rel = "opponents"
|
rel = "opponents"
|
||||||
|
|
||||||
|
class EventLineupEntry (ApiObject):
|
||||||
|
rel = "event_lineup_entries"
|
||||||
|
|
||||||
class TeamSnap(APIClient):
|
class TeamSnap(APIClient):
|
||||||
base_url = 'https://api.teamsnap.com/v3'
|
base_url = 'https://api.teamsnap.com/v3'
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h1>{{ title }}</h1>
|
<h1>{{ title }}</h1>
|
||||||
<ol class="list-group">
|
{#<ol class="list-group">#}
|
||||||
{% for item in object_list %}
|
{% for item in object_list %}
|
||||||
<li class="list-group-item">
|
<ul class="card">
|
||||||
<span class="fs-5 fw-bold">{{ item.formatted_title }}</span>
|
<span class="card-title">{{ item.formatted_title }}</span>
|
||||||
<span class="fs-6">{{ item.subtitle }}</span>
|
<span class="fs-6">{{ item.subtitle }}</span>
|
||||||
{# {% if item.body %}#}
|
{# {% if item.body %}#}
|
||||||
{# <br><span class="fs-6">{{ item.body }}</span>#}
|
{# <br><span class="fs-6">{{ item.body }}</span>#}
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
{% for button in item.buttons %}
|
{% for button in item.buttons %}
|
||||||
<a class="btn btn-primary btn-sm" href="{{ button.href }}" role="button">{{ button.label }}</a>
|
<a class="btn btn-primary btn-sm" href="{{ button.href }}" role="button">{{ button.label }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</li>
|
</ul>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ol>
|
</ol>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
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 .teamsnap.api import TeamSnap, Team, Event, Availability
|
||||||
from .models import User, Member, Team, Event, Location
|
from .models import User, Member, Team, Event, Location
|
||||||
from django.views.generic.list import ListView
|
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):
|
class EventsListView(BenchcoachListView):
|
||||||
model = Event
|
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):
|
class TeamListView(ListView):
|
||||||
model = Team
|
model = Team
|
||||||
|
|||||||
Reference in New Issue
Block a user