agendas: remove useless subscription and shared custody code (#62635)

This includes partial revert of 56300815e7
and f158dc02ef.
This commit is contained in:
Valentin Deniaud 2022-03-21 10:24:49 +01:00
parent 7769ffabf6
commit b626b24800
3 changed files with 14 additions and 90 deletions

View File

@ -698,7 +698,6 @@ class Agenda(models.Model):
max_start=None,
bypass_delays=False,
show_out_of_minimal_delay=False,
show_only_subscribed=False,
):
assert self.kind == 'events'
@ -743,7 +742,6 @@ class Agenda(models.Model):
prefetched_queryset=False,
min_start=None,
max_start=None,
show_only_subscribed=False,
):
assert self.kind == 'events'
@ -951,13 +949,6 @@ class Agenda(models.Model):
agenda__subscriptions__date_start__lte=F('start_datetime'),
agenda__subscriptions__date_end__gt=F('start_datetime'),
)
qs = qs.prefetch_related(
Prefetch(
'subscriptions',
queryset=Subscription.objects.filter(user_external_id=user_external_id),
to_attr='prefetched_subscriptions',
)
)
if guardian_external_id:
event_queryset = Agenda.filter_for_guardian(
event_queryset, guardian_external_id, user_external_id
@ -997,28 +988,6 @@ class Agenda(models.Model):
for e in agendas_exceptions
if e.desk_id == desk.pk or e.unavailability_calendar_id in uc_ids
]
if guardian_external_id:
custody_rules = SharedCustodyRule.objects.filter(
guardian__user_external_id=guardian_external_id,
agenda__children__user_external_id=user_external_id,
)
all_periods = SharedCustodyPeriod.objects.filter(
agenda__children__user_external_id=user_external_id
)
if max_start:
all_periods = all_periods.filter(date_start__lte=max_start)
if min_start:
all_periods = all_periods.filter(date_end__gt=min_start)
custody_periods = all_periods.filter(guardian__user_external_id=guardian_external_id)
custody_exceptions = all_periods.exclude(guardian__user_external_id=guardian_external_id)
for agenda in agendas:
agenda.prefetched_custody_rules = custody_rules
agenda.prefetched_custody_periods = custody_periods
agenda.prefetched_exceptions.extend(custody_exceptions)
return agendas
def is_available_for_simple_management(self):
@ -1721,15 +1690,7 @@ class Event(models.Model):
self.cancelled = True
self.save()
def get_recurrences(
self,
min_datetime,
max_datetime,
excluded_datetimes=None,
exceptions=None,
shared_custody_rules=None,
shared_custody_periods=None,
):
def get_recurrences(self, min_datetime, max_datetime, excluded_datetimes=None, exceptions=None):
recurrences = []
rrule_set = rruleset()
# do not generate recurrences for existing events
@ -1737,10 +1698,9 @@ class Event(models.Model):
if exceptions is None:
exceptions = self.agenda.get_recurrence_exceptions(min_datetime, max_datetime)
event_start = localtime(self.start_datetime)
for exception in exceptions:
exception_start = localtime(exception.start_datetime)
event_start = localtime(self.start_datetime)
if event_start.time() < exception_start.time():
exception_start += datetime.timedelta(days=1)
exception_start = exception_start.replace(
@ -1768,32 +1728,11 @@ class Event(models.Model):
url=self.url,
)
if shared_custody_rules:
for rule in shared_custody_rules:
recurrence_rule = self.recurrence_rule
recurrence_rule['byweekday'] = set(recurrence_rule['byweekday']).intersection(
rule.recurrence_rule['byweekday']
)
if not recurrence_rule['byweekday']:
continue
recurrence_rule['byweekno'] = rule.recurrence_rule.get('byweekno')
rrule_set.rrule(rrule(dtstart=make_naive(self.start_datetime), **recurrence_rule))
for period in shared_custody_periods:
period_start = event_start.replace(
year=period.date_start.year, month=period.date_start.month, day=period.date_start.day
)
rule = rrule(dtstart=make_naive(self.start_datetime), **self.recurrence_rule)
for start_datetime in rule.between(
make_naive(period_start), make_naive(period.end_datetime), inc=True
):
rrule_set.rdate(start_datetime)
else:
rrule_set.rrule(rrule(dtstart=make_naive(self.start_datetime), **self.recurrence_rule))
# remove pytz info because dateutil doesn't support DST changes
min_datetime = make_naive(min_datetime)
max_datetime = make_naive(max_datetime)
rrule_set.rrule(rrule(dtstart=make_naive(self.start_datetime), **self.recurrence_rule))
for start_datetime in rrule_set.between(min_datetime, max_datetime, inc=True):
event = copy.copy(event_base)
# add timezone back
@ -3202,15 +3141,6 @@ class SharedCustodyRule(models.Model):
guardian = models.ForeignKey(Person, verbose_name=_('Guardian'), on_delete=models.CASCADE)
def get_slots(self, min_date, max_date):
return [
SharedCustodySlot(self.guardian, dt.date())
for dt in rrule(
dtstart=min_date, until=max_date - datetime.timedelta(days=1), **self.recurrence_rule
)
]
@property
def recurrence_rule(self):
recurrence_rule = {
'freq': WEEKLY,
'byweekday': self.days,
@ -3219,7 +3149,11 @@ class SharedCustodyRule(models.Model):
recurrence_rule['byweekno'] = list(range(1, 55, 2))
elif self.weeks == 'even':
recurrence_rule['byweekno'] = list(range(0, 54, 2))
return recurrence_rule
return [
SharedCustodySlot(self.guardian, dt.date())
for dt in rrule(dtstart=min_date, until=max_date - datetime.timedelta(days=1), **recurrence_rule)
]
@property
def label(self):
@ -3266,11 +3200,3 @@ class SharedCustodyPeriod(models.Model):
date_format(self.date_end, 'SHORT_DATE_FORMAT'),
)
return '%s, %s' % (self.guardian.name, exc_repr)
@property
def start_datetime(self):
return make_aware(datetime.datetime.combine(self.date_start, datetime.time(0, 0)))
@property
def end_datetime(self):
return make_aware(datetime.datetime.combine(self.date_end, datetime.time(0, 0)))

View File

@ -874,7 +874,6 @@ class MultipleAgendasDatetimes(APIView):
entries.extend(
agenda.get_past_events(
prefetched_queryset=True,
show_only_subscribed=bool('subscribed' in payload),
min_start=payload.get('date_start'),
max_start=payload.get('date_end'),
)
@ -882,11 +881,10 @@ class MultipleAgendasDatetimes(APIView):
entries.extend(
agenda.get_open_events(
prefetched_queryset=True,
bypass_delays=payload.get('bypass_delays'),
show_out_of_minimal_delay=show_past_events,
show_only_subscribed=bool('subscribed' in payload),
min_start=payload.get('date_start'),
max_start=payload.get('date_end'),
bypass_delays=payload.get('bypass_delays'),
show_out_of_minimal_delay=show_past_events,
)
)

View File

@ -1959,7 +1959,7 @@ def test_datetimes_multiple_agendas_queries(app):
params={'subscribed': 'all', 'user_external_id': 'xxx', 'show_past_events': True},
)
assert len(resp.json['data']) == 30
assert len(ctx.captured_queries) == 8
assert len(ctx.captured_queries) == 7
with CaptureQueriesContext(connection) as ctx:
resp = app.get(
@ -1967,7 +1967,7 @@ def test_datetimes_multiple_agendas_queries(app):
params={'subscribed': 'category-a', 'user_external_id': 'xxx', 'show_past_events': True},
)
assert len(resp.json['data']) == 30
assert len(ctx.captured_queries) == 8
assert len(ctx.captured_queries) == 7
father = Person.objects.create(user_external_id='father_id', name='John Doe')
mother = Person.objects.create(user_external_id='mother_id', name='Jane Doe')
@ -1989,7 +1989,7 @@ def test_datetimes_multiple_agendas_queries(app):
},
)
assert len(resp.json['data']) == 30
assert len(ctx.captured_queries) == 9
assert len(ctx.captured_queries) == 7
@pytest.mark.freeze_time('2021-05-06 14:00')