diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 747b06e..4964921 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -33,7 +33,7 @@ import nested_admin from .models import (Member, Group, Freizeit, MemberNoteList, NewMemberOnList, Klettertreff, MemberWaitingList, LJPProposal, Intervention, PermissionMember, PermissionGroup, MemberTraining, TrainingCategory, - KlettertreffAttendee, ActivityCategory, OldMemberOnList, MemberList, + KlettertreffAttendee, ActivityCategory, annotate_activity_score, RegistrationPassword, MemberUnconfirmedProxy) from finance.models import Statement, Bill from mailer.mailutils import send as send_mail, get_echo_link @@ -592,11 +592,6 @@ class MemberOnListInline(FilteredMemberFieldMixin, GenericTabularInline): sortable_options = [] -class OldMemberOnListInline(admin.TabularInline): - model = OldMemberOnList - extra = 0 - - class MemberNoteListAdmin(admin.ModelAdmin): inlines = [MemberOnListInline] list_display = ['__str__', 'date'] @@ -674,61 +669,6 @@ class MemberNoteListAdmin(admin.ModelAdmin): generate_summary.short_description = "PDF Übersicht erstellen" - -class MemberListAdmin(admin.ModelAdmin): - inlines = [OldMemberOnListInline] - form = FreizeitAdminForm - list_display = ['__str__', 'date'] - search_fields = ('name',) - actions = ['migrate_to_freizeit', 'migrate_to_notelist'] - #formfield_overrides = { - # ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, - # ForeignKey: {'widget': apply_select2(forms.Select)} - #} - - class Media: - css = {'all': ('admin/css/tabular_hide_original.css',)} - - def __init__(self, *args, **kwargs): - super(MemberListAdmin, self).__init__(*args, **kwargs) - - def migrate_to_freizeit(self, request, queryset): - """Creates 'Freizeiten' from the given memberlists """ - for memberlist in queryset: - freizeit = Freizeit(name=memberlist.name, - place=memberlist.place, - destination=memberlist.destination, - date=memberlist.date, - end=memberlist.end, - tour_type=memberlist.tour_type, - difficulty=memberlist.difficulty) - freizeit.save() - freizeit.jugendleiter = memberlist.jugendleiter.all() - freizeit.groups = memberlist.groups.all() - freizeit.activity = memberlist.activity.all() - for memberonlist in memberlist.oldmemberonlist_set.all(): - newonlist = NewMemberOnList(member=memberonlist.member, - comments=memberonlist.comments, - memberlist=freizeit) - newonlist.save() - messages.info(request, "Freizeit(en) erfolgreich erstellt.") - migrate_to_freizeit.short_description = "Aus Teilnehmerliste(n) Freizeit(en) erstellen" - - def migrate_to_notelist(self, request, queryset): - """Creates 'MemberNoteList' from the given memberlists """ - for memberlist in queryset: - notelist = MemberNoteList(title=memberlist.name, - date=memberlist.date) - notelist.save() - for memberonlist in memberlist.oldmemberonlist_set.all(): - newonlist = NewMemberOnList(member=memberonlist.member, - comments=memberonlist.comments, - memberlist=notelist) - newonlist.save() - messages.info(request, "Teilnehmerlist(en) erfolgreich erstellt.") - migrate_to_notelist.short_description = "Aus Teilnehmerliste(n) Notizliste erstellen" - - class FreizeitAdmin(FilteredMemberFieldMixin, nested_admin.NestedModelAdmin): inlines = [MemberOnListInline, LJPOnListInline, StatementOnListInline] form = FreizeitAdminForm diff --git a/jdav_web/members/migrations/0005_remove_oldmemberonlist_member_and_more.py b/jdav_web/members/migrations/0005_remove_oldmemberonlist_member_and_more.py new file mode 100644 index 0000000..ba9922b --- /dev/null +++ b/jdav_web/members/migrations/0005_remove_oldmemberonlist_member_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.0.1 on 2023-04-01 20:46 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('members', '0004_add_training_data_alter_required_flags'), + ] + + operations = [ + migrations.RemoveField( + model_name='oldmemberonlist', + name='member', + ), + migrations.RemoveField( + model_name='oldmemberonlist', + name='memberlist', + ), + migrations.DeleteModel( + name='MemberList', + ), + migrations.DeleteModel( + name='OldMemberOnList', + ), + ] diff --git a/jdav_web/members/migrations/0006_rename_permissions.py b/jdav_web/members/migrations/0006_rename_permissions.py new file mode 100644 index 0000000..e385119 --- /dev/null +++ b/jdav_web/members/migrations/0006_rename_permissions.py @@ -0,0 +1,32 @@ +# Stub Generated by Django 4.0.1 on 2023-04-02 08:29 and edited manually + +from django.db import migrations + +def rename_permissions(apps, schema_editor): + Permission = apps.get_model("auth", "Permission") + + for modelcodename in ["klettertreffattendee", "member", "newmemberonlist"]: + for action in ["view", "add", "change", "delete"]: + Permission.objects \ + .filter(codename="{action}_{modelcodename}".format(action=action, modelcodename=modelcodename)) \ + .update(name='Can {action} {modelcodename}'.format(action=action, modelcodename=modelcodename)) + + +def remove_old_memberlist_permissions(apps, schema_editor): + Permission = apps.get_model("auth", "Permission") + + for action in ["view", "add", "change", "delete"]: + Permission.objects.filter(codename="{action}_oldmemberonlist".format(action=action)).delete() + Permission.objects.filter(codename="{action}_memberlist".format(action=action)).delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('members', '0005_remove_oldmemberonlist_member_and_more'), + ] + + operations = [ + migrations.RunPython(rename_permissions, migrations.RunPython.noop), + migrations.RunPython(remove_old_memberlist_permissions, migrations.RunPython.noop), + ] diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index e16faf1..ff37517 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -565,69 +565,6 @@ class MemberWaitingList(Person): else self.email) -class MemberList(models.Model): - """Lets the user create a list of members in pdf format. - - DEPRECATED: Replaced by Freizeit and Notizliste - """ - - name = models.CharField(verbose_name=_('Activity'), default='', - max_length=50) - place = models.CharField(verbose_name=_('Place'), default='', max_length=50) - destination = models.CharField(verbose_name=_('Destination (optional)'), - default='', max_length=50, blank=True) - date = models.DateField(default=datetime.today, verbose_name=_('Date')) - end = models.DateField(verbose_name=_('End (optional)'), blank=True, default=datetime.today) - # comment = models.TextField(_('Comments'), default='', blank=True) - groups = models.ManyToManyField(Group, verbose_name=_('Groups')) - jugendleiter = models.ManyToManyField(Member) - tour_type_choices = ((GEMEINSCHAFTS_TOUR, 'Gemeinschaftstour'), - (FUEHRUNGS_TOUR, 'Führungstour'), - (AUSBILDUNGS_TOUR, 'Ausbildung')) - # verbose_name is overriden by form, label is set in admin.py - tour_type = models.IntegerField(choices=tour_type_choices) - activity = models.ManyToManyField(ActivityCategory, default=None, - verbose_name=_('Categories')) - difficulty_choices = [(1, _('easy')), (2, _('medium')), (3, _('hard'))] - # verbose_name is overriden by form, label is set in admin.py - difficulty = models.IntegerField(choices=difficulty_choices) - - def __str__(self): - """String represenation""" - return self.name - - class Meta: - verbose_name = _('Memberlist') - verbose_name_plural = _('Memberlists') - - def get_tour_type(self): - if self.tour_type == FUEHRUNGS_TOUR: - return "Führungstour" - elif self.tour_type == AUSBILDUNGS_TOUR: - return "Ausbildung" - else: - return "Gemeinschaftstour" - - def get_absolute_url(self): - return reverse('admin:members_memberlist_change', args=[str(self.id)]) - - -class OldMemberOnList(models.Model): - """ - Connects members to a list of members. - """ - member = models.ForeignKey(Member, verbose_name=_('Member'), on_delete=models.CASCADE) - memberlist = models.ForeignKey(MemberList, on_delete=models.CASCADE) - comments = models.TextField(_('Comment'), default='', blank=True) - - def __str__(self): - return str(self.member) - - class Meta: - verbose_name = _('Member') - verbose_name_plural = _('Members') - - class NewMemberOnList(models.Model): """ Connects members to a list of members.