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 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): """ 认证单元,一个单元一张证书 """ factory = models.ForeignKey(Enterprise, on_delete=models.DO_NOTHING) factory_v = JSONField(verbose_name='生产厂', blank=True) 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) subapplication = models.ForeignKey(Application, verbose_name='所属子申请', on_delete = models.CASCADE) class Meta: verbose_name = '认证单元' verbose_name_plural = verbose_name def __str__(self): return self.name