96 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| from django.db import models
 | |
| from apps.system.models import User
 | |
| 
 | |
| from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBModel
 | |
| 
 | |
| 
 | |
| class Employee(CommonBModel):
 | |
|     """
 | |
|     员工信息
 | |
|     """
 | |
|     JOB_ON = 10
 | |
|     JOB_OFF = 20
 | |
|     jobstate_choices = (
 | |
|         (JOB_ON, '在职'),
 | |
|         (JOB_OFF, '离职'),
 | |
|     )
 | |
|     PEOPLE_TYPE_CHOICES = (
 | |
|         ('employee', '内部员工'),
 | |
|         ('remployee', '相关方人员'),
 | |
|         ('visitor', '访客')
 | |
|     )
 | |
|     type = models.CharField('人员类型', default='employee', max_length=10, choices=PEOPLE_TYPE_CHOICES)
 | |
|     user = models.OneToOneField(User,
 | |
|                                 verbose_name='系统账号',
 | |
|                                 on_delete=models.PROTECT, null=True, blank=True)
 | |
|     name = models.CharField('姓名', max_length=20)
 | |
|     phone = models.CharField('手机号', max_length=11, null=True, blank=True, unique=True)
 | |
|     email = models.EmailField('邮箱号', null=True, blank=True)
 | |
|     number = models.CharField('人员编号', max_length=50, null=True, blank=True)
 | |
|     photo = models.CharField('证件照', max_length=1000, null=True, blank=True)
 | |
|     id_number = models.CharField('身份证号', max_length=100, null=True, blank=True, unique=True)
 | |
|     gender = models.CharField('性别', max_length=10, default='男')
 | |
|     signature = models.CharField('签名图片', max_length=200, null=True, blank=True)
 | |
|     birthday = models.DateField('出生年月日', null=True, blank=True)
 | |
|     qualification = models.CharField('学历', max_length=50, null=True, blank=True)
 | |
|     job_state = models.IntegerField('在职状态', choices=jobstate_choices, default=10)
 | |
|     is_atwork = models.BooleanField('当前在岗', default=False)
 | |
|     show_atwork = models.BooleanField('是否展示在岗状态', default=True)
 | |
|     last_check_time = models.DateTimeField('打卡时间', null=True, blank=True)
 | |
|     not_work_remark = models.CharField('当前未打卡说明', null=True, blank=True, max_length=200)
 | |
|     third_info = models.JSONField('三方信息', default=dict, null=False, blank=True)  # 主要是定位卡信息
 | |
| 
 | |
|     class Meta:
 | |
|         verbose_name = '员工补充信息'
 | |
|         verbose_name_plural = verbose_name
 | |
| 
 | |
|     def __str__(self):
 | |
|         return self.name
 | |
| 
 | |
| 
 | |
| # class Card(CommonAModel):
 | |
| #     """
 | |
| #     卡
 | |
| #     """
 | |
| #     CARD_FACE = 10
 | |
| #     CARD_LOCATION = 20
 | |
| 
 | |
| 
 | |
| class NotWorkRemark(CommonAModel):
 | |
|     """
 | |
|     离岗说明
 | |
|     """
 | |
|     not_work_date = models.DateField('未打卡日期')
 | |
|     user = models.ForeignKey(User, verbose_name='用户', on_delete=models.CASCADE)
 | |
|     remark = models.CharField('未打卡说明', null=True, blank=True, max_length=200)
 | |
| 
 | |
| 
 | |
| class ClockRecord(CommonADModel):
 | |
|     """
 | |
|     打卡记录
 | |
|     """
 | |
|     ClOCK_WORK1 = 10
 | |
|     type_choice = (
 | |
|         (ClOCK_WORK1, '上班打卡'),
 | |
|     )
 | |
|     type = models.PositiveSmallIntegerField('打卡类型', choices=type_choice, default=ClOCK_WORK1)
 | |
| 
 | |
| 
 | |
| class Certificate(CommonAModel):
 | |
|     """
 | |
|     证书
 | |
|     """
 | |
|     CERTIFICATE_TYPE_CHOICES = (
 | |
|         (10, '特种作业证书'),
 | |
|         (20, '特种设备操作证书'),
 | |
|         (30, '安全管理人员证书')
 | |
|     )
 | |
|     employee = models.ForeignKey(Employee, verbose_name='对应人员', on_delete=models.CASCADE)
 | |
|     name = models.CharField('证书名称', max_length=20)
 | |
|     number = models.CharField('证书编号', max_length=20, unique=True)
 | |
|     type = models.PositiveSmallIntegerField('证书类型', default=10)
 | |
|     issue_date = models.DateField('发证日期')
 | |
|     expiration_date = models.DateField('有效期')
 | |
|     review_date = models.DateField('下一次复审日期')
 | |
|     file = models.TextField('文件地址', null=True, blank=True)
 |