File size: 1,520 Bytes
b4f2238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from __future__ import annotations

from django.contrib import admin
from django.http import HttpRequest, JsonResponse
from django.urls import URLPattern, path
from django.utils.translation import gettext_lazy as _

from apps.cases.models import CaseParty


class CasePartyAdmin(admin.ModelAdmin[CaseParty]):
    list_display = ("id", "case", "client", "is_our_client", "legal_status")
    list_filter = ("legal_status",)
    search_fields = ("case__name", "client__name")

    def is_our_client(self, obj: CaseParty) -> bool:
        return bool(getattr(obj.client, "is_our_client", False))

    is_our_client.boolean = True  # type: ignore[attr-defined]
    is_our_client.short_description = _("是否为我方当事人")  # type: ignore[attr-defined]

    def get_urls(self) -> list[URLPattern]:
        urls: list[URLPattern] = super().get_urls()
        custom: list[URLPattern] = [
            path(
                "is-our-client/<int:client_id>/",
                self.admin_site.admin_view(self.is_our_client_view),
                name="cases_caseparty_is_our_client",
            ),
        ]
        return custom + urls

    def is_our_client_view(self, request: HttpRequest, client_id: int) -> JsonResponse:
        from apps.core.interfaces import ServiceLocator

        client_service = ServiceLocator.get_client_service()
        client_dto = client_service.get_client(client_id)
        val = bool(client_dto.is_our_client) if client_dto else False
        return JsonResponse({"is_our_client": val})