diff --git a/RIGS/admin.py b/RIGS/admin.py index 60a3dd2d..08fd73ff 100644 --- a/RIGS/admin.py +++ b/RIGS/admin.py @@ -5,4 +5,7 @@ import reversion # Register your models here. admin.site.register(models.Person, reversion.VersionAdmin) admin.site.register(models.Organisation, reversion.VersionAdmin) -admin.site.register(models.VatRate, reversion.VersionAdmin) \ No newline at end of file +admin.site.register(models.VatRate, reversion.VersionAdmin) +admin.site.register(models.Venue, reversion.VersionAdmin) +admin.site.register(models.Event, reversion.VersionAdmin) +admin.site.register(models.EventItem, reversion.VersionAdmin) \ No newline at end of file diff --git a/RIGS/models.py b/RIGS/models.py index 3961798b..58a8dc51 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -10,12 +10,13 @@ class Profile(AbstractUser): phone = models.CharField(max_length=13, null=True, blank=True) @property - def profile_picture (self): + def profile_picture(self): url = "" if settings.USE_GRAVATAR or settings.USE_GRAVATAR is None: url = "https://www.gravatar.com/avatar/" + hashlib.md5(self.email).hexdigest() + "?d=identicon&s=500" return url + class RevisionMixin(object): @property def last_edited_at(self): @@ -44,6 +45,7 @@ class Person(models.Model, RevisionMixin): string += "*" return string + @reversion.register class Organisation(models.Model, RevisionMixin): name = models.CharField(max_length=50) @@ -74,3 +76,81 @@ class VatRate(models.Model, RevisionMixin): def __str__(self): return self.comment + " " + str(self.start_at) + " @ " + str(self.as_percent) + "%" + + +@reversion.register +class Venue(models.Model, RevisionMixin): + name = models.CharField(max_length=255) + phone = models.CharField(max_length=15, blank=True, null=True) + email = models.EmailField(blank=True, null=True) + three_phase_available = models.BooleanField(default=False) + notes = models.TextField(blank=True, null=True) + + def __str__(self): + string = self.name + if len(self.notes) > 0: + string += "*" + return string + + +@reversion.register(follow=['items']) +class Event(models.Model, RevisionMixin): + # Done to make it much nicer on the database + PROVISIONAL = 0 + CONFIRMED = 1 + BOOKED = 2 + CANCELLED = 3 + EVENT_STATUS_CHOICES = ( + (PROVISIONAL, 'Provisional'), + (CONFIRMED, 'Confirmed'), + (BOOKED, 'Booked'), + (CANCELLED, 'Cancelled'), + ) + + name = models.CharField(max_length=255) + person = models.ForeignKey('Person') + organisation = models.ForeignKey('Organisation', blank=True, null=True) + venue = models.ForeignKey('Venue') + description = models.TextField(blank=True, null=True) + notes = models.TextField(blank=True, null=True) + status = models.IntegerField(choices=EVENT_STATUS_CHOICES, default=PROVISIONAL) + dry_hire = models.BooleanField(default=False) + is_rig = models.BooleanField(default=True) + based_on = models.ForeignKey('Event', related_name='future_events', blank=True, null=True) + + # Timing + start_date = models.DateField() + start_time = models.TimeField(blank=True, null=True) + end_date = models.DateField(blank=True, null=True) + end_time = models.TimeField(blank=True, null=True) + access_at = models.DateTimeField(blank=True, null=True) + meet_at = models.DateTimeField(blank=True, null=True) + meet_info = models.CharField(max_length=255, blank=True, null=True) + + # Crew management + checked_in_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='event_checked_in', blank=True, null=True) + mic = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='event_mic', blank=True, null=True) + + # Monies + payment_method = models.CharField(max_length=255, blank=True, null=True) + payment_received = models.CharField(max_length=255, blank=True, null=True) + purchase_order = models.CharField(max_length=255, blank=True, null=True) + + def __str__(self): + return str(self.pk) + ": " + self.name + + +class EventItem(models.Model): + event = models.ForeignKey('Event', related_name='items') + name = models.CharField(max_length=255) + description = models.TextField(blank=True, null=True) + quantity = models.IntegerField() + cost = models.DecimalField(max_digits=10, decimal_places=2) + order = models.IntegerField() + + @property + def total_cost(self): + return self.cost * self.quantity + + def __str__(self): + return self.event.name + " | " + self.name \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 55d16369..f2b9d5c2 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ