diff --git a/taiga/projects/admin.py b/taiga/projects/admin.py index 99757145..3349f360 100644 --- a/taiga/projects/admin.py +++ b/taiga/projects/admin.py @@ -22,13 +22,13 @@ from django.utils.html import format_html from django.utils.translation import ugettext_lazy as _ from taiga.permissions import permissions -from taiga.projects.milestones.admin import MilestoneInline from taiga.projects.notifications.admin import NotifyPolicyInline from taiga.projects.likes.admin import LikeInline from taiga.users.admin import RoleInline from . import models + class MembershipAdmin(admin.ModelAdmin): list_display = ['project', 'role', 'user'] list_display_links = list_display @@ -49,6 +49,7 @@ class MembershipAdmin(admin.ModelAdmin): return super().formfield_for_foreignkey(db_field, request, **kwargs) + class MembershipInline(admin.TabularInline): model = models.Membership extra = 0 @@ -77,10 +78,58 @@ class ProjectAdmin(admin.ModelAdmin): list_filter = ("is_private", "blocked_code", "is_featured") list_editable = ["is_featured", "blocked_code"] search_fields = ["id", "name", "slug", "owner__username", "owner__email", "owner__full_name"] - inlines = [RoleInline, MembershipInline, MilestoneInline, NotifyPolicyInline, LikeInline] + inlines = [RoleInline, + MembershipInline, + NotifyPolicyInline, + LikeInline] - # NOTE: TextArrayField with a choices is broken in the admin panel. - exclude = ("anon_permissions", "public_permissions") + fieldsets = ( + (None, { + "fields": ("name", + "slug", + "is_featured", + "description", + "tags", + "logo", + ("created_date", "modified_date")) + }), + (_("Privacity"), { + "fields": (("owner", "blocked_code"), + "is_private", + ("anon_permissions", "public_permissions"), + "transfer_token") + }), + (_("Extra info"), { + "classes": ("collapse",), + "fields": ("creation_template", + ("is_looking_for_people", "looking_for_people_note"), + "tags_colors"), + }), + (_("Modules"), { + "classes": ("collapse",), + "fields": (("is_backlog_activated", "total_milestones", "total_story_points"), + "is_kanban_activated", + "is_issues_activated", + "is_wiki_activated", + ("videoconferences", "videoconferences_extra_data")), + }), + (_("Default values"), { + "classes": ("collapse",), + "fields": (("default_points", "default_us_status"), + "default_task_status", + ("default_issue_status", "default_priority", "default_severity", "default_issue_type")), + }), + (_("Activity"), { + "classes": ("collapse",), + "fields": (("total_activity", "total_activity_last_week", + "total_activity_last_month", "total_activity_last_year"),), + }), + (_("Fans"), { + "classes": ("collapse",), + "fields": (("total_fans", "total_fans_last_week", + "total_fans_last_month", "total_fans_last_year"),), + }), + ) def owner_url(self, obj): if obj.owner: diff --git a/taiga/projects/notifications/admin.py b/taiga/projects/notifications/admin.py index b35dd206..07a70396 100644 --- a/taiga/projects/notifications/admin.py +++ b/taiga/projects/notifications/admin.py @@ -27,6 +27,7 @@ class WatchedInline(GenericTabularInline): extra = 0 raw_id_fields = ["project", "user"] + class NotifyPolicyInline(TabularInline): model = models.NotifyPolicy extra = 0