File size: 1,965 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""Module for finalized material."""

from __future__ import annotations

from typing import TYPE_CHECKING, ClassVar

from django.db import models
from django.utils.translation import gettext_lazy as _

from .contract import Contract

if TYPE_CHECKING:
    pass


class MaterialCategory(models.TextChoices):
    CONTRACT_ORIGINAL = "contract_original", _("合同正本")
    SUPPLEMENTARY_AGREEMENT = "supplementary_agreement", _("补充协议")
    INVOICE = "invoice", _("发票")


class FinalizedMaterial(models.Model):
    """归档材料模型,存储上传的 PDF 文件元数据。"""

    id: int
    contract_id: int
    contract: models.ForeignKey[Contract] = models.ForeignKey(
        Contract,
        on_delete=models.CASCADE,
        related_name="finalized_materials",
        verbose_name=_("合同"),
    )
    file_path: models.CharField = models.CharField(max_length=500, verbose_name=_("文件路径"))
    original_filename: models.CharField = models.CharField(max_length=255, verbose_name=_("原始文件名"))
    category: models.CharField = models.CharField(
        max_length=32,
        choices=MaterialCategory.choices,
        default=MaterialCategory.INVOICE,
        verbose_name=_("材料分类"),
    )
    uploaded_at: models.DateTimeField = models.DateTimeField(auto_now_add=True, verbose_name=_("上传时间"))
    remark: models.TextField = models.TextField(blank=True, default="", verbose_name=_("备注"))
    order: models.PositiveIntegerField = models.PositiveIntegerField(default=0, verbose_name=_("排序"))

    class Meta:
        ordering: ClassVar = ["order", "-uploaded_at"]
        verbose_name = _("归档材料")
        verbose_name_plural = _("归档材料")
        indexes: ClassVar = [
            models.Index(fields=["contract", "order", "-uploaded_at"]),
        ]

    def __str__(self) -> str:
        return f"{self.original_filename} ({self.get_category_display()})"  # type: ignore[attr-defined]