Corp/backend/tasks/admin.py
2026-08-06 13:35:30 +03:00

227 lines
6.1 KiB
Python

from django.contrib import admin
from .models import (
Task,
TaskActivity,
TaskAttachment,
TaskAutomation,
TaskAutomationRun,
TaskBoard,
TaskBoardGroup,
TaskBoardPlacement,
TaskChecklistItem,
TaskColumn,
TaskColumnRow,
TaskCover,
TaskExternalLink,
TaskLabel,
TaskLinkedObject,
TaskUserSettings,
)
class TaskColumnInline(admin.TabularInline):
model = TaskColumn
extra = 0
fields = ["parent", "name", "position", "color", "is_done", "is_archived"]
@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", "position", "created_at"]
search_fields = ["name", "user__email"]
autocomplete_fields = ["user"]
@admin.register(TaskBoardPlacement)
class TaskBoardPlacementAdmin(admin.ModelAdmin):
list_display = [
"board",
"group",
"user",
"is_pinned",
"notifications_enabled",
"updated_at",
]
list_filter = ["is_pinned", "notifications_enabled", "group"]
search_fields = ["board__name", "group__name", "user__email"]
autocomplete_fields = ["board", "group", "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(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"]