|
|
@@ -1,8 +1,8 @@
|
|
|
from django.db import models
|
|
|
-from .validators import json_email_array, json_not_empty_string_array
|
|
|
+from .validators import json_email_array, json_not_empty_string_array, valid_frequency_format
|
|
|
from django.utils import timezone
|
|
|
from django.conf import settings
|
|
|
-from dateutil.relativedelta import relativedelta as reldelta
|
|
|
+from api.config import CALENDAR_FREQUENCIES
|
|
|
|
|
|
class ProgrammedReport(models.Model):
|
|
|
REPORT_FORMATS = [
|
|
|
@@ -12,7 +12,7 @@ class ProgrammedReport(models.Model):
|
|
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
user_id = models.CharField(max_length=2048)
|
|
|
- frequency = models.DurationField(default=timezone.timedelta(days=1))
|
|
|
+ frequency = models.CharField(max_length=20, default="Mensual", validators=[valid_frequency_format])
|
|
|
start_report_date = models.DateTimeField(
|
|
|
default=timezone.now)
|
|
|
last_report_date = models.DateTimeField(
|
|
|
@@ -31,12 +31,8 @@ class ProgrammedReport(models.Model):
|
|
|
# Actualiza la due_date en cada save del modelo.
|
|
|
def save(self, *args, **kwargs):
|
|
|
base_date = self.last_report_date if self.last_report_date is not None else self.start_report_date
|
|
|
- due_date = None
|
|
|
- if self.frequency.total_seconds() == 0: # Cada mes calendario
|
|
|
- due_date = base_date + reldelta(months=1)
|
|
|
- else:
|
|
|
- due_date= base_date + self.frequency
|
|
|
- self.due_date = due_date
|
|
|
+ self.due_date = base_date + CALENDAR_FREQUENCIES.get(
|
|
|
+ self.frequency) if self.frequency in CALENDAR_FREQUENCIES else base_date + timezone.timedelta(seconds=int(self.frequency))
|
|
|
super().save(*args, **kwargs)
|
|
|
|
|
|
# Metodo que envía la petición a Clima para enviar el reporte.
|
|
|
@@ -45,7 +41,8 @@ class ProgrammedReport(models.Model):
|
|
|
from django.conf import settings
|
|
|
|
|
|
# Calculamos el formato en el que Clima requiere recibir los rangos.
|
|
|
- start_date = (self.last_report_date if self.last_report_date is not None else self.start_report_date).strftime("%d/%m/%Y %H:%M")
|
|
|
+ start_date = (self.last_report_date if self.last_report_date is not None else self.start_report_date).strftime(
|
|
|
+ "%d/%m/%Y %H:%M")
|
|
|
end_date = self.due_date.strftime("%d/%m/%Y %H:%M")
|
|
|
|
|
|
# Enviamos la request:
|
|
|
@@ -67,6 +64,6 @@ class ProgrammedReport(models.Model):
|
|
|
"No se pudo enviar el reporte asincrono: %s\n Reason: %s", self, response.reason)
|
|
|
# TODO! Seria ideal enviar un email al administrador para ver que paso.
|
|
|
return False
|
|
|
-
|
|
|
+
|
|
|
self.last_report_date = timezone.now()
|
|
|
- self.save()
|
|
|
+ self.save()
|