From eed5f4b5425cc80056ef9d165210749da27008cb Mon Sep 17 00:00:00 2001 From: Alexandre Iooss Date: Wed, 17 Jul 2019 09:37:11 +0200 Subject: [PATCH] Create user and club notes automatically --- activity/migrations/0001_initial.py | 76 ------------- member/migrations/0001_initial.py | 76 ------------- note/migrations/0001_initial.py | 123 --------------------- note/migrations/0002_auto_20190716_1406.py | 18 --- note/models/notes.py | 23 ++++ 5 files changed, 23 insertions(+), 293 deletions(-) delete mode 100644 activity/migrations/0001_initial.py delete mode 100644 member/migrations/0001_initial.py delete mode 100644 note/migrations/0001_initial.py delete mode 100644 note/migrations/0002_auto_20190716_1406.py diff --git a/activity/migrations/0001_initial.py b/activity/migrations/0001_initial.py deleted file mode 100644 index 5fb6579c..00000000 --- a/activity/migrations/0001_initial.py +++ /dev/null @@ -1,76 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-16 11:53 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('note', '0001_initial'), - ('member', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Activity', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='name')), - ('description', models.TextField(verbose_name='description')), - ('date_start', models.DateTimeField(verbose_name='start date')), - ('date_end', models.DateTimeField(verbose_name='end date')), - ], - options={ - 'verbose_name': 'activity', - 'verbose_name_plural': 'activities', - }, - ), - migrations.CreateModel( - name='ActivityType', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='name')), - ('can_invite', models.BooleanField(verbose_name='can invite')), - ('guest_entry_fee', models.PositiveIntegerField(verbose_name='guest entry fee')), - ], - options={ - 'verbose_name': 'activity type', - 'verbose_name_plural': 'activity types', - }, - ), - migrations.CreateModel( - name='Guest', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('entry', models.DateTimeField(null=True)), - ('activity', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='activity.Activity')), - ('entry_transaction', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='note.Transaction')), - ('inviter', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'guest', - 'verbose_name_plural': 'guests', - }, - ), - migrations.AddField( - model_name='activity', - name='activity_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='activity.ActivityType', verbose_name='type'), - ), - migrations.AddField( - model_name='activity', - name='attendees_club', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='member.Club', verbose_name='attendees club'), - ), - migrations.AddField( - model_name='activity', - name='organizer', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='member.Club', verbose_name='organizer'), - ), - ] diff --git a/member/migrations/0001_initial.py b/member/migrations/0001_initial.py deleted file mode 100644 index c3d7172d..00000000 --- a/member/migrations/0001_initial.py +++ /dev/null @@ -1,76 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-16 11:53 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Club', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='paid')), - ('email', models.EmailField(max_length=254, verbose_name='email')), - ('membership_fee', models.PositiveIntegerField(verbose_name='membership fee')), - ('membership_duration', models.DurationField(help_text='The longest time a membership can last (NULL = infinite).', null=True, verbose_name='membership duration')), - ('membership_start', models.DurationField(help_text='How long after January 1st the members can renew their membership.', null=True, verbose_name='membership start')), - ('membership_end', models.DurationField(help_text='How long the membership can last after January 1st of the next year after members can renew their membership.', null=True, verbose_name='membership end')), - ], - options={ - 'verbose_name': 'club', - 'verbose_name_plural': 'clubs', - }, - ), - migrations.CreateModel( - name='Role', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='name')), - ], - options={ - 'verbose_name': 'role', - 'verbose_name_plural': 'roles', - }, - ), - migrations.CreateModel( - name='Profile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('profile_picture', models.ImageField(blank=True, max_length=255, upload_to='', verbose_name='profile picture')), - ('phone_number', models.CharField(blank=True, max_length=50, null=True, verbose_name='phone number')), - ('section', models.CharField(blank=True, help_text='e.g. "1A0", "9A♥", "SAPHIRE"', max_length=255, null=True, verbose_name='section')), - ('address', models.CharField(blank=True, max_length=255, null=True, verbose_name='address')), - ('paid', models.BooleanField(default=False, verbose_name='paid')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'user profile', - 'verbose_name_plural': 'user profile', - }, - ), - migrations.CreateModel( - name='Membership', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_start', models.DateField(verbose_name='membership starts on')), - ('date_end', models.DateField(null=True, verbose_name='membership ends on')), - ('fee', models.PositiveIntegerField(verbose_name='fee')), - ('club', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='member.Club')), - ('roles', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='member.Role')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'membership', - 'verbose_name_plural': 'memberships', - }, - ), - ] diff --git a/note/migrations/0001_initial.py b/note/migrations/0001_initial.py deleted file mode 100644 index dd014d82..00000000 --- a/note/migrations/0001_initial.py +++ /dev/null @@ -1,123 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-16 11:53 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('member', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Note', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('balance', models.IntegerField(help_text='in centimes, money credited for this instance', verbose_name='account balance')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this note should be treated as active. Unselect this instead of deleting notes.', verbose_name='active')), - ], - options={ - 'verbose_name': 'note', - 'verbose_name_plural': 'notes', - }, - ), - migrations.CreateModel( - name='Transaction', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('datetime', models.DateTimeField(default=django.utils.timezone.now, verbose_name='destination')), - ('quantity', models.PositiveSmallIntegerField(verbose_name='quantity')), - ('amount', models.PositiveIntegerField(verbose_name='amount')), - ('transaction_type', models.CharField(max_length=31, verbose_name='type')), - ('description', models.TextField(verbose_name='description')), - ('valid', models.NullBooleanField(verbose_name='valid')), - ('destination', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='note.Note', verbose_name='destination')), - ('source', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='note.Note', verbose_name='source')), - ], - options={ - 'verbose_name': 'transaction', - 'verbose_name_plural': 'transactions', - }, - ), - migrations.CreateModel( - name='NoteSpecial', - fields=[ - ('note_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='note.Note')), - ('special_type', models.CharField(max_length=255, unique=True, verbose_name='type')), - ], - options={ - 'verbose_name': 'special note', - 'verbose_name_plural': 'special notes', - }, - bases=('note.note',), - ), - migrations.CreateModel( - name='TransactionTemplate', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, verbose_name='name')), - ('amount', models.PositiveIntegerField(verbose_name='amount')), - ('template_type', models.CharField(max_length=31, verbose_name='type')), - ('destination', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='note.Note', verbose_name='destination')), - ], - options={ - 'verbose_name': 'transaction template', - 'verbose_name_plural': 'transaction templates', - }, - ), - migrations.CreateModel( - name='Alias', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, unique=True, verbose_name='name')), - ('note', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='note.Note')), - ], - options={ - 'verbose_name': 'alias', - 'verbose_name_plural': 'aliases', - }, - ), - migrations.CreateModel( - name='NoteUser', - fields=[ - ('note_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='note.Note')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='note', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': "one's note", - 'verbose_name_plural': 'users note', - }, - bases=('note.note',), - ), - migrations.CreateModel( - name='NoteClub', - fields=[ - ('note_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='note.Note')), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='note', to='member.Club')), - ], - options={ - 'verbose_name': 'club note', - 'verbose_name_plural': 'clubs notes', - }, - bases=('note.note',), - ), - migrations.CreateModel( - name='MembershipTransaction', - fields=[ - ('transaction_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='note.Transaction')), - ('membership', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='transaction', to='member.Membership')), - ], - options={ - 'verbose_name': 'membership transaction', - 'verbose_name_plural': 'membership transactions', - }, - bases=('note.transaction',), - ), - ] diff --git a/note/migrations/0002_auto_20190716_1406.py b/note/migrations/0002_auto_20190716_1406.py deleted file mode 100644 index 399205aa..00000000 --- a/note/migrations/0002_auto_20190716_1406.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.2.3 on 2019-07-16 12:06 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('note', '0001_initial'), - ] - - operations = [ - migrations.RenameField( - model_name='noteclub', - old_name='user', - new_name='club', - ), - ] diff --git a/note/models/notes.py b/note/models/notes.py index f7c8c539..499678d9 100644 --- a/note/models/notes.py +++ b/note/models/notes.py @@ -4,6 +4,8 @@ from django.conf import settings from django.db import models +from django.db.models.signals import post_save +from django.dispatch import receiver from django.utils.translation import gettext_lazy as _ """ @@ -20,6 +22,7 @@ class Note(models.Model): balance = models.IntegerField( verbose_name=_('account balance'), help_text=_('in centimes, money credited for this instance'), + default=0, ) is_active = models.BooleanField( _('active'), @@ -107,3 +110,23 @@ class Alias(models.Model): class Meta: verbose_name = _("alias") verbose_name_plural = _("aliases") + + +@receiver(post_save, sender=settings.AUTH_USER_MODEL) +def save_user_note(instance, created, **_kwargs): + """ + Hook to create and save a note when an user is updated + """ + if created: + NoteUser.objects.create(user=instance) + instance.note.save() + + +@receiver(post_save, sender='member.Club') +def save_club_note(instance, created, **_kwargs): + """ + Hook to create and save a note when a club is updated + """ + if created: + NoteClub.objects.create(club=instance) + instance.note.save()