mirror of https://gitlab.crans.org/bde/nk20
Create user and club notes automatically
This commit is contained in:
parent
ba0a4519e3
commit
eed5f4b542
|
@ -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'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -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',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -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',),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -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',
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
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 _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -20,6 +22,7 @@ class Note(models.Model):
|
||||||
balance = models.IntegerField(
|
balance = models.IntegerField(
|
||||||
verbose_name=_('account balance'),
|
verbose_name=_('account balance'),
|
||||||
help_text=_('in centimes, money credited for this instance'),
|
help_text=_('in centimes, money credited for this instance'),
|
||||||
|
default=0,
|
||||||
)
|
)
|
||||||
is_active = models.BooleanField(
|
is_active = models.BooleanField(
|
||||||
_('active'),
|
_('active'),
|
||||||
|
@ -107,3 +110,23 @@ class Alias(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _("alias")
|
verbose_name = _("alias")
|
||||||
verbose_name_plural = _("aliases")
|
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()
|
||||||
|
|
Loading…
Reference in New Issue