from random import choices from django.db import models from master_data.models import EventType from partner.models import Partner class Event(models.Model): created_date = models.DateField(auto_now_add=True, db_index=True) name = models.CharField(max_length=200) description = models.TextField() start_date = models.DateField(blank=True, null=True, db_index=True) end_date = models.DateField(blank=True, null=True) start_time = models.TimeField(blank=True, null=True) end_time = models.TimeField(blank=True, null=True) all_year_event = models.BooleanField(default=False) latitude = models.DecimalField(max_digits=9, decimal_places=6) longitude = models.DecimalField(max_digits=9, decimal_places=6) pincode = models.CharField(max_length=10) district = models.CharField(max_length=100) state = models.CharField(max_length=100) place = models.CharField(max_length=200) is_bookable = models.BooleanField(default=False) include_gst = models.BooleanField(default=False) gst_percentage_1 = models.IntegerField(default=0) gst_percentage_2 = models.IntegerField(default=0) is_eventify_event = models.BooleanField(default=True) outside_event_url = models.URLField(default='NA') is_partner_event = models.BooleanField(default=False) partner = models.ForeignKey(Partner, on_delete=models.CASCADE, blank=True, null=True) event_type = models.ForeignKey(EventType, on_delete=models.CASCADE) event_status = models.CharField(max_length=250, choices=[ ('created', 'Created'), ('cancelled', 'Cancelled'), ('pending', 'Pending'), ('completed', 'Completed'), ('postponed', 'Postponed'), ('published', 'Published'), ('live', 'Live'), ('flagged', 'Flagged'), ], default='pending', db_index=True) cancelled_reason = models.TextField(default='NA') title = models.CharField(max_length=250, blank=True) important_information = models.TextField(blank=True) venue_name = models.CharField(max_length=250, blank=True) source = models.CharField(max_length=50, default='eventify', choices=[ ('eventify', 'Added by Eventify'), ('community', 'Community Contribution'), ('partner', 'Partner Event'), ]) is_featured = models.BooleanField(default=False, help_text='Show this event in the featured section') is_top_event = models.BooleanField(default=False, help_text='Show this event in the Top Events section') contributed_by = models.CharField( max_length=100, blank=True, null=True, help_text='Eventify ID (EVT-XXXXXXXX) or email of the community contributor', ) def __str__(self): return f"{self.name} ({self.start_date})" class EventImages(models.Model): event = models.ForeignKey(Event, on_delete=models.CASCADE) is_primary = models.BooleanField(default=False) event_image = models.ImageField(upload_to='event_images') def __str__(self): return f"{self.event_image}" class EventLike(models.Model): user = models.ForeignKey( 'accounts.User', on_delete=models.CASCADE, related_name='event_likes' ) event = models.ForeignKey( Event, on_delete=models.CASCADE, related_name='likes' ) created_at = models.DateTimeField(auto_now_add=True) class Meta: unique_together = ('user', 'event') indexes = [ models.Index(fields=['user', '-created_at']), ] def __str__(self): return f"{self.user.email} likes {self.event.name}"