diff --git a/apps/tag/models.py b/apps/tag/models.py index 259488a..6350e3d 100644 --- a/apps/tag/models.py +++ b/apps/tag/models.py @@ -82,6 +82,30 @@ class TagBatch(BaseModel): return super(TagBatch, self).save(*args, **kwargs) +class TagDistribution(BaseModel): + batch = models.ForeignKey( + TagBatch, + on_delete=models.CASCADE, + related_name='distributions', + null=True + ) + tag = models.ManyToManyField(Tag, related_name='distributions') + organization = models.ForeignKey( + Organization, + on_delete=models.CASCADE, + related_name='distributions', + null=True + ) + species_code = models.IntegerField(default=0) + distributed_number = models.IntegerField(default=0) + + def __str__(self): + return f'{self.id}-{self.distributed_number}-{self.organization.name}' + + def save(self, *args, **kwargs): + return super(TagDistribution, self).save(*args, **kwargs) + + class TagAssignment(BaseModel): organization = models.ForeignKey( auth_models.Organization, diff --git a/apps/tag/web/api/v1/api.py b/apps/tag/web/api/v1/api.py index 514961b..70dcdaf 100644 --- a/apps/tag/web/api/v1/api.py +++ b/apps/tag/web/api/v1/api.py @@ -311,3 +311,15 @@ class TagBatchViewSet(BaseViewSet, SoftDeleteMixin, DynamicSearchMixin, viewsets serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) return Response(self.serializer_class(queryset).data) + + def destroy(self, request, pk=None, *args, **kwargs): + """ + soft delete batch with tag items + """ + + batch = self.get_object() + batch.soft_delete() + for tag in batch.tag.all(): + tag.soft_delete() + + return Response(status=status.HTTP_200_OK)