from django.db import models from django.conf import settings import urllib.parse class Event(models.Model): title = models.CharField(max_length=255) description = models.TextField(blank=True) start_time = models.DateTimeField() end_time = models.DateTimeField(null=True, blank=True) location_address = models.CharField(max_length=255) maps_shortlink = models.URLField(blank=True, editable=False) team = models.ForeignKey('clubs.Team', on_delete=models.CASCADE, related_name='events') def save(self, *args, **kwargs): if self.location_address and not self.maps_shortlink: self.maps_shortlink = f"https://www.google.com/maps/search/?api=1&query={urllib.parse.quote(self.location_address)}" super().save(*args, **kwargs) def __str__(self): return self.title class Training(Event): pass class Game(Event): opponent = models.CharField(max_length=255) meeting_minutes_before_game = models.PositiveIntegerField(default=60) season = models.CharField(max_length=255, blank=True) min_players = models.PositiveIntegerField(default=9) is_home_game = models.BooleanField(default=True) number_of_innings = models.PositiveIntegerField(default=9) opened_for_teams = models.ManyToManyField('clubs.Team', related_name='opened_games', blank=True) class GameResult(models.Model): game = models.OneToOneField(Game, on_delete=models.CASCADE, related_name='result') inning_results = models.JSONField(default=dict) def __str__(self): return f"Result for {self.game}" class EventParticipation(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) event = models.ForeignKey(Event, on_delete=models.CASCADE) status = models.CharField(max_length=20, choices=[('attending', 'Attending'), ('rejected', 'Rejected'), ('maybe', 'Maybe')], default='maybe') class Meta: unique_together = ('user', 'event')