cnas/server/apps/project/models.py

174 lines
7.5 KiB
Python

from utils import model
from django.contrib.postgres.fields import JSONField
from django.db import models
from rest_framework.exceptions import ParseError
from simple_history.models import HistoricalRecords
from apps.certset.models import ImplementRule, UnitType, EvaluationItem
from apps.crm.models import Enterprise
from apps.system.models import CommonAModel, CommonBModel, Dict, User
# Create your models here.
class Project(CommonBModel):
"""
认证项目
"""
pass
class CertApp(CommonBModel):
"""
认证受理
"""
status_choices = (
('草稿', '草稿'),
('已申请', '已申请'),
('已受理', '已受理'),
('进行中', '进行中'),
('已中止', '已中止'),
('已完成', '已完成')
)
result_choices = (
('未评审', '未评审'),
('合格', '合格'),
('不合格', '不合格'),
('有条件放行', '有条件放行')
)
number = models.CharField('受理编号', max_length = 100, null=True, blank=True)
apply_date = models.DateField('申请日期', null=True, blank=True)
accept_date = models.DateField('受理日期', null=True, blank=True)
applicant_v = JSONField(verbose_name='申请方')
applicant = models.ForeignKey(Enterprise, related_name='certapp_applicant', on_delete=models.DO_NOTHING)
status = models.CharField('申请状态', choices=status_choices, default='草稿', max_length=50)
evresult = models.CharField('评审结论', choices = result_choices, default='未评审', max_length=50)
evremark = models.TextField('备注', blank=True)
level = models.ForeignKey(Dict, verbose_name='业务级别', related_name='certapp_level', on_delete=models.DO_NOTHING, default=Dict.objects.get(code='ybxm').id)
pattern_choices = (
('正常', '正常'),
('ODM', 'ODM'),
('OEM', 'OEM')
)
cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='certapp_cert_field', on_delete=models.DO_NOTHING)
cccpv_class = models.ForeignKey(Dict, verbose_name='涉及CCC/PV分类', related_name='certapp_cccpv_class', on_delete=models.DO_NOTHING, null=True, blank=True)
cnas_scopes = models.ManyToManyField(Dict, verbose_name='涉及cnas分类', related_name='certapp_cnas_sopes', blank=True)
project = models.ForeignKey(Project, related_name='certapp_project', on_delete=models.SET_NULL, null=True)
is_approve = models.BooleanField('是否认可', default=True)
pattern = models.CharField('申请模式', choices=pattern_choices, max_length=50, null=True, blank=True)
manufacture = models.ForeignKey(Enterprise, on_delete=models.CASCADE, related_name='certapp_manufacture', null=True, blank=True)
manufacture_v = JSONField(verbose_name='制造商', null=True)
factory = models.ForeignKey(Enterprise, on_delete=models.CASCADE, related_name='certapp_factory', null=True, blank=True)
factory_v = JSONField(verbose_name='生产厂', null=True)
class Meta:
verbose_name = '认证受理'
verbose_name_plural = verbose_name
class Application(CommonBModel):
"""
主申请
"""
status_choices = (
('草稿', '草稿'),
('已申请', '已申请'),
('已受理', '已受理'),
('进行中', '进行中'),
('已中止', '已中止'),
('已完成', '已完成')
)
result_choices = (
('未评审', '未评审'),
('合格', '合格'),
('不合格', '不合格'),
('有条件放行', '有条件放行')
)
stage_choices = (
(0, '基本信息'),
(1, '申请内容')
)
number = models.CharField('申请编号', max_length = 100)
apply_date = models.DateField('申请日期', null=True, blank=True)
accept_date = models.DateField('受理日期', null=True, blank=True)
applicant_v = JSONField(verbose_name='申请方')
applicant = models.ForeignKey(Enterprise, related_name='application_applicant', on_delete=models.DO_NOTHING)
fields = models.TextField('认证领域', blank=True)
status = models.CharField('申请状态', choices=status_choices, default='草稿', max_length=50)
stage = models.IntegerField('步骤状态', choices=stage_choices, default=0)
evresult = models.CharField('评审结论', choices = result_choices, default='未评审', max_length=50)
evremark = models.TextField('备注', blank=True)
level = models.ForeignKey(Dict, related_name='application_level', on_delete = models.DO_NOTHING)
class Meta:
verbose_name = '认证主申请'
verbose_name_plural = verbose_name
def __str__(self):
return self.number
class SubApplication(CommonBModel):
"""
子申请
"""
pattern_choices = (
('正常', '正常'),
('ODM', 'ODM'),
('OEM', 'OEM')
)
number = models.CharField('子申请编号', max_length = 100)
application = models.ForeignKey(Application, on_delete=models.CASCADE, related_name='subapplication_application')
cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='subapplication_cert_field', on_delete=models.DO_NOTHING)
cccpv_class = models.ForeignKey(Dict, verbose_name='涉及CCC/PV分类', related_name='subapplication_cccpv_class', on_delete=models.DO_NOTHING, null=True, blank=True)
cnas_scopes = models.ManyToManyField(Dict, verbose_name='涉及cnas分类', related_name='subapplication_cnas_sopes', blank=True)
project = models.ForeignKey(Project, related_name='subapplication_project', on_delete=models.SET_NULL, null=True)
is_approve = models.BooleanField('是否认可', default=True)
pattern = models.CharField('申请模式', choices=pattern_choices, max_length=50, null=True, blank=True)
manufacture = models.ForeignKey(Enterprise, on_delete=models.CASCADE, related_name='subapplication_manufacture', null=True, blank=True)
manufacture_v = JSONField(verbose_name='制造商', null=True)
factory = models.ForeignKey(Enterprise, on_delete=models.CASCADE, related_name='subapplication_factory', null=True, blank=True)
factory_v = JSONField(verbose_name='生产厂', null=True)
class Meta:
verbose_name = '认证子申请'
verbose_name_plural = verbose_name
def __str__(self):
return self.number
class EvaluationDetail(CommonBModel):
result_choices = (
('符合', '符合'),
('不符合', '不符合'),
('不适用', '不适用'),
('需说明', '需说明')
)
application = models.ForeignKey(Application, on_delete=models.CASCADE)
item = models.ForeignKey(EvaluationItem, verbose_name='项目内容', on_delete=models.DO_NOTHING)
result = models.CharField('评审结果',choices = result_choices, default='符合', max_length=50)
remark = models.TextField('备注', blank=True)
class Meta:
verbose_name = '评审记录详情'
verbose_name_plural = verbose_name
def __str__(self):
return self.application.number
class Unit(CommonBModel):
"""
认证单元,一个单元一张证书
"""
name = models.CharField('单元名称', max_length=200)
description = models.TextField('单元描述', blank=True)
unittype = models.ForeignKey(UnitType, verbose_name='单元类型', on_delete = models.SET_NULL, null=True, blank=True)
certapp = models.ForeignKey(CertApp, verbose_name='所属业务', on_delete = models.CASCADE)
class Meta:
verbose_name = '认证单元'
verbose_name_plural = verbose_name
def __str__(self):
return self.name