config.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  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. def get_next_calendar_date(date: datetime, frequency: str):
  11. base_date: datetime = date.replace(hour=0, minute=0, second=0, microsecond=0)
  12. if frequency == "daily":
  13. return base_date + delta(days=1)
  14. if frequency == "weekly":
  15. days_ahead = -date.weekday() + 7 # Lunes
  16. return base_date + delta(days=days_ahead)
  17. if frequency == "monthly":
  18. return (base_date.replace(day=1) + reldelta(months=1))
  19. if frequency == "yearly":
  20. return (base_date.replace(day=1, month=1) + reldelta(years=1))
  21. return None
  22. def get_previous_calendar_date(date: datetime, frequency: str):
  23. base_date: datetime = date.replace(hour=0, minute=0, second=0, microsecond=0)
  24. if frequency == "daily":
  25. return base_date
  26. if frequency == "weekly":
  27. days_ahead = date.weekday()
  28. return base_date - delta(days=days_ahead)
  29. if frequency == "monthly":
  30. return base_date.replace(day=1)
  31. if frequency == "yearly":
  32. return base_date.replace(day=1, month=1)
  33. return None