consolidated objects into one benchcoach app
created benchcoachproject app to contain all the settings and stuff some other changes that got grouped with this commit is the adding the ApiObject to the TeamSnap object model
This commit is contained in:
@@ -1,18 +1,128 @@
|
||||
from django.db import models
|
||||
from teamsnap.models import User as TeamsnapUser, Team as TeamsnapTeam
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.validators import FileExtensionValidator
|
||||
|
||||
|
||||
def user_directory_path(instance, filename):
|
||||
# file will be uploaded to MEDIA_ROOT / user_<id>/<filename>
|
||||
return 'benchcoach/static/user_files/user_{0}/{1}'.format(instance.user.id, filename)
|
||||
class Team(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
image = models.FileField(
|
||||
upload_to="images/",
|
||||
validators=[FileExtensionValidator(["jpg", "png", "svg"])],
|
||||
null=True,
|
||||
)
|
||||
|
||||
class Profile(models.Model):
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
teamsnap_access_token = models.CharField(null=True, max_length=50)
|
||||
teamsnap_user = models.ForeignKey(TeamsnapUser, on_delete=models.CASCADE, null=True, blank=True)
|
||||
avatar = models.ImageField(upload_to="avatar", null=True, blank=True)
|
||||
def __str__(self):
|
||||
return f"{self.name}"
|
||||
|
||||
class TeamsnapSettings(models.Model):
|
||||
user = models.OneToOneField(Profile, on_delete=models.CASCADE)
|
||||
managed_team = models.ForeignKey(TeamsnapTeam, on_delete=models.CASCADE)
|
||||
|
||||
class Venue(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name}"
|
||||
|
||||
|
||||
class Event(models.Model):
|
||||
start = models.DateTimeField(null=True)
|
||||
venue = models.ForeignKey(Venue, null=True, on_delete=models.CASCADE)
|
||||
home_team = models.ForeignKey(
|
||||
Team, null=True, on_delete=models.CASCADE, related_name="home_team"
|
||||
)
|
||||
away_team = models.ForeignKey(
|
||||
Team, null=True, on_delete=models.CASCADE, related_name="away_team"
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.start:%Y-%m-%d %H:%M}"
|
||||
|
||||
|
||||
class Season(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
|
||||
class Player(models.Model):
|
||||
first_name = models.CharField(max_length=200)
|
||||
last_name = models.CharField(max_length=200)
|
||||
jersey_number = models.IntegerField(null=True)
|
||||
team = models.ForeignKey(Team, null=True, on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.last_name}, {self.first_name}"
|
||||
|
||||
class Meta:
|
||||
unique_together = (
|
||||
"first_name",
|
||||
"last_name",
|
||||
)
|
||||
|
||||
|
||||
class StatLine(models.Model):
|
||||
player = models.ForeignKey(Player, on_delete=models.CASCADE)
|
||||
batting_avg = models.DecimalField(max_digits=4, decimal_places=3, default=0)
|
||||
onbase_pct = models.DecimalField(max_digits=4, decimal_places=3, default=0)
|
||||
slugging_pct = models.DecimalField(max_digits=4, decimal_places=3, default=0)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.slash_line}"
|
||||
|
||||
@property
|
||||
def slash_line(self):
|
||||
return "/".join(
|
||||
[
|
||||
f"{self.batting_avg:.3f}".lstrip("0"),
|
||||
f"{self.onbase_pct:.3f}".lstrip("0"),
|
||||
f"{self.slugging_pct:.3f}".replace("0.", "."),
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
class Positioning(models.Model):
|
||||
player = models.ForeignKey(Player, on_delete=models.CASCADE)
|
||||
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||
positions = [
|
||||
("EH", "EH"),
|
||||
("P", "P"),
|
||||
("C", "C"),
|
||||
("1B", "1B"),
|
||||
("2B", "2B"),
|
||||
("3B", "3B"),
|
||||
("SS", "SS"),
|
||||
("LF", "LF"),
|
||||
("CF", "CF"),
|
||||
("RF", "RF"),
|
||||
("DH", "DH"),
|
||||
]
|
||||
position = models.CharField(
|
||||
choices=positions, default=None, max_length=2, null=True, blank=True
|
||||
)
|
||||
order = models.PositiveSmallIntegerField(default=None, null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
unique_together = (
|
||||
"player",
|
||||
"event",
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.player}; {self.event};"
|
||||
|
||||
|
||||
class Availability(models.Model):
|
||||
YES = 2
|
||||
MAYBE = 1
|
||||
NO = 0
|
||||
UNKNOWN = -1
|
||||
|
||||
event = models.ForeignKey(Event, on_delete=models.CASCADE)
|
||||
player = models.ForeignKey(Player, on_delete=models.CASCADE)
|
||||
choices = [(YES, "Yes"), (NO, "No"), (MAYBE, "Maybe"), (UNKNOWN, "Unknown")]
|
||||
available = models.IntegerField(choices=choices, default=UNKNOWN)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.event}; {self.player}; {self.available}"
|
||||
|
||||
class Meta:
|
||||
unique_together = (
|
||||
"event",
|
||||
"player",
|
||||
)
|
||||
verbose_name_plural = "availabilities"
|
||||
|
||||
Reference in New Issue
Block a user