Merge branch 'master' of https://e.coding.net/ctcdevteam/cnas
This commit is contained in:
commit
b02e4cd27e
|
@ -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="操作">
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="resetFilter"
|
||||
>刷新</el-button>
|
||||
>重置</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table
|
||||
|
|
|
@ -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()
|
||||
})
|
||||
|
|
|
@ -332,7 +332,9 @@ export default {
|
|||
this.$confirm("确定删除该计划?", "警告", { type: "warning" })
|
||||
.then(() => {
|
||||
deletePlan(scope.row.id).then((res) => {
|
||||
this.getPlanList_()
|
||||
this.$message.success("成功");
|
||||
|
||||
});
|
||||
})
|
||||
.catch((res) => {});
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
},
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
|
@ -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='认证领域'),
|
||||
),
|
||||
]
|
|
@ -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:
|
||||
|
|
|
@ -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='单元类型'),
|
||||
),
|
||||
]
|
|
@ -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='检测机构')
|
||||
|
|
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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='受审核方'),
|
||||
),
|
||||
]
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
@ -312,6 +319,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)
|
||||
|
@ -321,7 +331,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)
|
||||
|
|
Loading…
Reference in New Issue