mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-17 05:22:16 +00:00
Added Venue, Event and EventItem models
This commit is contained in:
@@ -5,4 +5,7 @@ import reversion
|
|||||||
# Register your models here.
|
# Register your models here.
|
||||||
admin.site.register(models.Person, reversion.VersionAdmin)
|
admin.site.register(models.Person, reversion.VersionAdmin)
|
||||||
admin.site.register(models.Organisation, reversion.VersionAdmin)
|
admin.site.register(models.Organisation, reversion.VersionAdmin)
|
||||||
admin.site.register(models.VatRate, reversion.VersionAdmin)
|
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)
|
||||||
@@ -10,12 +10,13 @@ class Profile(AbstractUser):
|
|||||||
phone = models.CharField(max_length=13, null=True, blank=True)
|
phone = models.CharField(max_length=13, null=True, blank=True)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def profile_picture (self):
|
def profile_picture(self):
|
||||||
url = ""
|
url = ""
|
||||||
if settings.USE_GRAVATAR or settings.USE_GRAVATAR is None:
|
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"
|
url = "https://www.gravatar.com/avatar/" + hashlib.md5(self.email).hexdigest() + "?d=identicon&s=500"
|
||||||
return url
|
return url
|
||||||
|
|
||||||
|
|
||||||
class RevisionMixin(object):
|
class RevisionMixin(object):
|
||||||
@property
|
@property
|
||||||
def last_edited_at(self):
|
def last_edited_at(self):
|
||||||
@@ -44,6 +45,7 @@ class Person(models.Model, RevisionMixin):
|
|||||||
string += "*"
|
string += "*"
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
class Organisation(models.Model, RevisionMixin):
|
class Organisation(models.Model, RevisionMixin):
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
@@ -74,3 +76,81 @@ class VatRate(models.Model, RevisionMixin):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.comment + " " + str(self.start_at) + " @ " + str(self.as_percent) + "%"
|
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
|
||||||
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
Reference in New Issue
Block a user