diff --git a/rowers/models.py b/rowers/models.py index 9ea4b747..15a66474 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1978,6 +1978,21 @@ class TrainingPlan(models.Model): return stri + def delete(self, *args, **kwargs): + delete_sessions = kwargs.pop('delete_sessions', False) + delete_all_sessions = kwargs.pop('delete_all_sessions', False) + if delete_sessions: + sessions = PlannedSession.objects.filter(from_plan=self) + for s in sessions: + s.delete() + + if delete_all_sessions: + sessions = PlannedSession.objects.filter(startdate__gte=self.startdate,enddate__lte=self.enddate) + for s in sessions: + s.delete() + + super().delete(*args, **kwargs) + def save(self, *args, **kwargs): manager = self.manager if not can_add_plan(manager.user): # pragma: no cover diff --git a/rowers/templates/trainingplan_delete.html b/rowers/templates/trainingplan_delete.html index 045411e4..adaa75a7 100644 --- a/rowers/templates/trainingplan_delete.html +++ b/rowers/templates/trainingplan_delete.html @@ -13,7 +13,15 @@
{% csrf_token %}

Are you sure you want to delete {{ object }}?

- +

+ Delete all planned sessions linked to the plan +

+

+ Delete all planned sessions in the plan time frame +

+

+ +

diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index eb1711a2..e7731516 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -3335,6 +3335,13 @@ class TrainingPlanDelete(DeleteView): template_name = 'trainingplan_delete.html' success_url = reverse_lazy(rower_create_trainingplan) + def post(self, request, *args, **kwargs): + delete_sessions = request.POST.get('delete_sessions') + delete_all_sessions = request.POST.get('delete_all_sessions') + self.object = self.get_object() + self.object.delete(delete_sessions=delete_sessions, delete_all_sessions=delete_all_sessions) + return HttpResponseRedirect(self.get_success_url()) + def get_object(self, *args, **kwargs): obj = super(TrainingPlanDelete, self).get_object(*args, **kwargs) if not can_delete_plan(self.request.user, obj): # pragma: no cover