Sfoglia il codice sorgente

Dates a UTC-3, dado que los reportes se manejan unicamente en esta timezone

Tomás Ponce Gessi 3 anni fa
parent
commit
29d85e65d4
2 ha cambiato i file con 6 aggiunte e 7 eliminazioni
  1. 2 0
      app/api/config.py
  2. 4 7
      app/api/models.py

+ 2 - 0
app/api/config.py

@@ -9,6 +9,7 @@ CALENDAR_FREQUENCIES = {
     "yearly": reldelta(years=1)
 }
 
+# Espera date en UTC
 def get_next_calendar_date(date: datetime, frequency: str):
     base_date: datetime = date.replace(hour=23, minute=59, second=59, microsecond=0)
     if frequency == "daily":
@@ -22,6 +23,7 @@ def get_next_calendar_date(date: datetime, frequency: str):
         return (base_date.replace(day=1, month=1) + reldelta(years=1)) - delta(days=1)
     return None
 
+# Espera date en UTC
 def get_previous_calendar_date(date: datetime, frequency: str):
     base_date: datetime = date.replace(hour=23, minute=59, second=59, microsecond=0)
     if frequency == "daily":

+ 4 - 7
app/api/models.py

@@ -4,6 +4,7 @@ from django.utils import timezone
 from api.config import get_next_calendar_date, get_previous_calendar_date
 from django.conf import settings
 from django.utils.timezone import timedelta as delta
+from pytz import timezone as tz
 import requests
 import logging
 logger = logging.getLogger('django')
@@ -32,13 +33,9 @@ class ProgrammedReport(models.Model):
         validators=[json_not_empty_string_array, json_email_array])
 
     # Actualiza la due_date en cada save del modelo:
-    # TODO! Hay un bug al guardar un reporte via el Admin, donde si lo guardas por ahi la correcion de 3 horas de
-    # self.start_report_date y due_date es innecesaria y simplemente desconfigura los rangos horarios.
-    # Por el momento los reportes deben ser guardados via la interfaz,c reo que tiene que ver con la
-    # timezone que envian cada una de las interfaces en start_report_date
     def save(self, *args, **kwargs):
-        self.start_report_date = get_previous_calendar_date(self.start_report_date, self.frequency) + delta(hours=3, seconds=1) # Convert to UTC
-        self.due_date = get_next_calendar_date(self.start_report_date, self.frequency) + delta(hours=3) # Convert to UTC
+        self.start_report_date = get_previous_calendar_date(self.start_report_date.replace(tzinfo=tz('America/Argentina/Cordoba')), self.frequency) + delta(seconds=1)
+        self.due_date = get_next_calendar_date(self.start_report_date, self.frequency)
         super().save(*args, **kwargs)
 
     # Metodo que envía la petición a Clima para enviar el reporte.
@@ -46,7 +43,7 @@ class ProgrammedReport(models.Model):
         # Calculamos el formato en el que Clima requiere recibir los rangos.
         start_date = self.start_report_date.strftime("%d/%m/%Y %H:%M")
         end_date = self.due_date.strftime("%d/%m/%Y %H:%M")
-
+        
         # Enviamos la request:
         response = requests.post(settings.CLIMA_URL + "/async_report_handler", {
             "id": self.id,