Bläddra i källkod

Fixed send_report_now dates

Tomás Ponce Gessi 3 år sedan
förälder
incheckning
0e8f8e427b
3 ändrade filer med 22 tillägg och 8 borttagningar
  1. 13 1
      app/api/config.py
  2. 7 6
      app/api/models.py
  3. 2 1
      app/requirements.txt

+ 13 - 1
app/api/config.py

@@ -10,7 +10,7 @@ CALENDAR_FREQUENCIES = {
 }
 
 def get_next_calendar_date(date: datetime, frequency: str):
-    base_date: datetime = date.replace(hour=3, minute=0, second=0, microsecond=0)
+    base_date: datetime = date.replace(hour=0, minute=0, second=0, microsecond=0)
     if frequency == "daily":
         return base_date + delta(days=1)
     if frequency == "weekly":
@@ -22,3 +22,15 @@ def get_next_calendar_date(date: datetime, frequency: str):
         return (base_date.replace(day=1, month=1) + reldelta(years=1))
     return None
 
+def get_previous_calendar_date(date: datetime, frequency: str):
+    base_date: datetime = date.replace(hour=0, minute=0, second=0, microsecond=0)
+    if frequency == "daily":
+        return base_date
+    if frequency == "weekly":
+        days_ahead = date.weekday()
+        return base_date - delta(days=days_ahead)
+    if frequency == "monthly":
+        return base_date.replace(day=1)
+    if frequency == "yearly":
+        return base_date.replace(day=1, month=1)
+    return None

+ 7 - 6
app/api/models.py

@@ -1,8 +1,9 @@
 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 api.config import get_next_calendar_date, get_previous_calendar_date
 from django.conf import settings
+from django.utils.timezone import timedelta as delta
 import requests
 import logging
 logger = logging.getLogger('django')
@@ -35,7 +36,7 @@ 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 = get_next_calendar_date(base_date, self.frequency)
+        self.due_date = get_next_calendar_date(base_date, self.frequency) + delta(hours=3)
         super().save(*args, **kwargs)
 
 
@@ -72,10 +73,10 @@ class ProgrammedReport(models.Model):
 
     def send_report_now(self):
         # Calculamos el formato en el que Clima requiere recibir los rangos.
-        end_date = timezone.datetime.now().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")
-            
+        now = timezone.datetime.now()
+        start_date = get_previous_calendar_date(now, self.frequency).strftime("%d/%m/%Y %H:%M")
+        end_date = now.strftime("%d/%m/%Y %H:%M")
+
         # Enviamos la request:
         response = requests.post(settings.CLIMA_URL + "/async_report_handler", {
             "id": self.id,

+ 2 - 1
app/requirements.txt

@@ -8,10 +8,11 @@ idna==3.3
 importlib-metadata==4.11.3
 Markdown==3.3.7
 psycopg2-binary==2.9.3
-pytz==2022.1
 requests==2.27.1
 sqlparse==0.4.2
 urllib3==1.26.9
 zipp==3.8.0
 django-crontab==0.7.1
 python-dateutil==2.8.2
+pytz==2022.7.1
+