|
|
@@ -1,9 +1,12 @@
|
|
|
-from datetime import date, timedelta
|
|
|
from django.db import models
|
|
|
from .validators import json_email_array, json_not_empty_string_array, valid_frequency_format
|
|
|
from django.utils import timezone
|
|
|
+from api.config import CALENDAR_FREQUENCIES, get_next_calendar_date
|
|
|
from django.conf import settings
|
|
|
-from api.config import CALENDAR_FREQUENCIES
|
|
|
+import requests
|
|
|
+import logging
|
|
|
+logger = logging.getLogger('django')
|
|
|
+
|
|
|
|
|
|
class ProgrammedReport(models.Model):
|
|
|
REPORT_FORMATS = [
|
|
|
@@ -13,7 +16,7 @@ class ProgrammedReport(models.Model):
|
|
|
|
|
|
name = models.CharField(max_length=100)
|
|
|
user_id = models.CharField(max_length=2048)
|
|
|
- frequency = models.CharField(max_length=20, default="Mensual", validators=[valid_frequency_format])
|
|
|
+ frequency = models.CharField(max_length=20, default="monthly", validators=[valid_frequency_format])
|
|
|
start_report_date = models.DateTimeField(
|
|
|
default=timezone.now)
|
|
|
last_report_date = models.DateTimeField(
|
|
|
@@ -37,15 +40,12 @@ 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
|
|
|
- self.due_date = base_date + self.timestamp_freq
|
|
|
+ self.due_date = get_next_calendar_date(base_date, self.frequency)
|
|
|
super().save(*args, **kwargs)
|
|
|
|
|
|
|
|
|
# Metodo que envía la petición a Clima para enviar el reporte.
|
|
|
def send_report(self):
|
|
|
- import requests
|
|
|
- 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")
|
|
|
@@ -65,8 +65,7 @@ class ProgrammedReport(models.Model):
|
|
|
}, headers={"AUTHORIZATION": settings.PROGRAMMED_REPORTS_SERVICE_AUTH_TOKEN})
|
|
|
|
|
|
if response.status_code != 200:
|
|
|
- import logging
|
|
|
- logging.getLogger('django').error(
|
|
|
+ logger.critical(
|
|
|
"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
|
|
|
@@ -76,9 +75,6 @@ class ProgrammedReport(models.Model):
|
|
|
return True
|
|
|
|
|
|
def send_report_now(self):
|
|
|
- import requests
|
|
|
- from django.conf import settings
|
|
|
-
|
|
|
# Calculamos el formato en el que Clima requiere recibir los rangos.
|
|
|
end_date = timezone.datetime.now()
|
|
|
start_date = end_date - self.timestamp_freq
|
|
|
@@ -100,8 +96,7 @@ class ProgrammedReport(models.Model):
|
|
|
}, headers={"AUTHORIZATION": settings.PROGRAMMED_REPORTS_SERVICE_AUTH_TOKEN})
|
|
|
|
|
|
if response.status_code != 200:
|
|
|
- import logging
|
|
|
- logging.getLogger('django').error(
|
|
|
+ logger.critical(
|
|
|
"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
|