From e2a60a5fde20468098a40a5b9b5e2ceac811928f Mon Sep 17 00:00:00 2001 From: tomtom5152 Date: Wed, 5 Nov 2014 19:34:36 +0000 Subject: [PATCH] Added Venue, Event and EventItem models --- RIGS/admin.py | 5 ++- RIGS/models.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++++- db.sqlite3 | Bin 875520 -> 880640 bytes 3 files changed, 85 insertions(+), 2 deletions(-) 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 55d16369c1f239ff53ba8282d5aafdaad9a29ec1..f2b9d5c2877fdac21c52598cb21ccff8ac338e70 100644 GIT binary patch delta 13399 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 delta 3493 zcmZuz4Rlo15q>jsci-;58?xE_EM&`7CPWT`K$=t+eNw2kto2B;9NNPEzO9wZ>7(0MN#SkLk8nY(x9 z&Ye4RXYP0JvhE4X+9#|{PdKY-bf2bSyryZ1O!@1A<41j=Wqs*%Fz2Qt+~Rh+LOt{? zeMM*JbNZCJ=*Uwo%@q&Ug%1r&dUJCIsb}|iT;aC^GJJ$`21#htXdgXCAsUZYaX!J+2=Z>i}=QM_z7Btk0WZI*}LsMuWv$YNNb5e8~hd0=$ST9Kh8V{8ZRn%8E z%$eIz-yEuMp3}UzF%-w96Wq4Ng%!(p+OLF|T%kWi~SzX&h80^v$1F zTg{3rULbc$;qm}ou{<14SJ>-wl%eH%Ewd6=0R5Zx(i^mbYUmzH!%KJ^UqlmEuwn=! zD+VqFDe;;{0rJu+ycS6r)Q;gmaAM@zU~rdu*vfG2oJQy9IQ@-w&_-HDjWnC?q&!L| z#BcBfzK^@u<}a}h@50fTiU4Qf80>{NU?xn0F|ZMyfJ*R#(9VSuf-fc~2^a-&m7%&& zb7)R9=1etdrA#hO5Rd_J6_u6!@)3ywGQo%{_ig#mKH1zF-pf!l4FRu!pNhl1SJc-ou(vNGML-rvYgVjynC+pv-^0GdrmLmT$mEf>hi==$ zKDj?xaEz{~GAF*)%2%4Y^%aLP0OKpcK>P>Z1LrbH(PZXVDi(K&nh5%W{ZC+0mFb=RkhU-P^?34G0ab51P zJw`i{>q3zv++)T7*ocqd5`3B= zW*u(ild$v^d<`S`XY9az*ojB^h#L*Ru-a7P{u9x6zKfYmTsf9@a+od>wL z%kE8!JP|p@u;%Ct|J-cByQhZ_nImlnvc$xl?ZQQgG&rnx1mTHDUdKrs&Q8O~kye|T z$yUD88Ec%UoTs?oY4;y>J{rm2^MRlwZA)0+KRWCS&Rf1^zqw^URIL#WFi2D0GCY~j zd-64%*RIfI`{%TRF14DOj*HgcJ&qphFU#?vwbzkdX^Qimk zhi-xs8l1pnQVAOzLwWFZFgL&K8G&uvJZbhd!`DOtn|W32^|*XXz^8!^(qJ$Q=QEcL z`N~y?LsWVVeh~j1UAD@=anf#2ndP0HR%>^;MkcAM6~^st2R(sUo2K~A)0?4ujk=## z?xuC6y1mjMBgq-kx-_jzxuoXYeqfxYH<_g^?AHQ9fnjwdj9F9OIAuX&31XEbEVnZX_QAJ*yr4*T1UzDwu45R z@_pr4!}I4`^G)%U(QDjTBwHv^V7#P$@js)+Jl|`a$6fpiaLt83vSpg0q)WaZP6(bf zcerKg;K+kT8<0)aft}o-yqp?qYUvV4*7%Oi;_I@I@9W!aoV*Wa!(6C^255oD;7J=P z!>|cngje7X@Ftk>j*XQc!bfldK7%vxHJpd7n>-zotpvm*K`*wFpii>f61$yZx0B5W z@044>E+;+STwN6x5NqUmm*d!N$efD!f8q-kpHvzVktAC_@yTZ=q2;FDOS z>@v?Z%SLQlBxOtjtXfzly~3|`Yf5gExk$@YQJLo_DrJ*=%52}ruC;BJ;zoj+U8d`0 zdFcl!6Dd&4@U{!HjAAP17g;NHP`C2FtOr!Tiawcqt7ho+c zhlN}e_rnaB3=?1^r)dBHm)df*=~*LYT1T5?3jrB9C83;oturdZu_MEX^crFBc} zKv67nv+6y}T32{;(+gq;CdM-P>TOHwFIEa(w^VauM{{DCY&FkPt+TYUVh4h;%otVq zh};|(D@rjZ9FhXsj>;b#^H)W;6kL^VHmXHm$kCj&DPW#HEr$#cX?zW;z*-!X zhym1~8#