140 lines
6.0 KiB
Python
140 lines
6.0 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(BaseModel):
|
|
"""
|
|
相关方文件库
|
|
"""
|
|
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
|
|
RP_STATE_CHOICES = (
|
|
(10, '创建中'),
|
|
(20, '审批中'),
|
|
(30, '待入厂'),
|
|
(40, '进行中'),
|
|
(50, '已完成')
|
|
)
|
|
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)
|
|
# 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(CommonAModel):
|
|
"""
|
|
相关方成员
|
|
"""
|
|
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(CommonAModel):
|
|
"""
|
|
相关方证书
|
|
"""
|
|
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)
|