diff --git a/symposion/teams/__init__.py b/symposion/teams/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/symposion/teams/admin.py b/symposion/teams/admin.py new file mode 100644 index 00000000..14b9ec25 --- /dev/null +++ b/symposion/teams/admin.py @@ -0,0 +1,17 @@ +from django.contrib import admin + +import reversion + +from symposion.teams.models import Team, Membership + +admin.site.register(Team, + prepopulated_fields={"slug": ("name",)}, +) + + +class MembershipAdmin(reversion.VersionAdmin): + list_display = ["team", "user", "state"] + list_filter = ["team"] + search_fields = ["user__username"] + +admin.site.register(Membership, MembershipAdmin) diff --git a/symposion/teams/models.py b/symposion/teams/models.py new file mode 100644 index 00000000..cf016d57 --- /dev/null +++ b/symposion/teams/models.py @@ -0,0 +1,48 @@ +import datetime + +from django.db import models + +import reversion + +from django.contrib.auth.models import Permission, User + + +TEAM_ACCESS_CHOICES = [ + (1, "open"), + (2, "by application"), + (3, "by invitation") +] + + +class Team(models.Model): + + slug = models.SlugField(unique=True) + name = models.CharField(max_length=100) + description = models.TextField(blank=True) + access = models.IntegerField(choices=TEAM_ACCESS_CHOICES) + permissions = models.ManyToManyField(Permission, blank=True) + created = models.DateTimeField(default=datetime.datetime.now, editable=False) + + def __unicode__(self): + return self.name + + +MEMBERSHIP_STATE_CHOICES = [ + (1, "applied"), + (2, "invited"), + (3, "declined"), + (4, "rejected"), + (5, "member"), + (6, "manager"), +] + + +class Membership(models.Model): + + user = models.ForeignKey(User) + team = models.ForeignKey(Team) + state = models.IntegerField(choices=MEMBERSHIP_STATE_CHOICES) + message = models.TextField(blank=True) + + +reversion.register(Membership)