def availabilityJson2(request, tutorPK, pk): doFilter = int(request.GET.get('filter', 0)) jsonObjects = [] # remove smaller than seconds from dateNow and start at hour 0 minute 0 dateNow = datetime.datetime(2018, 9, 9, 0, 0) if doFilter == 1: avail = Avail.objects.get(pk=int(pk)) for x in range(0,7): if avail.iso_weekday == (dateNow.isoweekday() % 7): month = dateNow.month day = dateNow.day year = dateNow.year avail = Avail.objects.get(pk=int(pk)) startDateTime = getDateTime(month, day, year, avail.startHour, avail.startMinute, False) endDateTime = getDateTime(month, day, year, avail.endHour, avail.endMinute, True) jsonObjects.append(getJsonEventObject(int(pk), 'avail2', startDateTime, endDateTime)) break dateNow += datetime.timedelta(days = 1) else: avails = Avail.objects.filter(tutor=tutorPK) for x in range(0, 7): iso_weekday = dateNow.isoweekday() % 7 month = dateNow.month day = dateNow.day year = dateNow.year # Filter avails by day and order by its startTime for y in avails.filter(iso_weekday=iso_weekday).order_by('startHour', 'startMinute'): startDateTime = getDateTime(month, day, year, y.startHour, y.startMinute, False) endDateTime = getDateTime(month, day, year, y.endHour, y.endMinute, True) if y.pk == int(pk): jsonObjects.append(getJsonEventObject(y.pk, 'avail2', startDateTime, endDateTime)) else: jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime)) dateNow += datetime.timedelta(days = 1) return JsonResponse(jsonObjects, safe=False)
def scheduleJson(request, tutorPK): avails = Avail.objects.filter(tutor=tutorPK) jsonObjects = [] dateNow = datetime.datetime.now() # Remove smaller than seconds from dateNow and start at hour 0 minute 0 dateNow = datetime.datetime(dateNow.year, dateNow.month, dateNow.day, 0, 0) # TODO: Instead of removing events, modify them so they are noted to be expired in some way # Fix/remove events as needed #badEvents = Event.objects.filter(year__lte=dateNow.year, month__lte=dateNow.month, day__lt=dateNow.day) # for x in badEvents: # if x.eventType == 1: # startDate = datetime.date(x.year, x.month, x.day) # endDate = datetime.date(x.year, x.month, x.day) # while(startDate < dateNow.date()): # startDate += datetime.timedelta(days=28) # endDate += datetime.timedelta(days=28) # x.year = startDate.year # x.month = startDate.month # x.day = startDate.day # x.save() # else:#eventType == 0: # x.delete() events = Event.objects.all() skipIndex = 0 for x in range(0, 28): iso_weekday = dateNow.isoweekday() % 7 month = dateNow.month day = dateNow.day year = dateNow.year # Filter avails by day and order by its startTime for y in avails.filter(iso_weekday=iso_weekday).order_by('startHour', 'startMinute'): # Filter events to this avail by day of week, then startDate (None goes first), startTime, event Type currentEvents = events.filter(year=year,month=month,day=day,avail=y).order_by('year', 'month', 'day', 'startHour', 'startMinute') # If there is no events or first event starts at beginning of avail skipIndex = 0 # while(skipIndex < len(currentEvents)): # date = getDate(month, day, year, currentEvents[skipIndex].startHour, currentEvents[skipIndex].startHour, False) # # No need anymore? #print(skipDates.filter(event=currentEvents[skipIndex], year=currentEvents[skipIndex].year, month=currentEvents[skipIndex].month, day=currentEvents[skipIndex].day).count()) # if skipDates.filter(event=currentEvents[skipIndex], year=currentEvents[skipIndex].year, month=currentEvents[skipIndex].month, day=currentEvents[skipIndex].day).count() > 0: # skipIndex += 1 # else: # break # If the skipIndex passes the possible index for events, assume that the avail is first on the day's list if skipIndex >= len(currentEvents): startDateTime = getDateTime(month, day, year, y.startHour, y.startMinute, False) endDateTime = getDateTime(month, day, year, y.endHour, y.endMinute, True) jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime)) continue # If the avail's startTime is before the currentEvent's startTime, it will be first on the day's list if getTime(y.startHour, y.startMinute) < getTime(currentEvents[skipIndex].startHour, currentEvents[skipIndex].startMinute): # If there is any events left that aren't skiped, then the avail will cut off at the start of that event startDateTime = getDateTime(month, day, year, y.startHour, y.startMinute, False) endDateTime = getDateTime(month, day, year, currentEvents[skipIndex].startHour, currentEvents[skipIndex].startMinute, False) jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime)) # prevZ will be the last event's index that wasn't skipped prevZ = -1 for z in range(0, len(currentEvents)): # Not needed anymore right? # If an event is to be skipped this day # if skipDates.filter(event=currentEvents[z], year=year, month=month, day=day).count() > 0: # continue # If the next event to be listed isn't back to back to the previous event, add avail between them if z > 0 and prevZ > -1 and getTime(currentEvents[z].startHour, currentEvents[z].startMinute) != getTime(currentEvents[prevZ].endHour, currentEvents[prevZ].endMinute): startDateTime = getDateTime(month, day, year, currentEvents[prevZ].endHour, currentEvents[prevZ].endMinute, True) endDateTime = getDateTime(month, day, year, currentEvents[z].startHour, currentEvents[z].startMinute, False) jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime)) # Add this event to the day's list startDateTime = getDateTime(month, day, year, currentEvents[z].startHour, currentEvents[z].startMinute, False) endDateTime = getDateTime(month, day, year, currentEvents[z].endHour, currentEvents[z].endMinute, True) jsonObjects.append(getJsonEventObject(currentEvents[z].pk, 'repeatEvent', startDateTime, endDateTime)) # This event was successfully added, so prevZ is updated to this event's index prevZ = z # If the event doesn't end when the avail ends, add an avail to finish the day's list if prevZ > -1 and getDateTime(month, day, year, currentEvents[prevZ].startHour, currentEvents[prevZ].startMinute, True) < getDateTime(month, day, year, y.endHour, y.endMinute, True): startDateTime = getDateTime(month, day, year, currentEvents[prevZ].endHour, currentEvents[prevZ].endMinute, True) endDateTime = getDateTime(month, day, year, y.endHour, y.endMinute, True) jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime)) print("prevZ is" + str(prevZ)) dateNow += datetime.timedelta(days = 1) return JsonResponse(jsonObjects, safe=False)