fc / apps /oa_filing /models /client_import_session.py
jun2024's picture
Upload 2241 files
b4f2238 verified
Raw History Blame Contribute Delete
3.73 kB
"""Module for client import session."""
from datetime import datetime
from typing import ClassVar
from django.db import models
from django.utils.translation import gettext_lazy as _
class ClientImportStatus(models.TextChoices):
PENDING = "pending", _("待开始")
IN_PROGRESS = "in_progress", _("进行中")
COMPLETED = "completed", _("已完成")
FAILED = "failed", _("失败")
CANCELLED = "cancelled", _("已取消")
class ClientImportPhase(models.TextChoices):
PENDING = "pending", _("待开始")
DISCOVERING = "discovering", _("查找并发现")
IMPORTING = "importing", _("导入中")
COMPLETED = "completed", _("已完成")
FAILED = "failed", _("失败")
CANCELLED = "cancelled", _("已取消")
class ClientImportSession(models.Model):
"""OA客户导入记录"""
id: int
lawyer_id: int
lawyer: models.ForeignKey[models.Model, models.Model] = models.ForeignKey(
"organization.Lawyer",
on_delete=models.CASCADE,
related_name="client_import_sessions",
verbose_name=_("发起用户"),
)
credential_id: int | None
credential: models.ForeignKey[models.Model, models.Model] = models.ForeignKey(
"organization.AccountCredential",
on_delete=models.SET_NULL,
null=True,
related_name="client_import_sessions",
verbose_name=_("OA凭证"),
)
status: str = models.CharField( # type: ignore[assignment]
max_length=16,
choices=ClientImportStatus.choices,
default=ClientImportStatus.PENDING,
verbose_name=_("状态"),
)
phase: str = models.CharField( # type: ignore[assignment]
max_length=16,
choices=ClientImportPhase.choices,
default=ClientImportPhase.PENDING,
verbose_name=_("阶段"),
)
discovered_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("已发现数量"),
)
total_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("总数量"),
)
success_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("成功数量"),
)
skip_count: int = models.IntegerField( # type: ignore[assignment]
default=0,
verbose_name=_("跳过数量"),
)
error_message: str = models.TextField( # type: ignore[assignment]
blank=True,
default="",
verbose_name=_("错误信息"),
)
progress_message: str = models.CharField( # type: ignore[assignment]
max_length=255,
blank=True,
default="",
verbose_name=_("进度描述"),
)
started_at: datetime | None = models.DateTimeField( # type: ignore[assignment]
null=True,
blank=True,
verbose_name=_("开始时间"),
)
completed_at: datetime | None = models.DateTimeField( # type: ignore[assignment]
null=True,
blank=True,
verbose_name=_("完成时间"),
)
created_at: datetime = models.DateTimeField( # type: ignore[assignment]
auto_now_add=True,
verbose_name=_("创建时间"),
)
updated_at: datetime = models.DateTimeField( # type: ignore[assignment]
auto_now=True,
verbose_name=_("更新时间"),
)
class Meta:
verbose_name = _("客户导入记录")
verbose_name_plural = _("客户导入记录")
indexes: ClassVar = [
models.Index(fields=["lawyer", "-created_at"]),
models.Index(fields=["status", "-created_at"]),
]
def __str__(self) -> str:
return f"ClientImportSession #{self.id} - {self.status}"