agendas: remove useless subscription and shared custody code (#62635)
This includes partial revert of56300815e7
andf158dc02ef
.
This commit is contained in:
parent
7769ffabf6
commit
b626b24800
|
@ -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)))
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue