diff --git a/art/reminders.py b/art/reminders.py index 0a69fbc..5d25744 100644 --- a/art/reminders.py +++ b/art/reminders.py @@ -53,7 +53,7 @@ def send_art_reminders(event=None, context=None): """Cron diario: avisa según los días configurados para cada checkpoint incompleto.""" today = timezone.localdate() sent = 0 - programs = ArtProgram.objects.select_related('event').filter(is_current=True, event__active=True) + programs = ArtProgram.objects.select_related('event').filter(is_current=True) if isinstance(event, Event): programs = programs.filter(event=event) for program in programs: diff --git a/art/tests.py b/art/tests.py index 175efeb..c755b9c 100644 --- a/art/tests.py +++ b/art/tests.py @@ -1319,6 +1319,23 @@ def test_program_closings_cannot_come_before_their_openings(self): program.clean() self.assertEqual(set(raised.exception.message_dict), {closes for _, closes in ArtProgram.DATE_PAIRS}) + def test_current_program_works_before_its_event_is_active(self): + self.open_registration() + self.event.active = False + self.event.save(update_fields=['active']) + self.client.force_login(self.owner) + dashboard = self.client.get(reverse('art_dashboard')) + self.assertContains(dashboard, reverse('artwork_create', args=[self.event.slug])) + self.assertNotContains(dashboard, 'Todavía no hay una convocatoria de Arte activa.') + response = self.client.post(reverse('artwork_create', args=[self.event.slug]), {'title': 'Faro'}) + artwork = Artwork.objects.get(owner=self.owner) + self.assertRedirects(response, reverse('artwork_edit', args=[artwork.pk])) + + self.program.is_current = False + self.program.save(update_fields=['is_current']) + self.assertContains(self.client.get(reverse('art_dashboard')), 'Todavía no hay una convocatoria de Arte activa.') + self.assertEqual(self.client.get(reverse('artwork_create', args=[self.event.slug])).status_code, 404) + def test_dashboard_says_when_registration_opens(self): self.client.force_login(self.owner) self.assertContains(self.client.get(reverse('art_dashboard')), 'La inscripción de propuestas de Arte cerró.') diff --git a/art/views.py b/art/views.py index 358915a..43fa4e1 100644 --- a/art/views.py +++ b/art/views.py @@ -469,7 +469,8 @@ def _names_sentence(names): @login_required def art_dashboard(request): - programs = ArtProgram.objects.select_related('event').filter(is_current=True, event__active=True) + # La convocatoria abre meses antes de que el evento se active para vender bonos: alcanza con que esté vigente. + programs = ArtProgram.objects.select_related('event').filter(is_current=True) artworks = ( Artwork.objects.filter( Q(owner=request.user) | Q(collaborators=request.user) | Q(operations_group__miembros__user=request.user), @@ -495,7 +496,6 @@ def artwork_create(request, event_slug): program = get_object_or_404( ArtProgram.objects.select_related('event'), event__slug=event_slug, - event__active=True, is_current=True, ) if not program.registration_is_open():