This commit is contained in:
shijing 2022-06-02 17:02:13 +08:00
commit fe4be749e3
2 changed files with 30 additions and 13 deletions

View File

@ -1,9 +1,9 @@
from rest_framework import serializers
from apps.system.models import City, Organization
from apps.system.models import City, Organization, Province
from .models import QAction, QActionItem, QOrg, QTask, Quali, QualiLib
from django.db import transaction
from apps.system.serializers import OrganizationSimpleSerializer, DictSerializer
from apps.system.serializers import CitySerializer, FileSimpleSerializer, OrganizationSimpleSerializer, DictSerializer, UserSimpleSerializer
from rest_framework.exceptions import ParseError
@ -15,7 +15,8 @@ class QualiLibListSerializer(serializers.ModelSerializer):
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)
org_ = OrganizationSimpleSerializer(source='org', read_only=True)
citys_ = CitySerializer(source='citys', many=True, read_only=True)
class Meta:
model = Quali
fields = '__all__'
@ -78,6 +79,8 @@ 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)
file_ = FileSimpleSerializer(source='file', read_only=True)
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
class Meta:
model = QAction
fields = '__all__'
@ -157,6 +160,17 @@ class QActionItemSerializer(serializers.ModelSerializer):
class QActionDetailSerializer(serializers.ModelSerializer):
update_detail = QActionItemSerializer(source='items_qaction', many=True, read_only=True)
value2 = serializers.SerializerMethodField()
class Meta:
model = QAction
fields ='__all__'
fields ='__all__'
def get_value2(self, obj):
value2 = obj.value2
if 'province' in value2:
value2['province_name'] = Province.objects.get(id=value2['province']).name
if 'city' in value2:
value2['city_name'] = City.objects.get(id=value2['city']).name
if 'citys' in value2:
value2['citys_'] = CitySerializer(instance=City.objects.filter(id__in=value2['citys']), many=True).data
return value2

View File

@ -1,5 +1,5 @@
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin, RetrieveModelMixin
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin, RetrieveModelMixin
from rest_framework.decorators import action
from apps.ability.models import QAction, QActionItem, QOrg, QTask, Quali, QualiLib
from apps.ability.serializers_qtask import QActionACreateSerializer, QActionDetailSerializer, QActionListSerializer, QActionQualiCreateSerializer, QActionQualiUpdateSerializer, QActionServiceSerializer, QOrgListSerializer, QTaskCreateUpdateSerializer, QTaskListSerializer, QualiCreateSerializer, QualiLibListSerializer, QualiListSerializer, QualiSerializer, QualiUpdateSerializer
@ -20,9 +20,9 @@ class QualiLibViewSet(PageOrNot, ListModelMixin, GenericViewSet):
search_fields = ['name']
ordering = ['-create_time']
class QualiViewSet(ListModelMixin, GenericViewSet):
class QualiViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
perms_map = {'get': '*'}
queryset = Quali.objects.all()
queryset = Quali.objects.select_related('org', 'province', 'city').prefetch_related('citys')
serializer_class = QualiListSerializer
search_fields = ['name', 'type', 'grade', 'scope', 'level', 'description']
ordering = ['org', 'org__sort', 'create_time']
@ -99,8 +99,8 @@ def cal_count(qtask, org):
qorg.save()
class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModelMixin,GenericViewSet):
perms_map = {'get': 'qtask_view'}
queryset = QAction.objects.select_related('file', 'atype', 'afield', 'qtask', 'belong_dept')
perms_map = {'get': 'qtask_view', 'delete': 'qaction_delete'}
queryset = QAction.objects.select_related('file', 'atype', 'afield', 'qtask', 'belong_dept', 'create_by')
filterset_fields = ['qtask', 'belong_dept', 'atype', 'afield']
serializer_class = QActionListSerializer
@ -130,7 +130,8 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel
def perform_destroy(self, instance):
if not instance.confirmed:
instance.delete(soft=False)
raise ParseError('报送已确认, 不可删除')
else:
raise ParseError('报送已确认, 不可删除')
@action(methods=['post'], detail=False,
perms_map = {'post':'qaction_create'}, serializer_class=QActionServiceSerializer)
@ -174,11 +175,13 @@ class QActionViewSet(PageOrNot, ListModelMixin, DestroyModelMixin, RetrieveModel
serializer.is_valid(raise_exception=True)
obj = serializer.save(create_by=user, belong_dept=user.dept)
vdata = serializer.validated_data
value2 = request.data.get('value2', {})
# 比较差别
quali = Quali.objects.get(id=obj.value2.get('id'))
old_data = QualiSerializer(instance=quali).data
quali = Quali.objects.get(id=value2.get('id'))
old_data = QualiListSerializer(instance=quali).data
obj.value1 = old_data
for k, v in obj.value2.items():
obj.save()
for k, v in value2.items():
if v != old_data[k]:
QActionItem.objects.create(action='update', field=k, value1=old_data[k], value2=v, qaction=obj)
if k == 'citys':