From bfe14eca644bba90f387f3845d93a193f10f8ec0 Mon Sep 17 00:00:00 2001 From: "N. Geisler" <ngeisler@fachschaft.informatik.tu-darmstadt.de> Date: Fri, 11 Oct 2019 18:54:41 +0200 Subject: [PATCH] create and register AK models create AK Types create AK Tracks create AK Tags create AK Requirements create AKs --- AKModel/admin.py | 9 ++++- AKModel/models.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/AKModel/admin.py b/AKModel/admin.py index ba2d8f15..53d99582 100644 --- a/AKModel/admin.py +++ b/AKModel/admin.py @@ -2,7 +2,14 @@ from django.contrib import admin -from AKModel.models import Event, AKOwner +from AKModel.models import Event, AKOwner, AKType, AKTrack, AKTag, AKRequirement, AK admin.site.register(Event) + admin.site.register(AKOwner) + +admin.site.register(AKType) +admin.site.register(AKTrack) +admin.site.register(AKTag) +admin.site.register(AKRequirement) +admin.site.register(AK) diff --git a/AKModel/models.py b/AKModel/models.py index 397a7921..a46a4aec 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -28,3 +28,92 @@ class AKOwner(models.Model): verbose_name_plural = 'AK Owners' ordering = ['name'] unique_together = [['name', 'institution']] + + +class AKType(models.Model): + """ An AKType describes the characteristics of an AK, e.g. content vs. recreational. + """ + name = models.CharField(max_length=64, unique=True, verbose_name='Name', help_text='Name of the AK Type') + color = models.CharField(max_length=7, blank=True, verbose_name='Color', help_text='Color to display this type in') + + # TODO model availability + + class Meta: + verbose_name = 'AK Type' + verbose_name_plural = 'AK Types' + ordering = ['name'] + + +class AKTrack(models.Model): + """ An AKTrack describes a set of semantically related AKs. + """ + name = models.CharField(max_length=64, unique=True, verbose_name='Name', help_text='Name of the AK Track') + color = models.CharField(max_length=7, blank=True, verbose_name='Color', help_text='Color to display this track in') + + class Meta: + verbose_name = 'AK Track' + verbose_name_plural = 'AK Tracks' + ordering = ['name'] + + +class AKTag(models.Model): + """ An AKTag is a keyword given to an AK by (one of) its owner(s). + """ + name = models.CharField(max_length=64, unique=True, verbose_name='Name', help_text='Name of the AK Tag') + + class Meta: + verbose_name = 'AK Tag' + verbose_name_plural = 'AK Tags' + ordering = ['name'] + + +class AKRequirement(models.Model): + """ An AKRequirement describes something needed to hold an AK, e.g. infrastructure. + """ + name = models.CharField(max_length=128, unique=True, verbose_name='Name', help_text='Name of the AK Requirement') + + event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event') + + class Meta: + verbose_name = 'AK Requirement' + verbose_name_plural = 'AK Requirements' + ordering = ['name'] + + +class AK(models.Model): + """ An AK is a slot-based activity to be scheduled during an event. + """ + name = models.CharField(max_length=256, unique=True, verbose_name='Name', help_text='Name of the AK') + short_name = models.CharField(max_length=64, unique=True, blank=True, verbose_name='Short Name', + help_text='Name displayed in schedule') + description = models.TextField(blank=True, verbose_name='Description', help_text='Description of the AK') + + owners = models.ManyToManyField(to=AKOwner, verbose_name='Owners', help_text='Those organizing the AK') + + # TODO generate automatically + link = models.URLField(blank=True, verbose_name='Web Link', help_text='Link to wiki page') + + type = models.ForeignKey(to=AKType, on_delete=models.PROTECT, verbose_name='Type', help_text='Type of the AK') + tags = models.ManyToManyField(to=AKTag, blank=True, verbose_name='Tags', help_text='Tags provided by AK owners') + track = models.ForeignKey(to=AKTrack, on_delete=models.SET_NULL, null=True, verbose_name='Track', + help_text='Track the AK belongs to.') + + reso = models.BooleanField(verbose_name='Resolution Intention', default=False, help_text='Intends to submit a reso') + requirements = models.ManyToManyField(to=AKRequirement, blank=True, verbose_name='Requirements', + help_text="AK's Requirements") + + conflicts = models.ManyToManyField(to='AK', blank=True, related_name='conflict', verbose_name='Conflicting AKs', + help_text='AKs that conflict and thus must not take place at the same time') + prerequisites = models.ManyToManyField(to='AK', blank=True, verbose_name='Prerequisite AKs', + help_text='AKs that should precede this AK in the schedule') + # TODO model availability + + notes = models.TextField(blank=True, verbose_name='Internal Notes', help_text='Notes to organizers') + + interest = models.IntegerField(default=-1, verbose_name='Interest', help_text='Expected number of people to attend') + + event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name='Event', help_text='Matching event') + + class Meta: + verbose_name = 'AK' + verbose_name_plural = 'AKs' -- GitLab