Browse Source

Adição de horário estático

pull/178/head
lucasmndc 5 months ago
parent
commit
9dde6f019a
  1. 56
      sigi/apps/utils/models.py

56
sigi/apps/utils/models.py

@ -38,6 +38,17 @@ class SigiAlert(models.Model):
class Cronjob(models.Model): class Cronjob(models.Model):
DIGEST_CHOICES = [
("N", _("Enviar sem digest")),
("D", _("Enviar com digest diário")),
("S", _("Enviar com digest semanal")),
]
digest = models.CharField(
_("digest"),
max_length=1,
choices=DIGEST_CHOICES,
default="N",
)
app_name = models.CharField(_("app"), max_length=100, editable=False) app_name = models.CharField(_("app"), max_length=100, editable=False)
job_name = models.CharField(_("job"), max_length=100, editable=False) job_name = models.CharField(_("job"), max_length=100, editable=False)
expressao_cron = models.CharField( expressao_cron = models.CharField(
@ -78,18 +89,6 @@ class Cronjob(models.Model):
def __str__(self): def __str__(self):
return f"Destinatários: {', '.join(self.get_emails_list())}" return f"Destinatários: {', '.join(self.get_emails_list())}"
DIGEST_CHOICES = [
("N", _("Enviar sem digest")),
("D", _("Enviar com digest diário")),
("S", _("Enviar com digest semanal")),
]
digest = models.CharField(
_("digest"),
max_length=1,
choices=DIGEST_CHOICES,
default="N",
)
class Meta: class Meta:
ordering = ("app_name", "job_name") ordering = ("app_name", "job_name")
verbose_name = _("Cron job") verbose_name = _("Cron job")
@ -246,24 +245,45 @@ class JobSchedule(models.Model):
def send_digest_email(self, frequency): def send_digest_email(self, frequency):
"""Envia email de digest diário ou semanal.""" """Envia email de digest diário ou semanal."""
now = timezone.localtime() now = timezone.localtime()
# Definir horário estático
send_time = timezone.datetime.min.time() # Meia-noite
today = now.date()
if frequency == "daily": if frequency == "daily":
start_time = now - timedelta(days=1) # Verifica se é meia-noite
if now.time() != send_time:
return
# Definir início do período como o dia anterior
period_start = today - timedelta(days=1)
elif frequency == "weekly": elif frequency == "weekly":
start_time = now - timedelta(weeks=1) # Verifica se é segunda-feira e se é meia-noite
if today.weekday() != 0 or now.time() != send_time:
return
# Define o início do período como segunda-feira da semana passada
period_start = today - timedelta(days=7)
else: else:
raise ValueError("Invalid frequency for digest email.") raise ValueError("Invalid frequency for digest email.")
job_schedules = JobSchedule.objects.filter( job_schedules = JobSchedule.objects.filter(
job=self.job, job=self.job,
status=JobSchedule.STATUS_CONCLUIDO, status=JobSchedule.STATUS_CONCLUIDO,
iniciado__gte=start_time, iniciado__gte=period_start,
enviado=False, enviado=False,
) )
if job_schedules.exists(): if job_schedules.exists():
message = "\n\n".join( message_lines = []
[f"{js.iniciado}: {js.resultado}" for js in job_schedules] for js in job_schedules:
) message_lines.append(
f"{localize(js.iniciado)}: {js.resultado}"
)
message = "\n\n".join(message_lines)
send_mail( send_mail(
subject=f"Digest JOB: {self.job.job_name} ({frequency})", subject=f"Digest JOB: {self.job.job_name} ({frequency})",
message=message, message=message,

Loading…
Cancel
Save