def timetable_entries_which_violate_constraints(self):
start_date = self.start.date()
entries_which_violate_constraints = []
for constraint in self.constraints.all():
constraint_start = timezone.make_aware(
datetime.combine(start_date, constraint.start_time),
timezone.get_current_timezone())
constraint_end = timezone.make_aware(
datetime.combine(start_date, constraint.end_time),
timezone.get_current_timezone())
participations = Participation.objects.filter(entry__meeting=self,
user=constraint.user, ignored_for_optimization=False,
entry__timetable_index__isnull=False)
for participation in participations:
start = participation.entry.start
end = participation.entry.end
if (constraint_start >= start and constraint_start < end) or \
(constraint_end > start and constraint_end <= end) or \
(constraint_start <= start and constraint_end >= end):
entries_which_violate_constraints.append(participation.entry)
return entries_which_violate_constraints
评论列表
文章目录