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 @@ 暂无 - + 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)