diff --git a/server/apps/quality/models.py b/server/apps/quality/models.py index 77b7c2f..39ce26b 100644 --- a/server/apps/quality/models.py +++ b/server/apps/quality/models.py @@ -85,7 +85,8 @@ class InspectRecord(CommonAModel): dept = models.ForeignKey(Organization, on_delete=models.CASCADE, verbose_name='受检查单位') result = models.CharField('检查结果', max_length=50, choices=result_choices, null=True, blank=True) note = models.TextField('检查说明', null=True, blank=True) - + subtask = models.ForeignKey(SubInspectTask, on_delete=models.CASCADE, verbose_name='关联子任务') + class Meta: verbose_name = '巡查记录' verbose_name_plural = verbose_name diff --git a/server/apps/quality/serializers.py b/server/apps/quality/serializers.py index c586fed..8dd697a 100644 --- a/server/apps/quality/serializers.py +++ b/server/apps/quality/serializers.py @@ -30,3 +30,9 @@ class InspectTaskSerializer(serializers.ModelSerializer): def get_subtask_count(self, obj): return SubInspectTask.objects.filter(inspecttask=obj, is_deleted=True).count() +class SubtaskListSerializer(serializers.ModelSerializer): + leader_ = UserSimpleSerializer(source='leader', read_only=True) + + class Meta: + model = SubInspectTask + fields = '__all__' \ No newline at end of file diff --git a/server/apps/quality/views.py b/server/apps/quality/views.py index 859cd3a..d2b568d 100644 --- a/server/apps/quality/views.py +++ b/server/apps/quality/views.py @@ -47,4 +47,47 @@ class SubtaskViewSet(ModelViewSet): perms_map = {'get': '*', 'post': 'inspecttask_create', 'put': 'inspecttask_update', 'delete': 'inspecttask_delete'} queryset = SubInspectTask.objects.all() - ordering = ['create_time'] \ No newline at end of file + serializer_class = SubtaskListSerializer + ordering = ['create_time'] + + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + instance.delete(soft=False) + return Response(status=status.HTTP_204_NO_CONTENT) + + def create(self, request, *args, **kwargs): + obj = SubInspectTask() + obj.inspecttask = InspectTask.objects.get(pk=request.data['inspecttask']) + obj.name = request.data['name'] + obj.leader = User.objects.get(pk=request.data['leader']) + obj.save() + InspectTeam.objects.create(member=User.objects.get(pk=request.data['leader']), type='组长', subtask=obj) + if request.data.get('members', False) and request.data.get('depts', False): + members = [] + depts = [] + records = [] + for dept in request.data['depts']: + mdept = Organization.objects.get(pk=dept) + if not InspectRecord.objects.filter(dept=mdept, subtask=obj).exists(): + data = {} + data['dept'] = mdept + data['subtask'] = obj + depts.append(InspectDept(**data)) + for i in InspectItem.objects.filter(is_deleted=False): + r = {} + r['dept'] = mdept + r['item'] = i + r['subtask'] = obj + records.append(InspectRecord(**r)) + for member in request.data['members']: + mmember = User.objects.get(pk=member) + if not InspectTeam.objects.filter(member=mdept, subtask=obj).exists(): + data = {} + data['member'] = mmember + data['subtask'] = obj + members.append(InspectTeam(**data)) + InspectTeam.objects.bulk_create(members) + InspectDept.objects.bulk_create(depts) + InspectRecord.objects.bulk_create(records) + return Response(status=status.HTTP_201_CREATED) + return Response('组织和成员不能为空', status=status.HTTP_400_BAD_REQUEST)