diff --git a/taiga/projects/admin.py b/taiga/projects/admin.py index 94bfdc42..344f2344 100644 --- a/taiga/projects/admin.py +++ b/taiga/projects/admin.py @@ -176,8 +176,10 @@ class ProjectAdmin(admin.ModelAdmin): ## Actions actions = [ "make_public", - "make_private" + "make_private", + "delete_selected" ] + @transaction.atomic def make_public(self, request, queryset): total_updates = 0 @@ -210,6 +212,36 @@ class ProjectAdmin(admin.ModelAdmin): self.message_user(request, _("{count} successfully made private.").format(count=total_updates)) make_private.short_description = _("Make private") + def delete_selected(self, request, queryset): + # NOTE: This must be equal to taiga.projects.models.Project.delete_related_content + from taiga.events.apps import (connect_events_signals, + disconnect_events_signals) + from taiga.projects.tasks.apps import (connect_all_tasks_signals, + disconnect_all_tasks_signals) + from taiga.projects.userstories.apps import (connect_all_userstories_signals, + disconnect_all_userstories_signals) + from taiga.projects.issues.apps import (connect_all_issues_signals, + disconnect_all_issues_signals) + from taiga.projects.apps import (connect_memberships_signals, + disconnect_memberships_signals) + + disconnect_events_signals() + disconnect_all_issues_signals() + disconnect_all_tasks_signals() + disconnect_all_userstories_signals() + disconnect_memberships_signals() + + r = admin.actions.delete_selected(self, request, queryset) + + connect_events_signals() + connect_all_issues_signals() + connect_all_tasks_signals() + connect_all_userstories_signals() + connect_memberships_signals() + + return r + delete_selected.short_description = _("Delete selected %(verbose_name_plural)s") + # User Stories common admins class PointsAdmin(admin.ModelAdmin): diff --git a/taiga/projects/models.py b/taiga/projects/models.py index 8aa5561c..4467baa8 100644 --- a/taiga/projects/models.py +++ b/taiga/projects/models.py @@ -467,6 +467,7 @@ class Project(ProjectDefaults, TaggedMixin, models.Model): set_notify_policy_level_to_ignore(notify_policy) def delete_related_content(self): + # NOTE: Remember to update code in taiga.projects.admin.ProjectAdmin.delete_selected from taiga.events.apps import (connect_events_signals, disconnect_events_signals) from taiga.projects.tasks.apps import (connect_all_tasks_signals,