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