143 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
from django.db import models
 | 
						|
from apps.hrm.models import Certificate, Employee
 | 
						|
from apps.system.models import Dept, Dictionary, File, User
 | 
						|
from apps.utils.models import CommonAModel, CommonBDModel, CommonBModel, BaseModel
 | 
						|
from apps.wf.models import Ticket
 | 
						|
 | 
						|
 | 
						|
# Create your models here.
 | 
						|
class Rparty(CommonBModel):
 | 
						|
    """
 | 
						|
    相关方
 | 
						|
    """
 | 
						|
    dept = models.OneToOneField(Dept, verbose_name='关联部门',
 | 
						|
                                on_delete=models.CASCADE,
 | 
						|
                                null=True, blank=True)
 | 
						|
    name = models.CharField('名称', max_length=20)
 | 
						|
    number = models.CharField('信用代码', max_length=50, null=True, blank=True)
 | 
						|
    lawer = models.CharField('法人', max_length=20, null=True, blank=True)
 | 
						|
    contacter = models.CharField('联系人', max_length=20)
 | 
						|
    phone = models.CharField('联系电话', max_length=20)
 | 
						|
    email = models.EmailField('邮箱', null=True, blank=True)
 | 
						|
    address = models.CharField('企业地址', max_length=200, null=True, blank=True)
 | 
						|
    description = models.TextField('概述', null=True, blank=True)
 | 
						|
    admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
 | 
						|
 | 
						|
 | 
						|
class Rfile(CommonBDModel):
 | 
						|
    """
 | 
						|
    相关方文件库
 | 
						|
    """
 | 
						|
    file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类',
 | 
						|
                                  on_delete=models.CASCADE, null=True, blank=True)
 | 
						|
    files = models.ManyToManyField(File, verbose_name='文件')
 | 
						|
    rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE)
 | 
						|
 | 
						|
 | 
						|
class Rpj(CommonBDModel):
 | 
						|
    """
 | 
						|
    相关方项目
 | 
						|
    """
 | 
						|
    RPJ_CREATE = 10
 | 
						|
    RPJ_AUDIT = 20
 | 
						|
    RPJ_ENTER = 30
 | 
						|
    RPJ_WORKING = 40
 | 
						|
    RPJ_DONE = 50
 | 
						|
    RPJ_CLOSE = 60
 | 
						|
    RP_STATE_CHOICES = (
 | 
						|
        (10, '创建中'),
 | 
						|
        (20, '审批中'),
 | 
						|
        (30, '待入厂'),
 | 
						|
        (40, '进行中'),
 | 
						|
        (50, '已完成'),
 | 
						|
        (60, '已关闭')
 | 
						|
    )
 | 
						|
    RP_TYPE_CHOICES = (
 | 
						|
        (10, '建筑施工'),
 | 
						|
        (20, '设备设施检维修'),
 | 
						|
        (30, '保安保洁服务'),
 | 
						|
        (40, '其他')
 | 
						|
    )
 | 
						|
    name = models.CharField('名称', max_length=20)
 | 
						|
    type = models.PositiveSmallIntegerField('项目类型', default=10)
 | 
						|
    contract_number = models.CharField('合同编号', max_length=20)
 | 
						|
    come_time = models.DateTimeField('进厂时间')
 | 
						|
    leave_time = models.DateTimeField('离厂时间')
 | 
						|
    state = models.PositiveSmallIntegerField('状态', default=10)
 | 
						|
    rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE)
 | 
						|
    remployees = models.ManyToManyField('rpm.remployee', through='rpm.rpjmember', related_name='rpj_remployees')
 | 
						|
    # belong_dept是业务部门可以带过来
 | 
						|
    ticket = models.ForeignKey(Ticket, verbose_name='关联工单',
 | 
						|
                               on_delete=models.SET_NULL, null=True, blank=True)
 | 
						|
 | 
						|
 | 
						|
class Rpjfile(BaseModel):
 | 
						|
    """
 | 
						|
    相关方项目文件库
 | 
						|
    """
 | 
						|
    file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类',
 | 
						|
                                  on_delete=models.CASCADE)
 | 
						|
    files = models.ManyToManyField(File, verbose_name='文件', blank=True)
 | 
						|
    rpj = models.ForeignKey(Rpj, verbose_name='关联相关方项目', on_delete=models.CASCADE)
 | 
						|
 | 
						|
 | 
						|
class Remployee(CommonBModel):
 | 
						|
    """
 | 
						|
    相关方成员
 | 
						|
    """
 | 
						|
    employee = models.ForeignKey(Employee, verbose_name='成员信息',
 | 
						|
                                 on_delete=models.SET_NULL, null=True, blank=True)
 | 
						|
    name = models.CharField('姓名', max_length=20)
 | 
						|
    phone = models.CharField('手机号', max_length=11)
 | 
						|
    photo = models.CharField('证件照', max_length=1000, null=True, blank=True)
 | 
						|
    id_number = models.CharField('身份证号', max_length=100, null=True, blank=True)
 | 
						|
    rparty = models.ForeignKey(Rparty, verbose_name='所属相关方', on_delete=models.CASCADE)
 | 
						|
    rpj = models.ForeignKey(Rpj, verbose_name='最近所属相关方项目', on_delete=models.SET_NULL,
 | 
						|
                            null=True, blank=True)
 | 
						|
 | 
						|
 | 
						|
class Rcertificate(CommonBModel):
 | 
						|
    """
 | 
						|
    相关方证书
 | 
						|
    """
 | 
						|
    certificate = models.ForeignKey(Certificate, verbose_name='关联认可证书',
 | 
						|
                                    on_delete=models.SET_NULL,
 | 
						|
                                    null=True, blank=True)
 | 
						|
    remployee = models.ForeignKey(Remployee, 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, choices=Certificate.CERTIFICATE_TYPE_CHOICES)
 | 
						|
    issue_date = models.DateField('发证日期')
 | 
						|
    expiration_date = models.DateField('有效期')
 | 
						|
    review_date = models.DateField('下一次复审日期')
 | 
						|
    file = models.CharField('文件地址', max_length=1000, null=True, blank=True)
 | 
						|
 | 
						|
 | 
						|
class Rpjmember(BaseModel):
 | 
						|
    """
 | 
						|
    相关方项目成员
 | 
						|
    """
 | 
						|
    rpj = models.ForeignKey(Rpj, verbose_name='关联项目', on_delete=models.CASCADE)
 | 
						|
    remployee = models.ForeignKey(Remployee, verbose_name='关联人员',
 | 
						|
                                  on_delete=models.CASCADE)
 | 
						|
    duty = models.CharField('职责', max_length=20, null=True, blank=True)
 | 
						|
    is_manager = models.BooleanField('是否项目负责人', default=False)
 | 
						|
    rcertificates = models.ManyToManyField(Rcertificate, through='rpm.rpjcertificate', blank=True)
 | 
						|
 | 
						|
 | 
						|
class Rpjcertificate(BaseModel):
 | 
						|
    """
 | 
						|
    相关方项目人员证书
 | 
						|
    """
 | 
						|
    rpj_member = models.ForeignKey(Rpjmember, verbose_name='关联项目成员', on_delete=models.CASCADE)
 | 
						|
    rcertificate = models.ForeignKey(Rcertificate, verbose_name='关联相关方证书', on_delete=models.SET_NULL,
 | 
						|
                                     null=True, blank=True)
 | 
						|
    name = models.CharField('证书名称', max_length=20)
 | 
						|
    number = models.CharField('证书编号', max_length=20)
 | 
						|
    type = models.PositiveSmallIntegerField('证书类型', default=10, choices=Certificate.CERTIFICATE_TYPE_CHOICES)
 | 
						|
    issue_date = models.DateField('发证日期')
 | 
						|
    expiration_date = models.DateField('有效期')
 | 
						|
    review_date = models.DateField('下一次复审日期')
 | 
						|
    file = models.CharField('文件地址', max_length=1000, null=True, blank=True)
 |