factory/apps/rpm/models.py

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)
id_number = models.CharField('身份证号', max_length=100)
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)