diff --git a/sigi/apps/espacos/models.py b/sigi/apps/espacos/models.py index e31f113..8b0059b 100644 --- a/sigi/apps/espacos/models.py +++ b/sigi/apps/espacos/models.py @@ -1,6 +1,7 @@ import re from django.core.exceptions import ValidationError from django.db import models +from django.template.loader import render_to_string from django.urls import reverse from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ @@ -179,7 +180,7 @@ class Reserva(models.Model): _("Hora de início deve ser anterior à hora de término") ) - if self.espaco is None: + if not hasattr(self, "espaco"): # Se não informou o espaço, não há como verificar conflito # Deixa seguir para o clean_fields lançar a exceção return super().clean() @@ -191,26 +192,11 @@ class Reserva(models.Model): reservas_conflitantes.update(status=Reserva.STATUS_CONFLITO) elif self.status == Reserva.STATUS_ATIVO: # Não pode salvar assim. Lança exceção - link_list = "\n".join( - [ - f"' - f"{ reserva }" - for reserva in reservas_conflitantes - ] - ) - raise ValidationError( - mark_safe( - _( - "
" - "
Existe(m) reserva(s) que conflita(m) " - f"com essas datas:
" - f'
{link_list}
' - "
" - ) - ) + erro_txt = render_to_string( + "espacos/snippets/alerta_conflitos_snippet.html", + context={"reservas_conflitantes": reservas_conflitantes}, ) + raise ValidationError(mark_safe(erro_txt)) return super().clean() def save(self, *args, **kwargs): diff --git a/sigi/apps/espacos/templates/espacos/snippets/alerta_conflitos_snippet.html b/sigi/apps/espacos/templates/espacos/snippets/alerta_conflitos_snippet.html new file mode 100644 index 0000000..b230764 --- /dev/null +++ b/sigi/apps/espacos/templates/espacos/snippets/alerta_conflitos_snippet.html @@ -0,0 +1,25 @@ +{% load i18n %} + +
+
+ {% blocktranslate count counter=reservas_conflitantes.count %} + Existe uma reserva que conflita com essas datas: + {% plural %} + Existem {{ counter }} reservas que conflitam com essas datas: + {% endblocktranslate %} +
+
+ {% for reserva in reservas_conflitantes %} + + + + {% blocktranslate with data_inicio=reserva.data_inicio|date:"SHORT_DATE_FORMAT" hora_inicio=reserva.hora_inicio|time:"TIME_FORMAT" data_termino=reserva.data_termino|date:"SHORT_DATE_FORMAT" hora_termino=reserva.hora_termino|time:"TIME_FORMAT" %} + De {{ data_inicio }} {{ hora_inicio }} até {{ data_termino }} {{ hora_termino }} + {% endblocktranslate %} + + + {% endfor %} +
+
+ +