diff --git a/beat/web/team/api.py b/beat/web/team/api.py index a2d94bb5289c36bf38a970c7a0113ebc33f7a0e5..a4f4a02d89fe9748b88acf35411c8f75f96b5d58 100644 --- a/beat/web/team/api.py +++ b/beat/web/team/api.py @@ -42,7 +42,7 @@ from .serializers import TeamUpdateSerializer from .models import Team from .permissions import IsOwner, HasPrivacyLevel -from ..common.responses import BadRequestResponse +from ..common.responses import BadRequestResponse, ForbiddenResponse from ..common.mixins import CommonContextMixin @@ -117,6 +117,11 @@ class TeamDetailView(CommonContextMixin, generics.RetrieveUpdateDestroyAPIView): def delete(self, request, owner_name, team_name): team = self.get_queryset() + + # Check that the team can still be deleted + if not(team.deletable()): + return ForbiddenResponse("The team isn't deletable (it has been used to share %d objects with its members)" % team.total_shares()) + team.delete() return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/beat/web/team/models.py b/beat/web/team/models.py index 69bd56e0ed3b536e100e7e19c50dafe63be7d236..b1c86908e6f2ff1ee9277de20dbb9504d534e1e1 100644 --- a/beat/web/team/models.py +++ b/beat/web/team/models.py @@ -93,6 +93,32 @@ class Team(models.Model): return (self.owner.username, self.name) + def total_shares(self): + + used_at = 0 + used_at += self.shared_algorithms.count() + used_at += self.shared_databases.count() + used_at += self.shared_dataformats.count() + used_at += self.shared_environment.count() + used_at += self.shared_experiments.count() + used_at += self.shared_librarys.count() + used_at += self.shared_plotterparameters.count() + used_at += self.shared_plotters.count() + used_at += self.shared_searchs.count() + used_at += self.shared_toolchains.count() + used_at += self.usable_algorithm.count() + used_at += self.usable_library.count() + used_at += self.usable_plotterparameters.count() + used_at += self.usable_plotters.count() + + return used_at + + + def deletable(self): + + return not self.total_shares() + + #_____ Overrides __________ def __unicode__(self):