from django.db import models from core.enums import StaffAccountPlatform, StaffTransferType from core.models.base import SoftDeleteModel, TimeStampedModel class StaffTransferLog(TimeStampedModel): staff = models.ForeignKey( "org.Staff", on_delete=models.RESTRICT, related_name="transfer_logs", ) transfer_type = models.CharField(max_length=30, choices=StaffTransferType.choices) old_value = models.JSONField(null=True, blank=True) new_value = models.JSONField(null=True, blank=True) transfer_date = models.DateField() remarks = models.CharField(max_length=50, blank=True, default="") operator = models.ForeignKey( "org.Staff", on_delete=models.RESTRICT, related_name="operated_transfers", ) operated_at = models.DateTimeField(auto_now_add=True) class Meta: db_table = "staff_transfer_logs" verbose_name = "人事异动记录" verbose_name_plural = "人事异动记录" indexes = [ models.Index(fields=["staff", "-transfer_date"], name="idx_transfer_logs_staff"), models.Index(fields=["transfer_type", "-operated_at"], name="idx_transfer_logs_type"), models.Index(fields=["operator"], name="idx_transfer_logs_operator"), ] class StaffRewardPunish(SoftDeleteModel): staff = models.ForeignKey( "org.Staff", on_delete=models.CASCADE, related_name="reward_punish_records", ) rp_date = models.DateField() category = models.CharField( max_length=50, help_text="Configurable lookup_items domain: org.reward_punish_category.", ) name = models.CharField(max_length=100) remarks = models.TextField(blank=True, default="") created_by = models.ForeignKey( "org.Staff", null=True, blank=True, on_delete=models.SET_NULL, related_name="created_reward_punish", ) class Meta: db_table = "staff_reward_punish" verbose_name = "奖惩记录" verbose_name_plural = "奖惩记录" class StaffAccount(TimeStampedModel): staff = models.ForeignKey( "org.Staff", on_delete=models.CASCADE, related_name="external_accounts", ) platform = models.CharField(max_length=30, choices=StaffAccountPlatform.choices) account_no = models.CharField(max_length=100, blank=True, default="") is_real_name_match = models.BooleanField(null=True, blank=True) is_bound = models.BooleanField(default=False) bound_at = models.DateTimeField(null=True, blank=True) class Meta: db_table = "staff_accounts" verbose_name = "员工第三方账号" verbose_name_plural = "员工第三方账号" constraints = [ models.UniqueConstraint( fields=["staff", "platform"], name="uq_staff_accounts_staff_platform", ), ] class StaffWorkExperience(TimeStampedModel): staff = models.ForeignKey( "org.Staff", on_delete=models.CASCADE, related_name="work_experiences", ) company = models.CharField(max_length=200) job_title = models.CharField(max_length=100, blank=True, default="") start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) reason = models.CharField(max_length=200, blank=True, default="") reference_name = models.CharField(max_length=50, blank=True, default="") reference_phone = models.CharField(max_length=30, blank=True, default="") class Meta: db_table = "staff_work_experiences" verbose_name = "工作经历" verbose_name_plural = "工作经历" class StaffEducation(TimeStampedModel): staff = models.ForeignKey( "org.Staff", on_delete=models.CASCADE, related_name="educations", ) stage = models.CharField(max_length=30, blank=True, default="") school = models.CharField(max_length=200) major = models.CharField(max_length=100, blank=True, default="") start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) enrollment_status = models.CharField(max_length=30, blank=True, default="") degree = models.CharField(max_length=30, blank=True, default="") class Meta: db_table = "staff_educations" verbose_name = "教育经历" verbose_name_plural = "教育经历" class StaffTraining(TimeStampedModel): staff = models.ForeignKey( "org.Staff", on_delete=models.CASCADE, related_name="trainings", ) training_name = models.CharField(max_length=200) training_date = models.DateField(null=True, blank=True) certificate = models.CharField(max_length=200, blank=True, default="") class Meta: db_table = "staff_trainings" verbose_name = "培训记录" verbose_name_plural = "培训记录" class StaffFamilyMember(TimeStampedModel): staff = models.ForeignKey( "org.Staff", on_delete=models.CASCADE, related_name="family_members", ) relation = models.CharField(max_length=30) name = models.CharField(max_length=50) birthdate = models.DateField(null=True, blank=True) occupation = models.CharField(max_length=100, blank=True, default="") work_unit = models.CharField(max_length=200, blank=True, default="") phone_enc = models.BinaryField(null=True, blank=True) class Meta: db_table = "staff_family_members" verbose_name = "家庭成员" verbose_name_plural = "家庭成员" class StaffRemark(SoftDeleteModel): staff = models.ForeignKey( "org.Staff", on_delete=models.CASCADE, related_name="remarks", ) content = models.TextField() created_by = models.ForeignKey( "org.Staff", null=True, blank=True, on_delete=models.SET_NULL, related_name="created_remarks", ) class Meta: db_table = "staff_remarks" verbose_name = "员工备注" verbose_name_plural = "员工备注"