mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 00:07:22 +00:00
EXDATE not working for recurring events #186
This commit is contained in:
parent
739ca190e2
commit
479617924e
@ -32,6 +32,10 @@ def date_add_time(date, hour=0, minute=0, second=0, tzinfo=None):
|
||||
)
|
||||
|
||||
|
||||
def date_set_begin_of_day(date):
|
||||
return date_add_time(date)
|
||||
|
||||
|
||||
def date_set_end_of_day(date):
|
||||
return date_add_time(date, hour=23, minute=59, second=59)
|
||||
|
||||
@ -49,26 +53,21 @@ def form_input_from_date(date):
|
||||
def dates_from_recurrence_rule(start, recurrence_rule):
|
||||
result = list()
|
||||
|
||||
adv_recurrence_rule = recurrence_rule.replace("T000000", "T235959")
|
||||
start_wo_tz = start.replace(tzinfo=None)
|
||||
rule_set = rrulestr(adv_recurrence_rule, forceset=True, dtstart=start_wo_tz)
|
||||
start_begin_of_day = date_set_begin_of_day(start)
|
||||
rule_set = rrulestr(recurrence_rule, forceset=True, dtstart=start_begin_of_day)
|
||||
|
||||
start_date = start_wo_tz
|
||||
|
||||
# Keine Daten in der Vergangenheit laden
|
||||
# Keine Daten in der Vergangenheit erstellen
|
||||
today = get_today()
|
||||
if today > start:
|
||||
start_date = today.replace(tzinfo=None)
|
||||
start_date = today if today > start else start
|
||||
start_date_begin_of_day = date_set_begin_of_day(start_date)
|
||||
|
||||
end_date = start_date + relativedelta(years=1)
|
||||
start_date_begin_of_day = datetime(
|
||||
start_date.year, start_date.month, start_date.day
|
||||
)
|
||||
end_date_end_of_day = datetime(
|
||||
end_date.year, end_date.month, end_date.day, hour=23, minute=59, second=59
|
||||
)
|
||||
# Max. 1 Jahr in die Zukunft
|
||||
end_date = start_date_begin_of_day + relativedelta(years=1)
|
||||
end_date_end_of_day = date_set_end_of_day(end_date)
|
||||
|
||||
for rule_date in rule_set.between(start_date_begin_of_day, end_date_end_of_day):
|
||||
for rule_date in rule_set.between(
|
||||
start_date_begin_of_day, end_date_end_of_day, inc=True
|
||||
):
|
||||
rule_data_w_tz = berlin_tz.localize(rule_date)
|
||||
result.append(rule_data_w_tz)
|
||||
|
||||
|
||||
@ -105,6 +105,33 @@ def test_update_event_dates_with_recurrence_rule_past_forever(
|
||||
assert event_date.end == create_berlin_date(2021, 1, 3, 16, 30)
|
||||
|
||||
|
||||
def test_update_event_dates_with_recurrence_rule_exdate(
|
||||
client, seeder, utils, app, mocker
|
||||
):
|
||||
user_id, admin_unit_id = seeder.setup_base()
|
||||
event_id = seeder.create_event(admin_unit_id)
|
||||
|
||||
with app.app_context():
|
||||
from project.dateutils import create_berlin_date
|
||||
from project.models import Event
|
||||
from project.services.event import update_event_dates_with_recurrence_rule
|
||||
|
||||
utils.mock_now(mocker, 2021, 6, 1)
|
||||
|
||||
event = Event.query.get(event_id)
|
||||
event.start = create_berlin_date(2021, 4, 21, 17, 0)
|
||||
event.end = create_berlin_date(2021, 4, 21, 18, 0)
|
||||
|
||||
# Wiederholt sich jeden Mittwoch
|
||||
event.recurrence_rule = "RRULE:FREQ=WEEKLY;BYDAY=WE;UNTIL=20211231T000000\nEXDATE:20210216T000000,20210223T000000,20210602T000000"
|
||||
update_event_dates_with_recurrence_rule(event)
|
||||
|
||||
# Das erste Date soll nicht der 02.06. sein (excluded), sondern der 09.06.
|
||||
event_date = event.dates[0]
|
||||
assert event_date.start == create_berlin_date(2021, 6, 9, 17, 0)
|
||||
assert event_date.end == create_berlin_date(2021, 6, 9, 18, 0)
|
||||
|
||||
|
||||
def test_get_meta_data(seeder, app):
|
||||
user_id, admin_unit_id = seeder.setup_base()
|
||||
event_id = seeder.create_event(admin_unit_id)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user