cma_search/server/apps/ability/serializers_qtask.py

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__'