from django.db import models from apps.system.models import CommonAModel, Dict, User, CommonBModel from apps.certset.models import ImplementRule from simple_history.models import HistoricalRecords from rest_framework.exceptions import ParseError # Create your models here. class Employee(CommonAModel): """ 详细信息表 """ gender_choices = ( ('男', '男'), ('女', '女'), ) user = models.OneToOneField(User, on_delete=models.CASCADE) code = models.CharField('编号', max_length=30, null=True, blank=True) photo = models.CharField( '证件照', default='', max_length=1000, null=True, blank=True) remember_code = models.CharField( '易记码', max_length=30, null=True, blank=True) gender = models.CharField('性别', max_length=50, choices=gender_choices, default='男') landline = models.CharField('座机', max_length=100, null=True, blank=True) email = models.EmailField('邮箱', null=True, blank=True) birth = models.DateField('出生日期', null=True, blank=True) ID_number = models.CharField('身份证号', max_length=100, null=True, blank=True) pro_title = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='职称', related_name='userdetail_pro_title') is_onjob = models.BooleanField('是否在职', default=True) is_fulltime = models.BooleanField('是否专职', default=True) is_payinsurance = models.BooleanField('是否缴纳保险', default=True) finance_number = models.CharField( '财务编号', max_length=30, null=True, blank=True) fee_level = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='劳务费级别', related_name='userdetail_fee_level') region = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='省市区', related_name='userdetail_region') address = models.TextField('详细地址', null=True, blank=True) signature = models.CharField('签名图片', max_length=200, null=True, blank=True) max_edu = models.TextField('最高学历', blank=True) fields = models.TextField('专业领域', blank=True) class Meta: verbose_name = '人员详细信息' verbose_name_plural = verbose_name def __str__(self): return self.user.name class Qualification(CommonAModel): """ 注册资格表 """ employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='qualification_employee') cert_field = models.ForeignKey( Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='认证领域', related_name='qualification_cert_field') cert_number = models.CharField('证书号', max_length=200, unique=True) registration_date = models.DateField('注册日期') expiration_date = models.DateField('到期日期') auditor_type = models.ForeignKey( Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='资格类型',related_name='qualification_auditor_type') publish_number = models.CharField('文号', max_length=200, null=True, blank=True) remark = models.TextField('备注',null=True,blank=True) is_paused = models.BooleanField('是否暂停审核资格', default=False) is_enabled = models.BooleanField('是否有效', default=True) class Meta: verbose_name = '注册资格' verbose_name_plural = verbose_name def __str__(self): return self.cert_number def save(self, *args, **kwargs): """ 暂停和启用该资格,需要操作能力表 """ bool_ = Qualification.objects.filter(employee=self.employee, cert_field=self.cert_field, is_enabled=True, is_deleted=False).exclude(pk=self.id).exists() if bool_: raise ParseError('已存在该领域的有效注册资格') else: if not self.is_enabled: for i in Ability.objects.filter(employee=self.employee, cert_field=self.cert_field): i.auditor_abilitys.remove(Dict.objects.get(code='jcyshy')) else: for i in Ability.objects.filter(employee=self.employee, cert_field=self.cert_field): i.auditor_abilitys.add(Dict.objects.get(code='jcyshy')) super().save(*args, **kwargs) fields = Qualification.objects.filter(is_enabled=True, is_deleted=False).values_list('cert_field__code', flat=True) if self.employee.fields != ','.join(fields): self.employee.fields = ','.join(fields) self.employee.save() class Ability(CommonAModel): """ 能力表 """ employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='ability_employee') cert_field = models.ForeignKey( Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='认证领域', related_name='ability_cert_field') afrom = models.ForeignKey( Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='能力来源', related_name='ability_afrom') access_date = models.DateField('评定时间') remark = models.TextField('备注', null=True) major = models.ForeignKey( Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='专业代码', related_name='ability_major') major_rule = models.ForeignKey( ImplementRule, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='专业(ccc)', related_name='ability_major_rule') auditor_abilitys = models.ManyToManyField( Dict, verbose_name='能力项', related_name='ability_auditor_abilitys') is_paused = models.BooleanField('是否暂停', default=False) class Meta: verbose_name = '专业能力' verbose_name_plural = verbose_name, unique_together = ('employee', 'major', 'major_rule') def __str__(self): s = '' if self.major: s = s + self.major.code elif self.major_rule: s = s + self.major_rule.code return s def save(self, *args, **kwargs): if self.cert_field and self.cert_field.code == 'CCC': self.major = None else: self.major_rule = None super().save(*args, **kwargs) class Education(CommonAModel): """ 教育经历表 """ employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='education_employee') admission_date = models.DateField('入学时间') graduation_date = models.DateField('毕业时间') school = models.CharField('毕业院校', max_length=200) major = models.CharField('所学专业', max_length=200) level = models.ForeignKey( Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='文化程度', related_name='education_level') remark = models.TextField('备注', null=True) class Meta: verbose_name = '教育经历' verbose_name_plural = verbose_name def __str__(self): return self.school def save(self, *args, **kwargs): super().save(*args, **kwargs) queryset = Education.objects.filter(employee=self.employee,is_deleted=False).order_by('level') if queryset.exists(): max_edu = queryset[0].level.name + '-' + queryset[0].school self.employee.max_edu = max_edu self.employee.save() class Train(CommonAModel): """ 培训记录表 """ name = models.CharField('培训主题', max_length=200) start_time = models.DateTimeField('开始时间') end_time = models.DateTimeField('结束时间') hours = models.IntegerField('学时', null=True, blank=True, default=1) train_org = models.CharField('培训机构', null=True, blank=True, max_length=200) teacher = models.CharField('主讲人', null=True, blank=True, max_length=200) content = models.TextField('培训内容') rain_address = models.CharField('地点机构', null=True, blank=True, max_length=500) kaohe_type = models.CharField('考核方式', null=True, blank=True, max_length=200) train_type =models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='培训类型', related_name='train_train_type') remark = models.TextField('备注', null=True, blank=True, ) employees = models.ManyToManyField(Employee, verbose_name='参加人员', related_name='train_employees') class Meta: verbose_name = '培训记录' verbose_name_plural = verbose_name def __str__(self): return self.name