162 lines
5.8 KiB
Python
162 lines
5.8 KiB
Python
from rest_framework import serializers
|
|
|
|
from apps.system.models import City, Organization
|
|
from .models import QAction, QActionItem, QOrg, QTask, Quali, QualiLib
|
|
from django.db import transaction
|
|
from apps.system.serializers import OrganizationSimpleSerializer, DictSerializer
|
|
from rest_framework.exceptions import ParseError
|
|
|
|
|
|
class QualiLibListSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = QualiLib
|
|
fields = '__all__'
|
|
|
|
class QualiListSerializer(serializers.ModelSerializer):
|
|
province_name = serializers.CharField(source='province.name', read_only=True)
|
|
city_name = serializers.CharField(source='city.name', read_only=True)
|
|
service = serializers.CharField(source='org.service', read_only=True)
|
|
class Meta:
|
|
model = Quali
|
|
fields = '__all__'
|
|
|
|
|
|
class QTaskCreateUpdateSerializer(serializers.ModelSerializer):
|
|
orgs = serializers.PrimaryKeyRelatedField(label='上报公司ID列表',
|
|
queryset = Organization.objects.all(), many=True, write_only=True)
|
|
class Meta:
|
|
model = QTask
|
|
fields = ['name', 'end_date', 'orgs']
|
|
|
|
def create(self, validated_data):
|
|
with transaction.atomic():
|
|
orgs = validated_data.pop('orgs')
|
|
validated_data['state'] = '待发布'
|
|
instance = super().create(validated_data)
|
|
for i in orgs:
|
|
QOrg.objects.get_or_create(qtask=instance, org=i,
|
|
defaults={'qtask': instance, 'org': i})
|
|
return instance
|
|
|
|
def update(self, instance, validated_data):
|
|
with transaction.atomic():
|
|
if instance.state == '已关闭':
|
|
raise ParseError('任务已关闭,不可更改')
|
|
orgs = validated_data.pop('orgs')
|
|
instance = super().update(instance, validated_data)
|
|
for i in orgs:
|
|
QOrg.objects.get_or_create(qtask=instance, org=i,
|
|
defaults={'qtask': instance, 'org': i})
|
|
return instance
|
|
|
|
|
|
class QTaskListSerializer(serializers.ModelSerializer):
|
|
orgs_count = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = QTask
|
|
fields = '__all__'
|
|
|
|
def get_orgs_count(self, obj):
|
|
count = QOrg.objects.filter(qtask=obj).count()
|
|
return count
|
|
|
|
class QTaskSimpleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = QTask
|
|
fields = '__all__'
|
|
|
|
class QOrgListSerializer(serializers.ModelSerializer):
|
|
org_ = OrganizationSimpleSerializer(source='org', read_only=True)
|
|
qtask_ = QTaskSimpleSerializer(source='qtask', read_only=True)
|
|
class Meta:
|
|
model = QOrg
|
|
fields = '__all__'
|
|
|
|
|
|
class QActionListSerializer(serializers.ModelSerializer):
|
|
quali_name = serializers.CharField(source='quali.name', read_only=True)
|
|
atype_name = serializers.CharField(source='atype.name', read_only=True)
|
|
afield_name = serializers.CharField(source='afield.name', read_only=True)
|
|
class Meta:
|
|
model = QAction
|
|
fields = '__all__'
|
|
|
|
|
|
class QActionServiceSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = QAction
|
|
fields = ['qtask', 'value2']
|
|
|
|
def create(self, validated_data):
|
|
validated_data['action'] = 'service:update'
|
|
return super().create(validated_data)
|
|
|
|
class QualiCreateSerializer(serializers.ModelSerializer):
|
|
citys = serializers.ListField(child=serializers.IntegerField(), label='城市ID列表')
|
|
class Meta:
|
|
model = Quali
|
|
fields = ['name', 'type', 'grade', 'scope', 'level', 'province', 'city', 'description', 'citys']
|
|
|
|
|
|
class QualiUpdateSerializer(serializers.ModelSerializer):
|
|
citys = serializers.ListField(child=serializers.IntegerField(), label='城市ID列表')
|
|
id = serializers.IntegerField(label='修改资质的ID')
|
|
class Meta:
|
|
model = Quali
|
|
fields = ['scope', 'level', 'description', 'id', 'citys']
|
|
|
|
class QualiSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Quali
|
|
fields = '__all__'
|
|
|
|
class QActionQualiCreateSerializer(serializers.ModelSerializer):
|
|
value2 = QualiCreateSerializer()
|
|
class Meta:
|
|
model = QAction
|
|
fields = ['qtask', 'value2']
|
|
|
|
def create(self, validated_data):
|
|
validated_data['action'] = 'quali:create'
|
|
if validated_data['value2']['type'] in ['CMA', 'CNAS']:
|
|
validated_data['value2']['name'] = validated_data['value2']['type']
|
|
value2 = validated_data['value2']
|
|
if value2['province']:
|
|
value2['province'] = value2['province'].id
|
|
if value2['city']:
|
|
value2['city'] = value2['city'].id
|
|
return super().create(validated_data)
|
|
|
|
class QActionQualiUpdateSerializer(serializers.ModelSerializer):
|
|
value2 = QualiUpdateSerializer()
|
|
class Meta:
|
|
model = QAction
|
|
fields = ['qtask', 'value2']
|
|
|
|
def create(self, validated_data):
|
|
validated_data['action'] = 'quali:update'
|
|
return super().create(validated_data)
|
|
|
|
class QActionACreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = QAction
|
|
fields = ['atype', 'afield', 'file', 'num', 'qtask']
|
|
extra_kwargs = {'atype': {'required': True}, 'afield': {'required': True}, 'file': {'required': True}}
|
|
|
|
def create(self, validated_data):
|
|
validated_data['action'] = 'ablity:create'
|
|
return super().create(validated_data)
|
|
|
|
|
|
class QActionItemSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = QActionItem
|
|
fields = ['action', 'field', 'value1', 'value2', 'city']
|
|
|
|
|
|
class QActionDetailSerializer(serializers.ModelSerializer):
|
|
update_detail = QActionItemSerializer(source='items_qaction', many=True, read_only=True)
|
|
class Meta:
|
|
model = QAction
|
|
fields ='__all__' |