266 lines
7.0 KiB
Python
266 lines
7.0 KiB
Python
from django.contrib import admin
|
|
|
|
from .models import (
|
|
Task,
|
|
TaskActivity,
|
|
TaskAttachment,
|
|
TaskAutomation,
|
|
TaskAutomationRun,
|
|
TaskBoard,
|
|
TaskBoardGroup,
|
|
TaskBoardGroupMembership,
|
|
TaskBoardPlacement,
|
|
TaskChecklistItem,
|
|
TaskColumn,
|
|
TaskColumnRow,
|
|
TaskCover,
|
|
TaskExecutionCycle,
|
|
TaskExternalLink,
|
|
TaskLabel,
|
|
TaskLinkedObject,
|
|
TaskUserSettings,
|
|
)
|
|
|
|
|
|
class TaskColumnInline(admin.TabularInline):
|
|
model = TaskColumn
|
|
extra = 0
|
|
fields = ["parent", "name", "position", "color", "is_done", "is_archived"]
|
|
|
|
|
|
class TaskBoardGroupMembershipInline(admin.TabularInline):
|
|
model = TaskBoardGroupMembership
|
|
extra = 0
|
|
fields = ["board", "rank_key", "added_at"]
|
|
readonly_fields = ["added_at"]
|
|
autocomplete_fields = ["board"]
|
|
|
|
|
|
@admin.register(TaskBoard)
|
|
class TaskBoardAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"name",
|
|
"created_by",
|
|
"access_scope",
|
|
"is_archived",
|
|
"created_at",
|
|
]
|
|
list_filter = ["access_scope", "is_archived", "created_at"]
|
|
search_fields = ["name", "description"]
|
|
filter_horizontal = ["members", "departments"]
|
|
inlines = [TaskColumnInline]
|
|
|
|
|
|
@admin.register(TaskBoardGroup)
|
|
class TaskBoardGroupAdmin(admin.ModelAdmin):
|
|
list_display = ["name", "user", "is_shared", "position", "created_at"]
|
|
list_filter = ["is_shared"]
|
|
search_fields = ["name", "user__email"]
|
|
autocomplete_fields = ["user", "hidden_by"]
|
|
inlines = [TaskBoardGroupMembershipInline]
|
|
|
|
|
|
@admin.register(TaskBoardPlacement)
|
|
class TaskBoardPlacementAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"board",
|
|
"user",
|
|
"is_pinned",
|
|
"notifications_enabled",
|
|
"updated_at",
|
|
]
|
|
list_filter = ["is_pinned", "notifications_enabled"]
|
|
search_fields = ["board__name", "user__email"]
|
|
autocomplete_fields = ["board", "user"]
|
|
readonly_fields = ["view_state"]
|
|
|
|
|
|
@admin.register(TaskColumn)
|
|
class TaskColumnAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"name",
|
|
"board",
|
|
"parent",
|
|
"position",
|
|
"is_done",
|
|
"is_archived",
|
|
]
|
|
list_filter = ["is_done", "is_archived", "board"]
|
|
search_fields = ["name", "board__name"]
|
|
|
|
|
|
@admin.register(TaskColumnRow)
|
|
class TaskColumnRowAdmin(admin.ModelAdmin):
|
|
list_display = ["name", "column", "position", "color"]
|
|
list_filter = ["column__board", "column"]
|
|
search_fields = ["name", "column__name", "column__board__name"]
|
|
|
|
|
|
@admin.register(TaskLabel)
|
|
class TaskLabelAdmin(admin.ModelAdmin):
|
|
list_display = ["name", "color"]
|
|
search_fields = ["name"]
|
|
|
|
|
|
@admin.register(TaskAutomation)
|
|
class TaskAutomationAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"name",
|
|
"kind",
|
|
"trigger",
|
|
"applies_to_all_boards",
|
|
"is_active",
|
|
"last_run_at",
|
|
]
|
|
list_filter = ["kind", "trigger", "applies_to_all_boards", "is_active"]
|
|
search_fields = ["name", "description"]
|
|
filter_horizontal = ["boards"]
|
|
autocomplete_fields = ["created_by"]
|
|
|
|
|
|
@admin.register(TaskAutomationRun)
|
|
class TaskAutomationRunAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"automation",
|
|
"task",
|
|
"source",
|
|
"status",
|
|
"actor",
|
|
"started_at",
|
|
"finished_at",
|
|
]
|
|
list_filter = ["source", "status", "started_at"]
|
|
search_fields = ["automation__name", "task__title", "error"]
|
|
autocomplete_fields = ["automation", "task", "actor", "trigger_activity"]
|
|
readonly_fields = [
|
|
"idempotency_key",
|
|
"context",
|
|
"actions_log",
|
|
"started_at",
|
|
"finished_at",
|
|
]
|
|
|
|
|
|
@admin.register(Task)
|
|
class TaskAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"title",
|
|
"board",
|
|
"column",
|
|
"row",
|
|
"assignee",
|
|
"priority",
|
|
"due_date",
|
|
"completed_at",
|
|
]
|
|
list_filter = ["board", "column", "row", "priority", "due_date"]
|
|
search_fields = ["title", "description", "assignee__email"]
|
|
filter_horizontal = ["labels", "participants"]
|
|
|
|
|
|
@admin.register(TaskAttachment)
|
|
class TaskAttachmentAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"file_name",
|
|
"task",
|
|
"uploaded_by",
|
|
"file_size",
|
|
"created_at",
|
|
]
|
|
list_filter = ["created_at"]
|
|
search_fields = ["file_name", "task__title", "uploaded_by__email"]
|
|
autocomplete_fields = ["task", "uploaded_by"]
|
|
|
|
|
|
@admin.register(TaskCover)
|
|
class TaskCoverAdmin(admin.ModelAdmin):
|
|
list_display = ["task", "kind", "created_by", "updated_at"]
|
|
list_filter = ["kind", "updated_at"]
|
|
search_fields = ["task__title", "created_by__email"]
|
|
autocomplete_fields = [
|
|
"task",
|
|
"attachment",
|
|
"comment",
|
|
"external_link",
|
|
"linked_object",
|
|
"created_by",
|
|
]
|
|
|
|
|
|
@admin.register(TaskChecklistItem)
|
|
class TaskChecklistItemAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"title",
|
|
"task",
|
|
"position",
|
|
"is_completed",
|
|
"completed_by",
|
|
"updated_at",
|
|
]
|
|
list_filter = ["is_completed", "created_at", "updated_at"]
|
|
search_fields = ["title", "task__title", "created_by__email"]
|
|
autocomplete_fields = ["task", "created_by", "completed_by"]
|
|
|
|
|
|
@admin.register(TaskLinkedObject)
|
|
class TaskLinkedObjectAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"task",
|
|
"kind",
|
|
"content_type",
|
|
"object_id",
|
|
"created_by",
|
|
"created_at",
|
|
]
|
|
list_filter = ["kind", "content_type", "created_at"]
|
|
search_fields = ["task__title", "created_by__email", "object_id"]
|
|
|
|
|
|
@admin.register(TaskExternalLink)
|
|
class TaskExternalLinkAdmin(admin.ModelAdmin):
|
|
list_display = ["title", "url", "task", "created_by", "created_at"]
|
|
list_filter = ["created_at"]
|
|
search_fields = ["title", "url", "task__title", "created_by__email"]
|
|
autocomplete_fields = ["task", "created_by"]
|
|
|
|
|
|
@admin.register(TaskActivity)
|
|
class TaskActivityAdmin(admin.ModelAdmin):
|
|
list_display = ["task", "action", "actor", "object_kind", "object_id", "created_at"]
|
|
list_filter = ["action", "object_kind", "created_at"]
|
|
search_fields = ["task__title", "actor__email", "object_id"]
|
|
|
|
|
|
@admin.register(TaskExecutionCycle)
|
|
class TaskExecutionCycleAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
"task_title",
|
|
"employee",
|
|
"due_date_snapshot",
|
|
"completed_at_snapshot",
|
|
"status",
|
|
"protection_until",
|
|
]
|
|
list_filter = ["status", "is_self_assigned", "completed_at_snapshot"]
|
|
search_fields = ["task_title", "employee__email", "cycle_key"]
|
|
readonly_fields = [
|
|
"task_id_snapshot",
|
|
"cycle_key",
|
|
"completed_at_snapshot",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|
|
|
|
|
|
@admin.register(TaskUserSettings)
|
|
class TaskUserSettingsAdmin(admin.ModelAdmin):
|
|
list_display = ["user", "default_board", "default_group", "updated_at"]
|
|
search_fields = [
|
|
"user__email",
|
|
"user__first_name",
|
|
"user__last_name",
|
|
"default_board__name",
|
|
"default_group__name",
|
|
]
|
|
autocomplete_fields = ["user", "default_board", "default_group"]
|