diff --git a/greenmine/projects/admin.py b/greenmine/projects/admin.py index 3e657933..22a04076 100644 --- a/greenmine/projects/admin.py +++ b/greenmine/projects/admin.py @@ -23,25 +23,44 @@ class AttachmentInline(generic.GenericTabularInline): class MembershipAdmin(admin.ModelAdmin): list_display = ['project', 'role', 'user'] - list_filter = ['project', 'role'] list_display_links = list_display - list_filter = ["project"] + list_filter = ['project', 'role'] class MembershipInline(admin.TabularInline): model = models.Membership - fields = ['user', 'project', 'role'] - readonly_fields = ["project", "role"] extra = 0 - max_num = 0 - can_delete = False class ProjectAdmin(reversion.VersionAdmin): - list_display = ["name", "owner", "created_date", "total_milestones", "total_story_points"] + list_display = ["name", "owner", "created_date", "total_milestones", + "total_story_points"] list_display_links = list_display inlines = [MembershipInline, MilestoneInline] + def get_object(self, *args, **kwargs): + self.obj = super().get_object(*args, **kwargs) + return self.obj + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if (db_field.name in ["default_points", "default_us_status", "default_task_status", + "default_priority", "default_severity", + "default_issue_status", "default_issue_type", + "default_question_status"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + project=self.obj.project) + else: + kwargs["queryset"] = db_field.related.parent_model.objects.none() + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if (db_field.name in ["watchers"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_manytomany(db_field, request, **kwargs) + # User Stories common admins diff --git a/greenmine/projects/issues/admin.py b/greenmine/projects/issues/admin.py index 987a00d0..ee65155b 100644 --- a/greenmine/projects/issues/admin.py +++ b/greenmine/projects/issues/admin.py @@ -10,7 +10,31 @@ import reversion class IssueAdmin(reversion.VersionAdmin): - list_display = ["subject", "type"] + list_display = ["project", "milestone", "ref", "subject",] + list_display_links = ["ref", "subject",] inlines = [AttachmentInline] + def get_object(self, *args, **kwargs): + self.obj = super().get_object(*args, **kwargs) + return self.obj + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if (db_field.name in ["status", "priority", "severity", "type", "milestone"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + project=self.obj.project) + elif (db_field.name in ["owner", "assigned_to"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if (db_field.name in ["watchers"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_manytomany(db_field, request, **kwargs) + + admin.site.register(models.Issue, IssueAdmin) diff --git a/greenmine/projects/milestones/admin.py b/greenmine/projects/milestones/admin.py index 5f158de7..73246e4c 100644 --- a/greenmine/projects/milestones/admin.py +++ b/greenmine/projects/milestones/admin.py @@ -8,15 +8,7 @@ from . import models class MilestoneInline(admin.TabularInline): model = models.Milestone - - fields = ['name', 'owner', 'estimated_start', 'estimated_finish', 'closed', - 'disponibility', 'order'] - readonly_fields = ["owner"] - - sortable_field_name = 'order' extra = 0 - max_num = 0 - can_delete = False class MilestoneAdmin(reversion.VersionAdmin): diff --git a/greenmine/projects/questions/admin.py b/greenmine/projects/questions/admin.py index e3ceca99..669e38d8 100644 --- a/greenmine/projects/questions/admin.py +++ b/greenmine/projects/questions/admin.py @@ -10,7 +10,30 @@ import reversion class QuestionAdmin(reversion.VersionAdmin): - list_display = ["subject", "project", "owner"] + list_display = ["project", "milestone", "ref", "subject",] + list_display_links = ["ref", "subject",] inlines = [AttachmentInline] + def get_object(self, *args, **kwargs): + self.obj = super().get_object(*args, **kwargs) + return self.obj + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if (db_field.name in ["status", "milestone"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + project=self.obj.project) + elif (db_field.name in ["owner", "assigned_to"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if (db_field.name in ["watchers"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_manytomany(db_field, request, **kwargs) + admin.site.register(models.Question, QuestionAdmin) diff --git a/greenmine/projects/tasks/admin.py b/greenmine/projects/tasks/admin.py index 322e33ee..c3fdb999 100644 --- a/greenmine/projects/tasks/admin.py +++ b/greenmine/projects/tasks/admin.py @@ -7,15 +7,32 @@ from greenmine.projects.admin import AttachmentInline from . import models - class TaskAdmin(reversion.VersionAdmin): - list_display = ["subject", "ref", "user_story", "milestone", "project", "user_story_id"] + list_display = ["project", "milestone", "user_story", "ref", "subject",] + list_display_links = ["ref", "subject",] list_filter = ["project"] - list_display_links = list_display - readonly_fields = ["milestone", "user_story", "status"] inlines = [AttachmentInline] - def user_story_id(self, instance): - return instance.user_story.id + def get_object(self, *args, **kwargs): + self.obj = super().get_object(*args, **kwargs) + return self.obj + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if (db_field.name in ["status", "milestone", "user_story"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + project=self.obj.project) + elif (db_field.name in ["owner", "assigned_to"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if (db_field.name in ["watchers"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_manytomany(db_field, request, **kwargs) admin.site.register(models.Task, TaskAdmin) diff --git a/greenmine/projects/userstories/admin.py b/greenmine/projects/userstories/admin.py index 795a2719..ec3d153d 100644 --- a/greenmine/projects/userstories/admin.py +++ b/greenmine/projects/userstories/admin.py @@ -26,12 +26,33 @@ class RolePointsAdmin(admin.ModelAdmin): class UserStoryAdmin(reversion.VersionAdmin): - list_display = ["id", "ref", "milestone", "project", "owner", 'status', 'is_closed'] + list_display = ["project", "milestone", "ref", "subject",] + list_display_links = ["ref", "subject",] list_filter = ["project"] - list_display_links = list_display - readonly_fields = ["status", "milestone"] inlines = [RolePointsInline, AttachmentInline] + def get_object(self, *args, **kwargs): + self.obj = super().get_object(*args, **kwargs) + return self.obj + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if (db_field.name in ["status", "milestone"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + project=self.obj.project) + elif (db_field.name in ["owner", "assigned_to"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if (db_field.name in ["watchers"] + and getattr(self, 'obj', None)): + kwargs["queryset"] = db_field.related.parent_model.objects.filter( + memberships__project=self.obj.project) + return super().formfield_for_manytomany(db_field, request, **kwargs) + admin.site.register(models.UserStory, UserStoryAdmin) admin.site.register(models.RolePoints, RolePointsAdmin)