diff --git a/stories/writingtogether/models.py b/stories/writingtogether/models.py index ede2d36..dde9a1d 100644 --- a/stories/writingtogether/models.py +++ b/stories/writingtogether/models.py @@ -1,3 +1,5 @@ +from typing import Tuple + from django.contrib.auth import get_user_model from django.db import models from django.db.models import CASCADE @@ -29,6 +31,14 @@ class StoryRound(models.Model): return False return True + def advance_to_next_turn_and_get_status_and_round_number(self) -> Tuple[str, int]: + if self.current_turn+1 == self.number_of_rounds: + return 'finished', self.current_turn + self.current_turn += 1 + self.save() + + return 'ongoing', self.current_turn + #class Participant(models.Model): # user = models.ForeignKey(User, on_delete=CASCADE) diff --git a/stories/writingtogether/views.py b/stories/writingtogether/views.py index 6316b1a..7e191a0 100644 --- a/stories/writingtogether/views.py +++ b/stories/writingtogether/views.py @@ -88,6 +88,13 @@ class RedirectToNextOpenPart(LoginRequiredMixin, RedirectView): def get_redirect_url(self, *args, **kwargs): story_round = get_object_or_404(StoryRound, pk=kwargs['story_round_pk']) + if story_round.next_round_ready(): + status, turn_number = story_round.advance_to_next_turn_and_get_status_and_round_number() + if status == 'finished': + self.pattern_name = 'writing:finished' + kwargs['pk'] = kwargs.pop('story_round_pk') + return super().get_redirect_url(*args, **kwargs) + story_part = story_round.get_next_story_part(user=self.request.user) if story_part.finished: @@ -96,6 +103,7 @@ class RedirectToNextOpenPart(LoginRequiredMixin, RedirectView): else: kwargs['story_pk'] = story_part.part_of.pk kwargs['pk'] = story_part.pk + return super().get_redirect_url(*args, **kwargs)