Skip to content
Snippets Groups Projects
Commit b5e657c4 authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

Introduce get_colliding_timeslots in TimeSlotManager to query for collsions

parent 2e742550
No related branches found
No related tags found
No related merge requests found
......@@ -388,13 +388,7 @@ class Schedule(models.Model):
collisions = []
for ts in timeslots:
collision = TimeSlot.objects.filter(
(Q(start__lt=ts.end) & Q(end__gte=ts.end)) |
(Q(end__gt=ts.start) & Q(end__lte=ts.end)) |
(Q(start__gte=ts.start) & Q(end__lte=ts.end)) |
(Q(start__lte=ts.start) & Q(end__gte=ts.end))
)
collision = TimeSlot.objects.get_colliding_timeslots(ts)
if collision:
collisions.append(collision[0]) # TODO: Do we really always retrieve one?
......@@ -428,12 +422,7 @@ class Schedule(models.Model):
solution_choices = set()
# Get collisions for each timeslot
collision_list = list(TimeSlot.objects.filter(
(Q(start__lt=ts.end) & Q(end__gte=ts.end)) |
(Q(end__gt=ts.start) & Q(end__lte=ts.end)) |
(Q(start__gte=ts.start) & Q(end__lte=ts.end)) |
(Q(start__lte=ts.start) & Q(end__gte=ts.end))
).order_by('start'))
collision_list = list(TimeSlot.objects.get_colliding_timeslots(ts).order_by('start'))
# Add the projected timeslot
projected_entry = {'hash': ts.hash, 'start': str(ts.start), 'end': str(ts.end)}
......@@ -853,6 +842,15 @@ class TimeSlotManager(models.Manager):
return TimeSlot.objects.filter(Q(start__lte=start, end__gte=start) |
Q(start__gt=start, start__lt=end)).exclude(end=start)
@staticmethod
def get_colliding_timeslots(timeslot):
return TimeSlot.objects.filter(
(Q(start__lt=timeslot.end) & Q(end__gte=timeslot.end)) |
(Q(end__gt=timeslot.start) & Q(end__lte=timeslot.end)) |
(Q(start__gte=timeslot.start) & Q(end__lte=timeslot.end)) |
(Q(start__lte=timeslot.start) & Q(end__gte=timeslot.end))
)
class TimeSlot(models.Model):
schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE, related_name='timeslots')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment