from datetime import datetime from dateutil.relativedelta import relativedelta as reldelta from django.utils.timezone import timedelta as delta CALENDAR_FREQUENCIES = { "daily": delta(days=1), "weekly": reldelta(weeks=1), "monthly": reldelta(months=1), "yearly": reldelta(years=1) } # Espera date en UTC def get_next_calendar_date(date: datetime, frequency: str): base_date: datetime = date.replace(hour=2, minute=59, second=59, microsecond=0) + delta(days=1) if frequency == "daily": return base_date if frequency == "weekly": days_ahead = -date.weekday() + 6 # Lunes return base_date + delta(days=days_ahead) if frequency == "monthly": return (base_date.replace(day=1) + reldelta(months=1)) if frequency == "yearly": return (base_date.replace(day=1, month=1) + reldelta(years=1)) return None # Espera date en UTC def get_previous_calendar_date(date: datetime, frequency: str): base_date: datetime = date.replace(hour=2, minute=59, second=59, 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