185 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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)
 | |
| 
 | |
|     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='checker_auditor'))
 | |
|             else:
 | |
|                 for i in Ability.objects.filter(employee=self.employee, cert_field=self.cert_field):
 | |
|                     i.auditor_abilitys.add(Dict.objects.get(code='checker_auditor'))
 | |
|         super().save(*args, **kwargs)
 | |
| 
 | |
| 
 | |
| 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
 |