Patent ID: 7487105

Claim:
A computer readable medium having instructions stored thereon for causing a computer to perform a method for assigning an order to a schedule, the method comprising: the schedule having an opening identified by iterating through a list of shifts potentially having sufficient time to accommodate the order and through a list of virtual free time blocks for each shift in the list of shifts, a virtual free time block representing an amount of time in which an order may be assigned by bumping assigned orders in a shift; where a customer has specified both an appointment window and an opening for the order, generating a list of schedulable time blocks for a shift identified in the customer specified opening, the schedulable time blocks having at least one of a free time block and a virtual free time block and defining a range of time having openings to which the order can be assigned, the openings resulting from analysis of orders already assigned in the shifts; intersecting the customer specified opening and the appointment window to obtain a time range defined by an overlap of the customer specified opening and the appointment window; and assigning the order to a candidate opening if a schedulable time block from the list of schedulable time blocks includes at least one candidate within the time range; and where a customer has specified the appointment window and not specified an opening for the order, checking a list of openings for overlap with the appointment window; generating a list of schedulable time blocks if there is no overlap, each of the schedulable time blocks in a list having at least one of a free time block and a virtual free time block and defining a range of time having openings to which the order can be assigned; assigning the order to the schedule if there is an opening in the list of openings that overlaps with the appointment window or an opening in the list of schedulable time blocks that overlaps with the appointment window; incrementing the time required to travel to the order and from the order to a next order, incrementing a booked time for the shift by an amount of time needed for traveling to the order and an amount of time needed to work on the order, and adjusting a load level of the shift to account for the order; in response to having accurate travel time information, aggregating orders closely related for assignment to a same mobile service representative; in response to not having accurate travel time information, aggregating orders in close proximity based on address information; and creating one or more usable free time blocks with greater duration to fit unassigned orders by defragmenting free time blocks.