certappunti
This commit is contained in:
parent
7d90c0b335
commit
e7ffbe9fab
|
@ -54,3 +54,11 @@ export function getCertapp(id) {
|
|||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function accessCertapp(id, data) {
|
||||
return request({
|
||||
url: `/project/certapp/${id}/access/`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
export function getCertappunitList(query) {
|
||||
return request({
|
||||
url: '/project/certappunit/',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// export function createAccess(data) {
|
||||
// return request({
|
||||
// url: '/accessment/certass/',
|
||||
// method: 'post',
|
||||
// data
|
||||
// })
|
||||
// }
|
||||
|
||||
// export function updateAccess(id, data) {
|
||||
// return request({
|
||||
// url: `/accessment/certass/${id}/`,
|
||||
// method: 'put',
|
||||
// data
|
||||
// })
|
||||
// }
|
||||
|
||||
// export function deleteAccess(id) {
|
||||
// return request({
|
||||
// url: `/accessment/certass/${id}/`,
|
||||
// method: 'delete'
|
||||
// })
|
||||
// }
|
|
@ -98,6 +98,6 @@ div:focus {
|
|||
.el-button+.el-button {
|
||||
margin-left: 1px;
|
||||
}
|
||||
.el-button {
|
||||
border-radius: 0px;
|
||||
}
|
||||
// .el-button {
|
||||
// border-radius: 0px;
|
||||
// }
|
|
@ -3,64 +3,197 @@
|
|||
<el-card>
|
||||
<div slot="header" class="clearfix">
|
||||
<span>评定结论</span>
|
||||
</div>
|
||||
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="120px" style="margin-top:10px">
|
||||
<el-col :xs="24" :md="12">
|
||||
<el-form-item label="工厂检查结论" prop="conclusion">
|
||||
<el-select
|
||||
v-model="formData.conclusion"
|
||||
placeholder="请选择工厂检查结论"
|
||||
clearable
|
||||
:style="{width: '100%'}"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in conclusionOptions"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="12">
|
||||
<el-form-item label="不符合项" prop="nonitems" >
|
||||
<el-select
|
||||
v-model="formData.nonitems"
|
||||
placeholder="请选择不符合项"
|
||||
clearable
|
||||
multiple
|
||||
collapse-tags
|
||||
:style="{width: '100%'}"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in nonOptions"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="item.disabled"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="12">
|
||||
<el-form-item label="审核质量评分" prop="score" >
|
||||
<el-input-number v-model="formData.score" :min="1" :max="100" style="width:100%"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<div style="text-align:center">
|
||||
<el-button type="primary" @click="save">保存</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card style="margin-top:6px">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>业务涉及的认证单元</span>
|
||||
</div>
|
||||
<el-table
|
||||
ref="elTable"
|
||||
v-loading="listLoading"
|
||||
:data="tableData"
|
||||
:data="tableUnitData"
|
||||
style="width: 100%;"
|
||||
border
|
||||
fit
|
||||
stripe
|
||||
highlight-current-row
|
||||
height="380"
|
||||
>
|
||||
<el-table-column label="评定表编号">
|
||||
<template slot-scope="scope">{{ scope.row.number }}</template>
|
||||
<el-table-column type="index" width="50" />
|
||||
<el-table-column label="单元名称">
|
||||
<template slot-scope="scope" >{{ scope.row.name }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工厂检查结论">
|
||||
<template slot-scope="scope">{{ scope.row.conclusion }}</template>
|
||||
<el-table-column label="证书信息">
|
||||
<template slot-scope="scope">
|
||||
<!-- <el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['certapps_update'])"
|
||||
@click="handleDelete(scope)"
|
||||
>删除</el-button> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="不符合项分类">
|
||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
||||
<el-table-column label="认证决定">
|
||||
<template slot-scope="scope">
|
||||
<!-- <el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['certapps_update'])"
|
||||
@click="handleDelete(scope)"
|
||||
>删除</el-button> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间">
|
||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<!-- <el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['certapps_update'])"
|
||||
@click="handleDelete(scope)"
|
||||
>删除</el-button> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- <el-table
|
||||
ref="elTable"
|
||||
v-loading="listLoading"
|
||||
:data="tableData"
|
||||
style="width: 100%;"
|
||||
border
|
||||
fit
|
||||
stripe
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="评定表编号">
|
||||
<template slot-scope="scope">{{ scope.row.number }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工厂检查结论">
|
||||
<template slot-scope="scope">{{ scope.row.conclusion }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="不符合项分类">
|
||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间">
|
||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
||||
</el-table-column>
|
||||
</el-table> -->
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getDictList } from "@/api/dict"
|
||||
import { accessCertapp, getCertapp } from "@/api/certapp"
|
||||
import { getCertappunitList } from "@/api/certappunit"
|
||||
import { getCertunitList } from "@/api/certunit";
|
||||
export default {
|
||||
name: "access",
|
||||
props:['certapp'],
|
||||
data() {
|
||||
return {
|
||||
listLoading: false,
|
||||
tableData: [],
|
||||
formData:{},
|
||||
rules:{
|
||||
conclusion: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
nonitems: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
score: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
conclusionOptions:[],
|
||||
nonOptions:[],
|
||||
tableUnitData: [],
|
||||
listQuery:{
|
||||
pageoff:true,
|
||||
certapp:this.certapp
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getConclusion()
|
||||
this.getOptions1()
|
||||
this.getOptions2()
|
||||
this.getUnitList();
|
||||
},
|
||||
methods:{
|
||||
getConclusion() {
|
||||
getCertapp(this.certapp).then(res=>{
|
||||
if(res.data){
|
||||
this.formData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getOptions1() {
|
||||
getDictList({type__code:'factory_check_conclusion', pageoff:true}).then(res=>{
|
||||
this.conclusionOptions = res.data
|
||||
})
|
||||
},
|
||||
getOptions2() {
|
||||
getDictList({type__code:'factory_check_noitem', pageoff:true}).then(res=>{
|
||||
this.nonOptions = res.data
|
||||
})
|
||||
},
|
||||
getUnitList() {
|
||||
this.listLoading = true;
|
||||
getCertappunitList(this.listQuery).then((response) => {
|
||||
|
||||
if (response.data) {
|
||||
|
||||
this.tableUnitData = response.data;
|
||||
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
save() {
|
||||
this.$refs["elForm"].validate((valid) => {
|
||||
if (!valid) return;
|
||||
accessCertapp(this.certapp, this.formData).then((res) => {
|
||||
this.$message.success('成功')
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -1,6 +1,7 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<div style="display:flex">
|
||||
<el-row :gutter="6">
|
||||
<el-col :xs="24" :md="4">
|
||||
<treeselect
|
||||
v-model="listQuery.user__dept"
|
||||
:multiple="false"
|
||||
|
@ -8,15 +9,18 @@
|
|||
placeholder="所属组织"
|
||||
:disable-branch-nodes="true"
|
||||
@input="handleFilter"
|
||||
style="width: 280px" clearable/>
|
||||
|
||||
style="width: 100%" clearable/>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="4">
|
||||
<el-input
|
||||
v-model="listQuery.search"
|
||||
placeholder="姓名/易记码/编号/注册领域"
|
||||
style="width: 300px;margin-left:10px"
|
||||
style="width: 100%"
|
||||
class="filter-item"
|
||||
@keyup.enter.native="handleFilter"
|
||||
/>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="4">
|
||||
<el-button
|
||||
class="filter-item"
|
||||
type="primary"
|
||||
|
@ -28,8 +32,9 @@
|
|||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="resetFilter"
|
||||
>刷新重置</el-button>
|
||||
</div>
|
||||
>刷新</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table
|
||||
v-loading="listLoading"
|
||||
:data="tableData.results"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div>
|
||||
<el-table
|
||||
v-loading="listLoading"
|
||||
:data="tableData.results"
|
||||
:data="tableData"
|
||||
style="width: 100%;"
|
||||
border
|
||||
fit
|
||||
|
@ -37,14 +37,6 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="tableData.count>0"
|
||||
:total="tableData.count"
|
||||
:page.sync="listQuery.page"
|
||||
:limit.sync="listQuery.page_size"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="80px" style="margin-top:10px">
|
||||
<el-col :xs="24" :md="12">
|
||||
<el-form-item label="实施规则" prop="implementrule">
|
||||
|
@ -154,11 +146,10 @@ export default {
|
|||
props:['certapp'],
|
||||
data() {
|
||||
return {
|
||||
tableData: { count: 0 },
|
||||
tableData: [],
|
||||
listLoading: true,
|
||||
listQuery: {
|
||||
page: 1,
|
||||
page_size: 20,
|
||||
pageoff:true,
|
||||
certappunit_certunit__certapp:this.certapp
|
||||
},
|
||||
formData: {
|
||||
|
|
|
@ -309,6 +309,9 @@ export default {
|
|||
})
|
||||
},
|
||||
async confirm1(form) {
|
||||
if(this.dicttype.parent==undefined){
|
||||
this.dicttype.parent = null
|
||||
}
|
||||
this.$refs[form].validate(valid => {
|
||||
if (valid) {
|
||||
const isEdit = this.dgT1 === 'edit'
|
||||
|
@ -363,7 +366,7 @@ export default {
|
|||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
# Generated by Django 3.0.7 on 2020-09-29 07:44
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0031_delete_bscodeset'),
|
||||
('project', '0038_certappunit_testorg'),
|
||||
('accessment', '0002_auto_20200921_1444'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='unitaccess',
|
||||
name='certaccess',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='unitaccess',
|
||||
name='certificate',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='unitaccess',
|
||||
name='certunit',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='unitaccess',
|
||||
name='certappunit',
|
||||
field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_certappunit', to='project.Certappunit'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='certaccess',
|
||||
name='certapp',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certaccess_certapp', to='project.CertApp'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='unitaccess',
|
||||
name='decision',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_decision', to='system.Dict', verbose_name='认证决定'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 3.0.7 on 2020-09-29 08:05
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('accessment', '0003_auto_20200929_1544'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='unitaccess',
|
||||
name='certappunit',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='unitaccess',
|
||||
name='create_by',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='unitaccess',
|
||||
name='decision',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='unitaccess',
|
||||
name='update_by',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Certaccess',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Unitaccess',
|
||||
),
|
||||
]
|
|
@ -5,38 +5,36 @@ from rest_framework.exceptions import ParseError
|
|||
from simple_history.models import HistoricalRecords
|
||||
|
||||
from apps.certset.models import ImplementRule, UnitType, EvaluationItem, Standard
|
||||
from apps.crm.models import Enterprise
|
||||
from apps.project.models import CertApp
|
||||
from apps.system.models import CommonAModel, CommonBModel, Dict, User
|
||||
# from apps.crm.models import Enterprise
|
||||
# from apps.project.models import CertApp
|
||||
# from apps.system.models import CommonAModel, CommonBModel, Dict, User
|
||||
|
||||
class Certaccess(CommonAModel):
|
||||
"""
|
||||
业务评定
|
||||
"""
|
||||
certapp = models.ForeignKey('project.certapp', on_delete=models.CASCADE, related_name='unitaccess_certapp')
|
||||
conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion')
|
||||
nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems')
|
||||
score = models.IntegerField('审核质量评分', default=0)
|
||||
# class Certaccess(CommonAModel):
|
||||
# """
|
||||
# 业务评定
|
||||
# """
|
||||
# certapp = models.ForeignKey('project.certapp', on_delete=models.CASCADE, related_name='certaccess_certapp')
|
||||
# conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion')
|
||||
# nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems')
|
||||
# score = models.IntegerField('审核质量评分', default=0)
|
||||
|
||||
class Meta:
|
||||
verbose_name = '业务评定'
|
||||
verbose_name_plural = verbose_name
|
||||
# class Meta:
|
||||
# verbose_name = '业务评定'
|
||||
# verbose_name_plural = verbose_name
|
||||
|
||||
def __str__(self):
|
||||
return self.certapp.number
|
||||
# def __str__(self):
|
||||
# return self.certapp.number
|
||||
|
||||
class Unitaccess(CommonAModel):
|
||||
"""
|
||||
单元评定
|
||||
"""
|
||||
certunit = models.ForeignKey('crm.Certunit', on_delete=models.CASCADE, related_name='unitaccess_certunit')
|
||||
certificate = models.ForeignKey('certificate.Certificate', on_delete=models.CASCADE, null=True, blank=True, related_name='unitaccess_certificate')
|
||||
decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE)
|
||||
certaccess = models.ForeignKey('accessment.Certaccess', on_delete=models.CASCADE, related_name='unitaccess_certaccess')
|
||||
# class Unitaccess(CommonAModel):
|
||||
# """
|
||||
# 单元评定
|
||||
# """
|
||||
# certappunit = models.OneToOneField('project.Certappunit', on_delete=models.CASCADE, related_name='unitaccess_certappunit')
|
||||
# decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE, related_name='unitaccess_decision')
|
||||
|
||||
class Meta:
|
||||
verbose_name = '认证单元评定'
|
||||
verbose_name_plural = verbose_name
|
||||
# class Meta:
|
||||
# verbose_name = '认证单元评定'
|
||||
# verbose_name_plural = verbose_name
|
||||
|
||||
def __str__(self):
|
||||
return self.decision
|
||||
# def __str__(self):
|
||||
# return self.decision
|
|
@ -1,26 +1,26 @@
|
|||
from apps.system.models import Dict
|
||||
from rest_framework import serializers
|
||||
# from apps.system.models import Dict
|
||||
# from rest_framework import serializers
|
||||
|
||||
from .models import Certaccess, Unitaccess
|
||||
# from .models import Certaccess, Unitaccess
|
||||
|
||||
from apps.system.serializers import DictSerializer
|
||||
# from apps.system.serializers import DictSerializer
|
||||
|
||||
class CertaccessSerializer(serializers.ModelSerializer):
|
||||
conclusion_ = DictSerializer(source='conclusion', read_only=True)
|
||||
nonitems = DictSerializer(source='nonitems', read_only=True)
|
||||
# class CertaccessSerializer(serializers.ModelSerializer):
|
||||
# conclusion_ = DictSerializer(source='conclusion', read_only=True)
|
||||
# nonitems_ = DictSerializer(source='nonitems', read_only=True, many=True)
|
||||
|
||||
class Meta:
|
||||
model = Certaccess
|
||||
fields = '__all__'
|
||||
# class Meta:
|
||||
# model = Certaccess
|
||||
# fields = '__all__'
|
||||
|
||||
@staticmethod
|
||||
def setup_eager_loading(queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
queryset = queryset.select_related('conclusion',)
|
||||
queryset = queryset.prefetch_related('nonitems',)
|
||||
return queryset
|
||||
# @staticmethod
|
||||
# def setup_eager_loading(queryset):
|
||||
# """ Perform necessary eager loading of data. """
|
||||
# queryset = queryset.select_related('conclusion',)
|
||||
# queryset = queryset.prefetch_related('nonitems',)
|
||||
# return queryset
|
||||
|
||||
class UnitaccessSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Unitaccess
|
||||
fields = '__all__'
|
||||
# class UnitaccessSerializer(serializers.ModelSerializer):
|
||||
# class Meta:
|
||||
# model = Unitaccess
|
||||
# fields = '__all__'
|
|
@ -1,10 +1,10 @@
|
|||
from django.urls import path, include
|
||||
from .views import CertaccessViewSet
|
||||
from rest_framework import routers
|
||||
# from django.urls import path, include
|
||||
# from .views import CertaccessViewSet
|
||||
# from rest_framework import routers
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('certaccess', CertaccessViewSet, basename="certaccess")
|
||||
# router = routers.DefaultRouter()
|
||||
# router.register('certaccess', CertaccessViewSet, basename="certaccess")
|
||||
|
||||
urlpatterns = [
|
||||
path('', include(router.urls))
|
||||
]
|
||||
# urlpatterns = [
|
||||
# path('', include(router.urls))
|
||||
# ]
|
|
@ -1,29 +1,30 @@
|
|||
import random
|
||||
# import random
|
||||
|
||||
from django.shortcuts import render
|
||||
from django.utils import timezone
|
||||
from rest_framework import status
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.exceptions import NotAuthenticated, ParseError
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.serializers import ModelSerializer
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||
# from django.shortcuts import render
|
||||
# from django.utils import timezone
|
||||
# from rest_framework import status
|
||||
# from rest_framework.decorators import action
|
||||
# from rest_framework.exceptions import NotAuthenticated, ParseError
|
||||
# from rest_framework.response import Response
|
||||
# from rest_framework.serializers import ModelSerializer
|
||||
# from rest_framework.views import APIView
|
||||
# from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||
|
||||
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||
from apps.system.models import Dict
|
||||
from apps.system.permission_data import RbacFilterSet
|
||||
from utils.pagination import PageOrNot
|
||||
# from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||
# from apps.system.models import Dict
|
||||
# from apps.system.permission_data import RbacFilterSet
|
||||
# from utils.pagination import PageOrNot
|
||||
|
||||
from .models import *
|
||||
from .serializers import *
|
||||
# from .models import *
|
||||
# from .serializers import *
|
||||
|
||||
# Create your views here.
|
||||
class CertaccessViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
||||
"""
|
||||
业务评定
|
||||
"""
|
||||
perms_map = {'get': 'certapp_view', 'post':'certaccess_create', 'put':'certaccess_update','delete': 'certaccess_delete'}
|
||||
queryset = Certaccess.objects.all()
|
||||
serializer_class = CertaccessSerializer
|
||||
ordering = ['-create_time']
|
||||
# # Create your views here.
|
||||
# class CertaccessViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
|
||||
# """
|
||||
# 业务评定
|
||||
# """
|
||||
# perms_map = {'get': 'certapp_view', 'post':'certaccess_create', 'put':'certaccess_update','delete': 'certaccess_delete'}
|
||||
# queryset = Certaccess.objects.all()
|
||||
# serializer_class = CertaccessSerializer
|
||||
# filterset_fields = ['certapp']
|
||||
# ordering = ['-create_time']
|
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 3.0.7 on 2020-09-29 08:05
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0031_delete_bscodeset'),
|
||||
('project', '0038_certappunit_testorg'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='certapp',
|
||||
name='conclusion',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='certaccess_conclusion', to='system.Dict', verbose_name='工厂检查结论'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='certapp',
|
||||
name='nonitems',
|
||||
field=models.ManyToManyField(related_name='certaccess_nonitems', to='system.Dict', verbose_name='不符合项目'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='certapp',
|
||||
name='score',
|
||||
field=models.IntegerField(default=0, verbose_name='审核质量评分'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='certappunit',
|
||||
name='decision',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_decision', to='system.Dict', verbose_name='认证决定'),
|
||||
),
|
||||
]
|
|
@ -105,6 +105,12 @@ class CertApp(CommonBModel):
|
|||
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)
|
||||
risk = models.CharField('风险系数', choices=risk_choices, max_length=50, null=True, blank=True)
|
||||
|
||||
# 认证评定字段
|
||||
conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion', null=True, blank=True)
|
||||
nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems')
|
||||
score = models.IntegerField('审核质量评分', default=0)
|
||||
|
||||
class Meta:
|
||||
verbose_name = '认证受理'
|
||||
verbose_name_plural = verbose_name
|
||||
|
@ -205,6 +211,11 @@ class Certappunit(CommonBModel):
|
|||
certunit = models.ForeignKey('crm.Certunit', verbose_name='单元', on_delete=models.CASCADE, related_name='certappunit_certunit')
|
||||
certapp = models.ForeignKey(CertApp, verbose_name='所属业务', on_delete = models.CASCADE, related_name='certappunit_certapp')
|
||||
testorg = models.ForeignKey('laboratory.TestOrg', verbose_name='检测机构', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
# 认证评定
|
||||
decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE, related_name='unitaccess_decision', null=True, blank=True)
|
||||
|
||||
|
||||
class Meta:
|
||||
verbose_name = '认证单元'
|
||||
verbose_name_plural = verbose_name
|
||||
|
|
|
@ -3,7 +3,7 @@ from rest_framework import serializers
|
|||
|
||||
from .models import *
|
||||
|
||||
from apps.system.serializers import DictSerializer, UserListSerializer
|
||||
from apps.system.serializers import DictSerializer, UserSimpleSerializer
|
||||
from apps.certset.serializers import StandardSerializer
|
||||
from apps.plan.serializers import PlanSerializer
|
||||
|
||||
|
@ -42,12 +42,24 @@ class CertappSerializer(serializers.ModelSerializer):
|
|||
cert_field_ = DictSerializer(source='cert_field', read_only=True)
|
||||
cccpv_class_ = DictSerializer(source='cccpv_class' , read_only=True)
|
||||
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True , read_only=True)
|
||||
create_by_ = UserListSerializer(source='create_by', read_only=True)
|
||||
accept_by_ = UserListSerializer(source='accept_by', read_only=True)
|
||||
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||
accept_by_ = UserSimpleSerializer(source='accept_by', read_only=True)
|
||||
class Meta:
|
||||
model = CertApp
|
||||
fields = '__all__'
|
||||
|
||||
@staticmethod
|
||||
def setup_eager_loading(queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
queryset = queryset.select_related('cert_field','cccpv_class', 'create_by', 'accept_by')
|
||||
queryset = queryset.prefetch_related('cnas_scopes',)
|
||||
return queryset
|
||||
|
||||
class CertappunitSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Certappunit
|
||||
fields = '__all__'
|
||||
|
||||
class EvaluationDetailSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EvaluationDetail
|
||||
|
@ -65,8 +77,8 @@ class EvaluationDetailSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class ProjectSerializer(serializers.ModelSerializer):
|
||||
create_by_ = UserListSerializer(source='create_by', read_only=True)
|
||||
assign_by_ = UserListSerializer(source='assign_by', read_only=True)
|
||||
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||
assign_by_ = UserSimpleSerializer(source='assign_by', read_only=True)
|
||||
certapps = serializers.SerializerMethodField()
|
||||
plan_ = PlanSerializer(source='plan', read_only=True)
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ router = routers.DefaultRouter()
|
|||
router.register('application', ApplicationViewSet, basename="application")
|
||||
router.register('subapplication', SubApplicationViewSet, basename="subapplication")
|
||||
router.register('certapp', CertappViewset, basename="certapp")
|
||||
router.register('certappunit', CertappunitViewset, basename="certappunit")
|
||||
router.register('evaluationdetail', EvaluationDetailViewset, basename="evaluationdetail")
|
||||
router.register('project', ProjectViewSet, basename="project")
|
||||
urlpatterns = [
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import re
|
||||
from django.http import request
|
||||
from rest_framework.views import APIView
|
||||
from apps import project
|
||||
from django.shortcuts import render
|
||||
|
@ -16,6 +18,7 @@ from .filters import *
|
|||
from utils.pagination import PageOrNot
|
||||
from rest_framework.exceptions import ParseError, NotAuthenticated
|
||||
from django.utils import timezone
|
||||
|
||||
# Create your views here.
|
||||
class ApplicationViewSet(RbacFilterSet, ModelViewSet):
|
||||
"""
|
||||
|
@ -89,7 +92,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
|||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
|
||||
@action(methods=['put'], detail=True, perms_map={'put':'complete_certapp'},
|
||||
@action(methods=['put'], detail=True, perms_map={'put':'certapp_complete'},
|
||||
url_name='complete_certapp')
|
||||
def complete(self, request, pk=None):
|
||||
"""
|
||||
|
@ -100,7 +103,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
|||
obj.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
@action(methods=['put'], detail=False, perms_map={'put':'review_certapp'},
|
||||
@action(methods=['put'], detail=False, perms_map={'put':'certapp_review'},
|
||||
url_name='review_certapp')
|
||||
def review(self, request, pk=None):
|
||||
"""
|
||||
|
@ -113,6 +116,23 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
|||
instance.cert_app.add(*certapps)
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certapp_access')
|
||||
def access(self, request, pk=None):
|
||||
"""
|
||||
认证评定
|
||||
"""
|
||||
# instance, ok = Certaccess.objects.get_or_create(certapp=self.get_object(), defaults={'certapp':self.get_object()
|
||||
# , 'conclusion':Dict.objects.get(pk=request.data['conclusion']), 'score':request.data['score']})
|
||||
# if not ok:
|
||||
instance = self.get_object()
|
||||
instance.conclusion = Dict.objects.get(pk=request.data['conclusion'])
|
||||
instance.score = request.data['score']
|
||||
instance.save()
|
||||
instance.nonitems.clear()
|
||||
instance.nonitems.add(*request.data['nonitems'])
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
||||
"""
|
||||
受理信息
|
||||
|
@ -125,7 +145,19 @@ class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
|||
ordering = ['-create_time']
|
||||
|
||||
|
||||
from rest_framework.mixins import ListModelMixin
|
||||
class CertappunitViewset(PageOrNot, ListModelMixin, GenericViewSet):
|
||||
perms_map={'*':'certapp_view'}
|
||||
queryset = Certappunit.objects.all()
|
||||
serializer_class = CertappunitSerializer
|
||||
ordering= ['-id']
|
||||
|
||||
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certappunit_access')
|
||||
def access(self, request, pk=None):
|
||||
obj = self.get_object()
|
||||
obj.decision = Dict.objects.get(pk=request.data['decision'])
|
||||
obj.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
||||
class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||
perms_map = {'get': 'project_view', 'post':'project_create', 'put':'project_update','delete': 'project_delete'}
|
||||
|
|
|
@ -78,6 +78,10 @@ class OrganizationSerializer(serializers.ModelSerializer):
|
|||
fields = '__all__'
|
||||
|
||||
|
||||
class UserSimpleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['id', 'name', 'username']
|
||||
class UserListSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
用户列表序列化
|
||||
|
|
|
@ -40,7 +40,7 @@ urlpatterns = [
|
|||
path('plan/', include('apps.plan.urls')),
|
||||
path('audit/', include('apps.audit.urls')),
|
||||
path('laboratory/', include('apps.laboratory.urls')),
|
||||
path('accessment/', include('apps.accessment.urls')),
|
||||
# path('accessment/', include('apps.accessment.urls')),
|
||||
path('docs/', include_docs_urls(title="接口文档",
|
||||
authentication_classes=[], permission_classes=[])),
|
||||
path('signature/', GenSignature.as_view(), name='gen_signature'),
|
||||
|
|
Loading…
Reference in New Issue