主流程测试完成1030

This commit is contained in:
caoqianming 2020-10-30 11:44:44 +08:00
parent fc070c6445
commit 5503fa1ee2
23 changed files with 261 additions and 49 deletions

View File

@ -82,9 +82,10 @@
<span v-else>暂无</span>
</template>
</el-table-column>
<el-table-column label="认证决定">
<el-table-column label="认证决定" >
<template slot-scope="scope">
<el-select
v-if="$route.name=='Certappaccess'"
v-model="scope.row.decision"
clearable
collapse-tags
@ -99,6 +100,9 @@
:disabled="item.disabled"
></el-option>
</el-select>
<span v-else>
<span v-if="scope.row.decision_">{{scope.row.decision_.name}}</span>
</span>
</template>
</el-table-column>
<!-- <el-table-column label="操作">

View File

@ -11,7 +11,7 @@
@input="handleFilter"
style="width: 100%" clearable/>
</el-col>
<el-col :xs="24" :md="4">
<el-col :xs="24" :md="6">
<el-input
v-model="listQuery.search"
placeholder="姓名/易记码/编号/注册领域"
@ -20,7 +20,7 @@
@keyup.enter.native="handleFilter"
/>
</el-col>
<el-col :xs="24" :md="4">
<el-col :xs="24" :md="6">
<el-button
class="filter-item"
type="primary"
@ -32,7 +32,7 @@
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter"
>刷新</el-button>
>重置</el-button>
</el-col>
</el-row>
<el-card style="margin-top:6px">

View File

@ -80,7 +80,7 @@
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
v-if="scope.row.state=='申请'"
v-if="scope.row.state=='申请'||scope.row.state=='受理'"
type="primary"
size="small"
:disabled="!checkPermission(['certapp_update'])"
@ -93,6 +93,13 @@
:disabled="!checkPermission(['certapp_delete'])"
@click="handleDelete(scope)"
>删除</el-button>
<el-button
type="plain"
size="small"
:disabled="!checkPermission(['certapp_detail'])"
@click="handleDetail(scope)"
>详情</el-button>
</template>
</el-table-column>
</el-table>
@ -192,6 +199,12 @@ deleteCertapp(scope.row.id).then(res=>{
})
},
handleDetail(scope) {
this.$router.push({
name: "Certappdetail",
params: { id: scope.row.id },
});
},
}
};
</script>

View File

@ -149,10 +149,9 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col font="right">
<el-button style="float: right;" type="primary" @click="submitForm">保存</el-button>
</el-col>
<el-row style="text-align:center" v-if="$route.name=='Certappupdate'">
<el-button type="primary" @click="submitForm" >保存</el-button>
<el-button type="plain" @click="handleComplete">完成受理</el-button>
</el-row>
@ -166,7 +165,7 @@
</template>
<script>
import { getChargeitemList,getBillList,getBill,createChargeitem,createBill,updateChargeitem} from "@/api/finanacial";
import { completeCertapp } from "@/api/certapp"
import { getDictList } from "@/api/dict";
import { genTree } from "@/utils";
import checkPermission from '@/utils/permission'
@ -233,6 +232,19 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
},
mounted() {},
methods: {
handleComplete(){
this.$confirm('确认完成受理?', '警告', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
}).then(()=>{
completeCertapp(this.certapp).then(res=>{
this.$message.success('成功')
this.$router.go(-1)
})
})
},
checkPermission,
// 获取表格选中时的数据
selectRow (val) {
@ -336,7 +348,8 @@ import "@riophae/vue-treeselect/dist/vue-treeselect.css";
});
},
}
},
};
</script>

View File

@ -32,7 +32,7 @@
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter"
>刷新</el-button>
>重置</el-button>
</el-col>
</el-row>
<el-table

View File

@ -30,12 +30,14 @@
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
v-if="$route.name=='Certappissue'"
type="primary"
size="small"
:disabled="!checkPermission(['certificate_issue'])"
@click="handleIssue(scope)"
>发证</el-button>
<el-button
v-if="$route.name=='Certappissue'"
size="small"
:disabled="!checkPermission(['certificate_issue'])"
@click="handleIssue(scope)"
@ -134,7 +136,7 @@ getDictList({type__code:'cert_decision', pageoff:true}).then(res=>{
},
handleIssue(scope){
// this.drawerVisible = true
createCertificate({certunit:scope.row.certunit, first_send:'2020-06-19', used_start:'2020-06-19', used_end:'2021-11-11'}).then(res=>{
createCertificate({id:scope.row.id, certunit:scope.row.certunit, first_send:'2020-06-19', used_start:'2020-06-19', used_end:'2021-11-11'}).then(res=>{
this.$message.success('成功')
this.getUnitList()
})

View File

@ -332,7 +332,9 @@ export default {
this.$confirm("确定删除该计划?", "警告", { type: "warning" })
.then(() => {
deletePlan(scope.row.id).then((res) => {
this.getPlanList_()
this.$message.success("成功");
});
})
.catch((res) => {});

View File

@ -163,7 +163,7 @@
<div slot="header" class="clearfix">
<span>业务信息</span>
</div>
<el-button type="primary" @click="appendCertapp" size="mini" v-if="$route.name == 'PlanProject'"
<el-button type="primary" @click="appendCertapp" size="mini" v-if="['Projectupdate'].indexOf($route.name)!=-1"
:disabled="!checkPermission(['certapp_bind'])">添加申请</el-button>
<el-table
ref="projectTable"

View File

@ -56,8 +56,9 @@
:disabled="!checkPermission(['project_update'])"
@click="handleUpdate(scope)"
>编辑</el-button>
<!-- v-if="['创建中', '待策划'].indexOf(scope.row.state)!=-1" -->
<el-button
v-if="['创建中', '待策划'].indexOf(scope.row.state)!=-1"
type="danger"
size="small"
:disabled="!checkPermission(['project_delete'])"
@ -176,7 +177,7 @@
<script>
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
},

View File

@ -20,7 +20,10 @@ class ProjectSerializerX(serializers.ModelSerializer):
def get_certapps(self, obj):
certapps = []
for i in obj.certapp_project.filter(is_deleted=False):
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):

View File

@ -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

View File

@ -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)

View File

@ -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='认证领域'),
),
]

View File

@ -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:

View File

@ -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='单元类型'),
),
]

View File

@ -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='检测机构')

View File

@ -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'),
),
]

View File

@ -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)

View File

@ -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

View File

@ -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='受审核方'),
),
]

View File

@ -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)

View File

@ -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):
if i.cccpv_class:
certapps.append(i.cert_field.code +'(' + i.cccpv_class.name +')')
else:
certapps.append(i.cert_field.code)
return certapps
@staticmethod

View File

@ -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()
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)