Download apps/contracts/services/contract/admin/contract_admin_query_service.py from jun2024/fc: direct link, hf CLI and curl.
- Browser
- Download file 2.46 kB
-
https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/contracts/services/contract/admin/contract_admin_query_service.py
- Command line
-
hf download hf://spaces/jun2024/fc/apps/contracts/services/contract/admin/contract_admin_query_service.py
-
curl -L -o contract_admin_query_service.py https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/contracts/services/contract/admin/contract_admin_query_service.py
2.46 kB
| """Business logic services.""" | |
| from __future__ import annotations | |
| from typing import Any, ClassVar | |
| from django.utils.translation import gettext_lazy as _ | |
| from apps.contracts.models import Contract | |
| from apps.core.exceptions import NotFoundError | |
| from apps.core.models.enums import CaseType | |
| from ..wiring import get_case_service | |
| class ContractAdminQueryService: | |
| CASE_ALLOWED_TYPES: ClassVar = { | |
| CaseType.CIVIL, | |
| CaseType.CRIMINAL, | |
| CaseType.ADMINISTRATIVE, | |
| CaseType.LABOR, | |
| CaseType.INTL, | |
| } | |
| def can_create_case(self, contract_id: int) -> bool: | |
| contract = Contract.objects.filter(pk=contract_id).only("id", "case_type").first() | |
| if not contract: | |
| return False | |
| return contract.case_type in self.CASE_ALLOWED_TYPES | |
| def get_contract_detail(self, contract_id: int) -> Any: | |
| try: | |
| return ( | |
| Contract.objects.select_related("folder_binding") | |
| .prefetch_related( | |
| "contract_parties__client", | |
| "assignments__lawyer", | |
| "payments", | |
| "reminders", | |
| "supplementary_agreements__parties__client", | |
| "finalized_materials", | |
| ) | |
| .get(pk=contract_id) | |
| ) | |
| except Contract.DoesNotExist as exc: | |
| raise NotFoundError(_("合同 %(id)s 不存在") % {"id": contract_id}) from exc | |
| def get_related_cases(self, contract_id: int) -> list[dict[str, Any]]: | |
| case_service = get_case_service() | |
| cases_dto = case_service.get_cases_by_contract(contract_id) | |
| if not cases_dto: | |
| return [] | |
| case_ids = [case.id for case in cases_dto] | |
| case_primary_lawyer_map = case_service.get_primary_lawyer_names_by_case_ids_internal(case_ids) | |
| from apps.core.models.enums import CaseStatus | |
| status_map = dict(CaseStatus.choices) | |
| return [ | |
| { | |
| "id": case.id, | |
| "name": case.name, | |
| "status": case.status, | |
| "status_display": status_map.get(case.status, case.status), | |
| "cause_of_action": case.cause_of_action or _("未设置"), | |
| "primary_lawyer": case_primary_lawyer_map.get(case.id) or _("未指派"), | |
| "detail_url": f"/admin/cases/case/{case.id}/detail/", | |
| } | |
| for case in cases_dto | |
| ] | |