def getSuitableSlotDuration(task,flag): global globalFreeSlots for freeSlot in globalFreeSlots: maxPredEndDay = getMaxPredEndDay(task) if task.duration<=freeSlot.slotDuration and freeSlot.start > maxPredEndDay: if(not flag and (task.startDay < freeSlot.start or task.endDay> freeSlot.end)): continue task.resourceOnTask = freeSlot.resourceOnSlot if flag == True: task.startDay = freeSlot.start task.endDay = task.startDay + task.duration-1 adjustSuccessors(task) if task.startDay - freeSlot.start>0: remFreeSlot1 = Slot(freeSlot.start, task.startDay-1) remFreeSlot1.resourceOnSlot = freeSlot.resourceOnSlot globalFreeSlots.append(remFreeSlot1) #remFreeSlot1.resourceOnSlot.freeSlots.remove(freeSlot) remFreeSlot1.resourceOnSlot.freeSlots.append(remFreeSlot1) if freeSlot.end - task.endDay>0: remFreeSlot2 = Slot(task.endDay+1, freeSlot.end) remFreeSlot2.resourceOnSlot = freeSlot.resourceOnSlot globalFreeSlots.append(remFreeSlot2) #remFreeSlot2.resourceOnSlot.freeSlots.remove(freeSlot) remFreeSlot2.resourceOnSlot.freeSlots.append(remFreeSlot2) freeSlot.resourceOnSlot.freeSlots.remove(freeSlot) globalFreeSlots.remove(freeSlot) updateFreeSlots() globalFreeSlots.sort(key = lambda x:(x.start,x.slotDuration),reverse = False) return return
def __init__(self, resId, resName): # take the dura self.name = resName self.id = resId freeSlot = Slot() freeSlot.resourceOnSlot = self self.freeSlots=[] self.freeSlots.append(freeSlot)