Browse Source

Numeração automática de turma nos eventos. Gertiq #164983

pull/166/head
Sesóstris Vieira 1 year ago
parent
commit
9b79a42cec
  1. 38
      sigi/apps/eventos/migrations/0046_tipoevento_gerar_turma_alter_evento_turma.py
  2. 45
      sigi/apps/eventos/models.py

38
sigi/apps/eventos/migrations/0046_tipoevento_gerar_turma_alter_evento_turma.py

@ -0,0 +1,38 @@
# Generated by Django 4.2.4 on 2023-09-25 12:15
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("eventos", "0045_alter_evento_banner"),
]
operations = [
migrations.AddField(
model_name="tipoevento",
name="gerar_turma",
field=models.BooleanField(
default=True,
help_text="Se o campo 'turma' for deixado em branco, o sistema deve gerar um número de turma automaticamente, com base no ano da data de início do evento?",
verbose_name="Gerar turma",
),
),
migrations.AlterField(
model_name="evento",
name="turma",
field=models.CharField(
blank=True,
help_text="Se deixado em branco e o evento tiver status CONFIRMADO e data de início definida, o número da turma será gerado automaticamente.",
max_length=100,
validators=[
django.core.validators.RegexValidator(
"^\\d{2}/\\d{4}$",
"Formato inválido. Utilize nn/aaaa, onde 'nn' são dígitos numéricos e 'aaaa' o ano com quatro dígitos.",
)
],
verbose_name="turma",
),
),
]

45
sigi/apps/eventos/models.py

@ -39,6 +39,15 @@ class TipoEvento(models.Model):
casa_solicita = models.BooleanField(
_("casa pode solicitar"), default=False
)
gerar_turma = models.BooleanField(
_("Gerar turma"),
default=True,
help_text=_(
"Se o campo 'turma' for deixado em branco, o sistema deve gerar "
"um número de turma automaticamente, com base no ano da data de "
"início do evento?"
),
)
duracao = models.PositiveIntegerField(_("Duração (dias)"), default=1)
moodle_template_courseid = models.PositiveBigIntegerField(
_("Curso protótipo"),
@ -335,6 +344,11 @@ class Evento(models.Model):
),
)
],
help_text=_(
"Se deixado em branco e o evento tiver status CONFIRMADO e "
"data de início definida, o número da turma será "
"gerado automaticamente."
),
)
descricao = models.TextField(
_("Descrição do evento"),
@ -527,14 +541,33 @@ class Evento(models.Model):
_("Data de término deve ser posterior à data de início")
)
super().save(*args, **kwargs)
save_again = False
total = self.convite_set.aggregate(total=Sum("qtde_participantes"))
total = total["total"]
if (
self.turma == ""
and self.data_inicio
and self.status == Evento.STATUS_CONFIRMADO
and self.tipo_evento.gerar_turma
):
ano = self.data_inicio.year
ultimo_evento = (
Evento.objects.filter(
tipo_evento=self.tipo_evento,
turma__regex=f"\d{{2}}/{ano:04}$",
)
.order_by("turma")
.last()
)
if ultimo_evento is None:
proximo = 1
else:
proximo = int(ultimo_evento.turma[:2]) + 1
self.turma = f"{proximo:02}/{ano:04}"
total = self.convite_set.aggregate(total=Sum("qtde_participantes"))[
"total"
]
if total and total > 0:
self.total_participantes = total
super().save(*args, **kwargs)
if self.status in [

Loading…
Cancel
Save