HH/apps/feedback/admin.py
2026-03-28 14:03:56 +03:00

196 lines
6.2 KiB
Python

"""
Feedback admin configuration
"""
from django.contrib import admin
from .models import (
Feedback,
FeedbackAttachment,
FeedbackResponse,
CommentImport,
PatientComment,
CommentActionPlan,
)
@admin.register(Feedback)
class FeedbackAdmin(admin.ModelAdmin):
"""Admin interface for Feedback model"""
list_display = [
"id",
"feedback_type",
"title",
"get_contact_name",
"hospital",
"status",
"sentiment",
"rating",
"is_featured",
"created_at",
]
list_filter = [
"feedback_type",
"status",
"sentiment",
"category",
"priority",
"is_featured",
"is_deleted",
"created_at",
]
search_fields = [
"title",
"message",
"patient__first_name",
"patient__last_name",
"patient__mrn",
"contact_name",
"contact_email",
]
readonly_fields = [
"id",
"created_at",
"updated_at",
"assigned_at",
"reviewed_at",
"acknowledged_at",
"closed_at",
"deleted_at",
]
fieldsets = (
(
"Basic Information",
{"fields": ("id", "feedback_type", "title", "message", "category", "subcategory", "rating", "priority")},
),
("Patient/Contact", {"fields": ("patient", "is_anonymous", "contact_name", "contact_email", "contact_phone")}),
("Organization", {"fields": ("hospital", "department", "physician", "encounter_id")}),
(
"Status & Workflow",
{
"fields": (
"status",
"assigned_to",
"assigned_at",
"reviewed_by",
"reviewed_at",
"acknowledged_by",
"acknowledged_at",
"closed_by",
"closed_at",
)
},
),
("Sentiment Analysis", {"fields": ("sentiment", "sentiment_score")}),
(
"Flags",
{"fields": ("is_featured", "is_public", "requires_follow_up", "is_deleted", "deleted_at", "deleted_by")},
),
("Metadata", {"fields": ("source", "metadata", "created_at", "updated_at"), "classes": ("collapse",)}),
)
date_hierarchy = "created_at"
ordering = ["-created_at"]
@admin.register(FeedbackAttachment)
class FeedbackAttachmentAdmin(admin.ModelAdmin):
"""Admin interface for FeedbackAttachment model"""
list_display = ["id", "feedback", "filename", "file_type", "file_size", "uploaded_by", "created_at"]
list_filter = ["file_type", "created_at"]
search_fields = ["filename", "feedback__title"]
readonly_fields = ["id", "created_at", "updated_at"]
date_hierarchy = "created_at"
ordering = ["-created_at"]
@admin.register(CommentImport)
class CommentImportAdmin(admin.ModelAdmin):
list_display = ["hospital", "year", "month", "status", "total_rows", "imported_count", "imported_by", "created_at"]
list_filter = ["status", "year", "month", "hospital"]
date_hierarchy = "created_at"
raw_id_fields = ["hospital", "imported_by"]
@admin.register(PatientComment)
class PatientCommentAdmin(admin.ModelAdmin):
list_display = [
"serial_number",
"hospital",
"source_category",
"classification",
"sub_category",
"sentiment",
"is_classified",
"year",
"month",
]
list_filter = [
"hospital",
"source_category",
"classification",
"sub_category",
"sentiment",
"is_classified",
"year",
"month",
]
search_fields = ["comment_text", "comment_text_en", "negative_keywords", "positive_keywords"]
date_hierarchy = "created_at"
raw_id_fields = ["hospital", "comment_import"]
fieldsets = (
(None, {"fields": ("hospital", "comment_import", "serial_number", "source_category", "year", "month")}),
("Comment Text", {"fields": ("comment_text", "comment_text_en")}),
("Classification (Step 1)", {"fields": ("classification", "sub_category", "is_classified", "sentiment")}),
(
"Sentiment Keywords",
{"fields": ("negative_keywords", "positive_keywords", "gratitude_keywords", "suggestions")},
),
("Doctor Reference", {"fields": ("mentioned_doctor_name", "mentioned_doctor_name_en", "frequency")}),
("Metadata", {"fields": ("metadata",), "classes": ("collapse",)}),
)
@admin.register(CommentActionPlan)
class CommentActionPlanAdmin(admin.ModelAdmin):
list_display = [
"department_label",
"problem_number",
"status",
"frequency",
"timeframe",
"year",
"month",
]
list_filter = ["status", "hospital", "department", "year", "month"]
search_fields = ["recommendation", "comment_text", "department_label", "responsible_department"]
date_hierarchy = "created_at"
raw_id_fields = ["hospital", "department", "comment"]
fieldsets = (
(None, {"fields": ("hospital", "department", "department_label", "problem_number", "year", "month")}),
("Source Comment", {"fields": ("comment", "comment_text", "comment_text_en", "frequency")}),
("Action Plan", {"fields": ("recommendation", "recommendation_en", "responsible_department")}),
("Tracking (Step 5)", {"fields": ("status", "timeframe", "evidences")}),
)
@admin.register(FeedbackResponse)
class FeedbackResponseAdmin(admin.ModelAdmin):
"""Admin interface for FeedbackResponse model"""
list_display = ["id", "feedback", "response_type", "created_by", "is_internal", "created_at"]
list_filter = ["response_type", "is_internal", "created_at"]
search_fields = ["message", "feedback__title"]
readonly_fields = ["id", "created_at", "updated_at"]
fieldsets = (
(
"Response Information",
{"fields": ("id", "feedback", "response_type", "message", "created_by", "is_internal")},
),
("Status Change", {"fields": ("old_status", "new_status")}),
("Metadata", {"fields": ("metadata", "created_at", "updated_at"), "classes": ("collapse",)}),
)
date_hierarchy = "created_at"
ordering = ["-created_at"]