diff --git a/client/src/views/accessment/access.vue b/client/src/views/accessment/access.vue
index 64d3036..37c9a57 100644
--- a/client/src/views/accessment/access.vue
+++ b/client/src/views/accessment/access.vue
@@ -82,9 +82,10 @@
暂无
-
+
+
+ {{scope.row.decision_.name}}
+
import Enterprisechose from "@/views/enterprise/enterprisechoose";
import { getCertappList } from "@/api/certapp";
-import { getProjectList, createProject, toplanProject } from "@/api/project"
+import { getProjectList, createProject, toplanProject, deleteProject } from "@/api/project"
import Pagination from "@/components/Pagination";
import checkPermission from "@/utils/permission";
import Treeselect from "@riophae/vue-treeselect";
@@ -329,6 +330,16 @@ export default {
params: { id: scope.row.id },
});
},
+ handleDelete(scope) {
+ this.$confirm("确定删除吗?", "警告", {
+ type: "error",
+ }).then(res=>{
+ deleteProject(scope.row.id).then(res=>{
+ this.getProjectList_()
+ this.$message.success('成功')
+ })
+ }).catch(e=>{})
+ },
chooseE(){
this.chooseVisiable = true
},
diff --git a/server/apps/audit/serializers.py b/server/apps/audit/serializers.py
index b063fc3..fbf02d2 100644
--- a/server/apps/audit/serializers.py
+++ b/server/apps/audit/serializers.py
@@ -20,7 +20,10 @@ class ProjectSerializerX(serializers.ModelSerializer):
def get_certapps(self, obj):
certapps = []
for i in obj.certapp_project.filter(is_deleted=False):
- certapps.append(i.cert_field.code +'(' + i.cccpv_class.name +')')
+ if i.cccpv_class:
+ certapps.append(i.cert_field.code +'(' + i.cccpv_class.name +')')
+ else:
+ certapps.append(i.cert_field.code)
return certapps
def get_members(self, obj):
diff --git a/server/apps/audit/views.py b/server/apps/audit/views.py
index 25ea31c..b551467 100644
--- a/server/apps/audit/views.py
+++ b/server/apps/audit/views.py
@@ -28,7 +28,7 @@ class MyAuditTaskList(ListAPIView):
ordering=['-pk']
def get_queryset(self):
- queryset = Project.objects.filter(certapp_project__member_certapp__user=self.request.user)
+ queryset = Project.objects.filter(certapp_project__member_certapp__user=self.request.user).distinct()
if hasattr(self.get_serializer_class(), 'setup_eager_loading'):
queryset = self.get_serializer_class().setup_eager_loading(queryset)
return queryset
diff --git a/server/apps/certificate/views.py b/server/apps/certificate/views.py
index a4c261f..c4f2fb0 100644
--- a/server/apps/certificate/views.py
+++ b/server/apps/certificate/views.py
@@ -17,6 +17,7 @@ from utils.pagination import PageOrNot
from .serializers import *
from rest_framework.exceptions import ParseError, NotAuthenticated
from django.utils import timezone
+from apps.project.models import Certappunit
# Create your views here.
class CertificateViewSet(PageOrNot, OptimizationMixin, ModelViewSet):
@@ -33,8 +34,11 @@ class CertificateViewSet(PageOrNot, OptimizationMixin, ModelViewSet):
"""
serializer = CertificateCreateSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
+ print(request.data)
if Certificate.objects.filter(certunit__id=request.data['certunit']).exists():
return Response('该认证单元已存在证书', status = status.HTTP_400_BAD_REQUEST)
+ if Certappunit.objects.get(pk=request.data['id']).decision is None:
+ return Response('该认证单元未认证决定', status = status.HTTP_400_BAD_REQUEST)
serializer.save(create_by = self.request.user, number = 'ZS' + str(random.randrange(2000,3000)), status = Dict.objects.get(code='validate_01'))
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
\ No newline at end of file
diff --git a/server/apps/certset/migrations/0022_auto_20201029_1555.py b/server/apps/certset/migrations/0022_auto_20201029_1555.py
new file mode 100644
index 0000000..0f52385
--- /dev/null
+++ b/server/apps/certset/migrations/0022_auto_20201029_1555.py
@@ -0,0 +1,20 @@
+# Generated by Django 3.0.7 on 2020-10-29 07:55
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('system', '0032_auto_20201022_1504'),
+ ('certset', '0021_remove_evaluations_conform'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='evaluationitem',
+ name='cert_field',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='Evaluations_cert_field', to='system.Dict', verbose_name='认证领域'),
+ ),
+ ]
diff --git a/server/apps/certset/models.py b/server/apps/certset/models.py
index e228e70..b4b1436 100644
--- a/server/apps/certset/models.py
+++ b/server/apps/certset/models.py
@@ -62,7 +62,7 @@ class UnitType(CommonAModel):
class EvaluationItem(CommonAModel):
name = models.CharField('评审表名称',null=True, blank=True, max_length=1000)
- cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='Evaluations_cert_field', on_delete=models.DO_NOTHING)
+ cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='Evaluations_cert_field', on_delete=models.CASCADE)
ccc_list = models.ForeignKey(Dict,on_delete=models.SET_NULL, blank=True,null=True, verbose_name='CCC产品分类', related_name= 'EvaluationItem_ccc_list')
pv_class = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证产品分类', related_name= 'EvaluationItem_pv_class')
class Meta:
diff --git a/server/apps/crm/migrations/0017_auto_20201029_1555.py b/server/apps/crm/migrations/0017_auto_20201029_1555.py
new file mode 100644
index 0000000..11f9498
--- /dev/null
+++ b/server/apps/crm/migrations/0017_auto_20201029_1555.py
@@ -0,0 +1,35 @@
+# Generated by Django 3.0.7 on 2020-10-29 07:55
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('certset', '0022_auto_20201029_1555'),
+ ('crm', '0016_remove_certunit_testorgs'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='certunit',
+ name='enterprise',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certunit_enterprise', to='crm.Enterprise', verbose_name='所属公司'),
+ ),
+ migrations.AlterField(
+ model_name='certunit',
+ name='implementrule',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certunit_implementrule', to='certset.ImplementRule', verbose_name='采用规则'),
+ ),
+ migrations.AlterField(
+ model_name='certunit',
+ name='standard',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certunit_standard', to='certset.Standard', verbose_name='采用标准'),
+ ),
+ migrations.AlterField(
+ model_name='certunit',
+ name='unittype',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certunit_unittype', to='certset.UnitType', verbose_name='单元类型'),
+ ),
+ ]
diff --git a/server/apps/crm/models.py b/server/apps/crm/models.py
index df70c01..53db8c9 100644
--- a/server/apps/crm/models.py
+++ b/server/apps/crm/models.py
@@ -87,8 +87,8 @@ class Certunit(CommonAModel):
"""
name = models.CharField('名称', max_length=200)
description = models.TextField('产品描述', null=True, blank=True)
- implementrule = models.ForeignKey(ImplementRule, verbose_name='采用规则', on_delete=models.DO_NOTHING, related_name='certunit_implementrule')
- unittype = models.ForeignKey(UnitType, verbose_name='单元类型', on_delete = models.DO_NOTHING, related_name='certunit_unittype')
- standard = models.ForeignKey(Standard, verbose_name='采用标准', on_delete = models.DO_NOTHING, related_name='certunit_standard')
- enterprise = models.ForeignKey(Enterprise, verbose_name='所属公司', on_delete = models.DO_NOTHING, related_name='certunit_enterprise')
+ implementrule = models.ForeignKey(ImplementRule, verbose_name='采用规则', on_delete=models.CASCADE, related_name='certunit_implementrule')
+ unittype = models.ForeignKey(UnitType, verbose_name='单元类型', on_delete = models.CASCADE, related_name='certunit_unittype')
+ standard = models.ForeignKey(Standard, verbose_name='采用标准', on_delete = models.CASCADE, related_name='certunit_standard')
+ enterprise = models.ForeignKey(Enterprise, verbose_name='所属公司', on_delete = models.CASCADE, related_name='certunit_enterprise')
# testorgs = models.ManyToManyField(TestOrg, verbose_name='检测机构')
diff --git a/server/apps/financial/migrations/0008_auto_20201029_1555.py b/server/apps/financial/migrations/0008_auto_20201029_1555.py
new file mode 100644
index 0000000..49f6ff4
--- /dev/null
+++ b/server/apps/financial/migrations/0008_auto_20201029_1555.py
@@ -0,0 +1,31 @@
+# Generated by Django 3.0.7 on 2020-10-29 07:55
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('project', '0055_auto_20201029_0956'),
+ ('system', '0032_auto_20201022_1504'),
+ ('financial', '0007_auto_20200908_1146'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='bill',
+ name='feecharacter',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_feecharacter', to='system.Dict', verbose_name='费用性质'),
+ ),
+ migrations.AlterField(
+ model_name='bill',
+ name='number',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_number', to='project.CertApp'),
+ ),
+ migrations.AlterField(
+ model_name='chargeitem',
+ name='bills',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='chargeitem_bill', to='financial.Bill', to_field='feecode'),
+ ),
+ ]
diff --git a/server/apps/financial/models.py b/server/apps/financial/models.py
index b29c7ae..78e2d41 100644
--- a/server/apps/financial/models.py
+++ b/server/apps/financial/models.py
@@ -11,8 +11,8 @@ class Bill(CommonBModel):
收费单表
"""
feecode = models.CharField('收费单号',unique=True, max_length=300)
- number = models.ForeignKey(CertApp, related_name='bill_number', on_delete=models.DO_NOTHING)
- feecharacter = models.ForeignKey(Dict, verbose_name='费用性质', related_name='bill_feecharacter', on_delete=models.DO_NOTHING)
+ number = models.ForeignKey(CertApp, related_name='bill_number', on_delete=models.CASCADE)
+ feecharacter = models.ForeignKey(Dict, verbose_name='费用性质', related_name='bill_feecharacter', on_delete=models.CASCADE)
totalfee = models.FloatField('总金额',null=True, blank=True, default=0)
deductions = models.FloatField('扣减额',null=True, blank=True, default=0)
exchangetype = models.CharField('外汇类型', max_length=300)
@@ -30,7 +30,7 @@ class Chargeitem(CommonBModel):
"""
收费项目
"""
- bills = models.ForeignKey(Bill, related_name='chargeitem_bill',to_field='feecode',null=True, blank=True, on_delete=models.DO_NOTHING)
+ bills = models.ForeignKey(Bill, related_name='chargeitem_bill',to_field='feecode',null=True, blank=True, on_delete=models.SET_NULL)
itemkind = models.CharField('收费项目',null=True, blank=True, max_length=300)
unitcount = models.FloatField('单元数量',null=True, blank=True, default=0)
perfee = models.FloatField('单价',null=True, blank=True, default=0)
diff --git a/server/apps/plan/models.py b/server/apps/plan/models.py
index dc5d49d..300fc86 100644
--- a/server/apps/plan/models.py
+++ b/server/apps/plan/models.py
@@ -4,17 +4,20 @@ from django.db import models
from rest_framework.exceptions import ParseError
from simple_history.models import HistoricalRecords
-from apps.system.models import CommonAModel, CommonBModel, Dict, User, BaseBModel, BaseModel
+from apps.system.models import CommonAModel, CommonBModel, Dict, User, BaseModel
from apps.project.models import Project, CertApp
# Create your models here.
-class Plan(BaseBModel):
+class Plan(CommonBModel):
"""
计划(项目组)
"""
name = models.CharField('计划名称', max_length = 1000, unique=True)
month = models.DateField('计划审核月份', null=True, blank=True)
+ def perform_destroy(self, instance):
+ instance.delete(soft=False)
+
class Meta:
verbose_name = '审核计划'
verbose_name_plural = verbose_name
diff --git a/server/apps/project/migrations/0056_auto_20201029_1555.py b/server/apps/project/migrations/0056_auto_20201029_1555.py
new file mode 100644
index 0000000..fbc9a79
--- /dev/null
+++ b/server/apps/project/migrations/0056_auto_20201029_1555.py
@@ -0,0 +1,58 @@
+# Generated by Django 3.0.7 on 2020-10-29 07:55
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('laboratory', '0009_delete_detectiontask'),
+ ('certset', '0022_auto_20201029_1555'),
+ ('crm', '0017_auto_20201029_1555'),
+ ('system', '0032_auto_20201022_1504'),
+ ('project', '0055_auto_20201029_0956'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='certapp',
+ name='applicant',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certapp_applicant', to='crm.Enterprise'),
+ ),
+ migrations.AlterField(
+ model_name='certapp',
+ name='cccpv_class',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='certapp_cccpv_class', to='system.Dict', verbose_name='涉及CCC/PV分类'),
+ ),
+ migrations.AlterField(
+ model_name='certapp',
+ name='cert_field',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certapp_cert_field', to='system.Dict', verbose_name='认证领域'),
+ ),
+ migrations.AlterField(
+ model_name='certapp',
+ name='level',
+ field=models.ForeignKey(default=111, on_delete=django.db.models.deletion.CASCADE, related_name='certapp_level', to='system.Dict', verbose_name='业务级别'),
+ ),
+ migrations.AlterField(
+ model_name='certapp',
+ name='system_standard',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='certapp_system_standard', to='system.Dict', verbose_name='依据的体系标准'),
+ ),
+ migrations.AlterField(
+ model_name='certappunit',
+ name='testorg',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='certappunit_testorg', to='laboratory.TestOrg', verbose_name='检测机构'),
+ ),
+ migrations.AlterField(
+ model_name='evaluationdetail',
+ name='item',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='evaluationdetail_item', to='certset.Evaluations', verbose_name='评审项'),
+ ),
+ migrations.AlterField(
+ model_name='project',
+ name='auditee',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='project_auditee', to='crm.Enterprise', verbose_name='受审核方'),
+ ),
+ ]
diff --git a/server/apps/project/models.py b/server/apps/project/models.py
index 6a628ba..01ef534 100644
--- a/server/apps/project/models.py
+++ b/server/apps/project/models.py
@@ -6,7 +6,7 @@ from rest_framework.exceptions import ParseError
from simple_history.models import HistoricalRecords
from apps.certset.models import ImplementRule, UnitType, Evaluations, Standard
from apps.crm.models import Enterprise
-from apps.system.models import CommonAModel, CommonBModel, Dict, User, BaseBModel
+from apps.system.models import CommonAModel, CommonBModel, Dict, User
# from apps.plan.models import Plan
# Create your models here.
@@ -38,13 +38,13 @@ from apps.system.models import CommonAModel, CommonBModel, Dict, User, BaseBMode
# 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)
+# applicant = models.ForeignKey(Enterprise, related_name='application_applicant', on_delete=models.CASCADE)
# 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)
+# level = models.ForeignKey(Dict, related_name='application_level', on_delete = models.CASCADE)
# class Meta:
# verbose_name = '认证主申请'
@@ -64,8 +64,8 @@ from apps.system.models import CommonAModel, CommonBModel, Dict, User, BaseBMode
# )
# 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)
+# cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='subapplication_cert_field', on_delete=models.CASCADE)
+# cccpv_class = models.ForeignKey(Dict, verbose_name='涉及CCC/PV分类', related_name='subapplication_cccpv_class', on_delete=models.CASCADE, 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)
@@ -81,7 +81,7 @@ from apps.system.models import CommonAModel, CommonBModel, Dict, User, BaseBMode
# def __str__(self):
# return self.number
-class Project(BaseBModel):
+class Project(CommonBModel):
"""
认证项目
"""
@@ -99,7 +99,7 @@ class Project(BaseBModel):
)
state = models.CharField('项目状态', choices=state_choices, default='创建中', max_length=50)
number = models.CharField('项目编号', max_length = 100, null=True, blank=True)
- auditee = models.ForeignKey(Enterprise, related_name='project_auditee', on_delete=models.DO_NOTHING, verbose_name='受审核方')
+ auditee = models.ForeignKey(Enterprise, related_name='project_auditee', on_delete=models.CASCADE, verbose_name='受审核方')
auditee_v = JSONField(verbose_name='受审核方', default=dict)
remark = models.TextField('备注', null=True, blank=True)
can_paichai = models.BooleanField('是否可派差', default = False)
@@ -148,12 +148,12 @@ class CertApp(CommonBModel):
accept_date = models.DateField('受理日期', null=True, blank=True)
accept_by = models.ForeignKey(User, verbose_name='受理人', on_delete=models.SET_NULL, null=True, blank=True)
applicant_v = JSONField(verbose_name='申请方')
- applicant = models.ForeignKey(Enterprise, related_name='certapp_applicant', on_delete=models.DO_NOTHING)
+ applicant = models.ForeignKey(Enterprise, related_name='certapp_applicant', on_delete=models.CASCADE)
state = models.CharField('申请状态', choices=state_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)
+ level = models.ForeignKey(Dict, verbose_name='业务级别', related_name='certapp_level', on_delete=models.CASCADE, default=Dict.objects.get(code='ybxm').id)
pattern_choices = (
('正常', '正常'),
('ODM', 'ODM'),
@@ -164,8 +164,8 @@ class CertApp(CommonBModel):
('中', '中'),
('低', '低')
)
- 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)
+ cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='certapp_cert_field', on_delete=models.CASCADE)
+ cccpv_class = models.ForeignKey(Dict, verbose_name='涉及CCC/PV分类', related_name='certapp_cccpv_class', on_delete=models.SET_NULL, 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)
@@ -182,7 +182,7 @@ class CertApp(CommonBModel):
annuity = models.FloatField('年金',null=True, blank=True, default=0)
supervise_amount = models.FloatField('监督金额',null=True, blank=True, default=0)
review_amount = models.FloatField('复评金额',null=True, blank=True, default=0)
- system_standard = models.ForeignKey(Dict, verbose_name='依据的体系标准',null=True, blank=True, related_name='certapp_system_standard', on_delete=models.DO_NOTHING)
+ system_standard = models.ForeignKey(Dict, verbose_name='依据的体系标准',null=True, blank=True, related_name='certapp_system_standard', on_delete=models.SET_NULL)
risk = models.CharField('风险系数', choices=risk_choices, max_length=50, null=True, blank=True)
# 认证评定字段
@@ -211,7 +211,7 @@ class CertAppFlow(model.BaseModel):
class EvaluationDetail(CommonBModel):
cert_app = models.ManyToManyField(CertApp, verbose_name='关联受理', related_name='evaluationdetail_cert_app')
- item = models.ForeignKey(Evaluations,on_delete=models.DO_NOTHING,verbose_name='评审项',null=True, blank=True, related_name='evaluationdetail_item')
+ item = models.ForeignKey(Evaluations,on_delete=models.SET_NULL,verbose_name='评审项',null=True, blank=True, related_name='evaluationdetail_item')
item_v = JSONField(verbose_name='评审项目',null=True, blank=True)
result = models.TextField('符合结果',null=True, blank=True)
remark = models.TextField('备注', null=True, blank=True)
@@ -261,7 +261,7 @@ class Certappunit(CommonBModel):
('不合格', '不合格'),
)
- testorg = models.ForeignKey('laboratory.TestOrg',verbose_name='检测机构',null=True, blank=True, related_name='certappunit_testorg', on_delete=models.DO_NOTHING)
+ testorg = models.ForeignKey('laboratory.TestOrg',verbose_name='检测机构',null=True, blank=True, related_name='certappunit_testorg', on_delete=models.SET_NULL)
remark = models.TextField('备注', null=True, blank=True)
sampledec = models.TextField('样品描述', null=True, blank=True)
detnumber = models.CharField('检测任务号', max_length = 100,null=True, blank=True)
diff --git a/server/apps/project/serializers.py b/server/apps/project/serializers.py
index 347686a..ddae5ca 100644
--- a/server/apps/project/serializers.py
+++ b/server/apps/project/serializers.py
@@ -52,6 +52,7 @@ class CertappSerializer(serializers.ModelSerializer):
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True , read_only=True)
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
accept_by_ = UserSimpleSerializer(source='accept_by', read_only=True)
+ nonitems = serializers.SlugRelatedField(many=True, required=False, slug_field="id", queryset=Dict.objects.filter(is_deleted=1, type__code='factory_check_noitem'))
class Meta:
model = CertApp
fields = '__all__'
@@ -118,7 +119,10 @@ class ProjectSerializer(serializers.ModelSerializer):
def get_certapps(self, obj):
certapps = []
for i in obj.certapp_project.filter(is_deleted=False):
- certapps.append(i.cert_field.code +'(' + i.cccpv_class.name +')')
+ if i.cccpv_class:
+ certapps.append(i.cert_field.code +'(' + i.cccpv_class.name +')')
+ else:
+ certapps.append(i.cert_field.code)
return certapps
@staticmethod
diff --git a/server/apps/project/views.py b/server/apps/project/views.py
index 9927419..b9f907b 100644
--- a/server/apps/project/views.py
+++ b/server/apps/project/views.py
@@ -80,6 +80,11 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
filterset_fields = ['state', 'project', 'certappunit_certapp__teststate', 'cert_field']
# filterset_class = CertAppFilter
+ def filter_queryset(self, queryset):
+ for backend in list(self.filter_backends):
+ queryset = backend().filter_queryset(self.request, queryset, self).distinct()
+ return queryset
+
def perform_destroy(self, instance):
instance.delete(soft=False)
@@ -103,10 +108,12 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
完成受理
"""
obj = self.get_object()
- obj.state = '策划'
- obj.save()
- CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='完成受理', state='受理')
- return Response(status=status.HTTP_200_OK)
+ if obj.state == '受理':
+ obj.state = '策划'
+ obj.save()
+ CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='完成受理', state='受理')
+ return Response(status=status.HTTP_200_OK)
+ return Response('业务状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=False, perms_map={'put':'certapp_review'},
url_name='review_certapp')
@@ -237,7 +244,7 @@ class CertappunitViewset(PageOrNot, ModelViewSet):
obj.save()
return Response(status=status.HTTP_200_OK)
else:
- return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
+ return Response('认证单元状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map={'put':'certapp_testtask'}, url_name='certappunit_testtask')
def testtask(self, request, pk=None):
"""
@@ -308,6 +315,9 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
return ProjectUpdateSerializer
return ProjectSerializer
+ def perform_destroy(self, instance):
+ instance.delete(soft=False)
+
def create(self, request, *args, **kwargs):
postdata = request.data
postdata['number'] = random.randrange(8000,9000)
@@ -317,7 +327,6 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
obj.state = '创建中' #空项目
if 'certapps' in postdata and postdata['certapps']:
CertApp.objects.filter(pk__in = postdata['certapps']).update(project=obj)
- obj.state = '待策划'
obj.save()
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)