from django.db import models from application.hrm_mgnt.models import EmployeeInformation from application.org_mgnt.models import CompanyEntity # 用印登记表 class SealUsageRegistry(models.Model): SEAL_TYPE_CHOICES = [ ('公章', '公章'), ('法人章', '法人章'), ('合同章', '合同章'), ('财务章', '财务章'), ('其他', '其他'), ] record_id = models.AutoField(primary_key=True, verbose_name='记录ID') applicant = models.CharField(max_length=255, verbose_name='申请人') seal_date = models.DateField(verbose_name='用印日期', null=True, blank=True) seal_entity = models.CharField(max_length=255, verbose_name='用印主体', null=True, blank=True) seal_type = models.CharField(max_length=255, choices=SEAL_TYPE_CHOICES, verbose_name='用印类型', null=True, blank=True) document_name = models.CharField(max_length=255, verbose_name='文件名称', null=True, blank=True) number_of_copies = models.IntegerField(verbose_name='用印份数', null=True, blank=True) handler = models.CharField(max_length=255, verbose_name='经办人', null=True, blank=True) def save(self, *args, **kwargs): seal_entity = CompanyEntity.objects.filter(company_name=self.seal_entity).first() if self.seal_entity: if not seal_entity: raise ValueError("用印主体不存在") applicant = EmployeeInformation.objects.filter(name=self.applicant).first() if self.applicant: if not applicant: raise ValueError("申请人不存在") handler = EmployeeInformation.objects.filter(name=self.handler).first() if self.handler: if not handler: raise ValueError("经办人不存在") super(SealUsageRegistry, self).save(*args, **kwargs) class Meta: verbose_name = '用印登记表' verbose_name_plural = '用印登记表' def __str__(self): return f"{self.document_name} - {self.applicant} - {self.seal_date}" # 印章证件借用登记表 class SealAndDocumentBorrowingRegistry(models.Model): ITEM_TYPE_CHOICES = [ ('公章', '公章'), ('法人章', '法人章'), ('财务章', '财务章'), ('合同章', '合同章'), ('执照正本', '执照正本'), ('执照副本', '执照副本'), ('开户许可证', '开户许可证'), ('法人身份证', '法人身份证'), ] record_id = models.AutoField(primary_key=True, verbose_name='记录ID') entity_name = models.CharField(max_length=255, verbose_name='主体名称') item_type = models.CharField(max_length=255, choices=ITEM_TYPE_CHOICES, verbose_name='借章/证类型', null=True, blank=True) purpose = models.CharField(max_length=255, verbose_name='用途', null=True, blank=True) borrower = models.CharField(max_length=255, verbose_name='借用人', null=True, blank=True) borrowing_time = models.DateTimeField(verbose_name='借用时间', null=True, blank=True) expected_return_date = models.DateField(verbose_name='约定归还日期', null=True, blank=True) lender = models.CharField(max_length=255, verbose_name='借出人', null=True, blank=True) returnee = models.CharField(max_length=255, verbose_name='归还人', null=True, blank=True) return_date = models.DateField(verbose_name='归还日期', null=True, blank=True) verifier = models.CharField(max_length=255, verbose_name='确认人', null=True, blank=True) def save(self, *args, **kwargs): entity_name = CompanyEntity.objects.filter(company_name=self.entity_name).first() if self.entity_name: if not entity_name: raise ValueError("主体名称不存在") borrower = EmployeeInformation.objects.filter(name=self.borrower).first() if self.borrower: if not borrower: raise ValueError("借用人不存在") lender = EmployeeInformation.objects.filter(name=self.lender).first() if self.lender: if not lender: raise ValueError("借出人不存在") returnee = EmployeeInformation.objects.filter(name=self.returnee).first() if self.returnee: if not returnee: raise ValueError("归还人不存在") super(SealAndDocumentBorrowingRegistry, self).save(*args, **kwargs) class Meta: verbose_name = '印章证件借用登记表' verbose_name_plural = '印章证件借用登记表' def __str__(self): return f"{self.entity_name} - {self.borrower}" # 合同管理台账 class ContractManagementLedger(models.Model): CONTRACT_TYPE_CHOICES = [ ('业务类', '业务类'), ('采购类', '采购类'), ('用工类', '用工类'), ('租赁类', '租赁类'), ('其他类', '其他类'), ] contract_type = models.CharField(max_length=20, choices=CONTRACT_TYPE_CHOICES, verbose_name='合同类别', null=True, blank=True) project_name = models.CharField(max_length=255, verbose_name='项目名称', null=True, blank=True) contract_number = models.CharField(max_length=255, unique=True, verbose_name='合同编号', null=True, blank=True) contract_name = models.CharField(max_length=255, verbose_name='合同名称', null=True, blank=True) primary_department = models.CharField(max_length=255, verbose_name='一级部门', null=True, blank=True) project_leader = models.CharField(max_length=255, verbose_name='项目负责人', null=True, blank=True) project_progress = models.CharField(max_length=255, verbose_name='项目进度', null=True, blank=True) CONTRACT_STATUS_CHOICES = [ ('已生效未履行', '已生效未履行'), ('履行中', '履行中'), ('履行中止', '履行中止'), ('协商变更', '协商变更'), ('期满终止', '期满终止'), ('协商解除', '协商解除'), ('未生效', '未生效'), ] contract_status = models.CharField(max_length=20, choices=CONTRACT_STATUS_CHOICES, verbose_name='合同状态', null=True, blank=True) business_type = models.CharField(max_length=255, verbose_name='业务类型', null=True, blank=True) number_of_copies = models.IntegerField(verbose_name='合同份数', null=True, blank=True) cost_agreement = models.CharField(max_length=255, verbose_name='费用约定', null=True, blank=True) review_date = models.DateField(verbose_name='审核日期', null=True, blank=True) signing_date = models.DateField(verbose_name='签约日期', null=True, blank=True) effective_date = models.DateField(verbose_name='生效日期', null=True, blank=True) expiration_date = models.DateField(verbose_name='约定到期日', null=True, blank=True) our_side = models.CharField(max_length=255, verbose_name='我方单位', null=True, blank=True) other_side = models.CharField(max_length=255, verbose_name='对方单位', null=True, blank=True) submitter_for_review = models.CharField(max_length=255, verbose_name='提交审核人', null=True, blank=True) custodian_of_original = models.CharField(max_length=255, verbose_name='合同原件保管人', null=True, blank=True) payment_agreement_needed = models.BooleanField(verbose_name='是否需要付款协议', null=True, blank=True) signed = models.BooleanField(verbose_name='签章否', null=True, blank=True) backup_location = models.CharField(max_length=255, verbose_name='备份地点', null=True, blank=True) notes = models.TextField(verbose_name='备注', null=True, blank=True) class Meta: verbose_name = '合同管理台账' verbose_name_plural = '合同管理台账' def __str__(self): return self.contract_name # 公司制度表 class CompanyPolicies(models.Model): policy_id = models.AutoField(primary_key=True, verbose_name='制度ID') issuing_unit = models.CharField(max_length=255, verbose_name='发布单位', null=True, blank=True) POLICY_CATEGORY_CHOICES = [ ('公司治理', '公司治理'), ('人力资源', '人力资源'), ('财务', '财务'), ('风控合规', '风控合规'), ('业务类', '业务类'), ('行政管理类', '行政管理类'), ('信息管理类', '信息管理类') ] policy_category = models.CharField(max_length=20, choices=POLICY_CATEGORY_CHOICES, verbose_name='制度类别', null=True, blank=True) policy_name = models.CharField(max_length=255, verbose_name='制度名称', null=True, blank=True) version = models.CharField(max_length=255, verbose_name='版本', null=True, blank=True) publication_date = models.DateField(verbose_name='发布日期', null=True, blank=True) effective_date = models.DateField(verbose_name='生效日期', null=True, blank=True) STATUS_CHOICES = [ ('有效', '有效'), ('待生效', '待生效'), ('废止', '废止'), ] status = models.CharField(max_length=20, choices=STATUS_CHOICES, verbose_name='状态', null=True, blank=True) policy_file = models.FileField(upload_to='policies/', verbose_name='制度文件', null=True, blank=True) class Meta: verbose_name = '公司制度表' verbose_name_plural = '公司制度表' def __str__(self): return self.policy_name