From 73f8b4702d00d3bf58fac05bc680cefd3a9b39c0 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Thu, 30 Mar 2023 00:19:40 +0200 Subject: [PATCH] migrations: add finance tables and update members --- jdav_web/finance/migrations/0001_initial.py | 136 +++++++++++++++++ jdav_web/finance/migrations/__init__.py | 0 ...0002_remove_member_not_waiting_and_more.py | 144 ++++++++++++++++++ 3 files changed, 280 insertions(+) create mode 100644 jdav_web/finance/migrations/0001_initial.py create mode 100644 jdav_web/finance/migrations/__init__.py create mode 100644 jdav_web/members/migrations/0002_remove_member_not_waiting_and_more.py diff --git a/jdav_web/finance/migrations/0001_initial.py b/jdav_web/finance/migrations/0001_initial.py new file mode 100644 index 0000000..5f37d7c --- /dev/null +++ b/jdav_web/finance/migrations/0001_initial.py @@ -0,0 +1,136 @@ +# Generated by Django 4.0.1 on 2023-03-29 22:16 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('members', '0002_remove_member_not_waiting_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Ledger', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=30, verbose_name='Name')), + ], + options={ + 'verbose_name': 'Ledger', + 'verbose_name_plural': 'Ledgers', + }, + ), + migrations.CreateModel( + name='Statement', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_description', models.CharField(blank=True, max_length=30, verbose_name='Short description')), + ('explanation', models.TextField(blank=True, verbose_name='Explanation')), + ('night_cost', models.DecimalField(decimal_places=2, default=0, max_digits=5, verbose_name='Price per night')), + ('submitted', models.BooleanField(default=False, verbose_name='Submitted')), + ('submitted_date', models.DateTimeField(default=None, null=True, verbose_name='Submitted on')), + ('confirmed', models.BooleanField(default=False, verbose_name='Confirmed')), + ('confirmed_date', models.DateTimeField(default=None, null=True, verbose_name='Paid on')), + ('confirmed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='confirmed_statements', to='members.member', verbose_name='Authorized by')), + ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_statements', to='members.member', verbose_name='Created by')), + ('excursion', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='members.freizeit', verbose_name='Associated excursion')), + ('submitted_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='submitted_statements', to='members.member', verbose_name='Submitted by')), + ], + options={ + 'verbose_name': 'Statement', + 'verbose_name_plural': 'Statements', + 'permissions': [('may_edit_submitted_statements', 'Is allowed to edit submitted statements')], + }, + ), + migrations.CreateModel( + name='Transaction', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('reference', models.TextField(verbose_name='Reference')), + ('amount', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='Amount')), + ('confirmed', models.BooleanField(default=False, verbose_name='Paid')), + ('confirmed_date', models.DateTimeField(default=None, null=True, verbose_name='Paid on')), + ('confirmed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='confirmed_transactions', to='members.member', verbose_name='Authorized by')), + ('ledger', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='finance.ledger', verbose_name='Ledger')), + ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='members.member', verbose_name='Recipient')), + ('statement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.statement', verbose_name='Statement')), + ], + options={ + 'verbose_name': 'Transaction', + 'verbose_name_plural': 'Transactions', + }, + ), + migrations.CreateModel( + name='Receipt', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_description', models.CharField(max_length=30, verbose_name='Short description')), + ('amount', models.DecimalField(decimal_places=2, max_digits=6)), + ('comments', models.TextField()), + ('ledger', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.ledger', verbose_name='Ledger')), + ], + ), + migrations.CreateModel( + name='Bill', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('short_description', models.CharField(max_length=30, verbose_name='Short description')), + ('explanation', models.TextField(blank=True, verbose_name='Explanation')), + ('amount', models.DecimalField(decimal_places=2, default=0, max_digits=6)), + ('costs_covered', models.BooleanField(default=False, verbose_name='Covered')), + ('refunded', models.BooleanField(default=False, verbose_name='Refunded')), + ('proof', models.ImageField(blank=True, upload_to='bill_images', verbose_name='Proof')), + ('paid_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='members.member', verbose_name='Paid by')), + ('statement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='finance.statement', verbose_name='Statement')), + ], + options={ + 'verbose_name': 'Bill', + 'verbose_name_plural': 'Bills', + }, + ), + migrations.CreateModel( + name='StatementConfirmed', + fields=[ + ], + options={ + 'verbose_name': 'Paid statement', + 'verbose_name_plural': 'Paid statements', + 'permissions': (('may_manage_confirmed_statements', 'Can view and manage confirmed statements.'),), + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('finance.statement',), + ), + migrations.CreateModel( + name='StatementSubmitted', + fields=[ + ], + options={ + 'verbose_name': 'Submitted statement', + 'verbose_name_plural': 'Submitted statements', + 'permissions': (('may_manage_submitted_statements', 'Can view and manage submitted statements.'),), + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('finance.statement',), + ), + migrations.CreateModel( + name='StatementUnSubmitted', + fields=[ + ], + options={ + 'verbose_name': 'Statement in preparation', + 'verbose_name_plural': 'Statements in preparation', + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('finance.statement',), + ), + ] diff --git a/jdav_web/finance/migrations/__init__.py b/jdav_web/finance/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jdav_web/members/migrations/0002_remove_member_not_waiting_and_more.py b/jdav_web/members/migrations/0002_remove_member_not_waiting_and_more.py new file mode 100644 index 0000000..68040ef --- /dev/null +++ b/jdav_web/members/migrations/0002_remove_member_not_waiting_and_more.py @@ -0,0 +1,144 @@ +# Generated by Django 4.0.1 on 2023-03-29 22:16 + +import datetime +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('members', '0001_initial_squashed_0015_alter_member_options_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='member', + name='not_waiting', + ), + migrations.AddField( + model_name='freizeit', + name='kilometers_traveled', + field=models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Kilometers traveled'), + preserve_default=False, + ), + migrations.AddField( + model_name='member', + name='iban', + field=models.CharField(blank=True, max_length=30, verbose_name='IBAN'), + ), + migrations.AlterField( + model_name='freizeit', + name='date', + field=models.DateTimeField(default=datetime.datetime.today, verbose_name='Begin'), + ), + migrations.AlterField( + model_name='freizeit', + name='end', + field=models.DateTimeField(default=datetime.datetime.today, verbose_name='End (optional)'), + ), + migrations.AlterField( + model_name='freizeit', + name='tour_approach', + field=models.IntegerField(choices=[(0, 'Muskelkraft'), (1, 'ÖPNV'), (2, 'Fahrgemeinschaften')], default=0, verbose_name='Means of transportation'), + ), + migrations.CreateModel( + name='PermissionMember', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('change_groups', models.ManyToManyField(blank=True, related_name='changeable_by', to='members.Group', verbose_name='May change members of groups')), + ('change_members', models.ManyToManyField(blank=True, related_name='changeable_by', to='members.Member', verbose_name='May change members')), + ('delete_groups', models.ManyToManyField(blank=True, related_name='deletable_by', to='members.Group', verbose_name='May delete members of groups')), + ('delete_members', models.ManyToManyField(blank=True, related_name='deletable_by', to='members.Member', verbose_name='May delete members')), + ('list_groups', models.ManyToManyField(blank=True, related_name='listable_by', to='members.Group', verbose_name='May list members of groups')), + ('list_members', models.ManyToManyField(blank=True, related_name='listable_by', to='members.Member', verbose_name='May list members')), + ('member', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='permissions', to='members.member')), + ('view_groups', models.ManyToManyField(blank=True, related_name='viewable_by', to='members.Group', verbose_name='May view members of groups')), + ('view_members', models.ManyToManyField(blank=True, related_name='viewable_by', to='members.Member', verbose_name='May view members')), + ], + options={ + 'verbose_name': 'Permissions', + 'verbose_name_plural': 'Permissions', + }, + ), + migrations.CreateModel( + name='PermissionGroup', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('change_groups', models.ManyToManyField(blank=True, related_name='group_members_changeable_by', to='members.Group', verbose_name='May change members of groups')), + ('change_members', models.ManyToManyField(blank=True, related_name='group_members_changeable_by_group', to='members.Member', verbose_name='May change members')), + ('delete_groups', models.ManyToManyField(blank=True, related_name='group_members_deletable_by', to='members.Group', verbose_name='May delete members of groups')), + ('delete_members', models.ManyToManyField(blank=True, related_name='group_members_deletable_by', to='members.Member', verbose_name='May delete members')), + ('group', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='permissions', to='members.group')), + ('list_groups', models.ManyToManyField(blank=True, related_name='group_members_listable_by', to='members.Group', verbose_name='May list members of groups')), + ('list_members', models.ManyToManyField(blank=True, related_name='group_members_listable_by', to='members.Member', verbose_name='May list members')), + ('view_groups', models.ManyToManyField(blank=True, related_name='group_members_viewable_by', to='members.Group', verbose_name='May view members of groups')), + ('view_members', models.ManyToManyField(blank=True, related_name='group_members_viewable_by', to='members.Member', verbose_name='May view members')), + ], + options={ + 'verbose_name': 'Group permissions', + 'verbose_name_plural': 'Group permissions', + }, + ), + migrations.CreateModel( + name='MemberWaitingList', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('prename', models.CharField(max_length=20, verbose_name='prename')), + ('lastname', models.CharField(max_length=20, verbose_name='last name')), + ('email', models.EmailField(default='', max_length=100)), + ('email_parents', models.EmailField(blank=True, default='', max_length=100, verbose_name="Parents' Email")), + ('cc_email_parents', models.BooleanField(default=True, verbose_name='Also send mails to parents')), + ('birth_date', models.DateField(verbose_name='birth date')), + ('comments', models.TextField(blank=True, default='', verbose_name='comments')), + ('confirmed_mail', models.BooleanField(default=True, verbose_name='Email confirmed')), + ('confirmed_mail_parents', models.BooleanField(default=True, verbose_name='Parents email confirmed')), + ('confirm_mail_key', models.CharField(default='', max_length=32)), + ('confirm_mail_parents_key', models.CharField(default='', max_length=32)), + ('last_wait_confirmation', models.DateField(auto_now=True, verbose_name='Last wait confirmation')), + ('wait_confirmation_key', models.CharField(default='', max_length=32)), + ('wait_confirmation_key_expire', models.DateTimeField(default=django.utils.timezone.now)), + ('registration_key', models.CharField(default='', max_length=32)), + ('registration_expire', models.DateTimeField(default=django.utils.timezone.now)), + ('invited_for_group', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='members.group', verbose_name='Invited for group')), + ], + options={ + 'verbose_name': 'Waiter', + 'verbose_name_plural': 'Waiters', + 'permissions': (('may_manage_waiting_list', 'Can view and manage the waiting list.'),), + }, + ), + migrations.CreateModel( + name='LJPProposal', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=30, verbose_name='Title')), + ('goals_alpinistic', models.TextField(verbose_name='Alpinistic goals')), + ('goals_pedagogic', models.TextField(verbose_name='Pedagogic goals')), + ('methods', models.TextField(verbose_name='Content and methods')), + ('evaluation', models.TextField(verbose_name='Evaluation')), + ('experiences', models.TextField(verbose_name='Experiences and possible improvements')), + ('excursion', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='members.freizeit', verbose_name='Excursion')), + ], + options={ + 'verbose_name': 'LJP Proposal', + 'verbose_name_plural': 'LJP Proposals', + }, + ), + migrations.CreateModel( + name='Intervention', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date_start', models.DateTimeField(verbose_name='Starting time')), + ('duration', models.DecimalField(decimal_places=2, max_digits=4, verbose_name='Duration in hours')), + ('activity', models.TextField(verbose_name='Activity and method')), + ('ljp_proposal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='members.ljpproposal', verbose_name='LJP Proposal')), + ], + options={ + 'verbose_name': 'Intervention', + 'verbose_name_plural': 'Interventions', + }, + ), + ]