config.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from datetime import datetime
  2. from dateutil.relativedelta import relativedelta as reldelta
  3. from django.utils.timezone import timedelta as delta
  4. CALENDAR_FREQUENCIES = {
  5. "daily": delta(days=1),
  6. "weekly": reldelta(weeks=1),
  7. "monthly": reldelta(months=1),
  8. "yearly": reldelta(years=1)
  9. }
  10. # Espera date en UTC
  11. def get_next_calendar_date(date: datetime, frequency: str):
  12. base_date: datetime = date.replace(hour=23, minute=59, second=59, microsecond=0)
  13. if frequency == "daily":
  14. return base_date
  15. if frequency == "weekly":
  16. days_ahead = -date.weekday() + 6 # Lunes
  17. return base_date + delta(days=days_ahead)
  18. if frequency == "monthly":
  19. return (base_date.replace(day=1) + reldelta(months=1)) - delta(days=1)
  20. if frequency == "yearly":
  21. return (base_date.replace(day=1, month=1) + reldelta(years=1)) - delta(days=1)
  22. return None
  23. # Espera date en UTC
  24. def get_previous_calendar_date(date: datetime, frequency: str):
  25. base_date: datetime = date.replace(hour=23, minute=59, second=59, microsecond=0)
  26. if frequency == "daily":
  27. return base_date - delta(days=1)
  28. if frequency == "weekly":
  29. days_ahead = date.weekday() + 1
  30. return base_date - delta(days=days_ahead)
  31. if frequency == "monthly":
  32. return base_date.replace(day=1) - delta(days=1)
  33. if frequency == "yearly":
  34. return base_date.replace(day=1, month=1) - delta(days=1)
  35. return None