diff --git a/src/tixlbase/migrations/0004_auto_20140911_2037.py b/src/tixlbase/migrations/0004_auto_20140911_2037.py new file mode 100644 index 000000000..be2571dd5 --- /dev/null +++ b/src/tixlbase/migrations/0004_auto_20140911_2037.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('tixlbase', '0003_auto_20140910_1649'), + ] + + operations = [ + migrations.CreateModel( + name='OrganizerPermission', + fields=[ + ('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)), + ('can_create_events', models.BooleanField(default=True)), + ('organizer', models.ForeignKey(to='tixlbase.Organizer', related_name='perms')), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='organizer_perms')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='organizerpermission', + unique_together=set([('organizer', 'user')]), + ), + migrations.RemoveField( + model_name='organizer', + name='owner', + ), + migrations.AlterField( + model_name='event', + name='organizer', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='events', to='tixlbase.Organizer'), + ), + migrations.AlterField( + model_name='user', + name='email', + field=models.EmailField(null=True, blank=True, db_index=True, verbose_name='E-mail', max_length=75), + ), + migrations.AlterField( + model_name='user', + name='event', + field=models.ForeignKey(null=True, blank=True, on_delete=django.db.models.deletion.PROTECT, related_name='users', to='tixlbase.Event'), + ), + migrations.AlterField( + model_name='user', + name='familyname', + field=models.CharField(null=True, blank=True, verbose_name='Family name', max_length=255), + ), + migrations.AlterField( + model_name='user', + name='givenname', + field=models.CharField(null=True, blank=True, verbose_name='Given name', max_length=255), + ), + ] diff --git a/src/tixlbase/migrations/0005_auto_20140911_2052.py b/src/tixlbase/migrations/0005_auto_20140911_2052.py new file mode 100644 index 000000000..e17580d85 --- /dev/null +++ b/src/tixlbase/migrations/0005_auto_20140911_2052.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + ('tixlbase', '0004_auto_20140911_2037'), + ] + + operations = [ + migrations.CreateModel( + name='EventPermission', + fields=[ + ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('can_change_settings', models.BooleanField(default=True)), + ('organizer', models.ForeignKey(to='tixlbase.Event')), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_perms')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='eventpermission', + unique_together=set([('organizer', 'user')]), + ), + migrations.AddField( + model_name='event', + name='permitted', + field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, related_name='events', through='tixlbase.EventPermission'), + preserve_default=True, + ), + migrations.AddField( + model_name='organizer', + name='permitted', + field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, related_name='organizers', through='tixlbase.OrganizerPermission'), + preserve_default=True, + ), + migrations.AlterField( + model_name='organizerpermission', + name='organizer', + field=models.ForeignKey(to='tixlbase.Organizer'), + ), + ] diff --git a/src/tixlbase/models.py b/src/tixlbase/models.py index 065b68844..e5f770ef7 100644 --- a/src/tixlbase/models.py +++ b/src/tixlbase/models.py @@ -124,24 +124,35 @@ class User(AbstractBaseUser, PermissionsMixin): class Organizer(models.Model): """ - This model represents an entity organizing events, like a company, - an organization or a person. It has one user as owner (who has - registered it) and can have any number of users with admin - authorization. Any organizer has a unique slug, which is a short - name (alphanumeric, all lowercase) being used in URLs. + This model represents an entity organizing events, like a company. + Any organizer has a unique slug, which is a short name (alphanumeric, + all lowercase) being used in URLs. """ name = models.CharField(max_length=200) slug = models.CharField(max_length=50, - unique=True, - db_index=True) - owner = models.ForeignKey(User, null=True, blank=True, - on_delete=models.PROTECT) + unique=True, db_index=True) + permitted = models.ManyToManyField(User, through='OrganizerPermission', + related_name="organizers") class Meta: ordering = ("name",) +class OrganizerPermission(models.Model): + """ + The relation between an Organizer and an User who has permissions to + access an organizer profile. + """ + + organizer = models.ForeignKey(Organizer) + user = models.ForeignKey(User, related_name="organizer_perms") + can_create_events = models.BooleanField(default=True) + + class Meta: + unique_together = (("organizer", "user"),) + + class Event(models.Model): """ This model represents an event. An event is anything you can buy @@ -171,8 +182,9 @@ class Event(models.Model): organizer = models.ForeignKey(Organizer, related_name="events", on_delete=models.PROTECT) name = models.CharField(max_length=200) - slug = models.CharField(max_length=50, - db_index=True) + slug = models.CharField(max_length=50, db_index=True) + permitted = models.ManyToManyField(User, through='EventPermission', + related_name="events") locale = models.CharField(max_length=10) currency = models.CharField(max_length=10) date_from = models.DateTimeField() @@ -187,3 +199,17 @@ class Event(models.Model): class Meta: unique_together = (("organizer", "slug"),) ordering = ("date_from", "name") + + +class EventPermission(models.Model): + """ + The relation between an Event and an User who has permissions to + access an event. + """ + + organizer = models.ForeignKey(Event) + user = models.ForeignKey(User, related_name="event_perms") + can_change_settings = models.BooleanField(default=True) + + class Meta: + unique_together = (("organizer", "user"),)