from django.contrib import admin
from django.forms import ModelForm
from django.http import HttpRequest
from .models import LegalDocument, TermsAcceptance
@admin.register(LegalDocument)
[docs]
class LegalDocumentAdmin(admin.ModelAdmin):
[docs]
list_display = [
"title",
"document_type",
"version",
"is_active",
"effective_date",
"created_at",
]
[docs]
list_filter = ["document_type", "is_active", "effective_date"]
[docs]
search_fields = ["title", "version", "content"]
[docs]
readonly_fields = ["created_at", "updated_at"]
[docs]
fieldsets = (
(None, {"fields": ("document_type", "title", "version", "is_active")}),
(
"Content",
{
"fields": ("content",),
"description": "Use HTML for formatting. Content will be sanitized.",
},
),
(
"Timing",
{
"fields": ("effective_date",),
},
),
(
"Metadata",
{
"fields": ("created_by", "created_at", "updated_at"),
"classes": ("collapse",),
},
),
)
[docs]
def save_model(
self,
request: HttpRequest,
obj: LegalDocument,
form: ModelForm,
change: bool,
) -> None:
if not obj.created_by:
obj.created_by = request.user
super().save_model(request, obj, form, change)
@admin.register(TermsAcceptance)
[docs]
class TermsAcceptanceAdmin(admin.ModelAdmin):
[docs]
list_display = [
"endorsement_stakeholder",
"legal_document_title",
"document_version",
"accepted_at",
"ip_address",
]
[docs]
list_filter = ["accepted_at", "legal_document__document_type"]
[docs]
search_fields = [
"endorsement__stakeholder__first_name",
"endorsement__stakeholder__last_name",
"endorsement__stakeholder__email",
"endorsement__stakeholder__organization",
"legal_document__title",
"ip_address",
]
[docs]
readonly_fields = [
"endorsement",
"legal_document",
"accepted_at",
"ip_address",
"user_agent",
]
[docs]
def endorsement_stakeholder(self, obj: TermsAcceptance) -> str:
if obj.endorsement and obj.endorsement.stakeholder:
stakeholder = obj.endorsement.stakeholder
return f"{stakeholder.name} ({stakeholder.organization})"
return "N/A"
endorsement_stakeholder.short_description = "Stakeholder"
[docs]
def legal_document_title(self, obj: TermsAcceptance) -> str:
return obj.legal_document.title if obj.legal_document else "N/A"
legal_document_title.short_description = "Document"
[docs]
def document_version(self, obj: TermsAcceptance) -> str:
return obj.legal_document.version if obj.legal_document else "N/A"
document_version.short_description = "Version"
[docs]
def has_add_permission(self, request: HttpRequest) -> bool: # noqa: ARG002
return False
[docs]
def has_change_permission( # noqa: ARG002
self,
request: HttpRequest, # noqa: ARG002
obj: TermsAcceptance | None = None, # noqa: ARG002
) -> bool:
return False
[docs]
def has_delete_permission( # noqa: ARG002
self,
request: HttpRequest, # noqa: ARG002
obj: TermsAcceptance | None = None, # noqa: ARG002
) -> bool:
return False